2014-12-02 27 views
0

我試圖以編程方式啓動SharePoint 2013工作流程。工作流程需要五個參數,將它們放入電子郵件正文中並通過電子郵件發送給我。當我轉到SharePoint網站時,我可以手動啓動此工作流程,所以我知道工作流程是正確的。當我嘗試使用SharePoint API來啓動工作流程時,我沒有收到任何錯誤,我收到一個空的Guid,並且工作流程無法運行。爲什麼StartWorkflow()在C#中啓動我的工作流?

public Guid Add(Project project) 
{ 
    var result = Guid.Empty; 
    var siteUri = new Uri(ConfigurationManager.AppSettings["SharePoint.Site"]); 
    var workflowName = ConfigurationManager.AppSettings["SharePoint.WorkflowName"]; 
    using (var clientContext = TokenHelper.GetS2SClientContextWithWindowsIdentity(siteUri, null)) 
    { 
     var workflowServiceManager = new WorkflowServicesManager(clientContext, clientContext.Web); 
     var workflowSubscriptionService = workflowServiceManager.GetWorkflowSubscriptionService(); 
     var subscriptions = workflowSubscriptionService.EnumerateSubscriptions(); 
     clientContext.Load(subscriptions, subs => subs.Where(sub => sub.Name == workflowName)); 
     clientContext.ExecuteQuery(); 
     foreach (var subscription in subscriptions) 
     { 
      var instanceService = workflowServiceManager.GetWorkflowInstanceService(); 
      var initiationData = new Dictionary<string, object> 
      { 
       {"pProjectName", project.Name}, 
       {"pDivision", _divisionData.GetDivisionName(project.DivisionId ?? Guid.Empty) }, 
       {"pOperatingGroup", "****TODO: Operating Group****"}, 
       {"pClientName", _clientData.GetClientName(project.ClientId ?? Guid.Empty) }, 
       {"pSiteUrl", "****TODO: Site URL****" } 
      }; 
      var startResult = instanceService.StartWorkflow(subscription, initiationData); 
      result = startResult.Value; 
     } 
    } 
    return result; 
} 
+0

只是胡亂猜測:你檢查Windows事件日誌中的相關條目? – 2014-12-02 20:01:25

+1

感謝您的想法,沒有相關的事件。 – Steve 2014-12-02 20:07:12

回答

0
string subscriptionID = "WFListSubscriptionID of your wf";//it is a guid 
int itemID = "Item.ID, Id of a item that you start wf for"; 
Guid workflowSubscriptionIdGuid = new Guid(subscriptionID); 
var workflowServiceManager = new WorkflowServicesManager(item.Web); 
var workflowSubscriptionService = workflowServiceManager.GetWorkflowSubscriptionService(); 
var workflowSubscription = workflowSubscriptionService.GetSubscription(workflowSubscriptionIdGuid); 
var inputParameters = new Dictionary<string, object>(); 
workflowServiceManager.GetWorkflowInstanceService().StartWorkflowOnListItem(workflowSubscription, itemID, inputParameters); 
相關問題