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
                    })
                });
            }
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
 //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));
 }
Beispiel #5
0
 /// <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);
 }
Beispiel #6
0
        /// <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);
            }
        }
Beispiel #8
0
        /// <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());
                }
            }
        }
Beispiel #9
0
        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);
        }