Есть БП построенный по задачам
1
Если мы в конструкторе БП, поставим ответственного по Task2 пользователя user1
2
Запустим БП под пользователем (Supervisor) выполним Task1, поставим задачу Task2 пользователю user1
Зайдем под пользователем user1 выполним задачу Task2 (поле автор в Task2 будет равно Supervisor), после чего БП пойдет дальше и создаст задачу Task3, в стандартной коробочной логике автор в Task3 будет user1

Задача В поле автор задач созданных по БП необходимо установить пользователя который инициировал БП (в данном примере это Supervisor).

Решение:
По сути нам необходимо запомнить инициатора БП, для этого создадим параметр
3

4
и будем инициализировать значение WFIniciator значением текущего пользователя на старте БП
5

function Item1OnStart(StartItem) {
var Diagram = GetDiagramByItem(StartItem);
WFSetParamValue(Diagram,'WFIniciator',Connector.CurrentUser.ContactID);
}

Далее определим событие OnBeforeExecute в каждой из задач в БП
6

function Action1OnBeforeExecute(ActionItem) {
var Diagram = GetDiagramByItem(ActionItem);
WFSetParamValue(ActionItem, 'AuthorID', WFGetParamValue(Diagram, 'WFIniciator'));
}

Данными строчками мы говорим что поле «Автор» должно быть заполнено ID инициатора БП.

Для того что бы мы имели доступ к полю «Автор» нам необходимо сделать следующуи доработки
1. В wa_TaskAction добавить параметр AuthorID
7

8

9

2.
a. Добавить сточку в wa_TaskActionScript

  //
               WFConnectParams(ActionItem, 'AuthorID', 'AuthorID', wptString, wpmitInOut);
               //

10

b. В wa_TaskActionOnExecute добавить :

               //
               var AuthorID = null;                        
               //
Дописать в TaskDataset параметр 'AuthorID':
var TaskDataset = WFGetLikedItemDatasetEx('ds_Task', ItemID,
                               new Array('ID', 'AccountID', 'ContactID', 'OpportunityID',
                                              'StatusIsFinish', 'ResultID', 'OwnerID','AuthorID'), true);

И дописать AuthorID = TaskDataset.ValAsGUID('AuthorID'); как это отмечено на скриншоте
11

c. Добавить строчку WFSetParamValue(ActionItem, 'AuthorID', AuthorID);
12

d. И дописать в WFParamsToDictionary передачу 'AuthorID'

               WFParamsToDictionary(WorkflowAction, DefaultValues,
                               'TypeID', 'OwnerID', 'AccountID', 'ContactID'
                                              /* MODULE OPPORTUNITIES */, 'OpportunityID'
                                              /* ENDMODULE OPPORTUNITIES */
                                              /* MODULE INCIDENTS*/, 'IncidentID'
                                              /* ENDMODULE INCIDENTS */,
                                              'ContractID',
                                              'AuthorID');
13

3.Кроме этого необходимо в скрипте ds_TaskScript в обработчике SelfOnDatasetBeforePost закомментировать строчки :

if ((ds_TaskScript.IsAppend) &&
                               (Dataset.Values('AuthorID') != Connector.CurrentUser.ContactID)) {
                               Dataset.Values('AuthorID') = Connector.CurrentUser.ContactID;
                }

14

После чего работа тестового процесса
1
будет следующая:
Под пользователем Supervisor запускаем БП
15
Ставим задачу на user1
16

Заходим под пользователем user1 и выполняем Task2, по БП у нас появляется Task3 с автором БП, который соответствует инициатору БП
17

Файлы скриптов и тестовый БП, находятся в прикрепленных файлах

Нравится

Поделиться

1 комментарий

Замечание:
В данном примере, для того что бы в Task3 в поле ответственный был указан инициатор БП, необходимо в обработчике OnBeforeExecute задачи Task 3 дописать

function Action3OnBeforeExecute(ActionItem) {
 
               var Diagram = GetDiagramByItem(ActionItem);
               WFSetParamValue(ActionItem, 'AuthorID', WFGetParamValue(Diagram, 'WFIniciator'));
 
var OwnerID = WFGetParamValue(ActionItem, 'OwnerID'); //получить значение Ответственного по действию Задача с дизайнера БП
if  (IsEmptyValue(OwnerID))     // если значение не установлено то поставить ответственного по задаче Инициатора процесса
               WFSetParamValue(ActionItem, 'OwnerID', WFGetParamValue(Diagram, 'WFIniciator'));
 
}
Показать все комментарии