我有一个自定义的QBO3页面,该页面呈现来自多个表的自定义表的数据:
<build>
<extensions>
<extension>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-extension</artifactId>
<version>${version}</version>
</extension>
</extensions>
</build>
:父表<plugin>
:相关表1
Foo
是Bar
表的外键约束Foo.BarID
:子表2 我的Bar
页面呈现了我所有的Foo列,以及:
Crunch
,Foo/Summary
Bar.FieldA
,Bar.FieldB
Crunch.FieldC
,Crunch.FieldD
II可以通过Crunch.FieldC
将这些HTML表单输入值映射到Crunch.FieldD
和Bar
表,还是我需要调用Crunch
,Foo/Save
,和Foo/Save
(两次)?
答案 0 :(得分:0)
是;将以下参数发布到Foo / Save:
Foo.ashx/Save?ID=X
&Bar_FieldA=BA
&Bar_FieldB=BB
&Crunches_0_FieldC=CC1
&Crunches_0_FieldD=CD1
&Crunches_1_FieldC=CC2
&Crunches_1_FieldD=CD2
QBO的AbstractObject/Save
方法支持将数据持久保存到QBO3知道的任何相关表中。这包括:
ForeignKey
属性标记的C#属性)Child
属性标记的C#属性)ObjectConfiguration
中为该类配置)调用Foo/Save
时,AbstractObject/SetProperties
将:
检查外键参数
AbstractObject
将遍历每个已定义的外键(包括Foo.BarID
),如果存在以{ForeignKey}
(减去ID)开头的参数,请设置外键对象的属性。如果Foo.BarID
是在Foo.Fields.cs中沿这些行定义的,那么它将起作用:
[ForeignKey(typeof(my.Namespace.BarObject), "Bar")]
public Int64 BarID {...}
检查子类属性的集合
AbstractObject
将循环遍历每个已配置的子类,如果存在以ChildClass.Name
开头的参数,请创建子对象的集合并在该集合上设置属性。为此,您必须:
在Crunches
中将Foo
作为Foo.config
的子类:
<ChildClasses>
<Child Name="Crunches" Type="my.Namespace.CrunchObject, my.Namespace"/>
</ChildClasses>
由于子类隐含1:1:1的关系,因此该集合(由AbstractCollection<T>
实现)期望每个Crunch记录共享一个基于0的公共前缀。
注意:配置驱动的子类的替代方法是使用以下模式创建名为Crunches
的C#属性:
[Child(typeof(CrunchObject)), XmlIgnore]
public CrunchCollection Crunches {...}
其中CrunchCollection
源自AbstractCollection<CrunchObject>
,并添加了已知类型:
[KnownType(typeof(CrunchCollection))]
[KnownType(typeof(CrunchObject))]
public class CrunchCollection : AbstractCollection<CrunchObject>
{...}
这允许AbstractObject
在编译时知道数据类型的情况下通过反射实例化集合。