我有一个自定义QBO3页面,用于呈现来自多个表的数据--自定义表:
Foo:父表Bar:相关表1 Foo.BarID是Bar表的外键约束。
Crunch:儿童表2我的Foo/Summary页面呈现所有Foo列,以及:
Bar.FieldA,Bar.FieldBCrunch.FieldC,Crunch.FieldDCrunch.FieldC,Crunch.FieldD我可以通过Bar和Crunch表将这些HTML输入值映射到Foo/Save,还是需要调用Foo/Save、Bar/Save和Crunch/Save (两次)?
发布于 2018-06-22 14:13:05
是;将下列参数张贴到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=CD2QBO的AbstractObject/Save方法支持将数据持久化到QBO3知道的任何相关表。这包括:
ForeignKey属性)Child属性)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:多关系,集合(由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通过在编译时知道数据类型的反射来实例化集合。
https://stackoverflow.com/questions/50989884
复制相似问题