Техподдержка: выгрузка шаблонов Workflow,действий,отчетов...
- Disillusioned
- Активный участник
- Сообщения: 420
- Зарегистрирован: 15 июл 2004, 15:12
- Используемое ПО: Lotsia PDM PLUS
- Откуда: Подольск
- Контактная информация:
Техподдержка: выгрузка шаблонов Workflow,действий,отчетов...
Тестировали версию 4.40. В нашей конфигурации обнаружилось весьма немалое количество ошибок в WorkFlow. При этом основная проблема оказалась не в их количестве, а в затруднениях, которые испытывала техподдержка с их повторением.
В последнее время часто приходится получать ответ: "Не смогли повторить..."
И на самом деле, при существующей технологии (коротко ее можно охарактеризовать - "на пальцах"), описание проблемы - это немалый труд, к тому же зачастую бесполезный (все равно приходит ответ: "Не смогли повторить").
Руководствуясь старой пословицей "Если гора не идет к Магомету...." предлагаю свой вариант решения данной проблемы: выгружать из БД строки таблиц, относящихся к проблемным действиям, шаблонам, отчетам и отправлять эти данные в техподдержку.
Ниже я приведу тексты процедур для Sybase SQL Anywhere для выгрузки метаданных из БД Lotsia PDM Plus.
Будет неплохо, если уважаемые коллеги поделяться исходниками аналогичного функционала для других СУБД.
В последнее время часто приходится получать ответ: "Не смогли повторить..."
И на самом деле, при существующей технологии (коротко ее можно охарактеризовать - "на пальцах"), описание проблемы - это немалый труд, к тому же зачастую бесполезный (все равно приходит ответ: "Не смогли повторить").
Руководствуясь старой пословицей "Если гора не идет к Магомету...." предлагаю свой вариант решения данной проблемы: выгружать из БД строки таблиц, относящихся к проблемным действиям, шаблонам, отчетам и отправлять эти данные в техподдержку.
Ниже я приведу тексты процедур для Sybase SQL Anywhere для выгрузки метаданных из БД Lotsia PDM Plus.
Будет неплохо, если уважаемые коллеги поделяться исходниками аналогичного функционала для других СУБД.
Ах и с ними невозможно
И без них никак нельзя
И без них никак нельзя
- Disillusioned
- Активный участник
- Сообщения: 420
- Зарегистрирован: 15 июл 2004, 15:12
- Используемое ПО: Lotsia PDM PLUS
- Откуда: Подольск
- Контактная информация:
Re: Техподдержка: выгрузка шаблонов Workflow,действий,отчетов...
Начнем с шаблонов Workflow.
Хранимая процедура (WatcomSQL) сохраняет данные шаблона работы (@tmpl_id) в текстовые файлы, расположенные в папке @work_folder (папка должна находиться на сервере БД).
Пример вызова: CALL aln_admr_UnloadWFTemplate(100001282900083,'D:\\UnloadWFTemplate\\')
Содержимое папки отправляем в техподдержку. Надеюсь, с загрузкой данных у них проблем не возникнет.
Хранимая процедура (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,действий,отчетов...
Теперь выгрузка действий над объектами.
Пример вызова: call aln_admr_UnloadAction(1972,'D:\\UnloadAction\\')
Первый аргумент - код действия, второй аргумент - папка на сервере БД куда сохраняются файлы выгрузки.
Пример вызова: 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
Ах и с ними невозможно
И без них никак нельзя
И без них никак нельзя
- Александр
- Активный участник
- Сообщения: 1658
- Зарегистрирован: 24 авг 2006, 08:06
- Используемое ПО: Lotsia PDM PLUS
- Откуда: 55.745578,37.665825
Re: Техподдержка: выгрузка шаблонов Workflow,действий,отчетов...
знаешь - я тоже сталкиваюсь с подобным ответом, привык - но после очередного детального поиска ошибки с записью лога в виде
ps
хорошо все-же что из 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,действий,отчетов...
Не стоит поминать в суе зверя этого (PBDEBUG). Не помню, чтобы он помогал решать проблемы, а время он убивает немеряно.Запустите, пожалуйста, приложение с параметром /PBDEBUG
У тебя, Александр, есть выбор, т.к. есть лицензия на репликацию. У других пользователей ее нет, соответственно нет и выбора.мне так проще - указать точное место чем выгружать кусок целиком
А наличие выбора - это всегда хорошо...
Ах и с ними невозможно
И без них никак нельзя
И без них никак нельзя
- Disillusioned
- Активный участник
- Сообщения: 420
- Зарегистрирован: 15 июл 2004, 15:12
- Используемое ПО: Lotsia PDM PLUS
- Откуда: Подольск
- Контактная информация:
Re: Техподдержка: выгрузка шаблонов Workflow,действий,отчетов...
Выгрузка форм.
Пример вызова: call aln_admr_UnloadForm(71,'E:\\UnloadForms')
1-й аргумент - код формы, 2-й аргумент - имя папки на сервере БД для записи данных выгрузки.
Пример вызова: 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,действий,отчетов...
Завершаю выгрузкой отчетов.
Пример вызова: call aln_admr_UnloadReport(100000031000202,'E:\\UnloadReports')
1-й аргумент - код отчета, 2-й аргумент - имя папки на сервере БД для записи данных выгрузки.
Пример вызова: 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
Ах и с ними невозможно
И без них никак нельзя
И без них никак нельзя