public bool GetConfirmResult(string controlId, Guid formId, bool isGridCommand, string gridId = "", Guid?threadId = null, Guid?applicationPageId = null) { using (DynamicFormService dynamicFormService = new DynamicFormService()) { sysBpmsDynamicForm dynamicForm = dynamicFormService.GetInfo(formId); object control = dynamicForm.FindControl(isGridCommand ? gridId : controlId); DesignCodeModel designCode = null; if (control is ButtonHtml) { designCode = ((ButtonHtml)control).ConfirmDesignCodeModel; } if (control is DataGridHtml) { designCode = ((DataGridHtml)control).GetConfirmCode(controlId); } EngineSharedModel engineSharedModel = applicationPageId.HasValue ? new EngineSharedModel(applicationPageId.Value, HttpContext.Current.Request.GetList(base.IsEncrypted, base.ApiSessionId).ToList(), base.ClientUserName, base.ApiSessionId) : new EngineSharedModel(threadId, dynamicForm.ProcessId, HttpContext.Current.Request.GetList(base.IsEncrypted, base.ApiSessionId).ToList(), base.ClientUserName, base.ApiSessionId); UnitOfWork unitOfWork = new UnitOfWork(); return(new DynamicCodeEngine(engineSharedModel, unitOfWork).ExecuteBooleanCode(designCode)); } }
public object ExecuteCode(string controlId, Guid formId, string commandId, Guid?threadId = null, Guid?applicationPageId = null) { using (DynamicFormService dynamicFormService = new DynamicFormService()) { sysBpmsDynamicForm dynamicForm = dynamicFormService.GetInfo(formId); object control = dynamicForm.FindControl(controlId); DesignCodeModel designCode = null; if (control is DataGridHtml) { designCode = ((DataGridHtml)control).GetCommandCode(commandId); } EngineSharedModel engineSharedModel = applicationPageId.HasValue ? new EngineSharedModel(applicationPageId.Value, HttpContext.Current.Request.GetList(base.IsEncrypted, base.ApiSessionId).ToList(), base.ClientUserName, base.ApiSessionId) : new EngineSharedModel(threadId, dynamicForm.ProcessId, HttpContext.Current.Request.GetList(base.IsEncrypted, base.ApiSessionId).ToList(), base.ClientUserName, base.ApiSessionId); UnitOfWork unitOfWork = new UnitOfWork(); DynamicCodeEngine dynamicCodeEngine = new DynamicCodeEngine(engineSharedModel, unitOfWork); var result = dynamicCodeEngine.ExecuteScriptCode(designCode, new CodeBaseSharedModel(null)); //If in code any variable is set, it Will save them all at the end dynamicCodeEngine.SaveExternalVariable(result); return(new { result = result?.Result, listMessage = result?.CodeBaseShared.MessageList.Select(c => new { DisplayMessageType = c.DisplayMessageType.ToString(), c.Message }) }); } }
public CodeResultModel SaveButtonCode(ButtonHtml buttonHtml, ResultOperation resultOperation, FormModel formModel, CodeBaseSharedModel codeBaseShared) { DesignCodeModel designCodeModel = null; if (!string.IsNullOrWhiteSpace(buttonHtml.BackendCoding)) { designCodeModel = DesignCodeUtility.GetDesignCodeFromXml(buttonHtml.BackendCoding); } if (designCodeModel != null && (designCodeModel.CodeObjects?.Any() ?? false)) { var result = this.ExecuteOnExitFormCode(designCodeModel, formModel, codeBaseShared); if (!result.Result) { resultOperation.SetHasError(); if (!(result?.CodeBaseShared.MessageList?.Any() ?? false)) { resultOperation.AddError(LangUtility.Get("Failed.Text", "Engine")); } } return(result); } return(null); }
//after having posted form,it will execute form's OnExitFormCode public CodeResultModel ExecuteOnExitFormCode(DesignCodeModel designCodeModel, FormModel formModel, CodeBaseSharedModel codeBaseShared) { if (!(designCodeModel.CodeObjects?.Any() ?? false)) { return(null); } (bool result, CodeBase codeBase) = this.Execute(designCodeModel, formModel, codeBaseShared, onlyCondition: false); return(new CodeResultModel(result, codeBase.UrlHelper.RedirectUrlModel, codeBase.CodeBaseShared)); }
/// <returns>check condition and single line</returns> public bool ExecuteBooleanCode(DesignCodeModel designCodeModel, FormModel formModel = null) { if (!(designCodeModel.CodeObjects?.Any() ?? false)) { return(true); } (bool result, CodeBase codeBase) = this.Execute(designCodeModel, formModel, null, onlyCondition: true); return(result); }
/// <summary> /// /// </summary> /// <param name="onlyCondition">Is true for condition rule like visibilty of form or gateway condition</param> /// <returns></returns> private (bool result, CodeBase codeBase) Execute(DesignCodeModel designCodeModel, FormModel formModel, CodeBaseSharedModel codeBaseShared, bool onlyCondition) { var listItem = designCodeModel.CodeObjects.Cast <DCBaseModel>().ToList(); CodeBase codeBase; bool result = true; if (listItem.Any(c => c is DCExpressionModel)) { codeBase = DynamicCodeEngine.LoadClass(designCodeModel.ID, base.EngineSharedModel.CurrentProcessID, base.EngineSharedModel.CurrentApplicationPageID); } else { codeBase = new CodeBase(); } codeBase.InitialProperties(base.EngineSharedModel.CurrentProcessID, base.EngineSharedModel.CurrentThreadID, base.EngineSharedModel.CurrentApplicationPageID, base.UnitOfWork, base.EngineSharedModel.BaseQueryModel, GetCurrentUserID(base.EngineSharedModel.CurrentUserName), base.EngineSharedModel.CurrentUserName, formModel, base.EngineSharedModel.ApiSessionID, codeBaseShared); this.ExecuteCodeModel(listItem, codeBase, onlyCondition, string.Empty, ref result); return(result, codeBase); }
public object PostIndex(PostDesignCodePostIndexDTO requestModel) { Guid? dynamicFormId = requestModel.DynamicFormId.ToGuidObjNull(); DesignCodeModel codeModel = DesignCodeUtility.GetDesignCodeFromXml(requestModel.DesignCode.ToStringObj()); DesignCodeDTO model = new DesignCodeDTO() { Code = codeModel?.Code, CodeType = (DesignCodeDTO.e_CodeType)requestModel.CodeType, CallBack = requestModel.CallBack.ToStringObj(), Assemblies = codeModel?.Assemblies, ID = string.IsNullOrWhiteSpace(codeModel.ID) ? Guid.NewGuid().ToString() : codeModel.ID, CodeObjects = codeModel.CodeObjects, DynamicFormID = dynamicFormId, DesignCode = codeModel.DesignCode, Diagram = codeModel.Diagram.ToStringObj().Trim(), }; if (model.CodeType == DesignCodeDTO.e_CodeType.ConditionCode) { Random random = new Random(); DCConditionModel dcConditionModel = (DCConditionModel)model.CodeObjects?.FirstOrDefault() ?? new DCConditionModel(Guid.NewGuid().ToString(), "Condition", string.Empty, string.Empty, null, new List <DCRowConditionModel>(), true, "func" + random.Next(100, 100)); using (VariableService variableService = new VariableService()) using (DynamicFormService dynamicFormService = new DynamicFormService()) return new { OpenDirectly = true, DesignCodeDTO = model, ProcessControls = dynamicFormId != Guid.Empty && dynamicFormId.HasValue ? dynamicFormService.GetControls(dynamicFormService.GetInfo(dynamicFormId.Value)).Select(c => new QueryModel(c.Key, c.Value)).ToList() : new List <QueryModel>(), ProcessVariables = variableService.GetVariableAsComboTree(base.ProcessId, base.ApplicationPageId, null, "{0}"), ListOperationTypes = EnumObjHelper.GetEnumList <DCRowConditionModel.e_OperationType>().Select(c => new QueryModel(c.Key.ToString(), c.Value)).ToList(), Model = dcConditionModel }; } else { this.InitialData(model, dynamicFormId); return(model); } }
/// <summary> /// this will change all back end code id because of compiled dll duplicated. /// </summary> /// <param name="dynamicForm"></param> public void UpdateBackendCodeID(sysBpmsDynamicForm dynamicForm) { if (!string.IsNullOrWhiteSpace(dynamicForm.DesignJson)) { FormModel formModel = new FormModel(JObject.Parse(dynamicForm.DesignJson), HtmlElementHelper.MakeModel(null, null, HtmlElementHelperModel.e_FormAction.FillMode, dynamicForm), null, null, dynamicForm, false); formModel.ContentHtml.Rows.ForEach((row) => { generateCodeID(row); if (row is RowHtml) { readRow(row); } else { ((AccordionHtml)row).Cards.ForEach((car) => { generateCodeID(car); ((CardHtml)car).Rows.ForEach((item) => { readRow(item); }); }); } }); void readRow(object row) { ((RowHtml)row).Columns.ForEach((column) => { generateCodeID(column); column.children.ForEach((item) => { generateCodeID(item); }); }); } void generateCodeID(object item) { replaceID(((ElementBase)item).ExpressionVisibilityCode); if (item is ButtonHtml) { replaceID(((ButtonHtml)item).ExpressionConfirmCode); replaceID(((ButtonHtml)item).BackendCoding); } else if (item is DataGridHtml) { DataGridHtml dataGridHtml = (DataGridHtml)item; dataGridHtml.DataGridColumns.ForEach((column) => { column.ItemList.ForEach((cItem) => { if (!string.IsNullOrWhiteSpace(cItem.ExpressionConfirmCode)) { replaceID(cItem.ExpressionConfirmCode.FromBase64()); } if (!string.IsNullOrWhiteSpace(cItem.RunCodeData)) { replaceID(cItem.RunCodeData.FromBase64()); } }); }); } } void replaceID(string decodedCode) { if (!string.IsNullOrWhiteSpace(decodedCode)) { DesignCodeModel designCode = DesignCodeUtility.GetDesignCodeFromXml(decodedCode); if (designCode != null && !string.IsNullOrWhiteSpace(designCode.ID)) { dynamicForm.DesignJson = dynamicForm.DesignJson.Replace(decodedCode.ToBase64(), decodedCode.Replace(designCode.ID, Guid.NewGuid().ToStringObj()).ToBase64()); } } } DesignCodeModel codeModel = DesignCodeUtility.GetDesignCodeFromXml(dynamicForm.OnEntryFormCode); if (codeModel != null && !string.IsNullOrWhiteSpace(codeModel.ID)) { dynamicForm.OnEntryFormCode = dynamicForm.OnEntryFormCode.Replace(codeModel.ID, Guid.NewGuid().ToString()); } codeModel = DesignCodeUtility.GetDesignCodeFromXml(dynamicForm.OnExitFormCode); if (codeModel != null && !string.IsNullOrWhiteSpace(codeModel.ID)) { dynamicForm.OnExitFormCode = dynamicForm.OnExitFormCode.Replace(codeModel.ID, Guid.NewGuid().ToString()); } } }
public ResultOperation GetSourceCode(sysBpmsDynamicForm dynamicForm) { ResultOperation resultOperation = new ResultOperation(); try { FormModel formModel = new FormModel(JObject.Parse(dynamicForm.DesignJson), HtmlElementHelper.MakeModel(null, null, HtmlElementHelperModel.e_FormAction.FillMode, dynamicForm), null, null, dynamicForm, false); string renderedCode = string.Empty; formModel.ContentHtml.Rows.ForEach((row) => { renderedCode += renderCode(row); if (row is RowHtml) { readRow(row); } else { ((AccordionHtml)row).Cards.ForEach((car) => { renderedCode += renderCode(car); ((CardHtml)car).Rows.ForEach((item) => { readRow(item); }); }); } }); void readRow(object row) { ((RowHtml)row).Columns.ForEach((column) => { renderedCode += renderCode(column); column.children.ForEach((item) => { renderedCode += renderCode(item); }); }); } string renderCode(object item) { DesignCodeModel designCode = null; string code = string.Empty; //VisibilityDesignCodeModel code += makeClass(((ElementBase)item).VisibilityDesignCodeModel); //if is button if (item is ButtonHtml) { code += makeClass(((ButtonHtml)item).ConfirmDesignCodeModel); code += makeClass(DesignCodeUtility.GetDesignCodeFromXml(((ButtonHtml)item).BackendCoding)); } if (item is DataGridHtml) { DataGridHtml dataGridHtml = (DataGridHtml)item; dataGridHtml.DataGridColumns.ForEach((column) => { column.ItemList.ForEach((cItem) => { designCode = DesignCodeUtility.GetDesignCodeFromXml(cItem.ExpressionConfirmCode.FromBase64()); if (designCode != null && !string.IsNullOrWhiteSpace(designCode.Code)) { code += makeClass(designCode); } designCode = DesignCodeUtility.GetDesignCodeFromXml(cItem.RunCodeData.FromBase64()); if (designCode != null && !string.IsNullOrWhiteSpace(designCode.Code)) { code += makeClass(designCode); } }); }); } return(code); } string makeClass(DesignCodeModel designCode) { string code = string.Empty; if (designCode != null && !string.IsNullOrWhiteSpace(designCode.Code)) { code = DynamicCodeEngine.MakeClass(designCode.Code, designCode.ID); } return(code); } renderedCode += makeClass(DesignCodeUtility.GetDesignCodeFromXml(dynamicForm.OnEntryFormCode)); renderedCode += makeClass(DesignCodeUtility.GetDesignCodeFromXml(dynamicForm.OnExitFormCode)); dynamicForm.SourceCode = renderedCode; if (dynamicForm.ApplicationPageID.HasValue) { DynamicCodeEngine.GenerateAppPageAssembly(dynamicForm); } } catch (Exception ex) { resultOperation.AddError(ex.ToString()); resultOperation.AddError("Error while creating code"); } return(resultOperation); }