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 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); } }
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); }
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); } }