我正在尝试使用X ++获取客户或潜在客户并在查找时使用它。
DirPartyTable
中有一个返回我想要的方法。
DirPartyTable::isCustomerOrRelation
while select * from dirPartyTable
{
if(DirPartyTable::isCustomerOrRelation(dirPartyTable.RecId))
{
//Get the Name
//info(dirPartyTable.Name);
}
}
但是当我为查询构建查询时,我试图以某种方式在查询的DirPartyTable::isCustomerOrRelation(dirPartyTable.RecId)
上传递addRange
。
有办法做到这一点还是不可能?
答案 0 :(得分:4)
如果您转到isCustomerOrRelation
(以及isCustomer
和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:
select * from dirPartyTable
exists join custTable
where custTable.Party == dirPartyTable.RecId
查询2:
select * from dirPartyTable
exists join smmBusRelTable
where smmBusRelTable.Party == dirPartyTable.RecId;
根据查询制作两个视图(View1和View2)。
建立联合查询(Query3),查看如何Combine Data Sources in a Union Query,记得指定UnionType
(Union
或UnianAll
)。
根据Query3制作视图,了解如何Create a View Based on a Query。
结果,使用X ++选择所有记录:
while select * from dirPartyCustOrRelationTable
{
info(dirPartyCustOrRelationTable.Name);
}
或者您可以直接使用Query3来检索记录。