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