04.10.2018, 17:29 | #1 |
Участник
|
D365 Handle timesheetline workflow submission
D365 необходимо после отправки TSTimesheetLine в Workflow, в зависимости от условий переназначить ее на другого человека. Собственно вопрос в том как отследить этот момент?
|
|
04.10.2018, 17:54 | #2 |
Banned
|
Что значит "отследить момент"? "Отследить" или "перенаправить"?
|
|
04.10.2018, 18:31 | #3 |
Участник
|
Я имею ввиду что нужно где то написать EventHandler или Extension. Но я не могу ни за что зацепиться...
|
|
04.10.2018, 19:43 | #4 |
Banned
|
Цитата:
Либо как вариант создайте цепь последовательных одобрений, которые выполняются автоматически, если срабатывает некое условие, либо остаются у человека: |
|
05.10.2018, 12:24 | #5 |
Участник
|
Об этом я подумал в первую очередь. Но так не выходит, внутри воркфлоу не видно тех данных что нужны для условия, да и само условие довольно сложное
|
|
05.10.2018, 13:33 | #6 |
Участник
|
А где данные есть? В 2012 я писал методы основной сущности, они отображались в редакторе. А внутри метода соответственно вся логика.
С помощью extension нельзя свой метод реализовать? В классе TsWorkflowTimesheetLines свой parm написать.
__________________
Ivanhoe as is.. |
|
|
За это сообщение автора поблагодарили: EVGL (1). |
05.10.2018, 14:38 | #7 |
Banned
|
Так точно. "Lines without project manager" на моем скриншоте - добавленный parm-метод.
|
|
05.10.2018, 15:18 | #8 |
Участник
|
Можете скинуть код этого метода. Я что то не могу пока сообразить как это работает. На методы в этом классе нету никаких Reference'ов
|
|
05.10.2018, 15:26 | #9 |
Участник
|
Там в стандарте есть метод parm - сделайте по аналогии. На вход запись базовой таблицы подается, дальше сами реализуйте свою логику.
__________________
Ivanhoe as is.. |
|
05.10.2018, 15:40 | #10 |
Участник
|
В том и дело, что там 2 парм метода с разными параметрами. Мне не понятно как система понимает что туда передать
|
|
05.10.2018, 16:40 | #11 |
Участник
|
У меня метод один:
X++: /// <summary> /// This method is used to specify conditions on total number of hours while setting up the configuration for timesheet line workflow. /// </summary> /// <param name="_companyId"> /// Present Company Id supplied by framework. /// </param> /// <param name="_tableId"> /// Table Id supplied by framework. /// </param> /// <param name="_recId"> /// Record Id of the timesheetline for which total number of hours is required. /// </param> /// <returns> /// Total number of hours in the timesheet line. /// </returns> public TSHoursTotal parmTotalWeekHours( CompanyId _companyId, TableId _tableId, RecId _recId) { TSHoursTotal tsHoursTotal; TSTimesheetLine tsTimesheetLine = TSTimesheetLine::findRecId(_recId); if (tsTimesheetLine.RecId != 0) { tsHoursTotal = tsTimesheetLine.totalWeekHours(); } else { throw error(strFmt("@SYS113080", _recId, tableId2name(_tableId))); } return tsHoursTotal; }
__________________
Ivanhoe as is.. |
|
05.10.2018, 16:51 | #12 |
Участник
|
Идея в том что кроме условия надо достать ресурс на который строка будет переназначаться из кастомной таблицы через ряд рилейшнов. Или его тоже можно задать парм методом?
|
|
05.10.2018, 16:56 | #13 |
Участник
|
Это вам надо смотреть в сторону Workflow Participant Assignment Providers. Писать своего, тогда в редакторе Workflow сможете указывать не конкретного сотрудника - а метод. А в методе уже решать, кого вернуть как участника.
__________________
Ivanhoe as is.. |
|
05.10.2018, 17:02 | #14 |
Участник
|
Ну возвращаясь к первоначальному вопросу: где ловить событие WorkflowActivated или типа того что бы переасайнить на другого человека?
|
|
05.10.2018, 17:28 | #15 |
Участник
|
В редакторе WF у вас есть несколько вариантов сделать ветвление и/или изменить шаги согласования:
1. условие на основании данных документа-основания - это методы parm 2. подстановочная модель участника WF - это класс наследник для participant provider. Как я понял задачу - нужно по условиям выбирать разных участников WF, которых нельзя заранее прописать в сценарии, а нужно "вычислять" на лету. Пишете своего провайдера, называете условно "Случайный согласователь" - указываете вместо ФИО на нужно шаге согласования "Случайный согласователь". При переходе WF на этот шаг система запустит ваш класс-провайдер и назначит шаг согласования на того, кого вернет ваш класс.
__________________
Ivanhoe as is.. |
|
05.10.2018, 17:30 | #16 |
Участник
|
В стандарте есть пример провайдера WorkflowUserGroupParticipantProvider - позволяет в сценарии указать не конкретного ФИО, а группу пользователей. И система сама при перехода на шаг WF посмотрит на состав этой группы пользователей и каждому из них пришлет задание поучаствовать в WF.
__________________
Ivanhoe as is.. |
|
05.10.2018, 17:37 | #17 |
Участник
|
Вот на шаге согласования в назначении участника нужно выбрать "Participant" а потом на второй вкладке выбрать Тип - тут и будет в списке ваш самописный провайдер.
__________________
Ivanhoe as is.. |
|
06.10.2018, 00:56 | #18 |
Banned
|
Есть только маленькое "но": в D365FO через extensions не получится подключить нового провайдера к существующему workflow. Остается серия parm-методов и цепочка IF-ов.
|
|
06.10.2018, 09:16 | #19 |
Участник
|
А в существующего провайдера добавить свой вариант? Как я понимаю екстеншены, должно быть возможно.
__________________
Ivanhoe as is.. |
|
08.10.2018, 09:30 | #20 |
Участник
|
Есть провайдеры, которые AvailableForAllWorkflowTemplates = Yes, если свой сделать новый и поставить это свойство, в существующие WF он не добавится? Не очень, что он везде будет виден, но тоже вариант.
__________________
Ivanhoe as is.. |
|
|
За это сообщение автора поблагодарили: EVGL (5). |
|
|