예제 #1
0
파일: TaskOpt.cs 프로젝트: radtek/EMIP
        public virtual JObject ReturnToInitiator(HttpContext context)
        {
            YZRequest request = new YZRequest(context);

            this.ApproveCheck(context);

            int     taskid   = request.GetInt32("TaskID");
            JObject jPost    = request.GetPostData <JObject>();
            string  comments = (string)jPost["comments"];
            string  formdata = (string)jPost["formdata"];

            using (BPMConnection cn = new BPMConnection())
            {
                cn.WebOpen();

                //移动审批不保存表单数据
                if (!String.IsNullOrEmpty(formdata))
                {
                    BPMProcess.Post(cn, formdata);
                }

                User user = BPMTask.RecedeRestart(cn, taskid, comments);

                JObject rv = new JObject();
                rv[YZJsonProperty.success] = true;
                rv["UserFriendlyName"]     = user.FriendlyName;
                return(rv);
            }
        }
예제 #2
0
파일: Form.cs 프로젝트: radtek/EMIP
        public virtual JObject GetTaskReadInfo(HttpContext context)
        {
            YZRequest request    = new YZRequest(context);
            int       taskid     = request.GetInt32("tid");
            string    permisions = request.GetString("Permisions", null);

            BPMTask task;
            string  formFile;
            JObject perm;

            using (BPMConnection cn = new BPMConnection())
            {
                cn.WebOpen();

                task     = BPMTask.Load(cn, taskid);
                formFile = BPMProcess.GetTaskReadForm(cn, taskid);
                perm     = this.CheckPermision(cn, taskid, -1, permisions);
            }

            JObject rv = new JObject();

            rv[YZJsonProperty.success] = true;
            rv["sn"]        = task.SerialNum;
            rv["url"]       = YZUtility.GetFormRedirectUrl(formFile).ToString();
            rv["urlParams"] = task.UrlParams;
            rv["perm"]      = perm;

            return(rv);
        }
예제 #3
0
파일: Read.aspx.cs 프로젝트: JosonJiang/SSO
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!YZAuthHelper.IsAuthenticated)
        {
            FormsAuthentication.RedirectToLoginPage();
            return;
        }

        int    tid = Int32.Parse(this.Request["tid"]);
        string formFile;

        using (BPMConnection cn = new BPMConnection())
        {
            cn.WebOpen();
            formFile = BPMProcess.GetDefaultReadForm(cn, tid);
        }

        if (String.IsNullOrEmpty(formFile))
        {
            throw new Exception(Resources.YZStrings.Aspx_Read_MissForm);
        }
        else
        {
            YZUrlBuilder urlBuilder = YZUtility.GetFormRedirectUrl(this.Page, formFile);
            this.Response.Redirect(urlBuilder.ToString(), true);
        }
    }
예제 #4
0
        public virtual object GetBPMProcessRACI(HttpContext context)
        {
            YZRequest request     = new YZRequest(context);
            string    processName = request.GetString("processName");
            Version   version     = request.GetVersion("version");

            string             fileid;
            NodeItemCollection nodes;
            LinkItemCollection links;

            using (BPMConnection cn = new BPMConnection())
            {
                cn.WebOpen();
                BPMProcess.GetKMInfo(cn, processName, version, out fileid, out nodes, out links);
            }

            if (String.IsNullOrEmpty(fileid))
            {
                throw new Exception(String.Format("流程{0}无关联文件", processName));
            }


            using (IYZDbProvider provider = YZDbProviderManager.DefaultProvider)
            {
                using (IDbConnection cn = provider.OpenConnection())
                {
                    File file = File.Load(provider, cn, fileid);

                    DataTable table = file.Sprites.SortByOrder().GetRACIDetailTable(provider, cn, "result");
                    table = this.Map(table, nodes);
                    return(table);
                }
            }
        }
예제 #5
0
파일: TaskOpt.cs 프로젝트: radtek/EMIP
        public virtual JObject DirectSend(HttpContext context)
        {
            YZRequest request      = new YZRequest(context);
            int       stepid       = request.GetInt32("StepID");
            bool      saveFormData = request.GetBool("SaveFormData");

            using (BPMConnection cn = new BPMConnection())
            {
                cn.WebOpen();

                if (saveFormData)
                {
                    BPMProcess.Post(cn, context.Request.InputStream);
                }

                BPMStepCollection newsteps = BPMProcStep.DirectSend(cn, stepid);

                List <string> to = new List <string>();
                foreach (BPMProcStep step in newsteps)
                {
                    to.Add(String.Format("{0}[{1}]", step.NodeName, YZStringHelper.GetUserFriendlyName(step.RecipientAccount, step.RecipientFullName)));
                }

                JObject rv = new JObject();
                rv[YZJsonProperty.success] = true;
                rv["tosteps"] = String.Join(";", to.ToArray());

                return(rv);
            }
        }
예제 #6
0
파일: TaskOpt.cs 프로젝트: radtek/EMIP
        public virtual JObject Jump(HttpContext context)
        {
            YZRequest request = new YZRequest(context);

            this.ApproveCheck(context);

            int        stepid      = request.GetInt32("StepID", -1);
            int        taskid      = request.GetInt32("TaskID");
            string     toStepName  = request.GetString("ToStepName");
            JObject    jPost       = request.GetPostData <JObject>();
            string     comments    = (string)jPost["comments"];
            string     formdata    = (string)jPost["formdata"];
            List <int> fromStepIDs = jPost["fromStepIDs"].ToObject <List <int> >();

            using (BPMConnection cn = new BPMConnection())
            {
                cn.WebOpen();

                //移动审批不保存表单数据
                if (!String.IsNullOrEmpty(formdata))
                {
                    BPMProcess.Post(cn, formdata);
                }

                BPMProcStep step = BPMTask.Jump(cn, taskid, stepid, fromStepIDs.ToArray(), toStepName, comments);

                JObject rv = new JObject();
                rv[YZJsonProperty.success] = true;
                rv["StepName"]             = step.NodeName;
                rv["UserFriendlyName"]     = YZStringHelper.GetUserFriendlyName(step.RecipientAccount, step.RecipientFullName);

                return(rv);
            }
        }
예제 #7
0
파일: TaskOpt.cs 프로젝트: radtek/EMIP
        public virtual JObject Transfer(HttpContext context)
        {
            YZRequest request = new YZRequest(context);

            this.ApproveCheck(context);

            int     stepid         = request.GetInt32("StepID");
            string  memberFullName = request.GetString("MemberFullName");
            JObject jPost          = request.GetPostData <JObject>();
            string  comments       = (string)jPost["comments"];
            string  formdata       = (string)jPost["formdata"];

            using (BPMConnection cn = new BPMConnection())
            {
                cn.WebOpen();

                //移动审批不保存表单数据
                if (!String.IsNullOrEmpty(formdata))
                {
                    BPMProcess.Post(cn, formdata);
                }

                User user = BPMProcStep.Transfer(cn, stepid, memberFullName, comments);

                JObject rv = new JObject();
                rv[YZJsonProperty.success] = true;
                rv["UserFriendlyName"]     = user.FriendlyName;

                return(rv);
            }
        }
예제 #8
0
        public virtual object GetTaskTraceInfo(HttpContext context)
        {
            YZRequest request = new YZRequest(context);
            int       taskid  = request.GetInt32("TaskID");

            BPMTask            task;
            NodeItemCollection nodes = new NodeItemCollection();
            LinkItemCollection links = new LinkItemCollection();
            BPMStepCollection  steps = new BPMStepCollection();

            //获得数据
            using (BPMConnection cn = new BPMConnection())
            {
                cn.WebOpen();

                task = BPMTask.Load(cn, taskid);
                BPMProcess.GetTaskTraceInfo(cn, task.ProcessName, task.ProcessVersion, out nodes, out links);
                steps = BPMTask.GetAllSteps(cn, taskid);
            }

            return(new
            {
                Task = this.SerializeTask(task),
                Process = new
                {
                    Nodes = nodes,
                    Links = links
                },
                Steps = this.SerializeSteps(steps)
            });
        }
예제 #9
0
        public virtual JObject RecedeBack(HttpContext context)
        {
            YZRequest  request   = new YZRequest(context);
            int        stepid    = request.GetInt32("StepID");
            JObject    jPost     = request.GetPostData <JObject>();
            string     comments  = (string)jPost["comments"];
            string     formdata  = (string)jPost["formdata"];
            List <int> toStepIDs = jPost["toStepIDs"].ToObject <List <int> >();

            BPMProcStep srcStep;

            using (BPMConnection cn = new BPMConnection())
            {
                cn.WebOpen();

                if (!String.IsNullOrEmpty(formdata))
                {
                    BPMProcess.Post(cn, formdata);
                }

                srcStep = BPMProcStep.Load(cn, stepid);

                BPMStepCollection newSteps = BPMProcStep.RecedeBack(cn, stepid, toStepIDs.ToArray(), comments);
                List <string>     to       = new List <string>();
                foreach (BPMProcStep step in newSteps)
                {
                    to.Add(String.Format("{0}[{1}]", step.NodeName, YZStringHelper.GetUserShortName(step.RecipientAccount, step.RecipientFullName)));
                }

                JObject rv = new JObject();
                rv["tosteps"] = String.Join(";", to.ToArray());

                return(rv);
            }
        }
예제 #10
0
        public virtual JArray GetFormReadData(BPMConnection cn, JObject request)
        {
            int tid = Int32.Parse((string)request["TID"]);

            FlowDataSet dataset = BPMProcess.GetFormDataForRead(cn, tid);

            return(this.ToResult(dataset, true));
        }
예제 #11
0
        /// <summary>
        /// Starts the miner process
        /// </summary>
        /// <returns></returns>
        protected virtual BPMProcess StartProcess()
        {
            var process = new BPMProcess();

            IsMining = true;
            process.Start(MinerWorkingDirectory, MinerArguments, MinerFileName, Hardware == HardwareType.AMD, MinerBaseType);
            process.MinerProcess.Exited += MinerExited;
            return(process);
        }
예제 #12
0
        public virtual object Process(HttpContext context)
        {
            YZRequest request = new YZRequest(context);
            int       stepid  = request.GetInt32("StepID");
            string    uid     = request.GetString("uid", YZAuthHelper.LoginUserAccount); //共享任务uid为空,会导致重定向到登录页面,产生异常

            using (BPMConnection cn = new BPMConnection())
            {
                string orguid = YZAuthHelper.LoginUserAccount;
                YZAuthHelper.SetAuthCookie(uid);
                try
                {
                    cn.WebOpen();
                }
                finally
                {
                    YZAuthHelper.SetAuthCookie(orguid);
                }

                ProcessInfo processInfo = BPMProcess.GetProcessInfo(cn, stepid);
                if (processInfo.Links.Count == 0)
                {
                    throw new BPMException(BPMExceptionType.MissOutLink, processInfo.NodeName);
                }

                string postXml = @"{0}
                    <XForm>
                        <Header>
                            <Method>Process</Method>
                            <PID>{1}</PID>
                            <Action>{2}</Action>
                            <Comment></Comment>
                        </Header>
                        <FormData>
                        </FormData>
                    </XForm>";

                postXml = String.Format(postXml,
                                        "<?xml version=\"1.0\"?>",
                                        stepid,
                                        YZUtility.EncodeXMLInnerText(processInfo.Links[0].DisplayString));

                using (MemoryStream postStream = new MemoryStream(Encoding.UTF8.GetBytes(postXml)))
                {
                    PostResult postResult = BPMProcess.Post(cn, postStream);

                    return(new
                    {
                        success = true,
                        result = (postResult.PostResultType == PostResultType.TaskFinishedApproved || postResult.PostResultType == PostResultType.TaskFinishedRejected) ? "finished" : "running"
                    });
                }
            }
        }
예제 #13
0
        public virtual JArray GetFormPostData(BPMConnection cn, JObject request)
        {
            string  processName    = (string)request["ProcessName"];
            Version processVersion = new Version((string)request["ProcessVersion"]);
            string  owner          = (string)request["Owner"];
            int     restartTaskID  = request.Property("restartTaskID") != null  ? (int)request["restartTaskID"]:-1;

            FlowDataSet dataset = BPMProcess.GetFormData(cn, processName, processVersion, owner, restartTaskID);

            return(this.ToResult(dataset, true));
        }
예제 #14
0
        public virtual BPMProcess LoadFloFile(HttpContext context, HttpPostedFile file, string fileName, long fileSize, string fileExt)
        {
            YZRequest request = new YZRequest(context);

            BPMProcess process = new BPMProcess();

            file.InputStream.Seek(0, SeekOrigin.Begin);
            process.Load(file.InputStream);

            return(process);
        }
예제 #15
0
파일: ProcessAdmin.cs 프로젝트: radtek/EMIP
        protected virtual JObject Serialize(BPMProcess process)
        {
            JObject rv = new JObject();

            rv["ProcessName"]    = process.Name;
            rv["Active"]         = process.Active;
            rv["ProcessVersion"] = process.Version.ToString(2);
            rv["Description"]    = process.Property.Description;

            return(rv);
        }
예제 #16
0
        public virtual void SaveProcessAsFile(HttpContext context)
        {
            YZRequest request  = new YZRequest(context);
            string    filename = request.GetString("fileName");

            JObject    jProcess = JObject.Parse(Encoding.UTF8.GetString(Convert.FromBase64String(request.GetString("process", null))));
            BPMProcess process  = jProcess.ToObject <BPMProcess>();

            this.ProcessResponseHeader(context, filename, true);
            process.Save(context.Response.OutputStream);
        }
예제 #17
0
        public override void Start()
        {
            // Override the standard StartProcess since this miner requires a configuration file vs command line
            GenerateLyclConfig();

            MinerProcess = new BPMProcess();

            IsMining = true;
            MinerProcess.Start(MinerWorkingDirectory, MinerConfigArguments, MinerFileName, Hardware == HardwareType.AMD, MinerBaseType);
            MinerProcess.MinerProcess.Exited += MinerExited;
        }
예제 #18
0
파일: Read.aspx.cs 프로젝트: JosonJiang/SSO
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!AspxHelper.IsAuthenticated)
        {
            FormsAuthentication.RedirectToLoginPage();
        }

        int tid = Int32.Parse(this.Request["tid"]);

        string formFile;

        using (BPMConnection cn = new BPMConnection())
        {
            cn.WebOpen(this.Page);

            string token = Request.QueryString["token"];
            if (String.IsNullOrEmpty(token))
            {
                if (!SecurityManager.CheckTaskAccessPermision(cn, tid, BPMPermision.TaskRead, cn.UID))
                {
                    throw new BPMException(BPMExceptionType.PermDeniedReadForm);
                }
            }
            else
            {
                if (!AspxHelper.CheckTaskAccessToken(tid, token) &&
                    !SecurityManager.CheckTaskAccessPermision(cn, tid, BPMPermision.TaskRead, cn.UID))
                {
                    throw new BPMException(BPMExceptionType.PermDeniedReadForm);
                }
            }

            formFile = BPMProcess.GetDefaultReadForm(cn, tid);
        }

        if (String.IsNullOrEmpty(formFile))
        {
            throw new Exception(Resources.BPMResource.Read_MissForm);
        }
        else
        {
            if (formFile.IndexOf('?') != -1)
            {
                this.Server.Transfer(this.ResolveClientUrl("../XForm/") + formFile + "&" + this.Request.QueryString.ToString(), false);
            }
            else
            {
                this.Server.Transfer(this.ResolveClientUrl("../XForm/") + formFile + "?" + this.Request.QueryString.ToString(), false);
            }

            this.Response.End();
        }
    }
예제 #19
0
파일: DataSource.cs 프로젝트: radtek/EMIP
        public virtual TableIdentityCollection GetProcessGlobalTableIdentitys(HttpContext context)
        {
            YZRequest request     = new YZRequest(context);
            string    serverName  = request.GetString("ServerName", null);
            string    processName = request.GetString("ProcessName");

            using (BPMConnection cn = new BPMConnection())
            {
                this.OpenConnection(cn, serverName);
                return(BPMProcess.GetProcessGlobalTableIdentitys(cn, processName));
            }
        }
예제 #20
0
        public virtual JObject GetProcessForecastSteps(HttpContext context)
        {
            YZRequest request     = new YZRequest(context);
            string    processName = request.GetString("processName");
            Version   version     = request.GetVersion("version");
            string    owner       = request.GetString("owner", null);
            string    xmlData     = request.GetString("xmlData", null);

            if (!String.IsNullOrEmpty(xmlData))
            {
                xmlData = Encoding.UTF8.GetString(Convert.FromBase64String(xmlData));
            }

            if (String.IsNullOrEmpty(owner))
            {
                throw new Exception(String.Format(Resources.YZStrings.Aspx_ProcessForecastNoPos, YZAuthHelper.LoginUserAccount));
            }

            JObject rv = new JObject();

            //获得数据
            BPMStepCollection steps = null;

            using (BPMConnection cn = new BPMConnection())
            {
                cn.WebOpen();
                steps = BPMProcess.GetForecastSteps(cn, processName, version, owner, xmlData);

                //将数据转化为Json集合
                JArray children = new JArray();
                rv[YZJsonProperty.children] = children;

                foreach (BPMProcStep step in steps)
                {
                    if (!step.IsHumanStep)
                    {
                        continue;
                    }

                    children.Add(Serialize(cn, step));
                }

                rv[YZJsonProperty.total] = children.Count;
            }

            //输出数据
            rv[YZJsonProperty.success] = true;
            return(rv);
        }
예제 #21
0
파일: Form.cs 프로젝트: radtek/EMIP
        public virtual void SaveMobileFormSetting(HttpContext context)
        {
            YZRequest request     = new YZRequest(context);
            string    processName = request.GetString("processName");
            Version   version     = request.GetVersion("version");

            JObject           post = request.GetPostData <JObject>();
            MobileFormSetting mobileFormSetting = post.ToObject <MobileFormSetting>();

            using (BPMConnection cn = new BPMConnection())
            {
                cn.WebOpen();
                BPMProcess.SaveMobileFormSetting(cn, processName, version, mobileFormSetting);
            }
        }
예제 #22
0
파일: ProcessAdmin.cs 프로젝트: radtek/EMIP
        public virtual BPMProcess GetProcessDefine(HttpContext context)
        {
            YZRequest  request = new YZRequest(context);
            string     path    = request.GetString("path", null);
            Version    version = request.GetVersion("version", null);
            BPMProcess process = new BPMProcess();

            //获得数据
            using (BPMConnection cn = new BPMConnection())
            {
                cn.WebOpen();
                process.Load(cn, path, version);
            }

            return(process);
        }
예제 #23
0
파일: Form.cs 프로젝트: radtek/EMIP
        public virtual object GetMobileFormSetting(HttpContext context)
        {
            YZRequest request     = new YZRequest(context);
            string    processName = request.GetString("processName");
            Version   version     = request.GetVersion("version");

            using (BPMConnection cn = new BPMConnection())
            {
                cn.WebOpen();

                return(new
                {
                    tables = BPMProcess.GetProcessGlobalTableIdentitys(cn, processName, version),
                    mobileFormSetting = BPMProcess.GetMobileFormSetting(cn, processName, version)
                });
            }
        }
예제 #24
0
파일: ProcessAdmin.cs 프로젝트: radtek/EMIP
        public virtual object GetProcessProperty(HttpContext context)
        {
            YZRequest request     = new YZRequest(context);
            string    processName = request.GetString("processName");
            Version   version     = request.GetVersion("version");

            using (BPMConnection cn = new BPMConnection())
            {
                cn.WebOpen();

                return(new {
                    GlobalTableIdentitys = BPMProcess.GetProcessGlobalTableIdentitys(cn, processName, version),
                    Property = BPMProcess.GetProcessProperty(cn, processName, version),
                    MessageGroups = BPMProcess.GetMessageGroups(cn, processName, version),
                    Events = BPMProcess.GetEvents(cn, processName, version)
                });
            }
        }
예제 #25
0
파일: ProcessAdmin.cs 프로젝트: radtek/EMIP
        public virtual object SaveProcessAsNewVersion(HttpContext context)
        {
            YZRequest  request = new YZRequest(context);
            string     path    = request.GetString("path");
            JObject    post    = request.GetPostData <JObject>();
            BPMProcess process = post.ToObject <BPMProcess>();

            using (BPMConnection cn = new BPMConnection())
            {
                cn.WebOpen();
                process.Save(cn, path, null, true);
            }

            return(new
            {
                server = WebConfigurationManager.AppSettings["BPMServerName"],
                version = process.Version.ToString(2)
            });
        }
예제 #26
0
        /// <summary>
        /// Starts the miner process
        /// </summary>
        /// <returns></returns>
        protected virtual BPMProcess StartProcess()
        {
            var process = new BPMProcess();

            IsMining = true;
            FormatPerMinerCoinCombo();

            ObservableCollection <AccountMinerTypeExtraParams> AccountMinerTypeExtraParamsList = (ObservableCollection <AccountMinerTypeExtraParams>)Application.Current.Properties["AccountMinerTypeExtraParamsList"];
            AccountMinerTypeExtraParams accountMinerTypeExtraParams = AccountMinerTypeExtraParamsList.First(x => x.MinerBaseType == MinerBaseType);

            if (accountMinerTypeExtraParams != null && accountMinerTypeExtraParams.ExtraParams != String.Empty)
            {
                // Add Extra Params
                MinerArguments = String.Format("{0} {1}", MinerArguments, accountMinerTypeExtraParams.ExtraParams);
            }

            process.Start(MinerWorkingDirectory, MinerArguments, MinerFileName, Hardware == HardwareType.AMD, MinerBaseType);
            process.MinerProcess.Exited += MinerExited;
            return(process);
        }
예제 #27
0
        public virtual void Reject(HttpContext context)
        {
            YZRequest request  = new YZRequest(context);
            int       taskid   = request.GetInt32("TaskID");
            JObject   jPost    = request.GetPostData <JObject>();
            string    comments = (string)jPost["comments"];
            string    formdata = (string)jPost["formdata"];

            using (BPMConnection cn = new BPMConnection())
            {
                cn.WebOpen();

                if (!String.IsNullOrEmpty(formdata))
                {
                    BPMProcess.Post(cn, formdata);
                }

                BPMTask.Reject(cn, taskid, comments);
            }
        }
예제 #28
0
        /// <summary>
        /// 加签
        /// </summary>
        /// <param name="StepID">步骤</param>
        /// <param name="Action">节点</param>
        /// <param name="Comment">意见</param>
        /// <param name="Consign_ConsignUsers">加签人</param>
        private void Consign(int StepID, string Action, string Comment, string Consign_ConsignUsers)
        {
            try
            {
                StringBuilder sb = null;
                sb = new StringBuilder();
                sb.Append(String.Format("<?xml version=\"1.0\"?>"));
                sb.Append(String.Format("<XForm>"));
                sb.Append(String.Format(@"
                               <Header>
                                 <Method>Process</Method>
                                 <PID>{0}</PID>
                                 <Action>{1}</Action>
                                 <Comment>{2}</Comment>
                                 <ConsignEnabled>True</ConsignEnabled>
                                 <ConsignUsers>{3}</ConsignUsers>
                                 <ConsignRoutingType>Parallel</ConsignRoutingType>
                                 <ConsignReturnType>Return</ConsignReturnType>
                                 <InviteIndicateUsers></InviteIndicateUsers>
                             </Header>
                             <FormData>
                             </FormData>", StepID, Action, Comment, Consign_ConsignUsers));
                sb.Append(String.Format("</XForm>"));

                MemoryStream xmlStream = new MemoryStream(UTF8Encoding.UTF8.GetBytes(sb.ToString()));

                using (BPMConnection cn = new BPMConnection())
                {
                    cn.WebOpen();
                    PostResult postResult = BPMProcess.Post(cn, xmlStream);
                    if (postResult == null)
                    {
                        throw new Exception("审批失败");
                    }
                }
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
예제 #29
0
        public virtual object GetProcessDefine(HttpContext context)
        {
            YZRequest request     = new YZRequest(context);
            string    processName = request.GetString("processName");
            Version   version     = request.GetVersion("version");

            NodeItemCollection nodes = new NodeItemCollection();
            LinkItemCollection links = new LinkItemCollection();

            //获得数据
            using (BPMConnection cn = new BPMConnection())
            {
                cn.WebOpen();
                BPMProcess.GetTaskTraceInfo(cn, processName, version, out nodes, out links);
            }

            return(new {
                Nodes = nodes,
                Links = links
            });
        }
예제 #30
0
파일: ProcessAdmin.cs 프로젝트: radtek/EMIP
        public virtual void SaveProcessProperty(HttpContext context)
        {
            YZRequest request     = new YZRequest(context);
            string    folder      = request.GetString("folder", "");
            string    processName = request.GetString("processName");
            Version   version     = request.GetVersion("version");
            string    path        = System.IO.Path.Combine(folder, processName);

            JObject                post          = request.GetPostData <JObject>();
            ProcessProperty        property      = post["Property"].ToObject <ProcessProperty>();
            MessageGroupCollection messageGroups = post["MessageGroups"].ToObject <MessageGroupCollection>();
            EventCollection        events        = post["Events"].ToObject <EventCollection>();
            ACL acl = post["acl"].ToObject <ACL>();

            using (BPMConnection cn = new BPMConnection())
            {
                cn.WebOpen();
                BPMProcess.SetProcessProperty(cn, processName, version, property, messageGroups, events);
                SecurityManager.SaveACL(cn, SecurityResType.Process, path, null, acl);
            }
        }