Цель поста
Данный пост призван продемонстрировать как выполнять ассоциацию workflow и списка программно. Workflow может быть стандартным, либо созданным в Visual Studio. Что касается workflow, он будет использовать стандартные списки задач и список истории workflow.
Примеры
Договоримся, что переменная web – это объект SPWeb, содержащий список, который нам необходим для ассоциации с workflow.
1. Объявим переменные, которые будем использовать
- SPList myList = null; // Лист для ассоциации с workflow
- string myListName = null; // название нашего спика
- SPList historyList = null; // список истории workflow
- SPList taskList = null; // список задач workflow
- string workflowTemplateGuid = null; // Guid шаблона worklfow
- SPWorkflowTemplate workflowTemplate = null; // шаблон Workflow
- SPWorkflowAssociation workflowAssociation = null; // ассоциация с workflow
- string workflowAssocName = null; // имя ассоциации с workflow
* This source code was highlighted with Source Code Highlighter.
2. Инициализация
Убедитесь, что используете internal name списка. И установите имя ассоциации с workflow, он может соответствовать наименованию соответствующего workflow.
- myListName = "My list name";
- workflowAssocName = "My Workflow";
* This source code was highlighted with Source Code Highlighter.
3. Получить шаблон workflow
Если вы хотите использовать кастомизированный workflow и знаете GUID его шаблона, используйте его.
- workflowTemplateGuid = "BAD855B1-32CE-4bf1-A29E-463678304E1A";
- workflowTemplate = web.WorkflowTemplates[new Guid(workflowTemplateGuid)];
* This source code was highlighted with Source Code Highlighter.
Так же вы можете получить GUID шаблона, используя метод GetTemplateByName.
- // Пытаемся получить список истории workflow
- try
- {
- historyList = web.Lists["Workflow History"];
- }
- catch (ArgumentException exc)
- {
- // Создаем список истории workflow
- Guid listGuid = web.Lists.Add("Workflow History", "", SPListTemplateType.WorkflowHistory);
- historyList = web.Lists[listGuid];
- historyList.Hidden = true;
- historyList.Update();
- }
* This source code was highlighted with Source Code Highlighter.
4. Получить, либо создать списки истории и задач workflow.
Список истории, используемый workflow, должен быть унаследован от шаблона списка WorkflowHistory. В большинстве случаев вам не понадобиться его создавать.
- workflowTemplate = web.WorkflowTemplates.GetTemplateByName( "Template name", System.Globalization.CultureInfo.CurrentCulture);
* This source code was highlighted with Source Code Highlighter.
Список задач – это обычный список, унаследованный от шаблона списка задач. Если вы хотите создать специфичный список задач для workflow, не стоит называть его “Задачи” (“Tasks”). R примеру мы можем назвать его “Задачи рабочего процесса” (“Workflow tasks”).
- // Пытаемся получить список задач для workflow
- try
- {
- taskList = web.Lists["Workflow Tasks"];
- }
- catch (ArgumentException exc)
- {
- // Создаём список задач для workflow
- Guid listGuid = web.Lists.Add("Workflow Tasks", "", SPListTemplateType.Tasks);
- taskList = web.Lists[listGuid];
- taskList.Hidden = true;
- taskList.Update();
- }
* This source code was highlighted with Source Code Highlighter.
5. Создаем ассоциацию с workflow, конфигурируем её и привязываем к списку.
- // Включаем небезопасные обновления для узла (web)
- web.AllowUnsafeUpdates = true;
- try
- {
- // Создаем ассоциацию workflow
- workflowAssociation = SPWorkflowAssociation.CreateListAssociation( workflowTemplate, workflowAssocName, taskList, historyList);
-
- // Устанавливаем параметры workflow
- workflowAssociation.AllowManual = false;
- workflowAssociation.AutoStartCreate = true;
- workflowAssociation.AutoStartChange = false;
-
- // Связываем workflow со списком
- myList.AddWorkflowAssociation(workflowAssociation);
-
- // Активируем ассоциацию
- workflowAssociation.Enabled = true;
- }
- finally
- {
- web.AllowUnsafeUpdates = false;
- }
* This source code was highlighted with Source Code Highlighter.