public override List<ServiceObject> DescribeServiceObjects() { ServiceObject so = Helper.CreateServiceObject("ProcessInstanceClient", "Exposes functionality to start the workflow."); so.Properties.Add(Helper.CreateProperty(Constants.SOProperties.ProcessInstanceClient.ProcessFolio, SoType.Text, "The folio to use for the process.")); so.Properties.Add(Helper.CreateProperty(Constants.SOProperties.ProcessInstanceClient.ProcessName, SoType.Text, "The full name of the process.")); so.Properties.Add(Helper.CreateProperty(Constants.SOProperties.ProcessInstanceClient.StartSync, SoType.YesNo, "Start the process synchronously or not.")); so.Properties.Add(Helper.CreateProperty(Constants.SOProperties.ProcessInstanceClient.ProcessInstanceId, SoType.Number, "The process instance ID.")); so.Properties.Add(Helper.CreateProperty(Constants.SOProperties.ProcessInstanceClient.ProcessVersion, SoType.Number, "The version number to start. Leave empty for default.")); Method startProcessInstance = Helper.CreateMethod(Constants.Methods.ProcessInstanceClient.StartProcessInstance, "Start a new process instance", MethodType.Create); startProcessInstance.InputProperties.Add(Constants.SOProperties.ProcessInstanceClient.ProcessName); startProcessInstance.InputProperties.Add(Constants.SOProperties.ProcessInstanceClient.ProcessFolio); startProcessInstance.InputProperties.Add(Constants.SOProperties.ProcessInstanceClient.ProcessVersion); startProcessInstance.InputProperties.Add(Constants.SOProperties.ProcessInstanceClient.StartSync); startProcessInstance.Validation.RequiredProperties.Add(Constants.SOProperties.ProcessInstanceClient.ProcessName); startProcessInstance.ReturnProperties.Add(Constants.SOProperties.ProcessInstanceClient.ProcessInstanceId); startProcessInstance.ReturnProperties.Add(Constants.SOProperties.ProcessInstanceClient.ProcessFolio); so.Methods.Add(startProcessInstance); //Adding a separate StartWF method for each workflow, exposing DataFields as Parameters WorkflowManagementServer mngServer = new WorkflowManagementServer(); using (mngServer.CreateConnection()) { mngServer.Open(BaseAPIConnectionString); ProcessSets pSets = mngServer.GetProcSets(); foreach (ProcessSet pSet in pSets) { string displayName = Constants.Methods.ProcessInstanceClient.StartProcess + "_" + pSet.FullName; string description = "Starts " + pSet.FullName; Method m = new Method { Name = pSet.FullName, Type = MethodType.Create, MetaData = new MetaData(displayName, description) }; m.InputProperties.Add(Constants.SOProperties.ProcessInstanceClient.ProcessFolio); m.InputProperties.Add(Constants.SOProperties.ProcessInstanceClient.StartSync); m.InputProperties.Add(Constants.SOProperties.ProcessInstanceClient.ProcessVersion); m.ReturnProperties.Add(Constants.SOProperties.ProcessInstanceClient.ProcessInstanceId); m.ReturnProperties.Add(Constants.SOProperties.ProcessInstanceClient.ProcessFolio); foreach (ProcessDataField pDataField in mngServer.GetProcessDataFields(pSet.ProcID)) { m.MethodParameters.Add(Helper.CreateParameter(pDataField.Name, GetDataFieldType(pDataField.Type), false, pDataField.Name)); } so.Methods.Add(m); } } return new List<ServiceObject>() { so }; }
public override List <ServiceObject> DescribeServiceObjects() { ServiceObject so = Helper.CreateServiceObject("ProcessInstanceClient", "Exposes functionality to start the workflow."); so.Properties.Add(Helper.CreateProperty(Constants.SOProperties.ProcessInstanceClient.ProcessFolio, SoType.Text, "The folio to use for the process.")); so.Properties.Add(Helper.CreateProperty(Constants.SOProperties.ProcessInstanceClient.ProcessName, SoType.Text, "The full name of the process.")); so.Properties.Add(Helper.CreateProperty(Constants.SOProperties.ProcessInstanceClient.StartSync, SoType.YesNo, "Start the process synchronously or not.")); so.Properties.Add(Helper.CreateProperty(Constants.SOProperties.ProcessInstanceClient.ProcessInstanceId, SoType.Number, "The process instance ID.")); so.Properties.Add(Helper.CreateProperty(Constants.SOProperties.ProcessInstanceClient.ProcessVersion, SoType.Number, "The version number to start. Leave empty for default.")); Method startProcessInstance = Helper.CreateMethod(Constants.Methods.ProcessInstanceClient.StartProcessInstance, "Start a new process instance", MethodType.Create); startProcessInstance.InputProperties.Add(Constants.SOProperties.ProcessInstanceClient.ProcessName); startProcessInstance.InputProperties.Add(Constants.SOProperties.ProcessInstanceClient.ProcessFolio); startProcessInstance.InputProperties.Add(Constants.SOProperties.ProcessInstanceClient.ProcessVersion); startProcessInstance.InputProperties.Add(Constants.SOProperties.ProcessInstanceClient.StartSync); startProcessInstance.Validation.RequiredProperties.Add(Constants.SOProperties.ProcessInstanceClient.ProcessName); startProcessInstance.ReturnProperties.Add(Constants.SOProperties.ProcessInstanceClient.ProcessInstanceId); startProcessInstance.ReturnProperties.Add(Constants.SOProperties.ProcessInstanceClient.ProcessFolio); so.Methods.Add(startProcessInstance); Method setFolio = Helper.CreateMethod(Constants.Methods.ProcessInstanceClient.SetFolio, "Set the folio of a process instance", MethodType.Update); setFolio.InputProperties.Add(Constants.SOProperties.ProcessInstanceClient.ProcessInstanceId); setFolio.InputProperties.Add(Constants.SOProperties.ProcessInstanceClient.ProcessFolio); setFolio.Validation.RequiredProperties.Add(Constants.SOProperties.ProcessInstanceClient.ProcessInstanceId); so.Methods.Add(setFolio); //Adding a separate StartWF method for each workflow, exposing DataFields as Parameters try { WorkflowManagementServer mngServer = this.ServiceBroker.K2Connection.GetConnection <WorkflowManagementServer>(); using (mngServer.Connection) { ProcessSets pSets = mngServer.GetProcSets(); foreach (ProcessSet pSet in pSets) { string displayName = Constants.Methods.ProcessInstanceClient.StartProcess + "_" + pSet.FullName; string description = "Starts " + pSet.FullName; Method m = new Method { Name = pSet.FullName, Type = MethodType.Create, MetaData = new MetaData(displayName, description) }; m.InputProperties.Add(Constants.SOProperties.ProcessInstanceClient.ProcessFolio); m.InputProperties.Add(Constants.SOProperties.ProcessInstanceClient.StartSync); m.InputProperties.Add(Constants.SOProperties.ProcessInstanceClient.ProcessVersion); m.ReturnProperties.Add(Constants.SOProperties.ProcessInstanceClient.ProcessInstanceId); m.ReturnProperties.Add(Constants.SOProperties.ProcessInstanceClient.ProcessFolio); foreach (ProcessDataField pDataField in mngServer.GetProcessDataFields(pSet.ProcID)) { m.MethodParameters.Create(Helper.CreateParameter(pDataField.Name, GetDataFieldType(pDataField.Type), false, pDataField.Name)); } so.Methods.Add(m); } } } catch (Exception ex) { base.ServiceBroker.HostServiceLogger.LogError(Resources.FailedToRetrieveProcesses); base.ServiceBroker.HostServiceLogger.LogException(ex); } return(new List <ServiceObject>() { so }); }