问题:
我想知道如何获取系统上的所有地址,包括(客户,供应商,银行和税务机关)查询,并将其放在带有列的视图上( name ,地址)。 所以这将是党派和非党派实体。
我做了什么:
我使用表格概念来确定派对的问题:
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();
}
}
答案 0 :(得分:1)
查看视图LogisticsEntityPostalAddressView
是如何构建的,它可能已经提供了您需要的信息。如果Description
表中的LogisticsLocation
字段不够好而您确实需要Name
字段,例如表BankAccountTable
,则需要构建类似的观点。
您可以看到该视图使用视图LogisticsEntityLocationView
,该视图具有从多个表中提取数据的联合查询。您可以构建一个类似的视图来从Name
,BankAccountTable
和DirPartyTable
中提取TaxAuthorityAddress
字段。
答案 1 :(得分:0)
从数据库图中可以看出,全局通讯簿的关系非常复杂(在很多地方都非常不直观)。您似乎没有解决的一件事是您获得的LogisticsPostalAddress是否有效(由ValidFrom和ValidTo日期确定)。 AX的代码通过简单地将ValidTo设置为提交更改前的2秒来保留LogisticsPostalAddress中正在更改的地址的当前状态,并创建一个新的LogisticsPostalAddress记录,并将ValidTo设置为提交日期,以使其处于活动状态。如果您没有对地址进行过很多更改,那么您可能不会遇到太多问题,但如果有很多问题,您可能会获得大量不需要的地址记录。这里有一篇文章http://hyperdaptive.com/2016/04/320/,其中有一些可能有用的细节 - 它还有一些X ++和SQL代码,如果你碰巧还在努力,它可能会非常有用。祝好运。