Техподдержка: выгрузка шаблонов Workflow,действий,отчетов...

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

Техподдержка: выгрузка шаблонов Workflow,действий,отчетов...

Сообщение Disillusioned »

Тестировали версию 4.40. В нашей конфигурации обнаружилось весьма немалое количество ошибок в WorkFlow. При этом основная проблема оказалась не в их количестве, а в затруднениях, которые испытывала техподдержка с их повторением.
В последнее время часто приходится получать ответ: "Не смогли повторить..."
И на самом деле, при существующей технологии (коротко ее можно охарактеризовать - "на пальцах"), описание проблемы - это немалый труд, к тому же зачастую бесполезный (все равно приходит ответ: "Не смогли повторить").
Руководствуясь старой пословицей "Если гора не идет к Магомету...." предлагаю свой вариант решения данной проблемы: выгружать из БД строки таблиц, относящихся к проблемным действиям, шаблонам, отчетам и отправлять эти данные в техподдержку.
Ниже я приведу тексты процедур для Sybase SQL Anywhere для выгрузки метаданных из БД Lotsia PDM Plus.
Будет неплохо, если уважаемые коллеги поделяться исходниками аналогичного функционала для других СУБД.
Ах и с ними невозможно
И без них никак нельзя
Аватара пользователя
Disillusioned
Активный участник
Сообщения: 420
Зарегистрирован: 15 июл 2004, 15:12
Используемое ПО: Lotsia PDM PLUS
Откуда: Подольск
Контактная информация:

Re: Техподдержка: выгрузка шаблонов Workflow,действий,отчетов...

Сообщение Disillusioned »

Начнем с шаблонов Workflow.
Хранимая процедура (WatcomSQL) сохраняет данные шаблона работы (@tmpl_id) в текстовые файлы, расположенные в папке @work_folder (папка должна находиться на сервере БД).
Пример вызова: CALL aln_admr_UnloadWFTemplate(100001282900083,'D:\\UnloadWFTemplate\\')

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

CREATE PROCEDURE "LSDBO"."aln_admr_UnloadWFTemplate"(in @tmpl_id numeric(18),in @work_folder varchar(255))
NO RESULT SET
BEGIN
	declare @dyn_sql varchar(2000);
	 -- Выгрузка содержимого шаблона
	set @dyn_sql='unload select m.* from wf_maps as m where m.id = @tmpl_id to '''+@work_folder+'\\Template_'+cast(@tmpl_id as char)+'_WF_Maps.data''';
    execute immediate((@dyn_sql));
    set @dyn_sql='unload select mdt.* from wf_map_doc_tree as mdt join wf_maps as m on m.id = mdt.map_id where m.id = @tmpl_id to '''+@work_folder+'\\Template_'+cast(@tmpl_id as char)+'_WF_MapDocTree.data''';
    execute immediate((@dyn_sql));
    set @dyn_sql='unload select mn.* from wf_map_nodes as mn join wf_maps as m on m.id = mn.map_id where m.id = @tmpl_id to '''+@work_folder+'\\Template_'+cast(@tmpl_id as char)+'_WF_MapNodes.data''';
    execute immediate((@dyn_sql));
    set @dyn_sql='unload select mf.* from wf_map_forms as mf join wf_maps as m on m.id = mf.map_id where m.id = @tmpl_id to '''+@work_folder+'\\Template_'+cast(@tmpl_id as char)+'_WF_MapForms.data''';
    execute immediate((@dyn_sql));
    set @dyn_sql='unload select mfk.* from wf_map_forks as mfk join wf_maps as m on m.id = mfk.map_id where m.id = @tmpl_id to '''+@work_folder+'\\Template_'+cast(@tmpl_id as char)+'_WF_MapForks.data''';
    execute immediate((@dyn_sql));
    set @dyn_sql='unload select me.* from wf_Map_Executor as me join wf_maps as m on m.id = me.map_id where m.id = @tmpl_id to '''+@work_folder+'\\Template_'+cast(@tmpl_id as char)+'_WF_MapExecutor.data''';
    execute immediate((@dyn_sql));
    set @dyn_sql='unload select ml.* from wf_map_links as ml join wf_maps as m on m.id = ml.map_id where m.id = @tmpl_id to '''+@work_folder+'\\Template_'+cast(@tmpl_id as char)+'_WF_Map_Links.data''';
    execute immediate((@dyn_sql));
    set @dyn_sql='unload select mnd.* from wf_map_nodes_docs as mnd join wf_maps as m on m.id = mnd.map_id where m.id = @tmpl_id to '''+@work_folder+'\\Template_'+cast(@tmpl_id as char)+'_WF_MapNodesDocs.data''';
    execute immediate((@dyn_sql));
    set @dyn_sql='unload select mndr.* from wf_map_nodes_dr as mndr join wf_maps as m on m.id = mndr.map_id where m.id = @tmpl_id to '''+@work_folder+'\\Template_'+cast(@tmpl_id as char)+'_WF_MapNodesDr.data''';
    execute immediate((@dyn_sql));
    set @dyn_sql='unload select mo.* from wf_map_opers as mo join wf_maps as m on m.id = mo.map_id where m.id = @tmpl_id to '''+@work_folder+'\\Template_'+cast(@tmpl_id as char)+'_WF_MapOpers.data''';
    execute immediate((@dyn_sql));
    set @dyn_sql='unload select mobo.* from wf_map_opers_by_obj as mobo join wf_maps as m on m.id = mobo.map_id where m.id = @tmpl_id to '''+@work_folder+'\\Template_'+cast(@tmpl_id as char)+'_WF_MapOpersByObj.data''';
    execute immediate((@dyn_sql));
    set @dyn_sql='unload select msm.* from wf_map_submap as msm join wf_maps as m on m.id = msm.map_id where m.id = @tmpl_id to '''+@work_folder+'\\Template_'+cast(@tmpl_id as char)+'_WF_SubMaps.data''';
    execute immediate((@dyn_sql));
    set @dyn_sql='unload select mv.* from wf_Map_Vars as mv join wf_maps as m on m.id = mv.map_id where m.id = @tmpl_id to '''+@work_folder+'\\Template_'+cast(@tmpl_id as char)+'_WF_MapVars.data''';
    execute immediate((@dyn_sql));
    set @dyn_sql='unload select mva.* from wf_map_vars_arr as mva join wf_maps as m on m.id = mva.map_id where m.id = @tmpl_id to '''+@work_folder+'\\Template_'+cast(@tmpl_id as char)+'_WF_MapVarsArr.data''';
    execute immediate((@dyn_sql));
    set @dyn_sql='unload select mvm.* from wf_map_vars_mail as mvm join wf_maps as m on m.id = mvm.map_id where m.id = @tmpl_id to '''+@work_folder+'\\Template_'+cast(@tmpl_id as char)+'_WF_MapVarsMail.data''';
    execute immediate((@dyn_sql));
    set @dyn_sql='unload select mvma.* from wf_map_vars_mail_arr as mvma join wf_maps as m on m.id = mvma.map_id where m.id = @tmpl_id to '''+@work_folder+'\\Template_'+cast(@tmpl_id as char)+'_WF_MapVarsMailArr.data''';
    execute immediate((@dyn_sql));
END
Содержимое папки отправляем в техподдержку. Надеюсь, с загрузкой данных у них проблем не возникнет.
Ах и с ними невозможно
И без них никак нельзя
Аватара пользователя
Disillusioned
Активный участник
Сообщения: 420
Зарегистрирован: 15 июл 2004, 15:12
Используемое ПО: Lotsia PDM PLUS
Откуда: Подольск
Контактная информация:

Re: Техподдержка: выгрузка шаблонов Workflow,действий,отчетов...

Сообщение Disillusioned »

Теперь выгрузка действий над объектами.
Пример вызова: call aln_admr_UnloadAction(1972,'D:\\UnloadAction\\')
Первый аргумент - код действия, второй аргумент - папка на сервере БД куда сохраняются файлы выгрузки.

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

CREATE PROCEDURE "LSDBO"."aln_admr_UnloadAction"(in @act_id numeric(18),in @work_folder varchar(255))
NO RESULT SET
BEGIN
	declare @dyn_sql varchar(2000);
	//Выгрузка действий над объектами
	set @dyn_sql='unload select tl.* from TemplList as tl where tl.id = @act_id to '''+@work_folder+'\\Action_'+cast(@act_id as char)+'_TemplList.data''';
    execute immediate @dyn_sql;
	set @dyn_sql='unload select tv.* from TemplVar as tv where tv.templ_id = @act_id to '''+@work_folder+'\\Action_'+cast(@act_id as char)+'_TemplVar.data''';
    execute immediate @dyn_sql;
	set @dyn_sql='unload select ts.* from TemplStep as ts where ts.templ_id = @act_id to '''+@work_folder+'\\Action_'+cast(@act_id as char)+'_TemplStep.data''';
    execute immediate @dyn_sql;
	set @dyn_sql='unload select tf.* from TemplForm as tf join TemplStep as ts on tf.TemplStep_ID=ts.id where ts.templ_id = @act_id to '''+@work_folder+'\\Action_'+cast(@act_id as char)+'_TemplForm.data''';
    execute immediate @dyn_sql;
END
Ах и с ними невозможно
И без них никак нельзя
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Re: Техподдержка: выгрузка шаблонов Workflow,действий,отчетов...

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

знаешь - я тоже сталкиваюсь с подобным ответом, привык - но после очередного детального поиска ошибки с записью лога в виде
Запустите, пожалуйста, приложение с параметром /PBDEBUG
Она будет выполняться гораздо медленнее и записывать все в отладочный
файл partyp.dbg в каталог Party. После возникновения ошибки сархививируйте
отладочный файл и пришлите его нам.
я оставил это дело.. и сейчас убиваю по три часа времени на подробное описание ошибок с картинками или съемками видео с экрана - собственно мне так проще - указать точное место чем выгружать кусок целиком - репликацией или еще как. Поэтому только документированная переписка и все - никаких исходников.

ps
хорошо все-же что из WorkFlow - у нас только интерфейс форм - да и тот от сборки к сборки 'плавает' к счастью он не так велик и ошибки видны сразу

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

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

Re: Техподдержка: выгрузка шаблонов Workflow,действий,отчетов...

Сообщение Disillusioned »

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

Re: Техподдержка: выгрузка шаблонов Workflow,действий,отчетов...

Сообщение Disillusioned »

Выгрузка форм.
Пример вызова: call aln_admr_UnloadForm(71,'E:\\UnloadForms')
1-й аргумент - код формы, 2-й аргумент - имя папки на сервере БД для записи данных выгрузки.

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

CREATE PROCEDURE "LSDBO"."aln_admr_UnloadForm"(in @frm_id numeric(18),in @work_folder varchar(255))
NO RESULT SET
BEGIN
	declare @fn varchar(2000);
	set @fn=@work_folder+'\\Form_'+cast(@frm_id as char)+'_cd_CustomOptions.data';
	unload select co.* from cd_CustomOptions as co
			where co.SubDescr = @frm_id and co.TypeDescr = 'PFrm' to @fn;
END
Ах и с ними невозможно
И без них никак нельзя
Аватара пользователя
Disillusioned
Активный участник
Сообщения: 420
Зарегистрирован: 15 июл 2004, 15:12
Используемое ПО: Lotsia PDM PLUS
Откуда: Подольск
Контактная информация:

Re: Техподдержка: выгрузка шаблонов Workflow,действий,отчетов...

Сообщение Disillusioned »

Завершаю выгрузкой отчетов.
Пример вызова: call aln_admr_UnloadReport(100000031000202,'E:\\UnloadReports')
1-й аргумент - код отчета, 2-й аргумент - имя папки на сервере БД для записи данных выгрузки.

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

CREATE PROCEDURE "LSDBO"."aln_admr_UnloadReport"(in @rpt_id numeric(18),in @work_folder varchar(255))
NO RESULT SET
BEGIN
	declare @dyn_sql varchar(2000);
	set @dyn_sql='unload select * from Rep_Name where id = @rpt_id to '''+@work_folder+'\\Report_'+cast(@rpt_id as char)+'_RepName.data''';
    execute immediate @dyn_sql;
    set @dyn_sql='unload select * from Rep_DwSyntax where rep_id = @rpt_id to '''+@work_folder+'\\Report_'+cast(@rpt_id as char)+'_RepSyntax.data''';
    execute immediate @dyn_sql;
    set @dyn_sql='unload select * from Rep_Part where name_id = @rpt_id to '''+@work_folder+'\\Report_'+cast(@rpt_id as char)+'_RepPart.data''';
    execute immediate @dyn_sql;
    set @dyn_sql='unload select * from RepToObjType where rep_id = @rpt_id to '''+@work_folder+'\\Report_'+cast(@rpt_id as char)+'_RepToObjType.data''';
    execute immediate @dyn_sql;
    set @dyn_sql='unload select rpi.* from Rep_Part_Item as rpi join Rep_Part as rp on rpi.part_id = rp.id where rp.name_id = @rpt_id to '''+@work_folder+'\\Report_'+cast(@rpt_id as char)+'_RepPartItem.data''';
    execute immediate @dyn_sql;
    set @dyn_sql='unload select rpa.* from Rep_Part_Attr as rpa join Rep_Part_Item as rpi on rpa.item_id = rpi.id join Rep_Part as rp on rpi.part_id = rp.id where rp.name_id = @rpt_id to '''+@work_folder+'\\Report_'+cast(@rpt_id as char)+'_RepPartAttr.data''';
    execute immediate @dyn_sql;
    set @dyn_sql='unload select rps.* from Rep_Part_Sort as rps join Rep_Part as rp on rps.part_id = rp.id where rp.name_id = @rpt_id to '''+@work_folder+'\\Report_'+cast(@rpt_id as char)+'_RepPartSort.data''';
    execute immediate @dyn_sql;
END
Ах и с ними невозможно
И без них никак нельзя
Ответить