Как разорвать все связи объекта в действии Party

Здесь обсуждаем систему TDM/PDM/Workflow Lotsia PDM PLUS (PartY PLUS).
Аватара пользователя
Disillusioned
Активный участник
Сообщения: 420
Зарегистрирован: 15 июл 2004, 15:12
Используемое ПО: Lotsia PDM PLUS
Откуда: Подольск
Контактная информация:

Сообщение Disillusioned »

Я везде использую хранимые процедуры и функции, вот код функции возвращающей код одного родителя по типу (Watcom SQL)

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

ALTER FUNCTION "LSDBO"."aln_misc_GetFirstParentObjIDByType"(in @obj_id numeric(18),in @obj_type numeric(18),in @linktype numeric(18))
returns numeric(18)
begin
  declare @retval numeric(18);
  select first tl.parent_id into @retval from tree_link_view as tl join object_reference_view as o on tl.parent_id = o.id where
    tl.link_id = @obj_id and tl.link_type_id = @linktype and o.type_id = @obj_type order by tl.cd asc;
  return @retval
end

Keеp нужен для того, что при каждой перерисовке формы (например, если ее растягивать, событие перерисовки возникнет несколько десятокв раз) осуществлялось чтение не из БД, а из буфера Лоции. Ведь если мы что с формы передаем, то на ней и отображается, иначе данные лучше непосредственно в действии получать.

Если нужен конкретный ГИП из нескольких, то нужно выбирать ВАСЮ именно в его составе и использовать a_TLinkID. Если это невозможно, тогда поможет пожалуй использование массивов в Workflow, но это дело достаточно муторное.
Последний раз редактировалось Disillusioned 05 дек 2007, 11:09, всего редактировалось 1 раз.
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

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

gali можно вот таким запросом

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

SELECT count(*) 
  FROM LSDBO.object_reference_view rw, 
       lsdbo.tree_link_view tl 
 WHERE tl.parent_id ='ID_Parent'  
       and rw.id='ID_Chaild' 
       and tl.link_id =rw.id 
       and tl.link_type_id = 11
тут мы проверяем - есть ли НАПРАВЛЕННАЯ связь между дочерним объектом ID_Child и его родителем ID_Parent
т.е. тебе нужно указать свой тип связи и задать в условие отбора- мнемо объекта и вместо count вытащить id связи вот и все, ну там еще можешь вытащить или все связи или одну - как надо
в Лоции это выглядит как

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

res = Set ( f_ExecSQLSelect_2('SELECT count(*) FROM LSDBO.object_reference_view rw, lsdbo.tree_link_view tl WHERE tl.parent_id ='+string(ID_Parent)+'  and rw.id='+string(ID_Chaild)+' and tl.link_id =rw.id and tl.link_type_id = 11' ,'','' ) )
или по новому (для одного результата)

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

res = Set ( f_ExecSQLSelect_3('SELECT count(*) FROM LSDBO.object_reference_view rw, lsdbo.tree_link_view tl WHERE tl.parent_id ='+string(ID_Parent)+'  and rw.id='+string(ID_Chaild)+' and tl.link_id =rw.id and tl.link_type_id = 11' ,'','' ,'cols=decimal(18)',0) )
вместо последнего нуля можешь поставить количество секунд в течении которых будет храниться результат в кеше

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

gali
Активный участник
Сообщения: 285
Зарегистрирован: 27 мар 2007, 07:43

Сообщение gali »

Я очень благодарна вам за желание помочь. Правда, спасибо.

Вот что у меня получилось.
Сначала Disillusioned. Извлекла select, получила таблицу ид_родителей, упорядоченную по дате изменения. Если применить first, как могу предположить, останется с ранней датой. Это не дает нужного результата. Возможно, я где-то не догнала. Бывает, интеллектом не блещу.

Теперь Александр. В запросе надо указать ид_родителя
WHERE tl.parent_id ='+string(ID_Parent)+
Если бы я его знала, я бы вопросов не задавала.
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

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

СТОП gali - да мы не знаем родителя - убери эту строку из запроса и выбирай всех родителей у которых тип или описание или что угодно соответствует твоему одному - кого ты ищешь
вот например запрос показывающий все объекты связанные с текущим (100000390900036) по типу связи Дерево проекта (1)

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

SELECT *
  FROM LSDBO.object_reference_view rw,
       lsdbo.tree_link_view tl
 WHERE rw.id=100000390900036
       and tl.link_id =rw.id
       and tl.link_type_id = 1
к сожалению нет времени нарисовать именно твой запрос - но ход мыслей достаточно прост - в документации подробно описаны все таблицы, колонки и связи с одной стороны - с другой ты точно знаешь что хочешь найти - смотришь на все это безобразие и делаешь абсолютно любой запрос от навороченного до простого с подзапросами или без - с НУЖНЫМИ ТЕБЕ УСЛОВИЯМИ ОТБОРА - поверь - ты решишь все свои проблемы через SQL - минуя лоцию

открываешь SQL Query Analyzer и вперед - отработала запрос - и в лоцию - понаставила там всяких преобразований в строки и странных знаков ~ , вызвала таинственную функцию формирующую динамический запрос - и ты в шоколаде - только так...

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

gali
Активный участник
Сообщения: 285
Зарегистрирован: 27 мар 2007, 07:43

Сообщение gali »

Бога ради, только не в ущерб себе и своей работе.
Александр, пока не будешь свободен, даже не смотри ниже.


ниже...
Я прогоняю запросы в SQL Server Management Studio, а не в лоции.

У меня закрадывается подозрение, что либо меня не понимают, либо я уперлась в какое-то место, и больше ничего не вижу (бывает такое состояние :))

Александр, мне нужен ОДИН родитель, а твой запрос по моей базе дает ДВА! (реально так и есть, специально для отладки сделала). Сам посмотри, в запросе ничего не указывает на конкретного родителя, а тип связи - дерево - почти везде. Больше того, я сравнила эти две строчки (select * из обеих таблиц), они отличаются id (что понятно), parent_id(что тоже естественно), датой (cd), и не описанным нигде FirstEntry. Мне нужно передать из формы в действие вот этот самый id!

Если в дереве проектов в левой части щелкнуть правой кнопкой на объекте, в контекстном меню предлагается удалить из ПРОЕКТА. Как-то они знают из КАКОГО проекта надо удалять. Я тоже хочу этим пользоваться.

Все. Истерика закончена. Больше я этим удалением не занимаюсь.

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

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

gali - спокойствие, только спокойствие :wink:

1е - если ты работаешь в дереве проекта (т.е. когда видишь окружение объекта - визуально так сказать) ты используешь функции LinkGetParent

2е - если ты в свободном полете и у тебя на экране только один объект без родителей (сирота практически) ты используешь свой SQL со своими условиями отбора
например

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

SELECT tl.parent_id,
       tl.id
  FROM LSDBO.object_reference_view rw,
       lsdbo.tree_link_view tl
 WHERE rw.id=100000390900036
       and tl.link_id =rw.id
       and tl.link_type_id = 1
       and tl.parent_id in
          (Select rw.id 
             From lsdbo.object_reference_view rw,
                  lsdbo.object_type_view tw
            Where rw.type_id = tw.id 
                   AND tw.mnemo = 'Lsts')
здесь я вытаскиваю двух родителей (в моем случае) и выбираю того из них у которого мнемо -'Lsts' (ты конечно можешь вытащить того кто нужен именно тебе)
получая его id и код связи - т.е. вещи достаточные для удаления

или мы опять не поняли друг-друга?? :wink: :wink:

ps
за синтаксис не бейте - ну не разбираюсь я в SQL - это факт - хотя как то и работаю :wink: :wink:

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

gali
Активный участник
Сообщения: 285
Зарегистрирован: 27 мар 2007, 07:43

Сообщение gali »

ну вот, я же говорю, что уперлась!

Александр, спасибо, что успокоил. Я сама себе свинью подложила.
Сначала пользуюсь LinkGetParent, затем на след шаге для проверки вывожу в форме, а в объекте настроены условия отбора. В результате я вижу 2 родителя. Убрала условия отбора - родитель тот, который нужен.

Посыпаю голову пеплом и жутко прошу прощения за доставленное беспокойство и бездарно убитое ваше время :oops: :?
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

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

нет нет gali что ты - убить время на форуме с пользой дела - это святое :wink: я щас в соседней ветке бьюсь с массивами workflow но не так успешно как ты :wink: :wink:

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

Ответить