Как перебрать в форме действия все дочерние объекты?

Здесь обсуждаем систему TDM/PDM/Workflow Lotsia PDM PLUS (PartY PLUS).
Ответить
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Как перебрать в форме действия все дочерние объекты?

Сообщение Александр »

Не подскажете, кто знает...
Проблема такая-есть родительский объект, у него есть 10 дочерних разного типа

Нужно в форме действия в цикле выбрать все дочерние объекты определенных типов.
Сейчас это выглядит так - есть переменная объект с типом 'список' (автоматическая загрузка объекта) и получается (допустим 8 объектов из 10 удовлетворяют условию отбора)

1. Начало
-нажимаю на поле объект - открывается список выбора
-выбираю первый объект
-устанавливаю атрибут (этот объект больше не появится в списке)
-Update
-Goto(Начало)

т.е. в превых 7 циклах все время приходится открывать список выбранных объектов и что-то выбирать и только когда остается последний объект он выбирается автоматически.

А как сделать так чтобы в поле объект сразу попадал первый попавшийся объект (удовлетворяющий условию) и таким образом перебрать все объекты не используя окно выбора?

Юрий может вы подскажете, по идее нужен какй-то SQL запрос через f_ExecSQLSelect... единственное что-он возвращает только строку а нужно ID объекта

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Аватара пользователя
Старик Крупский
Активный участник
Сообщения: 803
Зарегистрирован: 27 июл 2006, 22:17
Откуда: Москва

Сообщение Старик Крупский »

А это, кстати, очень просто. Лоция высылает по этому поводу пример. Перескажу своими словами: используем f_ExecSQLSelect и вытаскиваем потомка с максимальным (или минимальным) айдишником, но у которого нет данного атрибута или он не отвечает каким-либо условиям. Потом делаем объекту setbyid, устанавливаем атрибут и снова делаем запрос. если запрос вернул пустую строку (не помню null или ''), то выходим из цикла. Даже форма не нужна
"Лучше меньше, да лучше" (C)
Аватара пользователя
Anderyt
Активный участник
Сообщения: 777
Зарегистрирован: 15 июл 2004, 13:15
Используемое ПО: Lotsia PDM PLUS
Откуда: Тюмень
Контактная информация:

Сообщение Anderyt »

да, без сиквел-запроса перебор дочерних объектов (да и вообще, нескольких объектов) в действии будет очень неудобным.
надеюсь, еще к месту:

Код: Выделить всё

Var_IDs = Set ( f_ExecSQLSelect_2('
select link_id 
from lsdbo.tree_link_view 
where 
parent_id ='+ a_Object+ '
and link_id in 
(select av.object_id 
from lsdbo.value_string_view vs
, lsdbo.attrib_value_view av 
where av.value_id = vs.id 
and 
av.attrib_id = 774303840200000 
and 
vs.value =~''+var_author+'~')','/','-') +'-' )
в Var_IDs записывается СТРОКА с ИД, потом их нужно перебирать в цикле (хотя вариант с мах (или min) гораздо изящнее) и использовать setbyid. приведенный запрос вытаскивает те объекты, которые входят в объект a_Object и у которых арибут с ИД 774303840200000 равен значению переменной var_author. а... тут еще по идее нужно добавить в условие отбора указание типа связи, чтобы попадали объекты, входящие по связи Дерево проектов. кажется... у нас модель данных не предполагает других связанных объектов, поэтому запрос работает нормально и без этого условия. я посмотрю после выходных, на всякий случай и дам знать ;-)
лучше день потерять, потом за пять минут долететь!
Ответить