public WfTransferParams ClientToServer(WfClientTransferParams client, IWfProcess process, ref WfTransferParams server) { client.NullCheck("client"); if (server == null) server = new WfTransferParams(); server.Context["NextActivityDescriptorKey"] = client.NextActivityDescriptorKey; server.Context["FromTransitionDescriptorKey"] = client.FromTransitionDescriptorKey; if (process != null) { if (client.NextActivityDescriptorKey.IsNotEmpty()) { IWfActivity nextActivity = process.Activities.FindActivityByDescriptorKey(client.NextActivityDescriptorKey); if (nextActivity != null) server.NextActivityDescriptor = nextActivity.Descriptor; } if (client.FromTransitionDescriptorKey.IsNotEmpty()) { IWfTransitionDescriptor fromTransition = process.Descriptor.FindTransitionByKey(client.FromTransitionDescriptorKey); server.FromTransitionDescriptor = fromTransition; } } server.Operator = (IUser)client.Operator.ToOguObject(); WfClientBranchProcessTransferParamsCollectionConverter.Instance.ClientToServer(client.BranchTransferParams, server.BranchTransferParams); WfClientAssigneeCollectionConverter.Instance.ClientToServer(client.Assignees, server.Assignees); return server; }
public WfClientProcessInfo MoveTo(string processID, WfClientTransferParams clientTransferParams, WfClientRuntimeContext runtimeContext) { processID.CheckStringIsNullOrEmpty("processID"); clientTransferParams.NullCheck("clientTransferParams"); OperationContext.Current.FillContextToOguServiceContext(); IWfProcess process = GetProcessByProcessID(processID, runtimeContext); MeregeRuntimeContext(process, runtimeContext); WfTransferParams transferParams = null; WfClientTransferParamsConverter.Instance.ClientToServer(clientTransferParams, process, ref transferParams); MergeTransferParams(transferParams, runtimeContext); IWfActivity originalActivity = process.CurrentActivity; ExecuteExecutor(process, runtimeContext, (p) => { WfMoveToExecutor executor = new WfMoveToExecutor(p.CurrentActivity, p.CurrentActivity, transferParams); executor.SaveApplicationData += (dataContext) => SaveOpinion(runtimeContext.Opinion, originalActivity, transferParams); executor.PrepareMoveToTasks += (dataContext, tasks) => tasks.ForEach(task => task.Purpose = p.CurrentActivity.Descriptor.Name); return executor; }); return process.ToClientProcessInfo(transferParams.Operator).FillCurrentOpinion(process.CurrentActivity, runtimeContext.Operator); }