AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.07.2022, 09:09   #1  
online
axm2017
Участник
 
1,937 / 317 (14) ++++++
Регистрация: 15.05.2017
Workflow Алгоритмы одобрения Можно ли изменить/добавить
Возник вопрос по workfow. Хотим доработать алгоритм одобрения для каких то случаев. Может кто-то копал возможно ли это? Куда смотреть?
Старый 05.07.2022, 09:39   #2  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,324 / 3548 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
А в чём проблема? Есть элементы WF в АОТе, они ссылаются на классы - там логика. Фантазии можно разные реализовать
__________________
Возможно сделать все. Вопрос времени
Старый 05.07.2022, 10:01   #3  
online
axm2017
Участник
 
1,937 / 317 (14) ++++++
Регистрация: 15.05.2017
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
А в чём проблема? Есть элементы WF в АОТе, они ссылаются на классы - там логика. Фантазии можно разные реализовать
Ну вот как то сразу не понимаю куда смотреть (пока не сильно погружен в эту тему увы).
Сценарий из разряда
есть WF с параллельными заданиями
например условно ищут потерянные вещи сотрудники А Б (параллельно ищут вещь 1)
и С с D (ищут другую вещь 2))
при одобрении сотрудниками AA или ББ знающими как выглядит вещь 1 факта что сотрудник А нашел нужную вещь отпускаем с чистой совестью и А и Б но С и D продолжает трудиться для них ободрить могут ББ и CC.
Старый 05.07.2022, 10:15   #4  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Назначить один шаг одобрения сразу и одновременно нескольким лицам, причем установить в одном случае условие "Any one approver", а в другом "All approvers".
Старый 05.07.2022, 10:33   #5  
online
axm2017
Участник
 
1,937 / 317 (14) ++++++
Регистрация: 15.05.2017
Цитата:
Сообщение от EVGL Посмотреть сообщение
Назначить один шаг одобрения сразу и одновременно нескольким лицам, причем установить в одном случае условие "Any one approver", а в другом "All approvers".
Таких процессов и критериев типа вещь 1 вещь 2, АА и ББ, слишком много чтобы настраивать вручную постоянно вручную.
Старый 05.07.2022, 10:43   #6  
gudzon is offline
gudzon
программист
 
1,166 / 324 (13) ++++++
Регистрация: 06.07.2004
Адрес: Москва
Цитата:
Сообщение от axm2017 Посмотреть сообщение
Таких процессов и критериев типа вещь 1 вещь 2, АА и ББ, слишком много чтобы настраивать вручную постоянно вручную.
Вещь 1 или вещь 2 это по идеи строки должны быть документа. WF чисто про подбор исполнителей и последовательность их назначения. И только.
Т.е. есть документ с кучей вещей, которые надо найти. Вы можете написать свой "провайдер", который подберет для каждой вещи по любому алгоритму кто именно должен искать. Дальше уже собственно WF создается как описал EVGL. Когда любой исполнитель из группы 1 допустим найдет Вещь 1 - в строке меняется статус Найдено.

На заказе на продажу (или покупки, не помню) и на заявках на закупку реализовано построчное согласование документа. Правда сам не пробовал как это работает.

Последний раз редактировалось gudzon; 05.07.2022 в 10:48.
Старый 05.07.2022, 10:51   #7  
online
axm2017
Участник
 
1,937 / 317 (14) ++++++
Регистрация: 15.05.2017
Цитата:
Сообщение от gudzon Посмотреть сообщение
Вещь 1 или вещь 2 это по идеи строки должны быть документа. WF чисто про подбор исполнителей и последовательность их назначения. И только.
Т.е. есть документ с кучей вещей, которые надо найти. Вы можете написать свой "провайдер", который подберет для каждой вещи по любому алгоритму кто именно должен искать. Дальше уже собственно WF создается как описал EVGL. Когда любой исполнитель из группы 1 допустим найдет Вещь 1 - в строке меняется статус Найдено.

На заказе на продажу (или покупки, не помню) и на заявках на закупку реализовано построчное согласование документа. Правда сам не пробовал как это работает.
Идет параллельный поиск то есть ищут все вещи (вещь 1 вещь 2 вещь 3..) одновременно. Нахождение одной вещи закрывает сразу часть параллельных заданий а не одно.
А точно провайдер может это?
Старый 05.07.2022, 11:00   #8  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Нет. Провайдер только выдает список лиц. Запрограммировать "дальнодействие" между открытыми заданиями в Workflow сложно до невозможности, они каждый в своем контексте, и не проверяют статусы по таймеру или любому другому событию, а реагируют только на кнопки, чтобы двигаться дальше.
Старый 05.07.2022, 11:14   #9  
gudzon is offline
gudzon
программист
 
1,166 / 324 (13) ++++++
Регистрация: 06.07.2004
Адрес: Москва
Цитата:
Сообщение от axm2017 Посмотреть сообщение
Идет параллельный поиск то есть ищут все вещи (вещь 1 вещь 2 вещь 3..) одновременно. Нахождение одной вещи закрывает сразу часть параллельных заданий а не одно.
А точно провайдер может это?
EVGL уже ответил.
Основном посыл - не надо бизнес-логику тащить в WF. Он это не понимает. Там нет сложной генерации задач и управления ими из кода. Задания создаются только по настройкам и на одну "запись в таблице". Если у вас какой то сложная генерация заданий, лучше сделать промежуточную таблицу на документ - Задания на поиск, и на нее уже WF натравить. По каждому заданию из этой таблицы можно делать одно задание WF и назначать параллельных исполнителей. Статус менять уже у этой таблицы - а она из кода уже может менять у связанных строк (вещей).
Старый 05.07.2022, 15:56   #10  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,324 / 3548 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от axm2017 Посмотреть сообщение
например условно ищут потерянные вещи сотрудники А Б (параллельно ищут вещь 1)
и С с D (ищут другую вещь 2))
при одобрении сотрудниками AA или ББ знающими как выглядит вещь 1 факта что сотрудник А нашел нужную вещь отпускаем с чистой совестью и А и Б но С и D продолжает трудиться для них ободрить могут ББ и CC.
Ну тут надо понимать - что WF - это в первую очередь утверждение чего-то применительно к конкретной записи в таблице и фиксация выполненной работы (обработка взятой на себя заявки) опять-таки в привязке к конкретной записи в таблице.
Т.е. WF не задумывался в роли алгоритма поиска потерянных вещей, т.е. ситуация, когда А нашел чего-то, а C и D ещё ищут - неприменима для WF (понятно, что "натянуть" функционал с некоторыми ограничениями можно всегда)
__________________
Возможно сделать все. Вопрос времени
Старый 07.07.2022, 11:00   #11  
online
axm2017
Участник
 
1,937 / 317 (14) ++++++
Регистрация: 15.05.2017
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
...
Т.е. WF не задумывался в роли алгоритма поиска потерянных вещей, т.е. ситуация, когда А нашел чего-то, а C и D ещё ищут - неприменима для WF (понятно, что "натянуть" функционал с некоторыми ограничениями можно всегда)
Судя по коду как раз что то такое (А нашел закрываем и Б) хотели делать при параллельных заданиях и не только.
Типичное в коде SysWorkflowWorkItem метод completeWorkItems
X++:
while select forupdate
            *
        from workItemTable
        where
            // BP deviation documented
            workItemTable.CorrelationId == _correlationId &&
            workItemTable.StepId == _stepId
        {
            if (workItemTable.Status != WorkflowWorkItemStatus::Completed)
            {
                if (_isClaimed && workItemTable.ActivityId == _claimedActivityId)
                {
                    if (workItemTable.Queue)
                    {
                        SysWorkflowWorkItem::completeNotification(workItemTable.CompanyId, workItemTable.NotificationId);
                        workItemTable.NotificationId = 0;
                        workItemTable.UserId = _user;
                        workItemTable.Subject = _subject;
                        workItemTable.Description = _instructions;
                    }
                    workItemTable.IsClaimed = NoYes::Yes;
                }
                else
                {
                    workItemTable.Status = WorkflowWorkItemStatus::Completed;

                    SysWorkflowWorkItem::completeNotification(workItemTable.CompanyId, workItemTable.NotificationId);
                    workItemTable.NotificationId = 0;
                }
                workItemTable.update();
            }
Де факто закрывают часть заданий скопом
Старый 07.07.2022, 11:19   #12  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,324 / 3548 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Здесь могут быть 2 идеи:
1. Очереди задач. Есть какое-то количество задач (элемент АОТа Task) в пуле (очереди) задач. Кто из пользователей, кто полномочен эти задачи решать - жмет кнопку принять (аналог того, что человек, обслуживающий посетителей жмет кнопку "следующий по электронной очереди"). Ему попадает какая-то задача. Он ее на себя берет, выполняет и по ее завершению - жмет кнопку Выполнить. Также он может эту задачу вернуть обратно в очередь задач.

2. Как глобально работает WF: Когда пользователь нажал кнопку, то система не кинулась прямо сразу выполнять действия, которые заложены в WF. Крутится независимый пакетник, который (условно раз в минуту) проверяет все элементы WF (и Task и Approval) на предмет изменения их статуса. Ну и скопом их обрабатывает.

Поэтому Ваш пример может быть просто примером "оптовой" обработки элементов WF (потому что это просто пакетник). Но Вы могли также видеть и функционал работы с очередями
__________________
Возможно сделать все. Вопрос времени
Старый 07.07.2022, 13:20   #13  
online
axm2017
Участник
 
1,937 / 317 (14) ++++++
Регистрация: 15.05.2017
там идея именно в том что выполнение одной задачи закрывает и другие.
Сделано своеобразно но работает именно так
завершил свою задачу закрылись параллельные по той же теме
Старый 08.07.2022, 14:13   #14  
DesparioN is offline
DesparioN
Участник
 
86 / 15 (1) ++
Регистрация: 21.10.2014
Правильно ли я понял, что есть некий документ, по которому запущен WF. В рамках этого документа может быть осуществлен поиск рандомного количества предметов разными группами лиц. При этом по каждой вещи должно быть хотя бы одно выполнение для завершения этапа?
Старый 08.07.2022, 14:27   #15  
online
axm2017
Участник
 
1,937 / 317 (14) ++++++
Регистрация: 15.05.2017
Цитата:
Сообщение от DesparioN Посмотреть сообщение
Правильно ли я понял, что есть некий документ, по которому запущен WF. В рамках этого документа может быть осуществлен поиск рандомного количества предметов разными группами лиц. При этом по каждой вещи должно быть хотя бы одно выполнение для завершения этапа?
Не вдаваясь в конкретные детали описал ранее эквивалент
"Идет параллельный поиск то есть ищут все вещи (вещь 1 вещь 2 вещь 3..) одновременно. Нахождение одной вещи закрывает сразу часть параллельных заданий тех кто ищет вещь"
Распараллеливание и ко решается силами WF вопрос был о том как менять механизм для подобного согласования. Было интересно узнать чужой опыт. Кусок как меняют нашел в коде в итоге (см. выше)
Старый 08.07.2022, 14:43   #16  
DesparioN is offline
DesparioN
Участник
 
86 / 15 (1) ++
Регистрация: 21.10.2014
Главное не забыть из этого метода delete_from messageTable, иначе может получиться многократное обновление
За это сообщение автора поблагодарили: axm2017 (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
DAX2009: как можно добавить текст перед Microsoft Dynamics AX oleggy DAX: Программирование 2 10.07.2020 13:08
atinkerersnotebook: Developing a Product Approval Workflow in Dynamics AX 2012 Blog bot DAX Blogs 0 09.11.2013 17:12
Как можно изменить цвет шрифта в Excel? Hidden DAX: Программирование 4 15.04.2005 12:33
Можно ли изменить дату введения в экслуатацию velk DAX: Функционал 2 20.08.2004 17:18
Можно ли изменить Enum типа NoYes или PrintMedium? funnut DAX: Программирование 1 08.07.2004 14:21

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 09:39.