2017-05-25 64 views
0

處的信息看:創建的Project Server 2016中的工作流程CSOM

https://dev.office.com/sharepoint/docs/general-development/working-with-the-sharepoint-workflow-services-client-side-object-model

https://sharepoint.stackexchange.com/questions/159432/programmatically-create-workflow-with-javascript-jsom-and-sp-workflowservices-w

我想創建的Project Server 2016網站工作流 - 這意味着它的平臺鍵入必須是SharePoint 2013工作流 - 項目服務器

像在stackexchan上的問題ge,首先我從spd 2013創建了示例工作流程,保存爲模板並將生成的xaml保存爲我的xaml字符串。

ProjectContext psContext = new ProjectContext(Strings.PWA_Url); 
var web = psContext.Web; 
var siteCollection = psContext.Site; 
var tasksList = web.Lists.GetByTitle("Project Server Workflow Tasks"); 
var historyList = web.Lists.GetByTitle("Project Server Workflow History"); 
string xaml = "<Activity mc:Ignorable="mwaw" x:Class="Test.MTW" xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities" xmlns:local="clr-namespace:Microsoft.Office.Project.Server.WorkflowActivities" xmlns:local1="clr-namespace:Microsoft.SharePoint.WorkflowServices.Activities" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mwaw="clr-namespace:Microsoft.Web.Authoring.Workflow;assembly=Microsoft.Web.Authoring" xmlns:scg="clr-namespace:System.Collections.Generic;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"><Sequence><Sequence><mwaw:SPDesignerXamlWriter.CustomAttributes><scg:Dictionary x:TypeArguments="x:String, x:String"><x:String x:Key="InitBlock">InitBlock-7751C281-B0D1-4336-87B4-83F2198EDE6D</x:String></scg:Dictionary></mwaw:SPDesignerXamlWriter.CustomAttributes></Sequence><Flowchart StartNode="{x:Reference __ReferenceID1}"><FlowStep x:Name="__ReferenceID1"><mwaw:SPDesignerXamlWriter.CustomAttributes><scg:Dictionary x:TypeArguments="x:String, x:String" /></mwaw:SPDesignerXamlWriter.CustomAttributes><Sequence><mwaw:SPDesignerXamlWriter.CustomAttributes><scg:Dictionary x:TypeArguments="x:String, x:String"><x:String x:Key="StageAttribute">StageContainer-8EDBFE6D-DA0D-42F6-A806-F5807380DA4D</x:String></scg:Dictionary></mwaw:SPDesignerXamlWriter.CustomAttributes><local:EnterProjectStage StageId="296334d9-1621-e711-80c8-00155d014d18"><mwaw:SPDesignerXamlWriter.CustomAttributes><scg:Dictionary x:TypeArguments="x:String, x:String"><x:String x:Key="StageAttribute">StageHeader-7FE15537-DFDB-4198-ABFA-8AF8B9D669AE</x:String></scg:Dictionary></mwaw:SPDesignerXamlWriter.CustomAttributes></local:EnterProjectStage><Sequence DisplayName="Inicjalizacja"><local1:SetWorkflowStatus Disabled="False" Status="Entering stage: Inicjalizacja" /></Sequence><local:ExitProjectStageGate><mwaw:SPDesignerXamlWriter.CustomAttributes><scg:Dictionary x:TypeArguments="x:String, x:String"><x:String x:Key="StageAttribute">StageFooter-3A59FA7C-C493-47A1-8F8B-1F481143EB08</x:String></scg:Dictionary></mwaw:SPDesignerXamlWriter.CustomAttributes></local:ExitProjectStageGate></Sequence><FlowStep.Next><FlowStep x:Name="__ReferenceID0"><mwaw:SPDesignerXamlWriter.CustomAttributes><scg:Dictionary x:TypeArguments="x:String, x:String"><x:String x:Key="Next">4294967294</x:String></scg:Dictionary></mwaw:SPDesignerXamlWriter.CustomAttributes><Sequence><mwaw:SPDesignerXamlWriter.CustomAttributes><scg:Dictionary x:TypeArguments="x:String, x:String"><x:String x:Key="StageAttribute">StageContainer-8EDBFE6D-DA0D-42F6-A806-F5807380DA4D</x:String></scg:Dictionary></mwaw:SPDesignerXamlWriter.CustomAttributes><local:EnterProjectStage StageId="e10db6c9-1721-e711-80c8-00155d014d18"><mwaw:SPDesignerXamlWriter.CustomAttributes><scg:Dictionary x:TypeArguments="x:String, x:String"><x:String x:Key="StageAttribute">StageHeader-7FE15537-DFDB-4198-ABFA-8AF8B9D669AE</x:String></scg:Dictionary></mwaw:SPDesignerXamlWriter.CustomAttributes></local:EnterProjectStage><Sequence DisplayName="Akceptacja"><local1:SetWorkflowStatus Disabled="False" Status="Entering stage: Akceptacja" /></Sequence><local:ExitProjectStageGate><mwaw:SPDesignerXamlWriter.CustomAttributes><scg:Dictionary x:TypeArguments="x:String, x:String"><x:String x:Key="StageAttribute">StageFooter-3A59FA7C-C493-47A1-8F8B-1F481143EB08</x:String></scg:Dictionary></mwaw:SPDesignerXamlWriter.CustomAttributes></local:ExitProjectStageGate></Sequence></FlowStep></FlowStep.Next></FlowStep><x:Reference>__ReferenceID0</x:Reference></Flowchart></Sequence></Activity>" 
psContext.Load(web); 
psContext.Load(siteCollection); 
psContext.Load(tasksList); 
psContext.Load(historyList); 
psContext.ExecuteQuery(); 

WorkflowServicesManager wfServiceManager = new WorkflowServicesManager(psContext, web); 
WorkflowDeploymentService deployService = wfServiceManager.GetWorkflowDeploymentService(); 
WorkflowSubscriptionService subscriptionService = wfServiceManager.GetWorkflowSubscriptionService(); 

WorkflowDefinition wfDefinition = new WorkflowDefinition(psContext); 
wfDefinition.DisplayName = "TestWorkflow"; 
wfDefinition.Description = "TestWorkflow"; 
wfDefinition.Xaml = xaml; 
wfDefinition.RestrictToType = "Site"; 

deployService.SaveDefinition(wfDefinition); 

psContext.Load(wfDefinition, i => i.Id); 
psContext.ExecuteQuery(); 

Guid subscriptionID = Guid.NewGuid(); 
WorkflowSubscription subscription = new WorkflowSubscription(psContext); 
subscription.Id = subscriptionID; 
subscription.Name = "TestWorkflow"; 
subscription.DefinitionId = wfDefinition.Id; 
subscription.EventSourceId = web.Id; 
subscription.EventTypes = new List<string>() { "WorkflowStart" }; 
subscription.SetProperty("HistoryListId", historyList.Id.ToString("B")); 
subscription.SetProperty("TaskListId", tasksList.Id.ToString("B")); 

subscriptionService.PublishSubscription(subscription); 
psContext.ExecuteQuery(); 

但是這給我上的代碼最後一行的錯誤:

Microsoft.SharePoint.Client.ServerException: 「Microsoft.Workflow.Client.ActivityNotFoundException:命名活動 'WorkflowXaml_a2a3ddfc_8e29_488c_a7fa_110ad2e869fd'從範圍 '/ SharePoint/default/ec283308-a234-4501-9df1-99744cf4a5fe/b0993915-25fa-43f6-9839-8aa683f16ef2' 未找到。從服務器接收的HTTP標頭 - ActivityId: e4085f69-addc-4c3e-8bcc-49c2f04daf7c。 NodeId:SERVER。範圍: /SharePoint/default/ec283308-a234-4501-9df1-99744cf4a5fe/b0993915-25fa-43f6-9839-8aa683f16ef2。 客戶ActivityId:fa0ef59d-8566-1053-095'

沒有線索從這裏。

回答

0

我通過使用Fiddler嗅探SharePoint Designer 2013 CSOM通信來獲得此工作。

得到這個工作的關鍵是:

wfDefinition.SetProperty("IsProjectMode", "true"); 
// (...) 
subscription.EventSourceId = new Guid("5122D555-E672-4E5D-A7C4-8084E694A257"); 
subscription.SetProperty("Microsoft.ProjectServer.ActivationProperties.CurrentStageId", ""); 
subscription.SetProperty("Microsoft.SharePoint.ActivationProperties.ParentContentTypeId", ""); 
subscription.SetProperty("Microsoft.ProjectServer.ActivationProperties.ProjectId", ""); 
subscription.SetProperty("Microsoft.ProjectServer.ActivationProperties.RequestedStageId", ""); 

評論的屬性都通過SPD設置,但不是必需的。

工作代碼:

ProjectContext psContext = new ProjectContext(Strings.PWA_Url); 
var web = psContext.Web; 
var siteCollection = psContext.Site; 
var tasksList = web.Lists.GetByTitle("Project Server Workflow Tasks"); 
var historyList = web.Lists.GetByTitle("Project Server Workflow History"); 

psContext.Load(web, i => i.Id); 
psContext.Load(siteCollection, i => i.Id); 
psContext.Load(tasksList, i => i.Id); 
psContext.Load(historyList, i => i.Id); 
psContext.ExecuteQuery(); 

WorkflowServicesManager wfServiceManager = new WorkflowServicesManager(psContext, web); 
WorkflowDefinition wfDefinition = new WorkflowDefinition(psContext); 

Guid subscriptionID = Guid.NewGuid(); 
wfDefinition.DisplayName = "TestWorkflow"; 
wfDefinition.Description = "TestWorkflow"; 
wfDefinition.Xaml = Strings.Workflow_Simple; 
wfDefinition.SetProperty("isReusable", "false"); 
wfDefinition.SetProperty("IsProjectMode", "true"); 
//wfDefinition.SetProperty("AutosetStatusToStageName", "false"); 
//wfDefinition.SetProperty("SPDConfig.LastEditMode", "TextBased"); 
wfDefinition.SetProperty("RestrictToType", "Site"); 
wfDefinition.SetProperty("TaskListId", tasksList.Id.ToString("B")); 
wfDefinition.SetProperty("HistoryListId", historyList.Id.ToString("B")); 
//wfDefinition.SetProperty("SPDConfig.StartManually", "true"); 
//wfDefinition.SetProperty("SPDConfig.StartOnCreate", "false"); 
//wfDefinition.SetProperty("SPDConfig.StartOnChange", "false"); 
//wfDefinition.SetProperty("FormField", "&lt;Fields /&gt;"); 
//wfDefinition.SetProperty("RequiresInitiationForm", "false"); 
//wfDefinition.SetProperty("InitiationUrl", ""); 
//wfDefinition.SetProperty("SubscriptionId", subscriptionID.ToString("B")); 
//wfDefinition.SetProperty("SubscriptionName", "TestWorkflow"); 
WorkflowDeploymentService deployService = wfServiceManager.GetWorkflowDeploymentService(); 
deployService.SaveDefinition(wfDefinition); 

psContext.Load(wfDefinition, i => i.Id); 
psContext.ExecuteQuery(); 

deployService.PublishDefinition(wfDefinition.Id); 
psContext.ExecuteQuery(); 

WorkflowSubscription subscription = new WorkflowSubscription(psContext); 
subscription.Id = subscriptionID; 
subscription.Name = "TestWorkflow"; 
subscription.EventSourceId = new Guid("5122D555-E672-4E5D-A7C4-8084E694A257"); 
subscription.EventTypes = new List<string>() { "WorkflowStart" }; 
subscription.DefinitionId = wfDefinition.Id; 
//subscription.SetProperty("CreatedBySPD", "1"); 
subscription.SetProperty("CurrentWebUri", Strings.PWA_Url_Https); 
subscription.SetProperty("HistoryListId", historyList.Id.ToString("B")); 
subscription.SetProperty("Microsoft.ProjectServer.ActivationProperties.CurrentStageId", ""); 
//subscription.SetProperty("SharePointWorkflowContext.ActivationProperties.SiteId", siteCollection.Id.ToString("B")); 
subscription.SetProperty("TaskListId", tasksList.Id.ToString("B")); 
subscription.SetProperty("Microsoft.SharePoint.ActivationProperties.ParentContentTypeId", ""); 
//subscription.SetProperty("SharePointWorkflowContext.ActivationProperties.WebId", web.Id.ToString("B")); 
subscription.SetProperty("Microsoft.ProjectServer.ActivationProperties.ProjectId", ""); 
subscription.SetProperty("Microsoft.ProjectServer.ActivationProperties.RequestedStageId", ""); 

WorkflowSubscriptionService subscriptionService = wfServiceManager.GetWorkflowSubscriptionService(); 
subscriptionService.PublishSubscription(subscription); 
psContext.ExecuteQuery(); 
相關問題