/// <summary> /// 更新流程步骤表{流程步骤表}对象(即:一条记录 /// </summary> public int Update(TemplateStep templateStep) { using (var dbContext = UnitOfWork.Get(Unity.ContainerName)) { return(new TemplateStepRepository(dbContext).Update(templateStep)); } }
public static IStep add_Panel(this List <IStep> steps, string stepTitle, string stepSubTitle, Action <IStep> onComponentLoad) { Panel panel = new Panel(); var newStep = new TemplateStep(panel, stepTitle); newStep.Subtitle = stepSubTitle; newStep.OnComponentAction = onComponentLoad; steps.Add(newStep); return(newStep); }
public static IStep add_Control(this List <IStep> steps, Control control, string stepTitle, string stepSubTitle, Action <IStep> onComponentLoad) { control.AllowDrop = false; var newStep = new TemplateStep(control, 10, stepTitle); newStep.OnComponentAction = onComponentLoad; newStep.Subtitle = stepSubTitle; steps.Add(newStep); return(newStep); }
public static IStep createStepWithTextBox(string stepTitle, string message) { var textBox = new TextBox(); textBox.Multiline = true; textBox.ScrollBars = ScrollBars.Vertical; textBox.ReadOnly = true; textBox.Text = message; textBox.Select(0, 0); var newStep = new TemplateStep(textBox, 10, stepTitle); return(newStep); }
public static IStep add_SelectFolder(this List <IStep> steps, string stepTitle, string defaultFolder, Action <string> setResult) { // textbox var textBox = new TextBox(); textBox.TextChanged += (sender, e) => { setResult(textBox.Text); PublicDI.log.info("in TextChanged"); }; textBox.Text = defaultFolder; textBox.Width = 400; textBox.Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top; textBox.AllowDrop = true; textBox.DragDrop += (sender, e) => textBox.set_Text(Dnd.tryToGetFileOrDirectoryFromDroppedObject(e)); textBox.DragEnter += (sender, e) => e.Effect = DragDropEffects.Copy; // button var button = new Button(); button.Text = "Select Folder"; button.Width += 20; button.Click += (sender, e) => { var folderBrowserDialog = new FolderBrowserDialog(); folderBrowserDialog.SelectedPath = defaultFolder; if (folderBrowserDialog.ShowDialog() == DialogResult.OK) { textBox.Text = folderBrowserDialog.SelectedPath; folderBrowserDialog.Dispose(); } }; // panel var panel = new FlowLayoutPanel(); panel.Dock = DockStyle.Fill;// AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top; panel.Controls.Add(textBox); panel.Controls.Add(button); var newStep = new TemplateStep(panel, 10, stepTitle); steps.Add(newStep); return(newStep); }
private List <TemplateStepFixstepList> LoadNextStepOptions(InstanceStepDTO AInstanceStep) { List <TemplateStepFixstepList> vList = AInstanceStep.TemplateStep.TemplateStepFixstepLists.ConvertAll <TemplateStepFixstepList>(AItem => AItem.Clone() as TemplateStepFixstepList); //根据退回设置,加入发起步骤,作为退回的可选项 if (AInstanceStep.TemplateStep.IsFormReturnFirst) { TemplateStep vStepModel = AInstanceStep.GerFirstTemplateStep(); if (vStepModel != null) { AddReturnOptions(vList, vStepModel, vStepModel.StepName + "(退回)"); } } //根据退回设置,加入上一个有人员处理的完成步骤,作为退回的可选项 if (AInstanceStep.TemplateStep.IsFormReturn) { TemplateStep vStepModel = AInstanceStep.GetPreviousHasUserDealTemplateStep(); if (vStepModel != null) { AddReturnOptions(vList, vStepModel, vStepModel.StepName + "(退回)"); } } //根据退回设置,加入有人员处理的所有完成步骤,作为退回的可选项 if (AInstanceStep.TemplateStep.IsFormReturnFinish) { //取得所有通过的步骤实例,且要有人处理 List <InstanceStep> vEntityList = (from InstanceStep vEntity in AInstanceStep.InstanceFlow.InstanceSteps where vEntity.Status.Equals(6) && vEntity.InstanceStepUsers.Exists(AItem => (AItem as InstanceStepUser).Status.Equals(1)) select vEntity).ToList(); if (vEntityList.Any()) { //取得步骤实例对应的步骤模板 var vItems = from TemplateStep vModel in AInstanceStep.TemplateFlow.TemplateSteps where vEntityList.Exists(AItem => AItem.StepId.Equals(vModel.Fid)) select vModel; foreach (TemplateStep vStepModel in vItems) { AddReturnOptions(vList, vStepModel, vStepModel.StepName + "(退回)"); } } } return(vList); }
private void AddReturnOptions(List <TemplateStepFixstepList> AList, TemplateStep AStepModel, string AStepName = "") { if (AStepModel == null || AList == null) { return; } if (!CheckHasExistReturnOptions(AList, AStepModel)) { TemplateStepFixstepList vModel = new TemplateStepFixstepList(); vModel.Fid = Guid.NewGuid().ToString(); vModel.StepId = AStepModel.Fid; vModel.SelectStepSeq = AStepModel.Seq; vModel.SelectStepName = string.IsNullOrWhiteSpace(AStepName) ? AStepModel.StepName : AStepName; vModel.IsReturn = true; vModel.Remark = AStepModel.Seq.ToString() + "." + AStepModel.StepName; AList.Add(vModel); } }
public static IStep add_WebBrowser(this List <IStep> steps, string stepTitle, string stepSubTitle, string defaultUrl, Action <IStep> OnComponentAction) { //control.AllowDrop = false; var newStep = new TemplateStep(new Panel(), 10, stepTitle); newStep.Subtitle = stepSubTitle; newStep.OnComponentLoad = (step) => { var webBrowser = new WebBrowser(); step.UI = webBrowser; if (false == string.IsNullOrEmpty(defaultUrl)) { webBrowser.Navigate(defaultUrl); } }; newStep.OnComponentAction = OnComponentAction; steps.Add(newStep); return(newStep); }
/// <summary> /// 更新流程步骤表{流程步骤表}对象(即:一条记录 /// </summary> public int Update(TemplateStep templateStep) { return(Update <TemplateStep>(templateStep)); }
/// <summary> /// 添加流程步骤表{流程步骤表}对象(即:一条记录 /// </summary> public long Add(TemplateStep templateStep) { return(Add <TemplateStep>(templateStep)); }
/// <summary> /// Runs the wizard. /// </summary> public void Run() { if (!(configuration.Security is InternalServerSecurity)) { if (MessageBox.Show("Importing users is only valid for internal security, do you want to change to internal security now?", "Invalid security manager", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No) { return; } else { changeManager = true; } } var steps = new List <IStep>(); controller = new WizardController(steps); // Welcome text steps.Add(new TextDisplayStep("This wizard will guide you through the steps of importing users from a CSV file for this configuration", "Welcome")); // Display users step var users = new UserDisplay(); var userStep = new TemplateStep(users, 0, "Select Users to Import"); userStep.NextHandler += () => { settings.Clear(); settings.Add(users.GenerateConfirmation()); return(true); }; // File selection step var fileStep = new FileSelectionStep("Select Import File", "What CSV file to you want to import:"); fileStep.NextHandler += () => { if (!File.Exists(fileStep.SelectedFullPath)) { MessageBox.Show("Unable to find the file '" + fileStep.SelectedFullPath + "'", "Invalid import file", MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } else { try { users.LoadCsv(fileStep.SelectedFullPath); return(true); } catch (Exception error) { MessageBox.Show("Unable to load the file '" + fileStep.SelectedFullPath + "'" + Environment.NewLine + error.Message, "Invalid import file", MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } } }; steps.Add(fileStep); steps.Add(userStep); // Configuration mode step var confirmation = GenerateConfirmation(); confirmation.NextHandler += () => { if (changeManager) { configuration.Security = new InternalServerSecurity(); } users.ApplyConfiguration(configuration); configuration.Security = configuration.Security; // Force a refresh return(true); }; steps.Add(confirmation); steps.Add(new TextDisplayStep("Users have been imported", "Finished")); var result = controller.StartWizard("Security Configuration Wizard"); }
/// <summary> /// 检查通过情况下一步处理人是否填写 /// </summary> /// <param name="AStepEntity">步骤实例</param> /// <param name="ATempStep">模板步骤实例</param> /// <returns></returns> private R <string> CheckFixNextUser(DealStepDTO dto, InstanceStep AStepEntity, TemplateStep ATempStep) { R <string> vResMsg = new R <string>(); vResMsg.Code = 1; //要求必须填写,但却未填写 if (ATempStep.IsFormNextman && ATempStep.IsFormNextmanMust && AStepEntity.InstanceStepNextSelusers.Count > 0) { if (dto.NextUserList == null || dto.NextUserList.Count <= 0) { vResMsg.Msg = "未接收到流程要求选择的下一步处理人!"; return(vResMsg); } } //要求非必填,但却填写了的 if (ATempStep.IsFormNextman && !ATempStep.IsFormNextmanMust && AStepEntity.InstanceStepNextSelusers.Count > 0 && dto.NextUserList != null && dto.NextUserList.Count > 0) { var vItems = from USERINFO vSupplyUser in dto.NextUserList where !AStepEntity.InstanceStepNextSelusers.Exists(AItem => AItem.UserCode.Equals(vSupplyUser.UserCode)) select vSupplyUser.UserCode; if (vItems.Any()) { vResMsg.Msg = string.Format("接收到下一步处理人与流程要求选择的不符(如:{0})!", vItems.FirstOrDefault()); return(vResMsg); } } vResMsg.Code = 0; return(vResMsg); }
public static TemplateStep createStepWith_TextBox(string stepTitle, TextBox textBox) { var newStep = new TemplateStep(textBox, 10, stepTitle); return(newStep); }
/// <summary> /// Generate the steps required for internal security. /// </summary> /// <returns></returns> private List <IStep> GenerateInternalSteps() { var steps = new List <IStep>(); // Cache var cacheConfig = new CacheConfiguration(); var cacheStep = new TemplateStep(cacheConfig, 0, "Session Caching"); cacheStep.NextHandler += () => { (security as InternalServerSecurity).Cache = cacheConfig.GenerateConfig(); settings[1] = cacheConfig.GenerateDescription(); return(true); }; steps.Add(cacheStep); // XML logging var xmlConfig = new XmlAuditingConfiguration(); var xmlStep = new TemplateStep(xmlConfig, 0, "XML Auditing"); xmlStep.StepReachedHandler += () => { if (loggers.ContainsKey(typeof(FileXmlLogger))) { loggers.Remove(typeof(FileXmlLogger)); } }; xmlStep.NextHandler += () => { var newLogger = xmlConfig.GenerateConfig(); if (newLogger != null) { loggers.Add(typeof(FileXmlLogger), newLogger); } settings[2] = xmlConfig.GenerateDescription(); return(true); }; steps.Add(xmlStep); // Default server permission var defaultServerPermission = new SelectionStep("Default Server Permission", "What do you want as the default permission at the server level:", "None", "Allow", "Deny"); defaultServerPermission.NextHandler += () => { switch ((string)defaultServerPermission.Selected) { case "None": (security as InternalServerSecurity).DefaultRight = null; settings[3] = "No default server permission"; break; case "Allow": (security as InternalServerSecurity).DefaultRight = SecurityRight.Allow; settings[3] = "Default server permission is allow"; break; case "Deny": (security as InternalServerSecurity).DefaultRight = SecurityRight.Deny; settings[3] = "Default server permission is deny"; break; } return(true); }; steps.Add(defaultServerPermission); // Default project permission var defaultProjectPermission = new SelectionStep("Default Project Permission", "What do you want as the default permission at the project level:", "None", "Allow", "Deny"); defaultProjectPermission.NextHandler += () => { SecurityRight?right = null; switch ((string)defaultProjectPermission.Selected) { case "None": settings[4] = "No default project permission"; break; case "Allow": right = SecurityRight.Allow; settings[4] = "Default project permission is allow"; break; case "Deny": right = SecurityRight.Deny; settings[4] = "Default project permission is deny"; break; } configureProjects = () => { foreach (var project in configuration.Projects) { project.Security = new DefaultProjectSecurity { DefaultRight = right }; } }; return(true); }; steps.Add(defaultProjectPermission); // Confirmation page steps.Add(GenerateConfirmation()); steps.Add(new TextDisplayStep("Security settings have been updated", "Finished")); return(steps); }
/// <summary> /// 检测是否存在退回选项 /// </summary> /// <param name="AList">选项列表</param> /// <param name="AStepModel">要检测的步骤对象</param> /// <returns></returns> private bool CheckHasExistReturnOptions(List <TemplateStepFixstepList> AList, TemplateStep AStepModel) { bool vRes = false; if (AList == null || AList.Count <= 0) { return(vRes); } if (AStepModel == null) { return(vRes); } return(AList.Exists(AItem => (AItem as TemplateStepFixstepList).IsReturn && (AItem as TemplateStepFixstepList).SelectStepSeq.Equals(AStepModel.Seq))); }
/// <summary> /// 检查通过情况下跳转步骤设置 /// </summary> /// <param name="dto">步骤信息</param> /// <param name="AStepEntity">步骤实例</param> /// <param name="ATempStep">模板步骤实例</param> /// <returns></returns> private R <string> CheckTransferStepItem(DealStepDTO dto, InstanceStep AStepEntity, TemplateStep ATempStep) { R <string> vResMsg = new R <string>(); //不可填写的,但却填写了的 if ((!ATempStep.IsFormNextstep || ATempStep.IsFormNextstep && ATempStep.TemplateStepFixstepLists.Count <= 0) && !string.IsNullOrWhiteSpace(dto.NextStepSeq)) { vResMsg.Msg = "流程没有要求选择的下一个处理步骤,但此处却填写了!"; return(vResMsg); } //要求必须填写的,但却没有填写的 if (ATempStep.IsFormNextstep && ATempStep.IsFormNextstepMust && ATempStep.TemplateStepFixstepLists.Count > 0) { if (string.IsNullOrWhiteSpace(dto.NextStepSeq)) { vResMsg.Msg = "未接收到流程要求选择的下一个处理步骤!"; return(vResMsg); } } //填写过的 if (!string.IsNullOrWhiteSpace(dto.NextStepSeq)) { TemplateStepFixstepList vFindTempFixStep = (from TemplateStepFixstepList vItem in ATempStep.TemplateStepFixstepLists where !vItem.IsReturn && vItem.SelectStepSeq.ToString().Equals(dto.NextStepSeq) select vItem).FirstOrDefault(); if (vFindTempFixStep == null) { vResMsg.Msg = "接收到的下一个处理步骤与流程要求的跳转步骤不符!"; return(vResMsg); } //检查跳转下的处理人 var vList = from InstanceStepFixSeluser vFixUser in AStepEntity.InstanceStepFixSelusers where vFixUser.FixstepId.Equals(vFindTempFixStep.Fid) select vFixUser; //必须填写处理人但却没有填写的 if (vFindTempFixStep.IsFormNextman && vFindTempFixStep.IsFormNextmanMust && vList.Any()) { if (dto.NextUserList == null || dto.NextUserList.Count <= 0) { vResMsg.Msg = "未接收到流程要求选择的下一步处理人!"; return(vResMsg); } } //可以填写处理人,且已填写了处理人的 if (vFindTempFixStep.IsFormNextman && vList.Any() && dto.NextUserList != null && dto.NextUserList.Count > 0) { List <InstanceStepFixSeluser> vNewLsit = vList.ToList(); var vItems = from USERINFO vSupplyUser in dto.NextUserList where !vNewLsit.Exists(AItem => AItem.UserCode.Equals(vSupplyUser.UserCode)) select vSupplyUser.UserCode; if (vItems.Any()) { vResMsg.Msg = string.Format("接收到下一步处理人与流程要求选择的不符(如:{0})!", vItems.FirstOrDefault()); return(vResMsg); } vResMsg.Data = "HasCheckUser"; } } vResMsg.Code = 0; return(vResMsg); }
private (bool success, string templateStepInputId, string inputValueString) ValidateTemplateStepInput( TemplateStep templateStep, TemplateStepInput templateStepInput, IDictionary <string, dynamic> inputValues, ModelErrorDictionary errors, bool isDefaultInput) { var templateStepInputId = templateStep.Id; if (!isDefaultInput) { templateStepInputId += Templates.Constants.TemplateComponentReferenceSeparator + templateStepInput.Key; } if (inputValues.TryGetValue(templateStepInputId, out dynamic inputValueDynamic)) // Id is a reference to a step { if (templateStepInput.Type == TemplateStepInputType.Text) { try { var textValue = (string)inputValueDynamic; return(true, templateStepInputId, textValue); } catch (RuntimeBinderException) { AddInputValueError(errors, $"Expected string for \"{templateStepInput.Name ?? templateStep.Name}\"", templateStepInputId); } } else if (templateStepInput.Type == TemplateStepInputType.Radio) { try { var radioValue = (string)inputValueDynamic; try { var radioOptions = (IEnumerable <dynamic>)(templateStepInput.TypeData); if (radioOptions.Any(r => r.Value == radioValue)) { return(true, templateStepInputId, inputValueDynamic); } else { AddInputValueError(errors, $"Unexpected value; must be from the set of values {string.Join(", ", radioOptions.Select(r => $"\"{r.Value}\""))}", templateStepInputId); } } catch (RuntimeBinderException ex) { throw new Exception("Internal error: invalid template", ex); } } catch (RuntimeBinderException) { AddInputValueError(errors, $"Expected string for \"{templateStepInput.Name ?? templateStep.Name}\"", templateStepInputId); } } else if (templateStepInput.Type == TemplateStepInputType.Checkbox) { try { var checkboxValue = (bool)(bool.Parse(inputValueDynamic)); return(true, templateStepInputId, checkboxValue.ToString()); } catch (RuntimeBinderException) { AddInputValueError(errors, $"Expected boolean for \"{templateStepInput.Name ?? templateStep.Name}\"", templateStepInputId); } } } else { AddInputValueError(errors, $"Input \"{templateStepInput.Name ?? templateStep.Name}\" is required", templateStepInputId); } return(false, templateStepInputId, null); }
private R <string> ValidateDealStep(DealStepDTO dto, InstanceStepDTO AInstanceStep) { R <string> vResMsg = new R <string>(); vResMsg.Code = 1; InstanceFlow vFlowEntity = AInstanceStep.InstanceFlow; InstanceStep vStepEntity = AInstanceStep.InstanceStep; TemplateFlow vTempFlow = AInstanceStep.TemplateFlow; TemplateStep vTempStep = AInstanceStep.TemplateStep; //检查工作组是否正确 if (!vFlowEntity.GroupId.Equals(dto.GroupID)) { vResMsg.Msg = "流程实例与用户的工作组不匹配!"; return(vResMsg); } //检查流程实例状态是否合适 if (new int[] { 4, 5, 6 }.Contains(vFlowEntity.Status) || new int[] { 4, 5, 6, 7 }.Contains(vStepEntity.Status) || !vStepEntity.Progress.Equals(7)) { vResMsg.Msg = "流程实例的当前状态不适合完成此操作!"; return(vResMsg); } //检查用户是否合法 InstanceStepUser vStepUser = (from InstanceStepUser vItem in vStepEntity.InstanceStepUsers where vItem.UserCode.Equals(dto.UserCode) select vItem).FirstOrDefault(); if (vStepUser == null) { vResMsg.Msg = "当前用户没有操作权限!"; return(vResMsg); } //处理方式与身份是否匹配 if (vStepUser.UserType.Equals(3) && !dto.Status.Equals(5)) { vResMsg.Msg = "当前操作超过了用户的权限!"; return(vResMsg); } //用户是否已提交 if (new int[] { 1, 2, 3, 4 }.Contains(vStepUser.Status)) { vResMsg.Msg = "当前步骤的操作已完成!"; return(vResMsg); } //检查处理意见 if (new int[] { 1, 2, 4 }.Contains(dto.Status) && vTempStep.IsFormSuggestion && string.IsNullOrWhiteSpace(dto.Content)) { vResMsg.Msg = "未接收到流程要求填写的主办或汇签意见!"; return(vResMsg); } //检查退回步骤设置 if (dto.Status.Equals(2)) { vResMsg = CheckReturnStepItem(dto, AInstanceStep); if (vResMsg.Code == 1) { return(vResMsg); } } else if (dto.Status.Equals(1)) { //检查跳转步骤设置 vResMsg = CheckTransferStepItem(dto, vStepEntity, vTempStep); if (vResMsg.Code == 1) { return(vResMsg); } //检查下一步处理人是否填写正确 if (!vResMsg.Data.Equals("HasCheckUser")) { vResMsg = CheckFixNextUser(dto, vStepEntity, vTempStep); if (vResMsg.Code == 1) { return(vResMsg); } } } vResMsg.Code = 0; return(vResMsg); }
/// <summary> /// Runs the wizard. /// </summary> public void Run() { if (!(configuration.Security is InternalServerSecurity)) { if (MessageBox.Show("Setting permissions is only valid for internal security, do you want to change to internal security now?", "Invalid security manager", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No) { return; } else { changeManager = true; } } var steps = new List <IStep>(); controller = new WizardController(steps); // Welcome text steps.Add(new TextDisplayStep("This wizard will guide you through the steps of setting permissions for a project in this configuration.", "Welcome")); settings.AddRange(new string[] { "No project selected", "No default permission" }); // Select the projec var projectSelection = new SelectProjectStep(configuration); var projectSelectionStep = new TemplateStep(projectSelection, 0, "Select Project"); projectSelectionStep.NextHandler += () => { settings[0] = string.Format("Configuring project '{0}'", projectSelection.SelectedProject); return(true); }; steps.Add(projectSelectionStep); // Default project permission var defaultProjectPermission = new SelectionStep("Default Project Permission", "What do you want as the default project permission:", "None", "Allow", "Deny", "Inherit"); defaultProjectPermission.NextHandler += () => { switch ((string)defaultProjectPermission.Selected) { case "None": settings[1] = "No default permission"; break; case "Allow": settings[1] = "Default project permission is allow"; break; case "Deny": settings[1] = "Default project permission is deny"; break; case "Inherit": settings[1] = "Default project permission is inherit"; break; } return(true); }; steps.Add(defaultProjectPermission); // Set the force/abort build permissions var defaultPermission = new SelectUsersStep(configuration); defaultPermission.Caption = "What are the default permissions:"; var defaultPermissionStep = new TemplateStep(defaultPermission, 0, "Set force/abort build permissions"); defaultPermissionStep.NextHandler += () => { return(true); }; steps.Add(defaultPermissionStep); // Set the force/abort build permissions var forceBuildPermission = new SelectUsersStep(configuration); forceBuildPermission.Caption = "What are the allowed permissions for force/abort build:"; var forceBuildPermissionStep = new TemplateStep(forceBuildPermission, 0, "Set force/abort build permissions"); forceBuildPermissionStep.NextHandler += () => { return(true); }; steps.Add(forceBuildPermissionStep); // Set the start/stop project permissions var startProjectPermission = new SelectUsersStep(configuration); startProjectPermission.Caption = "Which users are allowed to start/stop builds:"; var startProjectPermissionStep = new TemplateStep(startProjectPermission, 0, "Set start/stop project permissions"); startProjectPermissionStep.NextHandler += () => { return(true); }; steps.Add(startProjectPermissionStep); // Set the send message permissions var sendMessagePermission = new SelectUsersStep(configuration); sendMessagePermission.Caption = "What are the allowed permissions for sending messages:"; var sendMessagePermissionStep = new TemplateStep(sendMessagePermission, 0, "Set send message permissions"); sendMessagePermissionStep.NextHandler += () => { return(true); }; steps.Add(sendMessagePermissionStep); // Configuration mode step var confirmation = GenerateConfirmation(); confirmation.NextHandler += () => { if (changeManager) { configuration.Security = new InternalServerSecurity(); } configuration.Projects[projectSelection.SelectedProject].Security = GeneratePermissions(defaultPermission, forceBuildPermission, startProjectPermission, sendMessagePermission); configuration.Security = configuration.Security; // Force a refresh return(true); }; steps.Add(confirmation); steps.Add(new TextDisplayStep("Users have been imported", "Finished")); var result = controller.StartWizard("Security Configuration Wizard"); }