Как стать автором
Обновить

Как создать ассоциацию workflow и списка программно

Время на прочтение3 мин
Количество просмотров1.8K
Автор оригинала: David HOCQUET

Цель поста



Данный пост призван продемонстрировать как выполнять ассоциацию workflow и списка программно. Workflow может быть стандартным, либо созданным в Visual Studio. Что касается workflow, он будет использовать стандартные списки задач и список истории workflow.

Примеры



Договоримся, что переменная web – это объект SPWeb, содержащий список, который нам необходим для ассоциации с workflow.

1. Объявим переменные, которые будем использовать



  1. SPList myList = null;                              // Лист для ассоциации с workflow
  2. string myListName = null;                          // название нашего спика
  3. SPList historyList = null;                         // список истории workflow
  4. SPList taskList = null;                             // список задач workflow
  5. string workflowTemplateGuid = null;                 // Guid шаблона worklfow
  6. SPWorkflowTemplate workflowTemplate = null;         // шаблон Workflow
  7. SPWorkflowAssociation workflowAssociation = null// ассоциация с workflow
  8. string workflowAssocName = null;                    // имя ассоциации с workflow

* This source code was highlighted with Source Code Highlighter.


2. Инициализация



Убедитесь, что используете internal name списка. И установите имя ассоциации с workflow, он может соответствовать наименованию соответствующего workflow.

  1. myListName = "My list name";
  2. workflowAssocName = "My Workflow";

* This source code was highlighted with Source Code Highlighter.


3. Получить шаблон workflow



Если вы хотите использовать кастомизированный workflow и знаете GUID его шаблона, используйте его.

  1. workflowTemplateGuid = "BAD855B1-32CE-4bf1-A29E-463678304E1A";
  2. workflowTemplate = web.WorkflowTemplates[new Guid(workflowTemplateGuid)];

* This source code was highlighted with Source Code Highlighter.

Так же вы можете получить GUID шаблона, используя метод GetTemplateByName.

  1. // Пытаемся получить список истории workflow
  2. try
  3. {
  4.      historyList = web.Lists["Workflow History"];
  5. }
  6. catch (ArgumentException exc)
  7. {
  8.      // Создаем список истории workflow
  9.      Guid listGuid = web.Lists.Add("Workflow History", "", SPListTemplateType.WorkflowHistory);
  10.      historyList = web.Lists[listGuid];
  11.      historyList.Hidden = true;
  12.      historyList.Update();
  13. }

* This source code was highlighted with Source Code Highlighter.


4. Получить, либо создать списки истории и задач workflow.



Список истории, используемый workflow, должен быть унаследован от шаблона списка WorkflowHistory. В большинстве случаев вам не понадобиться его создавать.

  1. workflowTemplate = web.WorkflowTemplates.GetTemplateByName(        "Template name",        System.Globalization.CultureInfo.CurrentCulture);

* This source code was highlighted with Source Code Highlighter.

Список задач – это обычный список, унаследованный от шаблона списка задач. Если вы хотите создать специфичный список задач для workflow, не стоит называть его “Задачи” (“Tasks”). R примеру мы можем назвать его “Задачи рабочего процесса” (“Workflow tasks”).

  1. // Пытаемся получить список задач для workflow
  2. try
  3. {
  4.      taskList = web.Lists["Workflow Tasks"];
  5. }
  6. catch (ArgumentException exc)
  7. {
  8.      // Создаём список задач для workflow
  9.      Guid listGuid = web.Lists.Add("Workflow Tasks", "", SPListTemplateType.Tasks);
  10.      taskList = web.Lists[listGuid];
  11.      taskList.Hidden = true;
  12.      taskList.Update();
  13. }

* This source code was highlighted with Source Code Highlighter.


5. Создаем ассоциацию с workflow, конфигурируем её и привязываем к списку.



  1. // Включаем небезопасные обновления для узла (web)
  2. web.AllowUnsafeUpdates = true;
  3. try
  4. {
  5.         // Создаем ассоциацию workflow
  6.         workflowAssociation = SPWorkflowAssociation.CreateListAssociation(                workflowTemplate,                workflowAssocName, taskList, historyList);
  7.  
  8.         // Устанавливаем параметры workflow
  9.         workflowAssociation.AllowManual = false;
  10.         workflowAssociation.AutoStartCreate = true;
  11.         workflowAssociation.AutoStartChange = false;
  12.  
  13.         // Связываем workflow со списком
  14.         myList.AddWorkflowAssociation(workflowAssociation);
  15.  
  16.         // Активируем ассоциацию
  17.         workflowAssociation.Enabled = true;
  18. }
  19. finally
  20. {
  21.         web.AllowUnsafeUpdates = false;
  22. }

* This source code was highlighted with Source Code Highlighter.
Теги:
Хабы:
-1
Комментарии1

Публикации