Esempio n. 1
0
 private static IWfProcessDescriptor LoadProcessDescriptor()
 {
     using (FileStream stream = new FileStream("Expense.xml", FileMode.Open, FileAccess.Read))
     {
         return(WfProcessDescriptorManager.LoadDescriptor(stream));
     }
 }
Esempio n. 2
0
        public void ProcessWithMatrix()
        {
            try
            {
                var wfDescriptor = WfProcessDescriptorManager.GetDescriptor("workflowmatrixtest");
                WfProcessStartupParams startParam = new WfProcessStartupParams();
                startParam.ProcessDescriptor = wfDescriptor;

                var processInstance = WfRuntime.StartWorkflow(startParam);
                processInstance.ApplicationRuntimeParameters.Add("支付方式", "网银");
                processInstance.ApplicationRuntimeParameters.Add("成本中心", "成1");
                processInstance.ApplicationRuntimeParameters.Add("费用类型", "差旅费");
                processInstance.ApplicationRuntimeParameters.Add("金额", "100");
                processInstance.ApplicationRuntimeParameters.Add("部门", "商务部");

                WfTransferParams transferParams = new WfTransferParams(processInstance.Descriptor.Activities["N2"]);

                var currentAct = processInstance.MoveTo(transferParams);
                currentAct.Candidates.ForEach(p =>
                {
                    Console.WriteLine(p.User.DisplayName);
                });
            }
            catch
            {
            }
        }
Esempio n. 3
0
        public void SaveAndLoadTenantProcessTest()
        {
            IWfProcessDescriptor processDesp = CreateTestProcessDescriptor();

            string tenantCode = UuidHelper.NewUuidString();

            PrepareTenantContext(tenantCode);

            WfProcessDescriptorManager.SaveDescriptor(processDesp);

            //加载同一个租户的流程定义,如果不存在,会抛出异常
            IWfProcessDescriptor loadedSameTenant = WfProcessDescriptorManager.LoadDescriptor(processDesp.Key);

            Assert.AreEqual(processDesp.Key, loadedSameTenant.Key);

            PrepareTenantContext(UuidHelper.NewUuidString());

            try
            {
                loadedSameTenant = WfProcessDescriptorManager.LoadDescriptor(processDesp.Key);

                throw new ApplicationException("不应该加载到别的租户的流程");
            }
            catch (SystemSupportException)
            {
            }
        }
        protected override void OnPreRender(EventArgs e)
        {
            IWfProcess currentProcess = this.process;

            //if (currentProcess == null && ProcessContext.Current.OriginalActivity != null) //12-29
            //    currentProcess = ProcessContext.Current.OriginalActivity.Process;          //12-29
            if (currentProcess == null && WfClientContext.Current.OriginalActivity != null)
            {
                currentProcess = WfClientContext.Current.OriginalActivity.Process;
            }

            if (currentProcess != null)
            {
                IWfProcessDescriptor processDesp = currentProcess.CurrentActivity.Descriptor.Process;

                if (string.IsNullOrEmpty(ProcessDespKey) == false)
                {
                    //processDesp = WorkflowSettings.GetConfig().ProcessDescriptorManager.GetProcessDescriptor(ProcessDespKey);
                    processDesp = WfProcessDescriptorManager.GetDescriptor(ProcessDespKey);
                }

                RenderActivities(this, currentProcess, processDesp);
            }

            base.OnPreRender(e);
        }
        private static List <IWfProcessDescriptor> SaveProcessDescriptor(WfProcessImporterContext context)
        {
            List <IWfProcessDescriptor> result = new List <IWfProcessDescriptor>();

            XElementFormatter formatter = new XElementFormatter();

            formatter.OutputShortType = false;

            foreach (PackagePart part in context.ProcessDescParts)
            {
                XDocument            xmlDoc      = XDocument.Load(part.GetStream());
                IWfProcessDescriptor processDesp = (IWfProcessDescriptor)formatter.Deserialize(xmlDoc.Root);

                WfProcessDescriptorManager.SaveDescriptor(processDesp);

                IUser user = null;

                if (DeluxePrincipal.IsAuthenticated)
                {
                    user = DeluxeIdentity.CurrentUser;
                }

                WfProcessDescriptorInfoAdapter.Instance.UpdateImportTime(processDesp.Key, user);

                result.Add(processDesp);
            }

            return(result);
        }
Esempio n. 6
0
 public static IWfProcessDescriptor LoadProcessDescriptorFromFile(string fileName)
 {
     using (FileStream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
     {
         return(WfProcessDescriptorManager.LoadDescriptor(stream));
     }
 }
        public WfProcessStartupParams ClientToServer(WfClientProcessStartupParams client, ref WfProcessStartupParams server)
        {
            client.NullCheck("client");

            if (server == null)
            {
                server = new WfProcessStartupParams();
            }

            if (this._TestMode == false)
            {
                server.ProcessDescriptor = WfProcessDescriptorManager.GetDescriptor(client.ProcessDescriptorKey);
            }

            WfClientDictionaryConverter.Instance.ClientToServer(client.ApplicationRuntimeParameters, server.ApplicationRuntimeParameters);
            WfClientDictionaryConverter.Instance.ClientToServer(client.OverridableInitialActivityProperties, server.OverridableInitialActivityProperties);

            server.AutoCommit = client.AutoCommit;
            server.AutoStartInitialActivity        = client.AutoStartInitialActivity;
            server.CheckStartProcessUserPermission = client.CheckStartProcessUserPermission;
            server.DefaultTaskTitle   = client.DefaultTaskTitle;
            server.DefaultUrl         = client.DefaultUrl;
            server.RelativeID         = client.RelativeID;
            server.RelativeURL        = client.RelativeURL;
            server.ResourceID         = client.ResourceID;
            server.RuntimeProcessName = client.RuntimeProcessName;

            server.Creator    = (IUser)client.Creator.ToOguObject();
            server.Department = (IOrganization)client.Department.ToOguObject();

            WfClientAssigneeCollectionConverter.Instance.ClientToServer(client.Assignees, server.Assignees);

            return(server);
        }
Esempio n. 8
0
        private void InitInstanceByProcessDescKey(string processDescKey)
        {
            List <IWfProcessDescriptor> processDesps = new List <IWfProcessDescriptor>();

            processDesps.Add(WfProcessDescriptorManager.LoadDescriptor(processDescKey));

            instanceDescription.Value = JSONSerializerExecute.Serialize(processDesps);
        }
        public Stream WfDynamicProcessToExcel(string processKey)
        {
            OperationContext.Current.FillContextToOguServiceContext();

            WfProcessDescriptor       processDesp = (WfProcessDescriptor)WfProcessDescriptorManager.LoadDescriptor(processKey);
            WfClientProcessDescriptor client      = null;

            WfClientProcessDescriptorConverter.Instance.ServerToClient(processDesp, ref client);

            return(WfClientProcessDescriptorConverter.Instance.ClientDynamicProcessToExcelStream(client));
        }
        public bool ExsitsProcessKey(string processKey)
        {
            if (processKey.IsNullOrEmpty())
            {
                throw new ApplicationException(Translator.Translate(Define.DefaultCulture, "流程描述的Key不能为空"));
            }

            OperationContext.Current.FillContextToOguServiceContext();

            return(WfProcessDescriptorManager.ExsitsProcessKey(processKey));
        }
Esempio n. 11
0
        private void RenderInfo(string processDescKey)
        {
            processDescKeyHidden.Value = processDescKey;

            if (processDescKey.IsNotEmpty())
            {
                IWfProcessDescriptor processDesp = WfProcessDescriptorManager.GetDescriptor(processDescKey);

                processDescCaption.InnerText = string.Format("流程Key: {0}, 名称: {1}", processDescKey, processDesp.Name);
            }
        }
Esempio n. 12
0
        public void CreateProcessTemplateExecutorTest()
        {
            IWfProcessDescriptor processDesp = CreateTestProcessDescriptor();

            WfSaveTemplateExecutor executor = new WfSaveTemplateExecutor(processDesp);

            executor.Execute();

            Assert.AreEqual(WfDesignerOperationType.CreateTemplate, executor.OperationType);
            IWfProcessDescriptor loadedProcessDesp = WfProcessDescriptorManager.LoadDescriptor(processDesp.Key);

            Assert.AreEqual(processDesp.Key, loadedProcessDesp.Key);
        }
        public void ExcelToSaveDescriptor(string processKey, Stream stream)
        {
            OperationContext.Current.FillContextToOguServiceContext();

            WfCreateClientDynamicProcessParams processParams = ExcelToWfCreateClientDynamicProcessParams(processKey, stream);

            WfClientDynamicProcessBuilder builder = new WfClientDynamicProcessBuilder(processParams);
            WfClientProcessDescriptor     client  = builder.Build(processParams.Key, processParams.Name);

            WfProcessDescriptor processDesp = null;

            WfClientProcessDescriptorConverter.Instance.ClientToServer(client, ref processDesp);

            WfProcessDescriptorManager.SaveDescriptor(processDesp);
        }
        public WfClientProcessDescriptor LoadDescriptor(string processKey)
        {
            if (processKey.IsNullOrEmpty())
            {
                throw new ApplicationException(Translator.Translate(Define.DefaultCulture, "流程描述的Key不能为空"));
            }

            OperationContext.Current.FillContextToOguServiceContext();

            WfProcessDescriptor processDesp = (WfProcessDescriptor)WfProcessDescriptorManager.LoadDescriptor(processKey);

            WfClientProcessDescriptor clientProcessDesp = null;

            WfClientProcessDescriptorConverter.Instance.ServerToClient(processDesp, ref clientProcessDesp);

            return(clientProcessDesp);
        }
Esempio n. 15
0
        public void ModifyProcessTemplateExecutorTest()
        {
            IWfProcessDescriptor processDesp = CreateTestProcessDescriptor();

            WfSaveTemplateExecutor createExecutor = new WfSaveTemplateExecutor(processDesp);

            createExecutor.Execute();

            WfSaveTemplateExecutor modifyExecutor = new WfSaveTemplateExecutor(processDesp);

            //再保存一次,变成修改操作
            modifyExecutor.Execute();

            Assert.AreEqual(WfDesignerOperationType.ModifyTemplate, modifyExecutor.OperationType);
            IWfProcessDescriptor loadedProcessDesp = WfProcessDescriptorManager.LoadDescriptor(processDesp.Key);

            Assert.AreEqual(processDesp.Key, loadedProcessDesp.Key);
        }
Esempio n. 16
0
        private WfProcessStartupParams GenerateStartupParams()
        {
            var wfDescriptor = WfProcessDescriptorManager.GetDescriptor(this.ProcessKey);

            wfDescriptor.InitialActivity.Resources.Add(new WfUserResourceDescriptor(this.Creator));

            WfProcessStartupParams startupParams = new WfProcessStartupParams();

            startupParams.ProcessDescriptor = wfDescriptor;
            startupParams.Creator           = this.Operator;
            startupParams.Department        = this.Operator.TopOU;
            startupParams.Assignees.Add(this.Operator);
            startupParams.DefaultTaskTitle = startupParams.ProcessDescriptor.Name;
            startupParams.ResourceID       = UuidHelper.NewUuidString();
            startupParams.AutoCommit       = true;

            return(startupParams);
        }
        public void LoadProcessDesp()
        {
            IWfProcessDescriptor procDesp = WfProcessTestCommon.CreateProcessDescriptor();

            WfProcessDescriptorManager.SaveDescriptor(procDesp);
            string key = procDesp.Key;;
            IWfProcessDescriptor desp = WfProcessDescriptorManager.LoadDescriptor(key);

            //本机修改过app.config,确实为此。
            Assert.AreEqual(8, desp.Properties.Count, "流程在配置文件中的属性项。任意添加|减少项就会报错");

            Assert.AreEqual(9, desp.InitialActivity.Properties.Count, "活动在配置文件中的属性项。任意添加|减少项就会报错");

            if (desp.InitialActivity.BranchProcessTemplates.Count != 0)
            {
                Assert.AreEqual(7, desp.InitialActivity.BranchProcessTemplates[0].Properties.Count, "分支流程在配置文件中的属性项。任意添加|减少项就会报错");
            }

            Assert.AreEqual(6, desp.InitialActivity.ToTransitions[0].Properties.Count, "线在配置文件中的属性项。任意添加|减少项就会报错");
        }
Esempio n. 18
0
        public static void ExportProcessDescriptors(WfExportProcessDescriptorParams exportParams, Stream outputStream, params string[] processDespKeys)
        {
            exportParams.NullCheck("exportParams");
            processDespKeys.NullCheck("processDespKeys");

            WfExportProcessDescriptorContext context = new WfExportProcessDescriptorContext(exportParams);

            using (Package package = ZipPackage.Open(outputStream, FileMode.Create))
            {
                foreach (string key in processDespKeys)
                {
                    WfProcessDescriptor processDesp = (WfProcessDescriptor)WfProcessDescriptorManager.LoadDescriptor(key);

                    ExportProcessPart(package, processDesp, context);
                    ExportMatrixPart(package, processDesp, context);
                }

                ExportMappingPart(package, context);
            }
        }
Esempio n. 19
0
        public byte[] Export()
        {
            using (MemoryStream outputStream = new MemoryStream())
            {
                using (Package package = ZipPackage.Open(outputStream, FileMode.Create))
                {
                    foreach (var key in this.ProcessKeys)
                    {
                        var processDesc = (WfProcessDescriptor)WfProcessDescriptorManager.LoadDescriptor(key);
                        ExportProcessPart(package, processDesc);
                        ExportMatrixPart(package, processDesc);
                    }

                    ExportMappingPart(package);
                    package.Flush();
                    outputStream.Flush();
                    this.Reset();

                    return(outputStream.ToArray());
                }
            }
        }
        protected void btnConfirm_Click(object sender, EventArgs e)
        {
            try
            {
                List <IWfProcessDescriptor> processDesps = new List <IWfProcessDescriptor>();

                foreach (string key in this.ProcessDescInfoDeluxeGrid.SelectedKeys)
                {
                    processDesps.Add(WfProcessDescriptorManager.LoadDescriptor(key));
                }

                resultData.Value = JSONSerializerExecute.Serialize(processDesps);

                Page.ClientScript.RegisterStartupScript(this.GetType(), "returnProcesses",
                                                        string.Format("window.returnValue = $get('resultData').value; top.close();"),
                                                        true);
            }
            catch (System.Exception ex)
            {
                WebUtility.ShowClientError(ex.Message, ex.StackTrace, "错误");
            }
        }
Esempio n. 21
0
        protected void confirmButton_TextChanged(object sender, EventArgs e)
        {
            try
            {
                processKey.Value.IsNotEmpty().FalseThrow("流程模板的Key不能为空");
                WfProcessDescriptorManager.ExsitsProcessKey(processKey.Value).TrueThrow("Key为{0}的流程模板定义已经存在", processKey.Value);
                string dropAppName = this.dropApp.Text;
                if (dropAppName == "其它")
                {
                    dropAppName = string.Empty;
                }
                string returnValueJson = string.Format("{{\"Key\":\"{0}\",\"AppName\":\"{1}\"}}", processKey.Value, dropAppName);
                Response.Write(string.Format("<script type='text/javascript'>top.returnValue = '{0}'; top.close();</script>",
                                             WebUtility.CheckScriptString(returnValueJson)));

                Response.End();
            }
            catch (System.Exception ex)
            {
                WebUtility.ShowClientError(ex.Message, ex.StackTrace, "错误");
            }
        }
Esempio n. 22
0
        public int DisplaceUserInProcessDescriptor(string processDespKey, string userID, string[] displacingUserIDArray)
        {
            IWfProcessDescriptor processDesp = WfProcessDescriptorManager.LoadDescriptor(processDespKey);

            IUser originalUser = OguMechanismFactory.GetMechanism().GetObjects <IUser>(SearchOUIDType.Guid, userID).FirstOrDefault();
            OguObjectCollection <IUser> displacingUsers = OguMechanismFactory.GetMechanism().GetObjects <IUser>(SearchOUIDType.Guid, displacingUserIDArray);

            List <IUser> distinctUsers = new List <IUser>();

            foreach (IUser user in displacingUsers)
            {
                if (distinctUsers.Exists(u => u.ID == user.ID) == false)
                {
                    distinctUsers.Add(user);
                }
            }

            int result = processDesp.ReplaceAllUserResourceDescriptors(originalUser, distinctUsers);

            WfProcessDescriptorManager.SaveDescriptor(processDesp);

            return(result);
        }
Esempio n. 23
0
        private void InnerStartWorkflow(string processDescKey, string appName, string programName,
                                        string relativeID, string relativeURL, bool isCloned, NameValueCollection relativeParams)
        {
            StartWorkflowControllerOperation operation = new StartWorkflowControllerOperation();

            operation.StartupParams.ProcessDescriptor = WfProcessDescriptorManager.GetDescriptor(processDescKey);

            if (operation.StartupParams.ProcessDescriptor.DefaultTaskTitle.IsNullOrEmpty())
            {
                operation.StartupParams.DefaultTaskTitle = operation.StartupParams.ProcessDescriptor.Name;
            }
            else
            {
                operation.StartupParams.DefaultTaskTitle = operation.StartupParams.ProcessDescriptor.DefaultTaskTitle;
            }

            operation.StartupParams.ResourceID = UuidHelper.NewUuidString();
            operation.StartupParams.ApplicationRuntimeParameters["ProcessRequestor"] = OguUser.CreateWrapperObject(DeluxeIdentity.CurrentUser);
            operation.ApplicationName           = appName;
            operation.ProgramName               = programName;
            operation.StartupParams.RelativeID  = relativeID;
            operation.StartupParams.RelativeURL = relativeURL;
            operation.StartupParams.Department  = DeluxeIdentity.CurrentUser.TopOU;
            operation.StartupParams.Assignees.Add(DeluxeIdentity.CurrentUser);
            operation.IsCloned = isCloned;

            operation.StartupParams.RelativeParams.CopyFrom(relativeParams);

            operation.NavigationCommand = CollectNavigationCommand(this.GetType());
            operation.SceneInfo         = CollectSceneInfo(this.GetType());

            OnInitOperation(operation);

            PerformanceMonitorHelper.GetDefaultMonitor().WriteExecutionDuration("DoStartWorkflowControllerOperation",
                                                                                () => operation.DoOperation());
        }
Esempio n. 24
0
        protected void Page_Load(object sender, EventArgs e)
        {
            string sProcessKeys = Request["wfProcessKeys"].ToString();

            string[] arrProcessKeys = sProcessKeys.Split(',');

            var xDoc = new XDocument(
                new XDeclaration("1.0", "utf-8", "true"),
                new XElement("WorkflowProcesses")
                );

            for (int i = 0; i < arrProcessKeys.Length; i++)
            {
                XElementFormatter formatter = new XElementFormatter();

                formatter.OutputShortType = false;
                WfProcessDescriptor processDesc = (WfProcessDescriptor)WfProcessDescriptorManager.LoadDescriptor(arrProcessKeys[i]);
                XElement            xeWfProcess = formatter.Serialize(processDesc);

                xDoc.Element("WorkflowProcesses").Add(xeWfProcess);
            }

            Response.ContentType     = "text/xml";
            Response.ContentEncoding = Encoding.UTF8;
            if (arrProcessKeys.Count() > 1)
            {
                Response.AppendHeader("content-disposition", "attachment;fileName=ExportedProcess.xml");
            }
            else
            {
                Response.AppendHeader("content-disposition", string.Format("attachment;fileName={0}.xml", HttpUtility.UrlEncode(arrProcessKeys[0])));
            }
            //"attachment;fileName=ExportedProcess.xml");

            xDoc.Save(Response.OutputStream);
        }
Esempio n. 25
0
        public void DeleteProcessTemplateExecutorTest()
        {
            IWfProcessDescriptor processDesp = CreateTestProcessDescriptor();

            WfSaveTemplateExecutor createExecutor = new WfSaveTemplateExecutor(processDesp);

            createExecutor.Execute();

            WfDeleteTemplateExecutor deleteExecutor = new WfDeleteTemplateExecutor(processDesp.Key);

            deleteExecutor.Execute();

            Assert.AreEqual(WfDesignerOperationType.DeleteTemplate, deleteExecutor.OperationType);

            try
            {
                IWfProcessDescriptor loadedProcessDesp = WfProcessDescriptorManager.LoadDescriptor(processDesp.Key);

                throw new ApplicationException("不应该加载到已经删除的流程");
            }
            catch (SystemSupportException)
            {
            }
        }
Esempio n. 26
0
        /// <summary>
        /// 启动默认的流程
        /// </summary>
        private void StartDefaultWorkflow()
        {
            WfProcessStartupParams startupParams = new WfProcessStartupParams();

            startupParams.ResourceID        = UuidHelper.NewUuidString();
            startupParams.ProcessDescriptor = WfProcessDescriptorManager.GetDescriptor(DefaultProcessKey);

            if (string.IsNullOrEmpty(startupParams.ProcessDescriptor.Url))
            {
                startupParams.ProcessDescriptor.Url = WfClientContext.Current.EntryUri.ToString();
            }

            if (startupParams.ProcessDescriptor.InitialActivity != null)
            {
                startupParams.ProcessDescriptor.InitialActivity.Properties.SetValue("AutoSendUserTask", false);
            }

            startupParams.Department = DeluxeIdentity.CurrentUser.TopOU;
            startupParams.Assignees.Add(DeluxeIdentity.CurrentUser);

            WfStartWorkflowExecutor executor = new WfStartWorkflowExecutor(null, startupParams);

            WfClientContext.Current.Execute(executor);
        }