Есть БП построенный по задачам
![1](/system/files/27-03-2012_15-12-30.jpg)
Если мы в конструкторе БП, поставим ответственного по Task2 пользователя user1
![2](/system/files/27-03-2012_15-12-58.jpg)
Запустим БП под пользователем (Supervisor) выполним Task1, поставим задачу Task2 пользователю user1
Зайдем под пользователем user1 выполним задачу Task2 (поле автор в Task2 будет равно Supervisor), после чего БП пойдет дальше и создаст задачу Task3, в стандартной коробочной логике автор в Task3 будет user1
Задача В поле автор задач созданных по БП необходимо установить пользователя который инициировал БП (в данном примере это Supervisor).
Решение:
По сути нам необходимо запомнить инициатора БП, для этого создадим параметр
![3](/system/files/27-03-2012_14-20-13.jpg)
![4](/system/files/27-03-2012_14-20-57.jpg)
и будем инициализировать значение WFIniciator значением текущего пользователя на старте БП
![5](/system/files/27-03-2012_14-19-39.jpg)
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
![7](/system/files/27-03-2012_14-55-11.jpg)
![8](/system/files/27-03-2012_14-56-23.jpg)
![9](/system/files/27-03-2012_14-56-10.jpg)
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);
![12](/system/files/27-03-2012_15-00-27.jpg)
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;
}
После чего работа тестового процесса
![1](/system/files/27-03-2012_15-12-30.jpg)
будет следующая:
Под пользователем Supervisor запускаем БП
![15](/system/files/27-03-2012_15-03-58.jpg)
Ставим задачу на user1
![16](/system/files/27-03-2012_15-04-23.jpg)
Заходим под пользователем user1 и выполняем Task2, по БП у нас появляется Task3 с автором БП, который соответствует инициатору БП
![17](/system/files/27-03-2012_15-05-46.jpg)
Файлы скриптов и тестовый БП, находятся в прикрепленных файлах