没有参照完整性的客户帐户 EDT

Customer account EDT without referential integrity

我为客户维护了一个table一些特定的配置信息。

此 table 的标识符是客户帐户,CustAccount EDT。

现在我面临一个问题:有时必须在创建客户之前定义此配置信息。

有没有办法创建一个非限制性 EDT,它将与 CustAccount 相关(我们可以 select 现有账户中的值),但它允许现有账户以外的其他值?

是的。您想要查看 AOT 中使用基本枚举 TableGroupAll 的示例。对于您的情况,您可能会创建一个名为 TableAll 的新 EDT(存在于 AX2012 中)。

查看 \Data Dictionary\Tables\AssetDisposalParameters 的工作原理或使用 \Data Dictionary\Base Enums\TableGroupAll 的任何内容。

本质上它就像一个 2 字段键,您可以将 Table+CustAccount 连接到 CustTable,但 All 只是一个空白CustAccount.

编辑: Here is an AX 2009 XPO example that you can quickly see working well.

另外,不要按照其他发帖人的建议去做。即使在 AX 2012 中,除非您有一些非常特殊的要求,否则您会想要执行与我建议的类似的操作。

您可以将 IgnoreEDTRelation 设置为 yes。现在您可以在没有外键约束的情况下使用此 EDT。 对于查找部分...您需要在 form.

上的 datasource 字段上覆盖方法 lookup
public void lookup(FormControl _formControl, str _filterStr)
{
    Query query = new Query();
    QueryBuildDataSource queryBuildDataSource;

    SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNum(CustTable), _formControl); 

    sysTableLookup.addLookupField(fieldNum(CustTable, AccountNum));
    sysTableLookup.addLookupField(fieldNum(CustTable, CustGroup)); 

    queryBuildDataSource = query.addDataSource(tableNum(CustTable));

    sysTableLookup.parmQuery(query);

    sysTableLookup.performFormLookup();

    //super(_formControl, _filterStr);
}

How to: Add a Lookup Form to a Control 此 link 展示了如何向控件添加自定义查找。但更多的是 "clean" 覆盖数据源字段方法,这样如果您在使用此字段的表单上有多个控件,所有控件都将进行此查找。