Hi All
Has anyone used a union query with SysTable lookup? I’ve been given a spec to override an item id field so that it brings back a list of items from InventTable where PdsVendorCheckItem == PdsVendorCheckItem::NoCheck unioned with a list of items from InventTable that are linked to table PdsApprovedVendorList by the ItemId where PdsApprovedVendorList. PdsApprovedVendor == vendor account number.
Here is a job that contains a working query:
static void test_job(Args _args)
{
QueryBuildDataSource qbds;
QueryBuildDataSource qbdsApprovedVendorList;
QueryBuildRange qbrVendor;
QueryRun queryRun;
VendAccount vendAccount = '12345';
Query query = new Query();
query.queryType(QueryType::Union);
qbds = query.addDataSource(tablenum(InventTable), identifierstr(InventTable_1));
qbds.addRange(fieldNum(InventTable, PdsVendorCheckItem)).value(queryValue(PdsVendorCheckItem::NoCheck));
qbds = query.addDataSource(tablenum(InventTable), identifierstr(InventTable_2), UnionType::Union);
qbdsApprovedVendorList = qbds.addDataSource(tableNum(PdsApprovedVendorList));
qbdsApprovedVendorList.relations(false);
// change the relation to vendor account number only
qbdsApprovedVendorList.addLink(fieldNum(InventTable, ItemId), fieldNum(PdsApprovedVendorList, ItemId));
// add a range for the item id
qbrVendor = qbdsApprovedVendorList.addRange(fieldNum(PdsApprovedVendorList, PdsApprovedVendor));
qbrVendor.value(queryValue(vendAccount));
// info(query.toString());
queryRun = new QueryRun(query);
while (queryRun.next())
{
info(int642str(queryRun.get(tablenum(InventTable)).RecId));
}
}
When this query is used with SysTableLookup line 73 of SysTableLookup.formRun adds an outer join to the query and breaks it as only exists and not exists joins are allowed.
*This post is locked for comments
I have the same question (0)