如果您转到isCustomerOrRelation
(and isCustomer
and 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),查看如何在联合查询中合并数据源,记得指定UnionType
(Union
或UnianAll
)。
基于 Query3 创建视图,了解如何基于 Query 创建视图。
结果,使用 X++ 选择所有记录:
while select * from dirPartyCustOrRelationTable
{
info(dirPartyCustOrRelationTable.Name);
}
或者您可以直接使用 Query3 来检索记录。