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
                    })
                });
            }
        }
Esempio n. 2
0
        public void CompileCodeTest()
        {
            var compilation = CSharpCompilation.Create("DynamicAssembly", new[] { CSharpSyntaxTree.ParseText(@"
    using System;

    public class Person
    {
        public virtual int Id { get; set; }
        public virtual string FirstName { get; set; }
        public virtual string LastName { get; set; }
        public virtual DateTime Dob { get; set; }
    }") },
                                                       new[]
            {
                MetadataReference.CreateFromFile(typeof(object).GetTypeInfo().Assembly.Location),
                MetadataReference.CreateFromFile(typeof(Console).GetTypeInfo().Assembly.Location),
                MetadataReference.CreateFromFile(SystemRuntime.Location),
            },
                                                       new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary));

            using (var engine = new DynamicCodeEngine(compilation))
            {
                var type   = engine.GetType("Person");
                var person = engine.CreateInstance("Person");
                Assert.NotNull(person);
            }
        }
Esempio n. 3
0
        public async Task <List <string> > ValidateDirtyRules(List <FieldRuleModel> rules)
        {
            var result = new List <string>();
            var sb     = new StringBuilder();

            AddModelCode(sb);

            sb.AppendLine(@"
    public class FieldRules
    {");

            foreach (var rule in rules.Where(r => r.IsDirty))
            {
                AddRuleCode(sb, rule);
            }
            sb.AppendLine(@"
    }");

            var codeText = sb.ToString();

            var compilation = CSharpCompilation.Create("DynamicAssembly", new[] { CSharpSyntaxTree.ParseText(codeText) },
                                                       new[]
            {
                MetadataReference.CreateFromFile(typeof(object).GetTypeInfo().Assembly.Location),
                MetadataReference.CreateFromFile(typeof(Console).GetTypeInfo().Assembly.Location),
                MetadataReference.CreateFromFile(SystemRuntime.Location),
                MetadataReference.CreateFromFile(typeof(System.Linq.Expressions.Expression <>).GetTypeInfo().Assembly.Location),
                MetadataReference.CreateFromFile(typeof(Platz.SqlForms.RuleArgs).GetTypeInfo().Assembly.Location),
            },
                                                       new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary));

            using (var engine = new DynamicCodeEngine(compilation))
            {
                if (!engine.CompilationResult.Success)
                {
                    foreach (var err in engine.CompilationResult.Diagnostics)
                    {
                        result.Add(err.ToString());
                    }
                }
            }

            return(result);
        }
Esempio n. 4
0
        public void CompileRuleCodeTest()
        {
            var compilation = CSharpCompilation.Create("DynamicAssembly", new[] { CSharpSyntaxTree.ParseText(@"
    using System;
    using Platz.SqlForms;

    public class Person
    {
        public virtual int Id { get; set; }
        public virtual string FirstName { get; set; }
        public virtual string LastName { get; set; }
        public virtual DateTime Dob { get; set; }
    }

    public class Rule
    {
        public FormRuleResult CheckCompanyRequired(RuleArgs<Person> a)
        {
            var required = (a.Model.LastName == ""Ford"");
            a.Entity.Property(p => p.FirstName).IsRequired(required).Label(required ? ""Ford Division"": ""Company Name"");
            return null;
        }
    }") },
                                                       new[]
            {
                MetadataReference.CreateFromFile(typeof(object).GetTypeInfo().Assembly.Location),
                MetadataReference.CreateFromFile(typeof(Console).GetTypeInfo().Assembly.Location),
                MetadataReference.CreateFromFile(SystemRuntime.Location),
                MetadataReference.CreateFromFile(typeof(System.Linq.Expressions.Expression <>).GetTypeInfo().Assembly.Location),
                MetadataReference.CreateFromFile(typeof(Platz.SqlForms.RuleArgs).GetTypeInfo().Assembly.Location),
            },
                                                       new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary));

            using (var engine = new DynamicCodeEngine(compilation))
            {
                var rule = engine.CreateInstance("Rule");
                Assert.NotNull(rule);
            }
        }