public override void ServerToClient(WfProcessDescriptor server, ref WfClientProcessDescriptor client) { server.NullCheck("server"); if (client == null) { client = new WfClientProcessDescriptor(); } base.ServerToClient(server, ref client); WfClientRelativeLinkDescriptorCollectionConverter.Instance.ServerToClient(server.RelativeLinks, client.RelativeLinks); WfClientVariableDescriptorCollectionConverter.Instance.ServerToClient(server.Variables, client.Variables); WfClientResourceDescriptorCollectionConverter.Instance.ServerToClient(server.CancelEventReceivers, client.CancelEventReceivers); foreach (WfActivityDescriptor actDesp in server.Activities) { WfClientActivityDescriptor cad = null; WfClientActivityDescriptorConverter.Instance.ServerToClient(actDesp, ref cad); client.Activities.Add(cad); } TransitionsServerToClient(server, client); }
public override WfClientProcessDescriptor Build(string processKey, string processName) { this.CreateParams.Key = processKey; this.CreateParams.Name = processName; WfClientProcessDescriptor processDesp = base.Build(processKey, processName); processDesp.Variables.AddOrSetValue("ClientDynamicProcess", "True", WfClientVariableDataType.Boolean); MergeProperties(processDesp.Properties, this.CreateParams.Properties); WfClientActivityDescriptor dynamicActivityDesp = CreateDynamicActivityDescriptor(this.CreateParams.ActivityMatrix); processDesp.Activities.Add(dynamicActivityDesp); WfClientTransitionDescriptor transitionSN = new WfClientTransitionDescriptor(processDesp.InitialActivity.Key, dynamicActivityDesp.Key) { Key = "L1" }; processDesp.InitialActivity.ToTransitions.Add(transitionSN); WfClientTransitionDescriptor transitionNC = new WfClientTransitionDescriptor(dynamicActivityDesp.Key, processDesp.CompletedActivity.Key) { Key = "L2" }; dynamicActivityDesp.ToTransitions.Add(transitionNC); return(processDesp); }
public void ServerToClient(IWfMainStreamActivityDescriptor server, ref WfClientMainStreamActivityDescriptor client) { server.NullCheck("server"); WfClientActivityDescriptor clientActDesp = null; WfClientActivityDescriptorConverter.Instance.ServerToClient((WfActivityDescriptor)server.Activity, ref clientActDesp); if (client == null) { client = new WfClientMainStreamActivityDescriptor(clientActDesp); } client.Level = server.Level; foreach (WfActivityDescriptor actDesp in server.AssociatedActivities) { WfClientActivityDescriptor cad = null; WfClientActivityDescriptorConverter.Instance.ServerToClient(actDesp, ref cad); client.AssociatedActivities.Add(cad); } FillStatusAndAssignees(client, server); }
/// <summary> /// 创建一个带动态矩阵资源的流程定义 /// </summary> /// <returns></returns> public static WfClientProcessDescriptor CreateClientProcessWithActivityMatrixResourceDescriptor() { WfClientProcessDescriptor processDesp = CreateSimpleClientProcessWithoutLines(); WfClientActivityDescriptor actDesp = ActivityDescriptorHelper.CreateSimpleClientActivity("N1", "活动矩阵", WfClientActivityType.NormalActivity); actDesp.Properties.AddOrSetValue("IsDynamic", true); actDesp.Resources.Add(GetClientActivityMatrixResourceDescriptor()); processDesp.Activities.Add(actDesp); WfClientTransitionDescriptor transitionToN1 = new WfClientTransitionDescriptor(processDesp.InitialActivity.Key, "N1") { Key = "L1" }; processDesp.InitialActivity.ToTransitions.Add(transitionToN1); WfClientTransitionDescriptor transitionToCompleted = new WfClientTransitionDescriptor(actDesp.Key, processDesp.CompletedActivity.Key) { Key = "L2" }; processDesp.Activities["N1"].ToTransitions.Add(transitionToCompleted); return(processDesp); }
public WorkBook ClientDynamicProcessToExcel(WfClientProcessDescriptor client) { bool isDynamic = client.Variables.GetValue("ClientDynamicProcess", false); ExceptionHelper.TrueThrow <ArgumentException>(isDynamic == false, Translator.Translate(Define.DefaultCulture, "非动态活动流程不能导出{0}", client.Key)); WorkBook wb = WorkBook.CreateNew(); wb.Sheets.Clear(); WorkSheet workSheet = null; Row titleRow = null; #region 流程定义信息 workSheet = new WorkSheet(wb, "Process"); titleRow = new Row(1) { Height = 30d }; titleRow.Style.Fill.SetBackgroundColor(Color.LightGray, ExcelFillStyle.Solid); titleRow.Style.Font.Size = 20; workSheet.Rows.Add(titleRow); workSheet.Cells[titleRow.Index, 1].Value = "流程属性"; CreateCommonHeaderRow(client, workSheet); FillCommonSheetData(client, workSheet); wb.Sheets.Add(workSheet); #endregion #region 矩阵信息 WfClientActivityDescriptor activity = client.Activities.Find(w => w.Resources.Count > 0 && w.Resources[0] is WfClientActivityMatrixResourceDescriptor); if (activity == null) { return(wb); } WfClientActivityMatrixResourceDescriptor matrix = activity.Resources[0] as WfClientActivityMatrixResourceDescriptor; workSheet = new WorkSheet(wb, "Matrix"); titleRow = new Row(1) { Height = 30d }; titleRow.Style.Fill.SetBackgroundColor(Color.LightGray, ExcelFillStyle.Solid); titleRow.Style.Font.Size = 20; workSheet.Rows.Add(titleRow); workSheet.Cells[titleRow.Index, 1].Value = "角色属性"; CreateMatrixHeaderRow(matrix, workSheet); FillMatrixSheetData(matrix, workSheet); wb.Sheets.Add(workSheet); #endregion return(wb); }
public WfClientActivity(WfClientActivityDescriptor descriptor) { _Descriptor = descriptor; this._ProcessDescKey = descriptor.Process.Key; this._ActivityDescKey = descriptor.Key; this._StartTime = DateTime.Now; }
private static WfClientActivityDescriptor CreateDynamicActivityDescriptor(WfClientActivityMatrixResourceDescriptor activityMatrix) { WfClientActivityDescriptor dynamicActivityDesp = new WfClientActivityDescriptor(WfClientActivityType.NormalActivity) { Key = "N1", Name = "审批" }; dynamicActivityDesp.Properties.AddOrSetValue("IsDynamic", "True"); dynamicActivityDesp.Resources.Add(activityMatrix); return dynamicActivityDesp; }
public static WfClientActivityDescriptor CreateSimpleClientActivityWithUser(string key, string name, string userKey, WfClientActivityType actType) { WfClientActivityDescriptor actDesp = CreateSimpleClientActivity(key, name, actType); actDesp.Resources.Add(new WfClientUserResourceDescriptor(Consts.Users[userKey])); actDesp.EnterEventReceivers.Add(new WfClientUserResourceDescriptor(Consts.Users[userKey])); actDesp.LeaveEventReceivers.Add(new WfClientUserResourceDescriptor(Consts.Users[userKey])); return(actDesp); }
/// <summary> /// 创建一个不带资源的简单活动 /// </summary> /// <param name="key"></param> /// <param name="name"></param> /// <param name="actType"></param> /// <returns></returns> public static WfClientActivityDescriptor CreateSimpleClientActivity(string key, string name, WfClientActivityType actType) { WfClientActivityDescriptor actDesp = new WfClientActivityDescriptor(actType); actDesp.Key = key; actDesp.Name = name; actDesp.RelativeLinks.Add(new WfClientRelativeLinkDescriptor("AR1") { Category = "Activity", Url = "http://www.ak47.com" }); return actDesp; }
private static WfClientActivityDescriptor CreateDynamicActivityDescriptor(WfClientActivityMatrixResourceDescriptor activityMatrix) { WfClientActivityDescriptor dynamicActivityDesp = new WfClientActivityDescriptor(WfClientActivityType.NormalActivity) { Key = "N1", Name = "审批" }; dynamicActivityDesp.Properties.AddOrSetValue("IsDynamic", "True"); dynamicActivityDesp.Resources.Add(activityMatrix); return(dynamicActivityDesp); }
/// <summary> /// 创建一个不带资源的简单活动 /// </summary> /// <param name="key"></param> /// <param name="name"></param> /// <param name="actType"></param> /// <returns></returns> public static WfClientActivityDescriptor CreateSimpleClientActivity(string key, string name, WfClientActivityType actType) { WfClientActivityDescriptor actDesp = new WfClientActivityDescriptor(actType); actDesp.Key = key; actDesp.Name = name; actDesp.RelativeLinks.Add(new WfClientRelativeLinkDescriptor("AR1") { Category = "Activity", Url = "http://www.ak47.com" }); return(actDesp); }
public void StandardServerActivitiesToClient() { WfActivityDescriptor serverActDesp = PrepareServerActivity("N1"); serverActDesp.Output(); WfClientActivityDescriptor clientActDesp = null; WfClientActivityDescriptorConverter.Instance.ServerToClient(serverActDesp, ref clientActDesp); clientActDesp.Output(); clientActDesp.Variables.Output(); clientActDesp.AssertActivityDescriptor(serverActDesp); }
public override IDictionary <string, object> Serialize(object obj, JavaScriptSerializer serializer) { Dictionary <string, object> dictionary = (Dictionary <string, object>)base.Serialize(obj, serializer); WfClientActivityDescriptor actDesp = (WfClientActivityDescriptor)obj; dictionary["activityType"] = actDesp.ActivityType; dictionary.AddNonDefaultValue("condition", actDesp.Condition); dictionary.Add("variables", actDesp.Variables); dictionary.Add("resources", actDesp.Resources); dictionary.Add("enterEventReceivers", actDesp.EnterEventReceivers); dictionary.Add("leaveEventReceivers", actDesp.LeaveEventReceivers); dictionary.Add("transition", actDesp.ToTransitions); dictionary.Add("branchProcessTemplates", actDesp.BranchProcessTemplates); dictionary.Add("relativeLinks", actDesp.RelativeLinks); return(dictionary); }
public override object Deserialize(IDictionary <string, object> dictionary, Type type, JavaScriptSerializer serializer) { WfClientActivityDescriptor actDesp = (WfClientActivityDescriptor)base.Deserialize(dictionary, type, serializer); actDesp.Condition = JSONSerializerExecute.Deserialize <WfClientConditionDescriptor>(dictionary.GetValue("condition", (object)null)); JSONSerializerExecute.FillDeserializedCollection <WfClientVariableDescriptor>(dictionary.GetValue("variables", (object)null), actDesp.Variables); JSONSerializerExecute.FillDeserializedCollection <WfClientResourceDescriptor>(dictionary.GetValue("resources", (object)null), actDesp.Resources); JSONSerializerExecute.FillDeserializedCollection <WfClientResourceDescriptor>(dictionary.GetValue("enterEventReceivers", (object)null), actDesp.EnterEventReceivers); JSONSerializerExecute.FillDeserializedCollection <WfClientResourceDescriptor>(dictionary.GetValue("leaveEventReceivers", (object)null), actDesp.LeaveEventReceivers); JSONSerializerExecute.FillDeserializedCollection <WfClientTransitionDescriptor>(dictionary.GetValue("transition", (object)null), actDesp.ToTransitions); JSONSerializerExecute.FillDeserializedCollection <WfClientBranchProcessTemplateDescriptor>(dictionary.GetValue("branchProcessTemplates", (object)null), actDesp.BranchProcessTemplates); JSONSerializerExecute.FillDeserializedCollection <WfClientRelativeLinkDescriptor>(dictionary.GetValue("relativeLinks", (object)null), actDesp.RelativeLinks); return(actDesp); }
private static void TransitionsServerToClient(WfProcessDescriptor server, WfClientProcessDescriptor client) { foreach (IWfActivityDescriptor sa in server.Activities) { foreach (WfTransitionDescriptor st in sa.ToTransitions) { WfClientTransitionDescriptor ct = null; WfClientTransitionDescriptorConverter.Instance.ServerToClient(st, ref ct); WfClientActivityDescriptor fromActDesp = client.Activities[sa.Key]; if (fromActDesp != null) { fromActDesp.ToTransitions.Add(ct); } } } }
public WfClientActivity ServerToClient(IWfActivity server, ref WfClientActivity client) { if (server != null) { if (client == null) { client = new WfClientActivity(); } client.ID = server.ID; if (server.Descriptor != null) { client.DescriptorKey = server.Descriptor.Key; } client.LoadingType = server.LoadingType.ToClientDataLoadingType(); client.StartTime = server.StartTime; client.EndTime = server.EndTime; client.MainStreamActivityKey = server.MainStreamActivityKey; client.BranchProcessReturnValue = server.BranchProcessReturnValue.ToClientBranchProcessReturnType(); client.BranchProcessGroupsCount = server.BranchProcessGroups.Count; client.Operator = (WfClientUser)server.Operator.ToClientOguObject(); client.Status = server.Status.ToClientActivityStatus(); WfClientAssigneeCollectionConverter.Instance.ServerToClient(server.Assignees, client.Assignees); WfClientAssigneeCollectionConverter.Instance.ServerToClient(server.Candidates, client.Candidates); if (this._ConvertDescriptor) { WfClientActivityDescriptor clientActDesp = null; WfClientActivityDescriptorConverter.Instance.ServerToClient((WfActivityDescriptor)server.Descriptor, ref clientActDesp); client.Descriptor = clientActDesp; } } else { client = null; } return(client); }
public static WfClientProcessInfo PrepareBranchProcesses() { WfClientProcessDescriptor processDesp = ProcessDescriptorHelper.CreateSimpleClientProcessWithoutLines(); //增加子节点 WfClientActivityDescriptor branchActDesp = new WfClientActivityDescriptor(WfClientActivityType.NormalActivity); branchActDesp.Key = "N1"; branchActDesp.Name = "CFO"; branchActDesp.Properties.AddOrSetValue("AutoStartBranchProcesses", true); branchActDesp.Properties.AddOrSetValue("AutoStartBranchApprovalProcess", true); branchActDesp.Properties.AddOrSetValue("AutoStartBranchProcessExecuteSequence", 0); //增加审批人 branchActDesp.Resources.Add(new WfClientUserResourceDescriptor(Consts.Users["Requestor"])); branchActDesp.Resources.Add(new WfClientUserResourceDescriptor(Consts.Users["Approver1"])); branchActDesp.Resources.Add(new WfClientUserResourceDescriptor(Consts.Users["CEO"])); processDesp.Activities.Add(branchActDesp); //线 WfClientTransitionDescriptor transition = new WfClientTransitionDescriptor(processDesp.InitialActivity.Key, branchActDesp.Key); transition.Key = "L1"; processDesp.InitialActivity.ToTransitions.Add(transition); WfClientTransitionDescriptor transition2 = new WfClientTransitionDescriptor(branchActDesp.Key, processDesp.CompletedActivity.Key); transition2.Key = "L2"; branchActDesp.ToTransitions.Add(transition2); WfClientProcessDescriptorServiceProxy.Instance.SaveDescriptor(processDesp); //启动参数 WfClientProcessStartupParams clientStartupParams = ProcessRuntimeHelper.PrepareClientProcessStartupParams(processDesp.Key); //流程实例 WfClientRuntimeContext runtimeContext = new WfClientRuntimeContext(); WfClientProcessInfo process = WfClientProcessRuntimeServiceProxy.Instance.StartWorkflow(clientStartupParams); return(WfClientProcessRuntimeServiceProxy.Instance.MoveToNextDefaultActivity(process.ID, runtimeContext)); }
public static void AssertActivityDescriptor(this WfClientActivityDescriptor cad, WfClientActivityDescriptor sad) { cad.AreSame(sad); Assert.AreEqual(cad.ActivityType, sad.ActivityType); cad.Condition.AreSame(sad.Condition); cad.Variables.AssertCollection(sad.Variables); cad.Resources.AssertResources(sad.Resources); cad.EnterEventReceivers.AssertResources(sad.EnterEventReceivers); cad.LeaveEventReceivers.AssertResources(sad.LeaveEventReceivers); cad.ToTransitions.AssertCollection(sad.ToTransitions); cad.ToTransitions.ForEach(ct => ct.IsValid()); sad.ToTransitions.ForEach(st => st.IsValid()); cad.GetFromTransitions().AssertCollection(sad.GetFromTransitions()); cad.GetFromTransitions().ForEach(ct => ct.IsValid()); sad.GetFromTransitions().ForEach(st => st.IsValid()); cad.RelativeLinks.AssertRelativeLinks(sad.RelativeLinks); }
public static void AssertActivityDescriptor(this WfClientActivityDescriptor cad, WfClientActivityDescriptor sad) { cad.AreSame(sad); Assert.AreEqual(cad.ActivityType, sad.ActivityType); cad.Condition.AreSame(sad.Condition); cad.Variables.AssertCollection(sad.Variables); cad.Resources.AssertResources(sad.Resources); cad.EnterEventReceivers.AssertResources(sad.EnterEventReceivers); cad.LeaveEventReceivers.AssertResources(sad.LeaveEventReceivers); cad.ToTransitions.AssertCollection(sad.ToTransitions); cad.ToTransitions.ForEach(ct => ct.IsValid()); sad.ToTransitions.ForEach(st => st.IsValid()); cad.GetFromTransitions().AssertCollection(sad.GetFromTransitions()); cad.GetFromTransitions().ForEach(ct => ct.IsValid()); sad.GetFromTransitions().ForEach(st => st.IsValid()); cad.RelativeLinks.AssertRelativeLinks(sad.RelativeLinks); }
private static WfClientActivityDescriptor PrepareClientActivity(string key) { WfClientActivityDescriptor actDesp = new WfClientActivityDescriptor(WfClientActivityType.InitialActivity); actDesp.Key = key; actDesp.Name = key; actDesp.Condition.Expression = "Amount > 1000"; actDesp.Variables.AddOrSetValue("ActKey", key); actDesp.Variables.AddOrSetValue("ActName", key); actDesp.Resources.Add(new WfClientUserResourceDescriptor(new WfClientUser(ActivityConverterTest.UserID))); actDesp.Resources.Add(new WfClientDepartmentResourceDescriptor(new WfClientOrganization(ActivityConverterTest.OrganizationID))); actDesp.Resources.Add(new WfClientGroupResourceDescriptor(new WfClientGroup(ActivityConverterTest.GroupID))); actDesp.Resources.Add(new WfClientRoleResourceDescriptor(ActivityConverterTest.RoleFullCodeName)); actDesp.Resources.Add(new WfClientActivityOperatorResourceDescriptor(ActivityConverterTest.ResActivityKey)); actDesp.Resources.Add(new WfClientActivityAssigneesResourceDescriptor(ActivityConverterTest.ResActivityKey)); actDesp.Resources.Add(new WfClientDynamicResourceDescriptor("ConditionResource", "Amount > 1000")); actDesp.BranchProcessTemplates.Add(BranchProcessTemplateConverterTest.PrepareClientBranchProcessTemplate()); return actDesp; }
private static WfClientActivityDescriptor PrepareClientActivity(string key) { WfClientActivityDescriptor actDesp = new WfClientActivityDescriptor(WfClientActivityType.InitialActivity); actDesp.Key = key; actDesp.Name = key; actDesp.Condition.Expression = "Amount > 1000"; actDesp.Variables.AddOrSetValue("ActKey", key); actDesp.Variables.AddOrSetValue("ActName", key); actDesp.Resources.Add(new WfClientUserResourceDescriptor(new WfClientUser(ActivityConverterTest.UserID))); actDesp.Resources.Add(new WfClientDepartmentResourceDescriptor(new WfClientOrganization(ActivityConverterTest.OrganizationID))); actDesp.Resources.Add(new WfClientGroupResourceDescriptor(new WfClientGroup(ActivityConverterTest.GroupID))); actDesp.Resources.Add(new WfClientRoleResourceDescriptor(ActivityConverterTest.RoleFullCodeName)); actDesp.Resources.Add(new WfClientActivityOperatorResourceDescriptor(ActivityConverterTest.ResActivityKey)); actDesp.Resources.Add(new WfClientActivityAssigneesResourceDescriptor(ActivityConverterTest.ResActivityKey)); actDesp.Resources.Add(new WfClientDynamicResourceDescriptor("ConditionResource", "Amount > 1000")); actDesp.BranchProcessTemplates.Add(BranchProcessTemplateConverterTest.PrepareClientBranchProcessTemplate()); return(actDesp); }
public static WfClientProcessInfo PrepareBranchProcesses() { WfClientProcessDescriptor processDesp = ProcessDescriptorHelper.CreateSimpleClientProcessWithoutLines(); //增加子节点 WfClientActivityDescriptor branchActDesp = new WfClientActivityDescriptor(WfClientActivityType.NormalActivity); branchActDesp.Key = "N1"; branchActDesp.Name = "CFO"; branchActDesp.Properties.AddOrSetValue("AutoStartBranchProcesses", true); branchActDesp.Properties.AddOrSetValue("AutoStartBranchApprovalProcess", true); branchActDesp.Properties.AddOrSetValue("AutoStartBranchProcessExecuteSequence", 0); //增加审批人 branchActDesp.Resources.Add(new WfClientUserResourceDescriptor(Consts.Users["Requestor"])); branchActDesp.Resources.Add(new WfClientUserResourceDescriptor(Consts.Users["Approver1"])); branchActDesp.Resources.Add(new WfClientUserResourceDescriptor(Consts.Users["CEO"])); processDesp.Activities.Add(branchActDesp); //线 WfClientTransitionDescriptor transition = new WfClientTransitionDescriptor(processDesp.InitialActivity.Key, branchActDesp.Key); transition.Key = "L1"; processDesp.InitialActivity.ToTransitions.Add(transition); WfClientTransitionDescriptor transition2 = new WfClientTransitionDescriptor(branchActDesp.Key, processDesp.CompletedActivity.Key); transition2.Key = "L2"; branchActDesp.ToTransitions.Add(transition2); WfClientProcessDescriptorServiceProxy.Instance.SaveDescriptor(processDesp); //启动参数 WfClientProcessStartupParams clientStartupParams = ProcessRuntimeHelper.PrepareClientProcessStartupParams(processDesp.Key); //流程实例 WfClientRuntimeContext runtimeContext = new WfClientRuntimeContext(); WfClientProcessInfo process = WfClientProcessRuntimeServiceProxy.Instance.StartWorkflow(clientStartupParams); return WfClientProcessRuntimeServiceProxy.Instance.MoveToNextDefaultActivity(process.ID, runtimeContext); }
public WfClientInitialActivity(WfClientActivityDescriptor descriptor) : base(descriptor) { }
public WfClientNormalActivity(WfClientActivityDescriptor descriptor) : base(descriptor) { }
public WfClientInitialActivity(WfClientActivityDescriptor descriptor): base(descriptor) { }
public WfClientCompletedActivity(WfClientActivityDescriptor descriptor): base(descriptor) { }