Как устанавливать автора для задач в БП?

Задача следующая:
БП представляет собой цепочку задач, необходимо, чтобы авторами некоторых задач были люди, не от имени которых БП запущен.
Попытка реализации следующая:

function Action4OnBeforeExecute(ActionItem) {
        WFSetParamValue(ActionItem.ParentItems.ParentDiagram, 'AuthorID','{0BBDFB2E-9A07-49E9-B35E-33C275E82C7D}');
}

function wa_TaskActionOnExecute(WorkflowAction, ActionItem, ItemDataset, IsComplete, ResultLinkCodes) {

//...
        var AuthorID = WFGetParamValue(ActionItem, 'AuthorID');
        var TaskDataset = WFGetLikedItemDatasetEx('ds_Task', ItemID, new Array('ID', 'AccountID', 'ContactID', 'OpportunityID', 'StatusIsFinish', 'ResultID', 'AuthorID'), true);
//...
        if (!IsEmptyValue(AuthorID)) {
                DefaultValues.Add('AuthorID', AuthorID); }
//...
        var IdWin = ShowEditWindowEx('wnd_TaskEdit', Attributes, DefaultValues);

}

Задача (Action4) все равно создается с автором = пользователю, от имени которого запущен БП.

Версия 3.2.0.45.

Нравится

8 комментариев

По-моему, в задачах под псевдонимом AuthorID используется поле CreatedByID, которое относится к спецполям, а они заполняются ядром Террасофт при вставке и изменении записи (CreatedOn, CreatedByID, ModifiedOn, ModifiedByID).
--------------------------------------------
Лабитек
Центр разработки приложений

То есть в скриптах к БП изменить автора нельзя?...

И даже в обычных скриптах не получится. Как говорил Валерий, значение данного поля берется с CreatedByID, которое устанавливается ядром.

Но никто Вам не запрещает сделать свое поле "Автор". И определить его логику заполнения в скриптах и БП.

Спасибо.
Но, задание автора для конкретных задач обусловлено тем, что эти задачи выполняют сотрудники разных отделов => у них разные начальники, которые должны контролировать выполнение (т.е. напоминания, "Для контроля" и т.д.). Поэтому важно использование стандартных полей, чтобы использовать все возможности....

Сам сталкивался с подобным.
Как решал: дополнительное поле "Контролирующий" + изменение функционала закладок "для контроля" + напоминания.

Я полагаю, что нужно завести идею.
Так как автор не всегда контролирует выполнение задачи, которую кому-нибуть поставил.

Такое решение нам не подходит, поскольку придется много переписывать... Это необходимо для задач, которые создаются в ходе БП, но также весь функционал системы по напоминаниям, "для контроля" и тд дорабатывался (раз) и активно используется в стандартных ситуациях (при обычной постановке задачи) (два).
Спасибо.

Вот как я сделал - добавил функцию CheckAuthorID, которая заменяем автора и включил ее в следующие обработчики событий датасета в ds_TaskScript
И задача теперь создается от имени конкретного человека

function SelfOnDatasetBeforePost(Dataset) {
	ds_TaskScript.IsAppend = (Dataset.State == dstInsert);
	if (ds_TaskScript.IsAppend) {
		Dataset.Values('AuthorID') = Connector.CurrentUser.ContactID;
	    CheckAuthorID(Dataset);
	}
}

и

function FillTaskDefaultValues(Dataset) {
	Dataset.DisableEvents();
	var DefaultTaskDateTime = GetDefaultTaskDateTime();
	Dataset.ValAsDateTime('StartDate') =
		DefaultTaskDateTime.StartDate.getVarDate();
	Dataset.ValAsDateTime('DueDate') =
		DefaultTaskDateTime.DueDate.getVarDate();
	UpdateDuration(Dataset);
	Dataset.Values('AuthorID') = Connector.CurrentUser.ContactID;
 
   CheckAuthorID(Dataset);
	Dataset.Values('OwnerID') = Dataset.Values('AuthorID');
 
 
	var TaskDefs = GetTaskDefs();
	Dataset.Values('StatusID') = TaskDefs.NotStartedStatusID;
	Dataset.Values('TypeID') = TaskDefs.TypeID;
	Dataset.Values('PriorityID') = TaskDefs.PriorityID;
	Dataset.ValAsBool('ShowInScheduler') = true;
	Dataset.EnableEvents();
}

Евгений, большое спасибо.

Показать все комментарии