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

时间:2016-10-25 09:40:55

标签: axapta x++ dynamics-ax-2009

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

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

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

有没有办法创建一个非限制性的EDT,它与CustAccount(我们可以在现有帐户中选择值)相关,但是它允许其他值而不是现有帐户?

2 个答案:

答案 0 :(得分:1)

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

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

基本上它就像一个双字段密钥,您Table + CustAccountCustTable连接,但All会只是空白CustAccount

enter image description here

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

另外,不要做其他海报建议的内容。即使在AX 2012中,除非你有一些非常特殊的要求,否则你想要做一些类似于我建议的事情。

答案 1 :(得分:0)

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

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 此链接显示如何向控件添加自定义查找。但它更多"清洁"覆盖数据源字段方法,以便如果您使用此字段在表单上有多个控件,则所有将具有此查找。