获取Dynamics AX 2012系统上的所有地址

时间:2012-06-13 16:18:20

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

问题:

我想知道如何获取系统上的所有地址,包括(客户,供应商,银行和税务机关)查询,并将其放在带有列的视图上( name 地址)。 所以这将是党派和非党派实体。

我做了什么:

我使用表格概念来确定派对的问题:

Part of the LOCATION DATA MODEL

LogisticsPostalAddress - 表包含系统中可与各种实体关联的地址。 有关地址的主要信息在哪里,其余部分似乎是对这些地址的额外描述。

CustTable 和VendTable的FK为 DirPartyTable BankAccountTable TaxAuthorityAddress 与该关系中与 LogisticsPostalAddress 有关的 LogisticsLocation 直接相关Location_FK。

现在的问题是如何构建查询,它从Customers,BankAccounts,Vendors和Tax Authority中获取地址,并将其放在带有(名称,地址)对的视图上?< /强>

EDITED

我找到了一种方法来使用方法获取所有地址,但不使用查询,并且效率不高,但它足以满足我的需求:

1)创建一个表:AllAddresses例如: 使用字段:名称,地址

2)创建一份工作:

static void GettingAllAddresses(Args _args)
{
    CustTable custTable;
    VendTable vendTable;
    TaxAuthorityAddress taxAuthorityAddress;

    LogisticsPostalAddress logisticsPostalAddress;
    AllAddresses allAddresses;

    ;

    while select * from custTable
    {
        allAddresses.Address = custTable.address();
        allAddresses.Name = custTable.name();
        allAddresses.CustAccount = custTable.AccountNum;
        allAddresses.doInsert();
    }



    //Getting all vendors
    while select * from vendTable
    {

        allAddresses.Address = vendTable.address();
        allAddresses.Name = vendTable.name();
        allAddresses.doInsert();
    }

    //Getting all tax authorities addresses
    while select * from taxAuthorityAddress
    {


        allAddresses.Address = TaxAuthorityAddress::address(taxAuthorityAddress.TaxAuthority);
        allAddresses.Name = taxAuthorityAddress.Name;
        allAddresses.doInsert();
    }

    //Getting all bank addresses
    while select * from bankAccountTable
    {
        logisticsPostalAddress = LogisticsLocationEntity::location2PostalAddress(bankAccountTable.Location);
        allAddresses.Address = logisticsPostalAddress.Address;
        allAddresses.Name = bankAccountTable.Name;
        allAddresses.doInsert();
    }
}

2 个答案:

答案 0 :(得分:1)

查看视图LogisticsEntityPostalAddressView是如何构建的,它可能已经提供了您需要的信息。如果Description表中的LogisticsLocation字段不够好而您确实需要Name字段,例如表BankAccountTable,则需要构建类似的观点。

您可以看到该视图使用视图LogisticsEntityLocationView,该视图具有从多个表中提取数据的联合查询。您可以构建一个类似的视图来从NameBankAccountTableDirPartyTable中提取TaxAuthorityAddress字段。

答案 1 :(得分:0)

从数据库图中可以看出,全局通讯簿的关系非常复杂(在很多地方都非常不直观)。您似乎没有解决的一件事是您获得的LogisticsPostalAddress是否有效(由ValidFrom和ValidTo日期确定)。 AX的代码通过简单地将ValidTo设置为提交更改前的2秒来保留LogisticsPostalAddress中正在更改的地址的当前状态,并创建一个新的LogisticsPostalAddress记录,并将ValidTo设置为提交日期,以使其处于活动状态。如果您没有对地址进行过很多更改,那么您可能不会遇到太多问题,但如果有很多问题,您可能会获得大量不需要的地址记录。这里有一篇文章http://hyperdaptive.com/2016/04/320/,其中有一些可能有用的细节 - 它还有一些X ++和SQL代码,如果你碰巧还在努力,它可能会非常有用。祝好运。