Есть БП построенный по задачам
Если мы в конструкторе БП, поставим ответственного по Task2 пользователя user1
Запустим БП под пользователем (Supervisor) выполним Task1, поставим задачу Task2 пользователю user1
Зайдем под пользователем user1 выполним задачу Task2 (поле автор в Task2 будет равно Supervisor), после чего БП пойдет дальше и создаст задачу Task3, в стандартной коробочной логике автор в Task3 будет user1
Задача В поле автор задач созданных по БП необходимо установить пользователя который инициировал БП (в данном примере это Supervisor).
Решение:
По сути нам необходимо запомнить инициатора БП, для этого создадим параметр
и будем инициализировать значение WFIniciator значением текущего пользователя на старте БП
var Diagram = GetDiagramByItem(StartItem);
WFSetParamValue(Diagram,'WFIniciator',Connector.CurrentUser.ContactID);
}
Далее определим событие OnBeforeExecute в каждой из задач в БП
var Diagram = GetDiagramByItem(ActionItem);
WFSetParamValue(ActionItem, 'AuthorID', WFGetParamValue(Diagram, 'WFIniciator'));
}
Данными строчками мы говорим что поле «Автор» должно быть заполнено ID инициатора БП.
Для того что бы мы имели доступ к полю «Автор» нам необходимо сделать следующуи доработки
1. В wa_TaskAction добавить параметр AuthorID
2.
a. Добавить сточку в wa_TaskActionScript
WFConnectParams(ActionItem, 'AuthorID', 'AuthorID', wptString, wpmitInOut);
//
b. В wa_TaskActionOnExecute добавить :
var AuthorID = null;
//
new Array('ID', 'AccountID', 'ContactID', 'OpportunityID',
'StatusIsFinish', 'ResultID', 'OwnerID','AuthorID'), true);
И дописать AuthorID = TaskDataset.ValAsGUID('AuthorID'); как это отмечено на скриншоте
c. Добавить строчку WFSetParamValue(ActionItem, 'AuthorID', AuthorID);
d. И дописать в WFParamsToDictionary передачу 'AuthorID'
'TypeID', 'OwnerID', 'AccountID', 'ContactID'
/* MODULE OPPORTUNITIES */, 'OpportunityID'
/* ENDMODULE OPPORTUNITIES */
/* MODULE INCIDENTS*/, 'IncidentID'
/* ENDMODULE INCIDENTS */,
'ContractID',
'AuthorID');
3.Кроме этого необходимо в скрипте ds_TaskScript в обработчике SelfOnDatasetBeforePost закомментировать строчки :
(Dataset.Values('AuthorID') != Connector.CurrentUser.ContactID)) {
Dataset.Values('AuthorID') = Connector.CurrentUser.ContactID;
}
После чего работа тестового процесса
будет следующая:
Под пользователем Supervisor запускаем БП
Ставим задачу на user1
Заходим под пользователем user1 и выполняем Task2, по БП у нас появляется Task3 с автором БП, который соответствует инициатору БП
Файлы скриптов и тестовый БП, находятся в прикрепленных файлах
Замечание:
В данном примере, для того что бы в 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')); }