На самом деле, для того, чтобы запустить любой рабочий процесс из кода, надо сделать две простые вещи:
во-первых, подключить пространство имен 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;
}
}
}
Комментариев нет:
Отправить комментарий