понедельник, 21 июля 2014 г.

Запуск рабочего процесса из кода

На самом деле, для того, чтобы запустить любой рабочий процесс из кода, надо сделать две простые вещи:

во-первых, подключить пространство имен Microsoft.SharePoint.Workflow,
а во-вторых использовать метод SPWorkflowManager.StartWorkflow. Существует несколько перегрузок этого метода, удобных в разных специфических ситуациях (например, если вам нужно только создать объект рабочего процесса, а запустить его на выполнение позднее), самый же простой и функциональный вариант - вот этот:

public SPWorkflow StartWorkflow(
 SPListItem item,
 SPWorkflowAssociation association,
 string eventData,
 bool isAutoStart
)

Вместо объяснения что значат все эти параметры и как из использовать  (см. MSDN ;)) я предлагаю вам взглянуть на вот такую небольшую функцию, которую я написал для запуска рабочих процессов. В комментариях небольшие пояснения, а так, в общем-то, функция вполне self-explaining.


        public SPWorkflow RunWorkflow(string workflowName, string listName, int itemId, string activationData = "<root/>")
        {
            using (SPSite site = new SPSite(siteUrl))
            {
                using (SPWeb web = site.OpenWeb())
                {
                    //получаем элемент списка для которого нужно выполнить рабочий процесс
                    SPList itemsList = web.Lists.TryGetList(listName);
                    SPListItem item = itemsList.GetItemById(itemId);
                    //создаем объект ассоциации шаблона рабочего процесса
                    SPWorkflowAssociation workflowAssociation = web.WorkflowAssociations.GetAssociationByName(workflowName, System.Globalization.CultureInfo.InvariantCulture);
                    if (workflowAssociation != null)
                    {
                        //ну и, собственно, запускаем рабочий процесс. StartWorkflow возвращает ссылку на экземпляр рабочего процесса
                        //через которую можно с ним в дальнейшем взаимодействовать, например, проверять состояние.
                        return site.WorkflowManager.StartWorkflow(item, workflowAssociation, activationData, true);
                    }
                    else return null;
                }
            }
        }

Комментариев нет:

Отправить комментарий