Procházet zdrojové kódy

Added "Required Columns" to SaveEvent scripts.

Kenric Nugteren před 6 měsíci
rodič
revize
7519ba5aab
1 změnil soubory, kde provedl 74 přidání a 18 odebrání
  1. 74 18
      prs.stores/Events/SaveEvent.cs

+ 74 - 18
prs.stores/Events/SaveEvent.cs

@@ -197,6 +197,18 @@ public class ScriptSaveEventTrigger<T> : IEventTrigger<SaveEvent<T>, SaveEventDa
     public string Description => "Custom Script";
 
     private ScriptDocument? _scriptDocument;
+    private ScriptDocument? ScriptDocument
+    {
+        get
+        {
+            if(_scriptDocument is null && Script is not null)
+            {
+                _scriptDocument = new(Script);
+                _scriptDocument.Compile();
+            }
+            return _scriptDocument;
+        }
+    }
 
     private string? _script;
     public string? Script
@@ -212,7 +224,23 @@ public class ScriptSaveEventTrigger<T> : IEventTrigger<SaveEvent<T>, SaveEventDa
         }
     }
 
-    public IEnumerable<string> ReferencedVariables => [];
+    public IEnumerable<string> ReferencedVariables
+    {
+        get
+        {
+            var method = ScriptDocument?.GetMethod(methodName: "RequiredColumns");
+            if(method is not null)
+            {
+                var cols = Columns.None<T>();
+                method.Invoke(ScriptDocument!.GetObject(), [cols]);
+                return cols.ColumnNames().Select(x => $"{typeof(T).Name}.{x}");
+            }
+            else
+            {
+                return [];
+            }
+        }
+    }
 
     public string DefaultScript()
     {
@@ -220,6 +248,11 @@ public class ScriptSaveEventTrigger<T> : IEventTrigger<SaveEvent<T>, SaveEventDa
 
 public class Module
 {
+    public void RequiredColumns(Columns<" + typeof(T).Name + @"> columns)
+    {
+        // Modify 'columns' as required.
+    }
+
     public bool Check(SaveEventDataModel<" + typeof(T).Name + @"> model)
     {
         // Return true if model.Entity meets the requirements for this event trigger.
@@ -230,14 +263,9 @@ public class Module
 
     public bool Check(SaveEventDataModel<T> dataModel)
     {
-        if (Script is null) return false;
+        if (ScriptDocument is null) return false;
 
-        if(_scriptDocument is null)
-        {
-            _scriptDocument = new(Script);
-            _scriptDocument.Compile();
-        }
-        return _scriptDocument.Execute(methodname: "Check", parameters: [dataModel]);
+        return ScriptDocument.Execute(methodname: "Check", parameters: [dataModel]);
     }
 }
 
@@ -250,6 +278,19 @@ public class ScriptSaveEventAction<T> : IEventAction<SaveEvent<T>>
     where T : Entity, new()
 {
     private ScriptDocument? _scriptDocument;
+    private ScriptDocument? ScriptDocument
+    {
+        get
+        {
+            if(_scriptDocument is null && Script is not null)
+            {
+                _scriptDocument = new(Script);
+                _scriptDocument.SetValue("Result", null);
+                _scriptDocument.Compile();
+            }
+            return _scriptDocument;
+        }
+    }
 
     private string? _script;
     public string? Script
@@ -265,7 +306,23 @@ public class ScriptSaveEventAction<T> : IEventAction<SaveEvent<T>>
         }
     }
 
-    public IEnumerable<string> ReferencedVariables => [];
+    public IEnumerable<string> ReferencedVariables
+    {
+        get
+        {
+            var method = ScriptDocument?.GetMethod(methodName: "RequiredColumns");
+            if(method is not null)
+            {
+                var cols = Columns.None<T>();
+                method.Invoke(ScriptDocument!.GetObject(), [cols]);
+                return cols.ColumnNames().Select(x => $"{typeof(T).Name}.{x}");
+            }
+            else
+            {
+                return [];
+            }
+        }
+    }
 
     public string Description => "Custom Script";
 
@@ -277,6 +334,11 @@ public class Module
 {
     public object? Result { get; set; }
 
+    public void RequiredColumns(Columns<" + typeof(T).Name + @"> columns)
+    {
+        // Modify 'columns' as required.
+    }
+
     public bool Execute(SaveEventDataModel<" + typeof(T).Name + @"> model)
     {
         // Do anything you want with model.Entity, and then save return-value to 'Result', or leave it as 'null' if no return value is needed.
@@ -287,18 +349,12 @@ public class Module
 
     public object? Execute(IEventDataModel dataModel)
     {
-        if (Script is null) return null;
+        if (ScriptDocument is null) return null;
 
-        if(_scriptDocument is null)
-        {
-            _scriptDocument = new(Script);
-            _scriptDocument.SetValue("Result", null);
-            _scriptDocument.Compile();
-        }
         var model = dataModel.RootModel<SaveEventDataModel<T>>();
-        if(_scriptDocument.Execute(methodname: "Execute", parameters: [model]))
+        if(ScriptDocument.Execute(methodname: "Execute", parameters: [model]))
         {
-            return _scriptDocument.GetValue("Result");
+            return ScriptDocument.GetValue("Result");
         }
         else
         {