Beispiel #1
0
        /// <summary>
        /// 调用外部服务。对方会返回一个或一组流程ID。本函数返回这组ID对应的流程。
        /// </summary>
        /// <param name="startupParams"></param>
        /// <param name="template"></param>
        /// <returns></returns>
        private WfProcessCollection InvokeBranchProcess(WfServiceStartupProcessParams startupParams, IWfBranchProcessTemplateDescriptor template)
        {
            this.Process.ApplicationRuntimeParameters["serviceOP_Paramas"] = startupParams;

            WfServiceInvoker svcInvoker = new WfServiceInvoker(template.OperationDefinition);

            object obj = svcInvoker.Invoke();

            WfProcessCollection processes          = new WfProcessCollection();
            WfBranchProcessTemplateDescriptor temp = template as WfBranchProcessTemplateDescriptor;

            IList array = obj as IList;

            if (array != null)
            {
                IWfProcess process = null;
                foreach (string processID in array)
                {
                    process = WfRuntime.GetProcessByProcessID(processID);
                    processes.Add(process);
                }

                temp.BranchProcessKey = process.Descriptor.Key;
            }
            else
            {
                IWfProcess process = WfRuntime.GetProcessByProcessID(obj.ToString());
                processes.Add(process);
                temp.BranchProcessKey = process.Descriptor.Key;
            }

            return(processes);
        }
Beispiel #2
0
        /// <summary>
        /// 创建一个缺省的审批流模板
        /// </summary>
        /// <param name="key"></param>
        /// <param name="processDespKey">流程描述的Key</param>
        /// <param name="execSequence"></param>
        /// <param name="blockingType"></param>
        /// <param name="users"></param>
        /// <returns></returns>
        public static IWfBranchProcessTemplateDescriptor CreateDefaultApprovalTemplate(
            string key,
            string processDespKey,
            WfBranchProcessExecuteSequence execSequence,
            WfBranchProcessBlockingType blockingType,
            IEnumerable <IUser> users)
        {
            key.CheckStringIsNullOrEmpty("key");
            users.NullCheck("users");

            WfBranchProcessTemplateDescriptor template = new WfBranchProcessTemplateDescriptor(key);

            template.BranchProcessKey = WfProcessDescriptorManager.DefaultApprovalProcessKey;
            template.ExecuteSequence  = execSequence;
            template.BlockingType     = blockingType;

            users = users.Distinct(new OguObjectIDEqualityComparer <IUser>());

            foreach (IUser user in users)
            {
                template.Resources.Add(new WfUserResourceDescriptor(user));
            }

            return(template);
        }
Beispiel #3
0
 private void SetPropertiesValue(WfBranchProcessTemplateDescriptor branchTemplate, string propertyName, object input)
 {
     if (branchTemplate.Properties.ContainsKey(propertyName))
     {
         string itemValue = JSONSerializerExecute.Serialize(input);
         branchTemplate.Properties.SetValue <string>(propertyName, itemValue);
     }
 }
        public IWfBranchProcessTemplateDescriptor Clone()
        {
            WfBranchProcessTemplateDescriptor template = new WfBranchProcessTemplateDescriptor();

            this.CloneProperties(template);

            return(template);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="newActDesp"></param>
        /// <param name="createParams"></param>
        private static void AdjustActivityDescriptorProperties(WfActivityDescriptor newActDesp, WfActivityDescriptorCreateParams createParams)
        {
            newActDesp.Name = createParams.Name;

            if (createParams.Variables != null)
            {
                foreach (WfVariableDescriptor variable in createParams.Variables)
                {
                    if (newActDesp.Properties.ContainsKey(variable.Key) == false)
                    {
                        PropertyDefine pd = new PropertyDefine();

                        pd.Name         = variable.Key;
                        pd.DataType     = PropertyDataType.Boolean;
                        pd.DefaultValue = variable.OriginalValue;

                        newActDesp.Properties.Add(new PropertyValue(pd));
                    }

                    newActDesp.Properties.SetValue(variable.Key, variable.ActualValue);
                }
            }

            if (createParams.Users != null)
            {
                newActDesp.Resources.Clear();
                createParams.Users.ForEach(u => newActDesp.Resources.Add(new WfUserResourceDescriptor(u)));
            }

            if (createParams.CirculateUsers != null)
            {
                newActDesp.EnterEventReceivers.Clear();
                createParams.CirculateUsers.ForEach(u => newActDesp.EnterEventReceivers.Add(new WfUserResourceDescriptor(u)));
            }

            newActDesp.BranchProcessTemplates.Clear();

            if (createParams.AllAgreeWhenConsign && newActDesp.Resources.Count > 1)
            {
                newActDesp.Properties.SetValue("AutoMoveAfterPending", true);

                if (newActDesp.BranchProcessTemplates.ContainsKey(WfTemplateBuilder.AutoStartSubProcessTemplateKey))
                {
                    newActDesp.BranchProcessTemplates.Remove(t => t.Key == WfTemplateBuilder.AutoStartSubProcessTemplateKey);
                }

                WfBranchProcessTemplateDescriptor template = new WfBranchProcessTemplateDescriptor(WfTemplateBuilder.AutoStartSubProcessTemplateKey);

                template.BranchProcessKey = WfProcessDescriptorManager.DefaultConsignProcessKey;
                template.ExecuteSequence  = WfBranchProcessExecuteSequence.Parallel;
                template.BlockingType     = WfBranchProcessBlockingType.WaitAllBranchProcessesComplete;

                template.Resources.CopyFrom(newActDesp.Resources);

                newActDesp.BranchProcessTemplates.Add(template);
            }
        }
Beispiel #6
0
        private static IWfBranchProcessTemplateDescriptor CreateConsignTemplate(WfBranchProcessExecuteSequence execSequence, WfBranchProcessBlockingType blockingType)
        {
            string key = "WfBranchProcessTemplateDescriptorKey";

            WfBranchProcessTemplateDescriptor template = new WfBranchProcessTemplateDescriptor(key);

            template.BranchProcessKey = WfProcessDescriptorManager.DefaultConsignProcessKey;
            template.ExecuteSequence  = execSequence;
            template.BlockingType     = blockingType;

            return(template);
        }
Beispiel #7
0
        public override IDictionary <string, object> Serialize(object obj, System.Web.Script.Serialization.JavaScriptSerializer serializer)
        {
            WfBranchProcessTemplateDescriptor branchProcTempDesp = (WfBranchProcessTemplateDescriptor)obj;

            IDictionary <string, object> dictionary = base.Serialize(obj, serializer);

            DictionaryHelper.AddNonDefaultValue <string, object>(dictionary, "BranchProcessKey", branchProcTempDesp.BranchProcessKey);
            DictionaryHelper.AddNonDefaultValue <string, object>(dictionary, "ExecuteSequence", branchProcTempDesp.ExecuteSequence);
            DictionaryHelper.AddNonDefaultValue <string, object>(dictionary, "BlockingType", branchProcTempDesp.BlockingType);
            DictionaryHelper.AddNonDefaultValue <string, object>(dictionary, "OperationDefinition", branchProcTempDesp.OperationDefinition);

            this.SetPropertiesValue(branchProcTempDesp, "Condition", branchProcTempDesp.Condition);
            this.SetPropertiesValue(branchProcTempDesp, "Resources", branchProcTempDesp.Resources);
            this.SetPropertiesValue(branchProcTempDesp, "OperationDefinition", branchProcTempDesp.OperationDefinition);
            this.SetPropertiesValue(branchProcTempDesp, "CancelSubProcessNotifier", branchProcTempDesp.CancelSubProcessNotifier);
            this.SetPropertiesValue(branchProcTempDesp, "RelativeLinks", branchProcTempDesp.RelativeLinks);

            return(dictionary);
        }
Beispiel #8
0
        /// <summary>
        /// 构造缺省送阅流程模板
        /// </summary>
        /// <param name="key"></param>
        /// <param name="users"></param>
        /// <returns></returns>
        public static IWfBranchProcessTemplateDescriptor CreateDefaultCirculationTemplate(
            string key,
            IEnumerable <IUser> users)
        {
            key.CheckStringIsNullOrEmpty("key");
            users.NullCheck("users");

            WfBranchProcessTemplateDescriptor template = new WfBranchProcessTemplateDescriptor(key);

            template.BranchProcessKey = WfProcessDescriptorManager.DefaultCirculationProcessKey;
            template.ExecuteSequence  = WfBranchProcessExecuteSequence.Parallel;
            template.BlockingType     = WfBranchProcessBlockingType.WaitNoneOfBranchProcessComplete;

            users = users.Distinct(new OguObjectIDEqualityComparer <IUser>());

            foreach (IUser user in users)
            {
                template.Resources.Add(new WfUserResourceDescriptor(user));
            }

            return(template);
        }
        internal protected override void CloneProperties(WfKeyedDescriptorBase destObject)
        {
            base.CloneProperties(destObject);

            WfBranchProcessTemplateDescriptor template = (WfBranchProcessTemplateDescriptor)destObject;

            template.Resources.Clear();
            template.Resources.CopyFrom(this.Resources);

            template.CancelSubProcessNotifier.Clear();
            template.CancelSubProcessNotifier.CopyFrom(this.CancelSubProcessNotifier);

            template.Condition = this.Condition.Clone();

            if (this._OperationDefinition != null)
            {
                template._OperationDefinition = this._OperationDefinition.Clone();
            }

            template.RelativeLinks.Clear();
            template.RelativeLinks.CopyFrom(this.RelativeLinks);
        }
Beispiel #10
0
        public override object Deserialize(IDictionary <string, object> dictionary, Type type, System.Web.Script.Serialization.JavaScriptSerializer serializer)
        {
            string key = DictionaryHelper.GetValue(dictionary, "Key", string.Empty);

            WfBranchProcessTemplateDescriptor branchProcTempDesp = (WfBranchProcessTemplateDescriptor)CreateInstance(key, dictionary, type, serializer);

            branchProcTempDesp.Name        = DictionaryHelper.GetValue(dictionary, "Name", string.Empty);;
            branchProcTempDesp.Enabled     = DictionaryHelper.GetValue(dictionary, "Enabled", false);
            branchProcTempDesp.Description = DictionaryHelper.GetValue(dictionary, "Description", string.Empty);

            if (dictionary.ContainsKey("Properties"))
            {
                branchProcTempDesp.Properties.Clear();

                PropertyValueCollection properties = JSONSerializerExecute.Deserialize <PropertyValueCollection>(dictionary["Properties"]);

                foreach (PropertyValue pv in properties)
                {
                    switch (pv.Definition.Name)
                    {
                    case "Resources":
                        WfResourceDescriptorCollection resources = JSONSerializerExecute.Deserialize <WfResourceDescriptorCollection>(pv.StringValue);
                        branchProcTempDesp.Resources.Clear();
                        if (resources != null)
                        {
                            branchProcTempDesp.Resources.CopyFrom(resources);
                        }
                        break;

                    case "CancelSubProcessNotifier":
                        WfResourceDescriptorCollection cancelSubProcessNotifierResources = JSONSerializerExecute.Deserialize <WfResourceDescriptorCollection>(pv.StringValue);
                        branchProcTempDesp.CancelSubProcessNotifier.Clear();
                        if (cancelSubProcessNotifierResources != null)
                        {
                            branchProcTempDesp.CancelSubProcessNotifier.CopyFrom(cancelSubProcessNotifierResources);
                        }
                        break;

                    case "Condition":
                        branchProcTempDesp.Condition       = JSONSerializerExecute.Deserialize <WfConditionDescriptor>(pv.StringValue);
                        branchProcTempDesp.Condition.Owner = branchProcTempDesp;
                        break;

                    case "OperationDefinition":
                        branchProcTempDesp.OperationDefinition = JSONSerializerExecute.Deserialize <WfServiceOperationDefinition>(pv.StringValue);
                        break;

                    case "BranchProcessKey":
                        branchProcTempDesp.Properties.Add(pv);
                        break;

                    case "RelativeLinks":
                        WfRelativeLinkDescriptorCollection links = JSONSerializerExecute.Deserialize <WfRelativeLinkDescriptorCollection>(pv.StringValue);
                        branchProcTempDesp.RelativeLinks.Clear();

                        if (links != null)
                        {
                            branchProcTempDesp.RelativeLinks.CopyFrom(links);
                        }
                        break;

                    default:
                        branchProcTempDesp.Properties.Add(pv);
                        break;
                    }
                }
            }

            return(branchProcTempDesp);
        }