public JsonResult Load(string WorkflowCode)
        {
            return(ExecuteFunctionRun(() => {
                WorkflowClauseViewModel model = new WorkflowClauseViewModel();

                WorkflowTemplate.WorkflowClause SelectedClause = this.Engine.WorkflowManager.GetClause(WorkflowCode);
                var WorkflowVersions = LoadVersion(WorkflowCode);

                // 流水号的重置策略
                var SeqnoResetTypes = LoadSeqNoResetTypes();
                //工作日历
                var WorkCalendar = LoadWorkCalendar();

                int defaultVersion = this.Engine.WorkflowManager.GetWorkflowDefaultVersion(WorkflowCode);
                model.WorkflowCode = WorkflowCode;
                model.WorkflowVersion = defaultVersion.ToString();
                model.IsControlUsable = BizWorkflowPackageLockByID(WorkflowCode);
                model.SeqNoResetType = Instance.SequenceNoResetType.None.ToString(); //默认值
                var returnValue = new{
                    IsControlUsable = true,                                          //是否可编辑
                    WorkflowVersions = WorkflowVersions,                             //流程版本
                    SeqNoResetTypes = SeqnoResetTypes,                               //流水号重置策略
                    CalendarList = WorkCalendar,                                     //工作日历
                    WorkflowClause = model                                           //运行参数
                };

                //还没保存过运行参数
                if (SelectedClause == null)
                {
                    return Json(returnValue, JsonRequestBehavior.AllowGet);
                }

                //code、名称、排序 都读取节点信息,同步保存到策略上
                model.SequenceCode = SelectedClause.SequenceCode ?? "";
                model.DisplayName = SelectedClause.WorkflowName;
                model.SortKey = SelectedClause.SortKey;
                // 工作日历
                model.WorkCalendar = SelectedClause.CalendarId;
                // 异常管理员
                model.ExceptionManager = SelectedClause.ExceptionManager;

                //流程号重置方式
                Instance.SequenceNoResetType sequenceNoResetType = SelectedClause.SeqNoResetType;
                model.SeqNoResetType = sequenceNoResetType.ToString();
                // 获得选中的工作流模板的状态
                WorkflowTemplate.WorkflowState state = SelectedClause.State;
                model.IsActive = state == OThinker.H3.WorkflowTemplate.WorkflowState.Active;
                // 流程模板的移动办公设置
                model.MobileStart = SelectedClause.MobileStart;
                // 加载图标
                model.ImageUrl = string.IsNullOrEmpty(SelectedClause.IconFileName) ? this.DefautIconImagePath : (this.PortalRoot + "/" + this.WorkflowIconDirectory + "/" + SelectedClause.IconFileName);

                return Json(returnValue, JsonRequestBehavior.AllowGet);
            }));
        }
        public JsonResult Save(WorkflowClauseViewModel model)
        {
            return(ExecuteFunctionRun(() =>
            {
                ActionResult result = new ActionResult(false, "");
                System.Web.HttpFileCollectionBase files = HttpContext.Request.Files;
                WorkflowTemplate.WorkflowClause SelectedClause = this.Engine.WorkflowManager.GetClause(model.WorkflowCode);
                // 检查输入
                int sortKey = model.SortKey;

                // 更新模板
                SelectedClause.WorkflowName = model.DisplayName;
                SelectedClause.SortKey = sortKey;

                // 移动办公设置
                SelectedClause.MobileStart = model.MobileStart;

                // 流水号编码
                SelectedClause.SequenceCode = model.SequenceCode ?? "";
                // 流水号重置方式
                SelectedClause.SeqNoResetType = (Instance.SequenceNoResetType)Enum.Parse(typeof(Instance.SequenceNoResetType), model.SeqNoResetType);

                SelectedClause.State = model.IsActive ? WorkflowTemplate.WorkflowState.Active : OThinker.H3.WorkflowTemplate.WorkflowState.Inactive;

                SelectedClause.CalendarId = model.WorkCalendar;
                //异常管理员
                SelectedClause.ExceptionManager = model.ExceptionManager;

                //旧图标地址
                string oldImagePath = SelectedClause.IconFileName;
                // 设置图标
                if (files.Count > 0 && files[0].FileName.Length > 0)
                {
                    var fileIcon = files[0];
                    if (!System.IO.Directory.Exists(WorkflowIconRootPath))
                    {
                        System.IO.Directory.CreateDirectory(WorkflowIconRootPath);
                    }

                    string fileExt = System.IO.Path.GetExtension(fileIcon.FileName);
                    if (!(fileExt == ".png" || fileExt == ".jpg" || fileExt == ".gif" || fileExt == ".bmp"))
                    {
                        result.Message = "WorkflowSetting.WorkflowTemplateSetting_ImageFormat";
                        return Json(result, JsonRequestBehavior.AllowGet);
                    }

                    //记录旧图标
                    oldImagePath = SelectedClause.IconFileName;
                    SelectedClause.IconFileName = Guid.NewGuid().ToString().ToLower() + fileExt;

                    fileIcon.SaveAs(WorkflowIconRootPath + "/" + SelectedClause.IconFileName);
                }

                //设置默认版本号
                int defaultVersion = SelectedClause.DefaultVersion;
                int.TryParse(model.WorkflowVersion, out defaultVersion);
                SelectedClause.DefaultVersion = defaultVersion;

                long result2 = this.Engine.WorkflowManager.UpdateClause(SelectedClause);
                if (result2 != ErrorCode.SUCCESS)
                {
                    result.Message = "msgGlobalString.UpdateFailed";
                    return Json(result, "text/html", JsonRequestBehavior.AllowGet);
                }
                else
                {
                    //删除旧图标
                    try
                    {
                        if (oldImagePath != SelectedClause.IconFileName)
                        {
                            System.IO.File.Delete(WorkflowIconRootPath + "/" + oldImagePath);
                        }
                    }
                    catch { }

                    // 通知结果
                    result.Message = "msgGlobalString.SaveSucced";
                    result.Success = true;
                    return Json(result, "text/html", JsonRequestBehavior.AllowGet);
                }
            }));
        }