Pārlūkot izejas kodu

Added some form reflection utility functions

Kenric Nugteren 1 gadu atpakaļ
vecāks
revīzija
ea74235f59

+ 1 - 1
InABox.Core/CoreUtils.cs

@@ -2612,7 +2612,7 @@ namespace InABox.Core
         #region String Utilities
         #region String Utilities
 
 
         /// <summary>
         /// <summary>
-        /// Check if <paramref name="s"/> is <see cref="string.IsNullOrWhiteSpace(string)"/>.
+        /// Check if <paramref name="s"/> <see cref="string.IsNullOrWhiteSpace(string)"/>.
         /// If it is empty, returns <paramref name="def"/>, otherwise, returns <paramref name="s"/>.
         /// If it is empty, returns <paramref name="def"/>, otherwise, returns <paramref name="s"/>.
         /// </summary>
         /// </summary>
         /// <remarks>
         /// <remarks>

+ 17 - 0
InABox.Core/DigitalForms/DFUtils.cs

@@ -228,5 +228,22 @@ namespace InABox.Core
                 x => string.Equals(x.Name, form.AppliesTo)
                 x => string.Equals(x.Name, form.AppliesTo)
             ).FirstOrDefault();
             ).FirstOrDefault();
         }
         }
+
+        public static Type FormEntityType(Type TForm)
+        {
+            var formInstanceType = TForm.GetInterfaceDefinition(typeof(IDigitalFormInstance<>))
+                ?? throw new Exception("Form does not implement IDigitalFormInstance<>");
+            var linkType = formInstanceType.GenericTypeArguments[0];
+            var linkInterface = linkType.GetInterfaceDefinition(typeof(IEntityLink<>));
+            return linkInterface!.GenericTypeArguments[0];
+        }
+
+        /*public static IEntityLink GetParentLink(IDigitalFormInstance formInstance)
+        {
+
+            var parentlink = CoreUtils.HasProperty(formInstance.GetType(), "Parent")
+                ? CoreUtils.GetPropertyValue(formInstance, "Parent") as IEntityLink
+                : null;
+        }*/
     }
     }
 }
 }

+ 5 - 3
InABox.Core/DigitalForms/Forms/EntityForm.cs

@@ -19,13 +19,13 @@ namespace InABox.Core
         where TParentLink : IEntityLink<TParent>, new()
         where TParentLink : IEntityLink<TParent>, new()
     {
     {
 
 
-        public Expression<Func<TThis, String>> AutoIncrementField() => x => x.Number;
+        public Expression<Func<TThis, string>> AutoIncrementField() => x => x.Number;
 
 
-        public abstract String AutoIncrementPrefix();
+        public abstract string AutoIncrementPrefix();
 
 
         public virtual string AutoIncrementFormat() => "{0:D6}";
         public virtual string AutoIncrementFormat() => "{0:D6}";
         
         
-        public Filter<TThis> AutoIncrementFilter() => null;
+        public Filter<TThis>? AutoIncrementFilter() => null;
         
         
         [EditorSequence(1)]
         [EditorSequence(1)]
         [CodeEditor(Editable = Editable.Disabled)]
         [CodeEditor(Editable = Editable.Disabled)]
@@ -108,6 +108,8 @@ namespace InABox.Core
             return Parent.ID;
             return Parent.ID;
         }
         }
 
 
+        public Type ParentType() => typeof(TParent);
+
         [DurationEditor(Visible = Visible.Optional, Editable = Editable.Hidden)]
         [DurationEditor(Visible = Visible.Optional, Editable = Editable.Hidden)]
         public TimeSpan FormOpen { get; set; } = TimeSpan.Zero;
         public TimeSpan FormOpen { get; set; } = TimeSpan.Zero;
 
 

+ 14 - 1
InABox.Core/DigitalForms/Forms/IDigitalFormInstance.cs

@@ -39,7 +39,11 @@ namespace InABox.Core
         
         
         IDigitalFormDataModel CreateDataModel(Entity? parent = null);
         IDigitalFormDataModel CreateDataModel(Entity? parent = null);
 
 
+        IEntityLink Parent { get; set; }
+
         Guid ParentID();
         Guid ParentID();
+
+        Type ParentType();
     }
     }
 
 
     public interface IDigitalFormInstance : ICoreDigitalFormInstance
     public interface IDigitalFormInstance : ICoreDigitalFormInstance
@@ -48,6 +52,15 @@ namespace InABox.Core
 
 
     public interface IDigitalFormInstance<TEntityLink> : IDigitalFormInstance where TEntityLink : IEntityLink
     public interface IDigitalFormInstance<TEntityLink> : IDigitalFormInstance where TEntityLink : IEntityLink
     {
     {
-        TEntityLink Parent { get; set; }
+        new TEntityLink Parent { get; set; }
+
+        IEntityLink ICoreDigitalFormInstance.Parent
+        {
+            get => Parent;
+            set
+            {
+                Parent = (TEntityLink)value;
+            }
+        }
     }
     }
 }
 }