如何在XAF中在一个业务对象内创建多个业务对象?
如何在XAF中在一个业务对象内创建多个业务对象?
看起来你是想在XAF里实现一对多的业务对象关联——也就是一个Fiche(生产单)对应多个关联的子项(你说的那些要共享同一个Fiche的Item),而且要通过MAINPRODREF字段关联到父Fiche的主键LOGICALREF对吧?结合你给出的需求和现有代码,我来给你梳理下具体实现步骤:
1. 定义子业务对象(关联的Item)
首先你需要创建一个子业务对象(比如叫ProductionItem),用来存储那些和Fiche关联的条目。这个对象需要包含两个关键部分:
- 关联父Fiche主键的
MAINPRODREF字段 - 指向父Fiche对象的导航属性(方便XAF识别关联关系)
示例代码如下:
public class ProductionItem : BaseObject // 继承XAF的基类,比如BaseObject或XPObject { int fMAINPRODREF; public int MAINPRODREF { get { return fMAINPRODREF; } set { SetPropertyValue<int>(nameof(MAINPRODREF), ref fMAINPRODREF, value); } } // 导航属性,关联到父Fiche对象 Fiche fFiche; [Association("Fiche-ProductionItems")] // 关联名称要和父对象的集合属性对应 public Fiche Fiche { get { return fFiche; } set { SetPropertyValue<Fiche>(nameof(Fiche), ref fFiche, value); } } // 其他你需要的属性,比如子项自己的标识、名称等 int fItemRef; [Key(true)] public int ItemRef { get { return fItemRef; } set { SetPropertyValue<int>(nameof(ItemRef), ref fItemRef, value); } } }
2. 修改父Fiche对象,添加子项集合属性
接下来要在你现有的Fiche类里,添加一个子对象的集合属性,这样在XAF界面里就能直接管理和创建关联的子项了。结合你给出的现有代码,补充后的Fiche类示例:
public class Fiche : BaseObject { int fLOGICALREF; [Key(true)] public int LOGICALREF { get { return fLOGICALREF; } set { SetPropertyValue<int>(nameof(LOGICALREF), ref fLOGICALREF, value); } } string fNAME; [Indexed(Name = @"I124_BOMASTER_I3aa")] [Size(51)] [XafDisplayName("İsim")] public string NAME { get { return fNAME; } set { SetPropertyValue<string>(nameof(NAME), ref fNAME, value); } } // 添加子项集合,和子对象的Association名称对应 [Association("Fiche-ProductionItems")] [XafDisplayName("关联生产条目")] public XPCollection<ProductionItem> ProductionItems { get { return GetCollection<ProductionItem>(nameof(ProductionItems)); } } }
3. 自动关联主键(可选但实用)
为了符合你提到的“只能将多个Item的ID附加到Fiches”的规则,你可以添加自动赋值逻辑,让子项创建时自动把MAINPRODREF设置为父Fiche的LOGICALREF。比如在子对象的构造函数里处理:
public ProductionItem(Session session) : base(session) { } protected override void OnSaving() { base.OnSaving(); // 如果父Fiche存在,自动同步MAINPRODREF if (Fiche != null && MAINPRODREF != Fiche.LOGICALREF) { MAINPRODREF = Fiche.LOGICALREF; } }
4. 界面端的配置
做完以上代码修改后,记得在XAF的模块设计器里:
- 把
ProductionItem对象添加到模块的业务对象列表中 - 为
Fiche对象的ProductionItems集合配置合适的编辑器(比如列表编辑器),这样在Fiche的详情页就能直接添加、编辑关联的子项了
这样设置后,你就能实现需求中的效果:一个Fiche对应多个关联的Item,每个Item的MAINPRODREF和父Fiche的LOGICALREF保持一致,完全符合你给出的示例表格结构。
备注:内容来源于stack exchange,提问作者user14491987
相关产品推荐
相关产品推荐

