Перейти к содержанию

Кнопка «Принять в работу» для задачи. Настройка на C#

Введение

Здесь представлен пример С#-скрипта для кнопки, нажав которую, пользователь может принять задачу в работу. При этом в записи, связанной с задачей, будет проставлена дата принятия задачи в работу.

Скрипт запускается по нажатию кнопки на форме пользовательской задачи.

Прикладная задача

Имеется бизнес-процесс, в котором пользовательская задача назначается сразу на весь отдел.

Требуется дать сотрудникам отдела возможность самостоятельно брать задачу в работу.

При нажатии кнопки «Принять в работу» должны выполняться следующие действия:

  • исполнителем задачи становится пользователь, нажавший кнопку;
  • в атрибут «Дата принятия в работу» записывается текущая дата и время.

Дату принятия в работу, например, можно использовать в бизнес-отчётах и для отслеживания хода работ.

Отслеживание дат принятия различных задач

Если требуется отслеживать дату принятия нескольких задач, создайте для каждой задачи отдельный атрибут, хранящий дату принятия задачи в работу, и устанавливайте его значение отдельно для данной задачи.

Если использовать один и тот же атрибут даты принятия в работу для разных задач, в них будет отображаться некорректная информация: дата последнего нажатия кнопки «Принять в работу».

Настройка скрипта

Логика работы скрипта

Представленный здесь скрипт работает следующим образом:

  1. Получает ID текущей пользовательской задачи из контекста операции кнопки.
  2. Получает ID текущего пользователя, нажавшего кнопку.
  3. Назначает задачу текущему пользователю.
  4. Получает ID записи, связанной с задачей.
  5. Записывает текущую дату и время в атрибут «Дата принятия в работу» в запись, связанную с задачей.
  6. Возвращает результат выполнения операции с сообщением для пользователя.
  1. В шаблоне записи, связанном с шаблоном процесса, создайте атрибут типа «Дата и время»:

    • Название: Дата принятия в работу
    • Системное имя: ДатаПринятия
  2. На диаграмме процесса создайте пользовательскую задачу и выберите её исполнителей (например, укажите группу, содержащую всех сотрудников отдела).

  3. В шаблоне процесса создайте кнопку со следующими свойствами:

    • Отображаемое название: Принять в работу
    • Контекст операции: пользовательская задача
    • Операция: C#-скрипт
    • Результат выполнения: обновить данные
  4. На вкладке «Скрипт» введите следующий код:

    Подстановка фактических имён и значений

    Замените в коде системное имя ДатаПринятия на фактическое системное имя атрибута «Дата принятия в работу» в вашем шаблоне записи.

    Скрипт для принятия задачи в работу
    // Импорт базовых типов и функций .NET Framework для работы с данными. 
    using System;
    // Импорт классов коллекций и словарей для хранения данных.
    using System.Collections.Generic;
    // Импорт классов для работы с сущностями данных.
    using Comindware.Data.Entity;
    // Импорт классов для обработки нажатий кнопок
    // и возврата результатов выполнения скрипта.
    using Comindware.TeamNetwork.Api.Data.UserCommands;
    // Импорт основных классов для работы с данными в {{ productName }}.
    using Comindware.TeamNetwork.Api.Data;

    class Script
    {
    // userCommandContext содержит данные контекста при нажатии кнопки.
    public static UserCommandResult Main(UserCommandContext userCommandContext, Comindware.Entities entities)
    {
    // Получаем ID текущего пользователя, нажавшего кнопку.
    var currentUser = userCommandContext.CurrentUserId;
    // Получаем ID текущей пользовательской задачи из контекста операции кнопки.
    var taskId = userCommandContext.ObjectIds[0].ToString();
    // Назначаем задачу текущему пользователю.
    Api.TeamNetwork.UserTaskService.Reassign(taskId, currentUser);

    // Получаем ID записи, связанной с пользовательской задачей.
    var businessObjectId = Api.TeamNetwork.UserTaskService.GetBusinessObject(taskId);
    // Получаем текущую дату и время для записи в атрибут.
    var currentDateTime = DateTime.Now.ToString();
    // Записываем текущую дату и время в атрибут с системным именем ДатаПринятия.
    Api.TeamNetwork.ObjectService.EditWithAlias(businessObjectId, new Dictionary<string,object>{{"ДатаПринятия", currentDateTime}});
    // Формируем результат выполнения скрипта с сообщением для пользователя.
    var result = new UserCommandResult
    {
    Success = true,
    Commited = true,
    Messages = new[]
    {
    new UserCommandMessage
    {
    Severity = SeverityLevel.Normal,
    // Пример: Задача (ID 12345) принята в работу 15.01.2024 14:30:00
    Text = "Задача (ID " + taskId + ") принята в работу " + currentDateTime
    }
    }
    };
    return result;
    }
    }
  5. Сохраните кнопку.

  6. Поместите кнопку «Принять в работу» на форму пользовательской задачи.

Тестирование

  1. Запустите процесс с пользовательской задачей, назначенной на отдел.
  2. Откройте пользовательскую задачу от имени одного из сотрудников отдела.
  3. Нажмите кнопку «Принять в работу».
  4. Убедитесь, что:

    • исполнителем задачи стал пользователь, нажавший кнопку (задача должна появиться у него на странице «Мои задачи»);
    • в атрибуте «Дата принятия в работу» записаны дата и время нажатия кнопки «Принять в работу»;
    • отобразилось сообщение об успешном выполнении операции с указанием ID задачи и даты принятия в работу.
  5. Проверьте, что другие сотрудники отдела больше не видят эту задачу в своём списке задач.

К началу