获取Dynamics AX 2012中的客户或潜在客户

时间:2012-06-20 10:59:21

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

我正在尝试使用X ++获取客户或潜在客户并在查找时使用它。 DirPartyTable中有一个返回我想要的方法。

DirPartyTable::isCustomerOrRelation

while select * from dirPartyTable
{
       if(DirPartyTable::isCustomerOrRelation(dirPartyTable.RecId))
       {

                //Get the Name
                //info(dirPartyTable.Name);
       }
}

但是当我为查询构建查询时,我试图以某种方式在查询的DirPartyTable::isCustomerOrRelation(dirPartyTable.RecId)上传递addRange。 有办法做到这一点还是不可能?

1 个答案:

答案 0 :(得分:4)

如果您转到isCustomerOrRelation(以及isCustomerisRelation)的来源,您会看到,如果当前公司中存在客户或潜在客户,则该方法返回true。

您的while select虽然正确,但效率低下,因为它可能需要扫描一百万方来选择您当前公司中的一千个客户或潜在客户。

效率更高,但语法上非法,while select将是:

while select * from dirPartyTable
   exists join custTable
   where custTable.Party == dirPartyTable.RecId
   union 
   select * from dirPartyTable
   exists join smmBusRelTable
   where smmBusRelTable.Party == dirPartyTable.RecId;
{
     info(dirPartyTable.Name);
}

虽然在X ++中是非法的,但可以使用查询和视图。

  1. 进行两次查询(自行翻译为适当的属性):

  2. 查询1:

    select * from dirPartyTable
        exists join custTable
        where custTable.Party == dirPartyTable.RecId
    
  3. 查询2:

    select * from dirPartyTable
        exists join smmBusRelTable
        where smmBusRelTable.Party == dirPartyTable.RecId;
    
  4. 根据查询制作两个视图(View1和View2)。

  5. 建立联合查询(Query3),查看如何Combine Data Sources in a Union Query,记得指定UnionTypeUnionUnianAll)。

  6. 根据Query3制作视图,了解如何Create a View Based on a Query

  7. 结果,使用X ++选择所有记录:

    while select * from dirPartyCustOrRelationTable
    {
         info(dirPartyCustOrRelationTable.Name);
    }
    

    或者您可以直接使用Query3来检索记录。