Kaynağa Gözat

Merge commit '622cb8626d9dec4e7f6a8225d7aeb8204a9cb956' into frank

Frank van den Bos 8 ay önce
ebeveyn
işleme
384a967cc9

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

@@ -247,5 +247,21 @@ namespace InABox.Core
                 ? CoreUtils.GetPropertyValue(formInstance, "Parent") as IEntityLink
                 : null;
         }*/
+
+        public static IColumns RequiredEntityColumns(Type TEntity, IEnumerable<DigitalFormVariable> variables)
+        {
+            var entityColumns = LookupFactory.RequiredColumns(TEntity);
+            foreach(var variable in variables)
+            {
+                var property = variable.GetProperties().Property;
+                if (!property.IsNullOrWhiteSpace())
+                {
+                    entityColumns.Add(property);
+                }
+            }
+            return entityColumns;
+        }
+        public static Columns<TEntity> EntityColumns<TEntity>(IEnumerable<DigitalFormVariable> variables) =>
+            (RequiredEntityColumns(typeof(TEntity), variables) as Columns<TEntity>)!;
     }
 }

+ 8 - 5
InABox.Core/DigitalForms/DataModel/DigitalFormDataModel.cs

@@ -12,22 +12,22 @@ namespace InABox.Core
         where TInstance : Entity, IRemotable, IPersistent, IDigitalFormInstance<TEntityLink>, new()
     {
         private readonly bool bRequiresLoad = true;
-        public DigitalFormDataModel(Guid entityid, Guid instanceid)
+        public DigitalFormDataModel(Guid entityid, Guid instanceid, DigitalFormVariable[] variables)
         {
             Entity = new TEntity();
             Entity.ID = entityid;
             Entity.CommitChanges();
             Instance = new TInstance();
             Instance.ID = instanceid;
-            Variables = new DigitalFormVariable[] { };
+            Variables = variables;
             bRequiresLoad = true;
         }
 
-        public DigitalFormDataModel(TEntity entity, TInstance instance)
+        public DigitalFormDataModel(TEntity entity, TInstance instance, DigitalFormVariable[] variables)
         {
             Entity = entity;
             Instance = instance;
-            Variables = new DigitalFormVariable[] { };
+            Variables = variables;
             bRequiresLoad = false;
         }
 
@@ -130,17 +130,20 @@ namespace InABox.Core
         {
         }
 
+
         private void DoAddQueries(MultiQuery client)
         {
             if (Entity.ID != Guid.Empty)
+            {
                 client.Add(
                     new QueryDef<TEntity>(
                         new Filter<TEntity>(x => x.ID).IsEqualTo(Entity.ID),
-                        Columns.None<TEntity>().Add(x => x.ID),
+                        DFUtils.EntityColumns<TEntity>(Variables),
                         null
                     ),
                     typeof(TEntity)
                 );
+            }
 
             if (Instance.ID != Guid.Empty)
                 client.Add(

+ 1 - 1
InABox.Core/DigitalForms/DataModel/DigitalFormDocumentDataModel.cs

@@ -24,7 +24,7 @@ namespace InABox.Core
         where TDocument : Entity, IRemotable, IPersistent, IEntityDocument, new()
 
     {
-        public DigitalFormDocumentDataModel(Guid entityid, Guid instanceid) : base(entityid, instanceid)
+        public DigitalFormDocumentDataModel(Guid entityid, Guid instanceid, DigitalFormVariable[] variables) : base(entityid, instanceid, variables)
         {
             Documents = new List<Document>();
             DocumentLinks = new List<IEntityDocument>();

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

@@ -95,12 +95,12 @@ namespace InABox.Core
         [NullEditor]
         public Location Location { get; set; }
 
-        public IDigitalFormDataModel CreateDataModel(Entity? parent = null)
+        public IDigitalFormDataModel CreateDataModel(DigitalFormVariable[] variables, Entity? parent = null)
         {
             var t = typeof(DigitalFormDataModel<,,>).MakeGenericType(typeof(TParent), typeof(TParentLink), GetType());
             if (parent != null)
-                return (Activator.CreateInstance(t, parent, this) as IDigitalFormDataModel)!;
-            return (Activator.CreateInstance(t, Parent.ID, ID) as IDigitalFormDataModel)!;
+                return (Activator.CreateInstance(t, parent, this, variables) as IDigitalFormDataModel)!;
+            return (Activator.CreateInstance(t, Parent.ID, ID, variables) as IDigitalFormDataModel)!;
         }
 
         public Guid ParentID()

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

@@ -39,7 +39,7 @@ namespace InABox.Core
 
         Location Location { get; set; }
         
-        IDigitalFormDataModel CreateDataModel(Entity? parent = null);
+        IDigitalFormDataModel CreateDataModel(DigitalFormVariable[] variables, Entity? parent = null);
 
         IEntityLink Parent { get; set; }
 

+ 3 - 3
inabox.wpf/DigitalForms/Designer/DynamicEditFormWindow.xaml.cs

@@ -346,8 +346,8 @@ public partial class DynamicFormEditWindow : Window, IDynamicFormWindow
                         filter.Operator = Operator.IsEqualTo;
                         filter.Value = parentid;
 
-                        var client = (Activator.CreateInstance(typeof(Client<>).MakeGenericType(parenttype)) as Client)!;
-                        parent = client.Query(filter, null, null).Rows.FirstOrDefault()?.ToObject(parenttype) as Entity;
+                        parent = Client.Create(parenttype)
+                            .Query(filter, DFUtils.RequiredEntityColumns(parenttype, variables), null).ToObjects(parenttype).FirstOrDefault() as Entity;
                     }
 
                     if (parent == null)
@@ -385,7 +385,7 @@ public partial class DynamicFormEditWindow : Window, IDynamicFormWindow
 
         try
         {
-            dataModel = formInstance.CreateDataModel(parent!);
+            dataModel = formInstance.CreateDataModel(variables, parent!);
             dataModel.Variables = variables;
             dataModel.OnModelSaved += (model) =>
             {