try {
// Получаем комментарий из контекста процессаconst comment = Context.data.comment;
// Получаем ID задачи из контекста процессаconst taskUUID = Context.data.taskid;
let task = await System.processes._searchTasks().where(x => x.__id.eq(taskUUID)).first();
// Если задача не найдена, то выводим ошибкуif (!task) {
thrownewError('Задача не найдена');
}
// Получаем текущую датуlet newDueDate = new Datetime();
// Прибавляем один день
newDueDate = newDueDate.addDate(0, 0, 1);
await task.changeDueDate(newDueDate, comment);
} catch (error) {
// Процесс уже завершен, можно обработать исключение
}
Пример поиска задачи и создания напоминания для неё:
// Получаем объект задачиlet task = await System.processes._searchTasks().where(x => x.__id.eq(taskUUID)).first();
// Если объект задачи не найден, то заканчиваем выполнение скриптаif (!task) {
return;
}
// Получаем текущего пользователяconst user = await System.users.getCurrentUser();
// Получаем текущую дату и прибавляем один день// Временная зона берётся из поля `System.timezones.current`let dateReminder = new Datetime();
dateReminder = dateReminder.add(new Duration(1, 'days'))
// Создаём напоминание о задаче на следующий деньawait task.createReminder(dateReminder, user);
try {
// Получаем объект задачиlet task = await System.processes._searchTasks().where(x => x.__id.eq(taskUUID)).first();
// Если объект задачи не найден, то заканчиваем выполнение скриптаif (!task) {
return;
}
// Получаем выходы для задачиconst exits = await task.getExits();
// Завершаем задачу// Передаем идентификатор выхода и данные формыawait task.submitTask(exits[0].id, {comment: 'Task completed'});
} catch (e) {
// Процесс уже завершен, можно обработать исключение
}
Переназначение задачи на одного или нескольких новых исполнителей.
Причина переназначения записывается в ленту задачи.
Задачи ознакомления/cогласования и системные будут переназначены на первого пользователя, указанного в наборе новых исполнителей.
Если экземпляр процесса завершен, или задача уже закрыта, то исполнение прерывается исключением.
В первом примере происходит переназначение задачи по ID из контекста на нового исполнителя в единственном числе.
asyncfunctionreassign(): Promise<void> {
// Идентификатор задачи для переназначения берем из контекста процессаconst taskID = Context.data.TaskForReassignUUID;
// Ищем задачуconst task = await Application.processes._searchTasks().where(x => x.__id.eq(taskID)).first();
// Пользователя получаем из контекстаconst user = Context.data.NewPerformer;
const comment = "Замена исполнителя";
await task.reassign(user, comment);
}
Рассмотрим ещё один пример.
В этом примере происходит переназначение задачи по ID из контекста на пользователей из группы.
asyncfunctionreassignMany(): Promise<void> {
// Идентификатор задачи для переназначения берем из контекста процессаconst taskID = Context.data.TaskForReassignUUID;
// Ищем задачуconst task = await Application.processes._searchTasks().where(x => x.__id.eq(taskID)).first();
// Идентификатор группы пользователя получаем из контекстаconst userGroupID = Context.data.groupUUID;
// Ищем группу пользователейconst userGroup = await System.userGroups.search().where(x => x.__id.eq(userGroupID)).first();
const newPerformers = <UserItemRef[]>await userGroup.users();
const comment = "Задаем на нескольких исполнителей";
await task.reassign(newPerformers, comment);
}
Важно: принцип закрытия задачи отличается в разных ситуациях:
если задача создана в другом экземпляре процесса или скрипт с методом используется вне процесса,
метод ожидает фактического завершения задачи. Ошибки закрытия задачи учитываются при выполнении скрипта;
если задача создана в текущем экземпляре процесса, метод не ждёт фактического завершения задачи.
Сначала выполняется скрипт и дальнейшие автоматические шаги процесса. После этого — фактическое закрытие задачи.
Однако в случае ошибок задача может остаться незавершённой.
Поиск и завершение задачи:
try {
// Получаем объект задачиlet task = await System.processes._searchTasks().where(x => x.__id.eq(taskUUID)).first();
// Получаем выходы для задачиconst exits = await task.getExits();
// Передаем идентификатор выхода и данные формыawait task.submitTask(exits[0].id, {comment: 'Task completed'});
} catch (e) {
// Процесс уже завершен, можно обработать исключение
}
Объект задачи процесса
Type parameters
Context: ProcessContext
I: Item<ItemData>
I: Item<ItemData>
Hierarchy
Properties
Readonly code
Код приложения цели ссылки (код приложения).
Readonly data
Значения полей объекта.
Readonly fields
Описание полей объекта.
Readonly id
Идентификатор цели ссылки.
Readonly namespace
Пространство имён цели ссылки (код раздела приложения).
Methods
changeDueDate
Изменение времени выполнения задачи.
Установка новой даты выполнения задачи:
try { // Получаем комментарий из контекста процесса const comment = Context.data.comment; // Получаем ID задачи из контекста процесса const taskUUID = Context.data.taskid; let task = await System.processes._searchTasks().where(x => x.__id.eq(taskUUID)).first(); // Если задача не найдена, то выводим ошибку if (!task) { throw new Error('Задача не найдена'); } // Получаем текущую дату let newDueDate = new Datetime(); // Прибавляем один день newDueDate = newDueDate.addDate(0, 0, 1); await task.changeDueDate(newDueDate, comment); } catch (error) { // Процесс уже завершен, можно обработать исключение }Parameters
dueDate: TDatetime
Optional comment: undefined | string
Returns Promise<void>
createReminder
Создание напоминания.
Пример поиска задачи и создания напоминания для неё:
// Получаем объект задачи let task = await System.processes._searchTasks().where(x => x.__id.eq(taskUUID)).first(); // Если объект задачи не найден, то заканчиваем выполнение скрипта if (!task) { return; } // Получаем текущего пользователя const user = await System.users.getCurrentUser(); // Получаем текущую дату и прибавляем один день // Временная зона берётся из поля `System.timezones.current` let dateReminder = new Datetime(); dateReminder = dateReminder.add(new Duration(1, 'days')) // Создаём напоминание о задаче на следующий день await task.createReminder(dateReminder, user);Parameters
date: TDatetime
user: UserItemRef
Returns Promise<ReminderItem>
Напоминание.
fetch
Запрос полных данных объекта-ссылки.
Returns Promise<ProcessTaskItem<Context>>
getExits
Получение вариантов выхода по задаче.
Поиск и завершение задачи:
try { // Получаем объект задачи let task = await System.processes._searchTasks().where(x => x.__id.eq(taskUUID)).first(); // Если объект задачи не найден, то заканчиваем выполнение скрипта if (!task) { return; } // Получаем выходы для задачи const exits = await task.getExits(); // Завершаем задачу // Передаем идентификатор выхода и данные формы await task.submitTask(exits[0].id, {comment: 'Task completed'}); } catch (e) { // Процесс уже завершен, можно обработать исключение }Returns Promise<TaskItemExit[]>
getPerformers
Метод получает список исполнителей задачи.
const instance = await task.getPerformers();Returns Promise<UserItem[]>
Пользователи, выполняющие задачу.
getProcessInstance
Метод получает объект процесса.
const instance = await task.getProcessInstance();Returns Promise<ProcessInstanceItem<Context>>
Процесс, в рамках которого запущена задача.
normalize
Удаление дублирующихся данных в массивах.
Выполнить удаление дубликатов в полях, в которых хранятся массивы ссылок на объекты системы (пользователи, файлы, элементы приложений, документы).
Этот метод, например, можно вызвать после массового изменения данных в объекте.
const app1 = await Context.data.app1.fetch(); const app2 = await Context.data.app2.fetch(); app1.data.executors.push(app2.data.executors); app1.normalize(); // Далее перебираем элементы нового массива app1.data.executors.forEach( ... );Returns void
reassign
Переназначение задачи на одного или нескольких новых исполнителей.
Причина переназначения записывается в ленту задачи. Задачи ознакомления/cогласования и системные будут переназначены на первого пользователя, указанного в наборе новых исполнителей. Если экземпляр процесса завершен, или задача уже закрыта, то исполнение прерывается исключением.
В первом примере происходит переназначение задачи по ID из контекста на нового исполнителя в единственном числе.
async function reassign(): Promise<void> { // Идентификатор задачи для переназначения берем из контекста процесса const taskID = Context.data.TaskForReassignUUID; // Ищем задачу const task = await Application.processes._searchTasks().where(x => x.__id.eq(taskID)).first(); // Пользователя получаем из контекста const user = Context.data.NewPerformer; const comment = "Замена исполнителя"; await task.reassign(user, comment); }Рассмотрим ещё один пример.
В этом примере происходит переназначение задачи по ID из контекста на пользователей из группы.
async function reassignMany(): Promise<void> { // Идентификатор задачи для переназначения берем из контекста процесса const taskID = Context.data.TaskForReassignUUID; // Ищем задачу const task = await Application.processes._searchTasks().where(x => x.__id.eq(taskID)).first(); // Идентификатор группы пользователя получаем из контекста const userGroupID = Context.data.groupUUID; // Ищем группу пользователей const userGroup = await System.userGroups.search().where(x => x.__id.eq(userGroupID)).first(); const newPerformers = <UserItemRef[]>await userGroup.users(); const comment = "Задаем на нескольких исполнителей"; await task.reassign(newPerformers, comment); }Parameters
user: UserItemRef | UserItemRef[]
Optional comment: undefined | string
Returns Promise<void>
submitTask
Выполнение задачи.
Важно: принцип закрытия задачи отличается в разных ситуациях:
если задача создана в другом экземпляре процесса или скрипт с методом используется вне процесса, метод ожидает фактического завершения задачи. Ошибки закрытия задачи учитываются при выполнении скрипта;
если задача создана в текущем экземпляре процесса, метод не ждёт фактического завершения задачи. Сначала выполняется скрипт и дальнейшие автоматические шаги процесса. После этого — фактическое закрытие задачи. Однако в случае ошибок задача может остаться незавершённой.
Поиск и завершение задачи:
try { // Получаем объект задачи let task = await System.processes._searchTasks().where(x => x.__id.eq(taskUUID)).first(); // Получаем выходы для задачи const exits = await task.getExits(); // Передаем идентификатор выхода и данные формы await task.submitTask(exits[0].id, {comment: 'Task completed'}); } catch (e) { // Процесс уже завершен, можно обработать исключение }Parameters
exitID: string
Optional data: Context
Returns Promise<void>
Ваш отзыв успешно отправлен!
Спасибо за обратную связь.