Изменение наименования задачи по бизнес-процессу в сценарии. Задание шаблона для наименования задач

Для экземпляров процесса есть возможность установить шаблон названия (с помощью кнопки Наименование экземпляров в верхнем меню в режиме редактирования бизнес-процесса). Таким образом, название экземпляра может устанавливаться автоматически, и, что самое главное, формироваться в зависимости от значений контекстных переменных и внутренних данных текущего экземпляра процесса. Иногда бывает необходимо реализовать аналогичную возможность и для наименования задач бизнес-процесса, но в интерфейсе Дизайнера нет возможности установить шаблон названия в зависимости от значений переменных, можно прописать только статичное текстовое значение в качестве названия задачи. Такую задачу можно решить с помощью сценариев в бизнес-процессе: перегрузив метод создания задачи и прописав в нем новое наименование, можно добиться того, что задача создается с тем именем, которое задано в сценарии, а не с тем, которое указано в настройках операции Пользовательская задача на графической модели процесса. Пример сценария:

//в параметрах метода вместо P_Process укажите имя класса Вашего процесса
//его можно посмотреть на вкладке "Настройки" окна редактирования процесса
public override void OnTaskCreate(ITaskBase task, P_Process context)
{
  //выбираем только нужную задачу по имени операции
  if (task.Subject == "Задача 1")
  {
    //задаем новое наименование
    task.Subject = "Новое наименование задачи";
  }
}

"Задача 1" – это название задачи, указанное в настройках операции Пользовательская задача на графической модели процесса. Оно должно быть уникально в пределах процесса, чтобы сценарий работал правильно. Вместо фразы "Новое наименование задачи" Вы можете написать нужное наименование, в том числе и задать шаблон, обращаясь к контекстным переменным, как показано ниже:

//в параметрах метода вместо P_Process укажите имя класса Вашего процесса
//его можно посмотреть на вкладке "Настройки" окна редактирования процесса
public override void OnTaskCreate(ITaskBase task, P_Process context)
{
  //выбираем только нужную задачу по имени операции
  if (task.Subject == "Задача 1")
  {
    //задаем новое наименование
    task.Subject = context.Naimenovanie + " в процессе " + context.WorkflowInstance.Name;
  }
}

где context.Naimenovanie – это строковая контекстная переменная, в ней хранится название задачи, которое может задаваться пользователем/инициатором на более ранних этапах процесса, а context.WorkflowInstance.Name – наименование экземпляра процесса.