1

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

DirPartyTable::isCustomerOrRelation

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

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

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

4

1 回答 1

4

如果您转到isCustomerOrRelation(and isCustomerand isRelation) 的来源,您会发现,如果当前公司中存在客户或潜在客户,该方法将返回 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),查看如何在联合查询中合并数据源,记得指定UnionTypeUnionUnianAll)。

  6. 基于 Query3 创建视图,了解如何基于 Query 创建视图

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

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

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

于 2012-06-20T12:22:50.177 回答