Announcements
Description:
I am implementing a lookup to populate a dropdown based on specific criteria, but it is not working as expected.
SchemeCode
values where:
SchemeTable
but has no entry in PrmRegionScheme
, it should be shown (✅ Allowed, but not duplicated).RegionScheme
, it should be shown only if assigned to the user’s region (✅ Show).S4
is assigned only to 'DEL', it should not be visible in 'KAR').While most of the logic is working correctly, the problem arises when a scheme is assigned to multiple regions—it does not appear in the dropdown at all.
public void SchemeLookup(FormStringControl _ctrl)
{
PRMUserSetup prmUserSetup;
PRMRegion_Branch prmRegionBranch;
PRmRegion prmRegion;
Query query = new Query();
QueryBuildDataSource qbdsScheme, qbdsRegion,qbdsExclude;
QueryBuildRange qbrRegion;
SysTableLookup sysTableLookup;
str userSite, userRegionName, userRegionCode;
select firstonly InventSiteId from prmUserSetup
where prmUserSetup.UserId == curUserId();
if (!prmUserSetup)
return;
userSite = prmUserSetup.InventSiteId;
select firstonly Name from prmRegionBranch
where prmRegionBranch.Code == userSite;
if (prmRegionBranch)
{
userRegionName = prmRegionBranch.Name;
select firstonly RegionCode from prmRegion
where prmRegion.REGIONNAME == userRegionName;
if (prmRegion)
userRegionCode = prmRegion.RegionCode;
}
qbdsScheme = query.addDataSource(tableNum(PRMSchemeTable));
qbdsRegion = qbdsScheme.addDataSource(tableNum(PrmRegionScheme));
qbdsRegion.joinMode(JoinMode::OuterJoin);
qbdsRegion.relations(false);
qbdsRegion.addLink(fieldNum(PrmRegionScheme, SchemeCode), fieldNum(PRMSchemeTable, SchemeCode));
qbdsScheme.addRange(fieldNum(PRMSchemeTable, Scheme_Category)).value(queryValue(PrmCustomerSchemeEntry.Scheme_Category));
qbdsScheme.addRange(fieldNum(PRMSchemeTable, SchemeStatus)).value(queryValue(PrmSchemeStatus::Release));
if (userRegionCode)
{
qbrRegion = qbdsRegion.addRange(fieldNum(PrmRegionScheme, RegionCode));
qbrRegion.value(SysQuery::value(userRegionCode) + " || " + SysQuery::valueEmptyString());
}
else
{
qbdsRegion.addRange(fieldNum(PrmRegionScheme, RegionCode)).value(SysQuery::valueEmptyString());
}
qbdsExclude = qbdsScheme.addDataSource(tableNum(PrmRegionScheme));
qbdsExclude.joinMode(JoinMode::NoExistsJoin);
qbdsExclude.relations(false);
qbdsExclude.addLink(fieldNum(PrmRegionScheme, SchemeCode), fieldNum(PRMSchemeTable, SchemeCode));
qbdsExclude.addRange(fieldNum(PrmRegionScheme, RegionCode))
.value(SysQuery::valueNot(userRegionCode) + " && " + SysQuery::valueNot(SysQuery::valueEmptyString()));
sysTableLookup = SysTableLookup::newParameters(tableNum(PRMSchemeTable), _ctrl);
sysTableLookup.addLookupField(fieldNum(PRMSchemeTable, SchemeCode));
sysTableLookup.addLookupField(fieldNum(PRMSchemeTable, Scheme_Category));
sysTableLookup.addLookupField(fieldNum(PrmRegionScheme, RegionCode));
sysTableLookup.parmQuery(query);
sysTableLookup.performFormLookup();
}
public void schemeLookup(FormStringControl _ctrl)
{
Query query = this.buildQuery(prmCustomerSchemeEntry.Scheme_Category, this.getUserRegionCode());
SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNum(PRMSchemeTable), _ctrl);
sysTableLookup.addLookupField(fieldNum(PRMSchemeTable, SchemeCode));
sysTableLookup.addLookupField(fieldNum(PRMSchemeTable, Scheme_Category));
sysTableLookup.addLookupField(fieldNum(PrmRegionScheme, RegionCode));
sysTableLookup.parmQuery(query);
sysTableLookup.performFormLookup();
}
private str getUserRegionCode()
{
PRmRegion prmRegion;
PRMRegion_Branch prmRegionBranch;
PRMUserSetup prmUserSetup;
select firstonly RegionCode from prmRegion
exists join prmRegionBranch
where prmRegionBranch.Name == prmRegion.RegionName
exists join prmUserSetup
where prmUserSetup.InventSiteId == prmRegionBranch.Code
&& prmUserSetup.UserId == curUserId();
return prmRegion.RegionCode;
}
private Query buildQuery(str _schemeCategory, str _userRegionCode)
{
Query query = new Query();
QueryBuildDataSource qbdsScheme = query.addDataSource(tableNum(PRMSchemeTable));
QueryBuildDataSource qbdsRegion = qbdsScheme.addDataSource(tableNum(PrmRegionScheme));
qbdsRegion.joinMode(JoinMode::OuterJoin);
qbdsRegion.relations(false);
qbdsRegion.addLink(fieldNum(PrmRegionScheme, SchemeCode), fieldNum(PRMSchemeTable, SchemeCode));
qbdsScheme.addRange(fieldNum(PRMSchemeTable, Scheme_Category)).value(queryValue(_schemeCategory));
qbdsScheme.addRange(fieldNum(PRMSchemeTable, SchemeStatus)).value(queryValue(PrmSchemeStatus::Release));
qbdsRegion.addRange(fieldNum(PrmRegionScheme, RegionCode)).value(SysQuery::valueEmptyString());
if (_userRegionCode)
{
qbdsRegion.addRange(fieldNum(PrmRegionScheme, RegionCode)).value(queryValue(_userRegionCode));
}
QueryBuildDataSource qbdsExclude = qbdsScheme.addDataSource(tableNum(PrmRegionScheme));
qbdsExclude.joinMode(JoinMode::NoExistsJoin);
qbdsExclude.relations(false);
qbdsExclude.addLink(fieldNum(PrmRegionScheme, SchemeCode), fieldNum(PRMSchemeTable, SchemeCode));
qbdsExclude.addRange(fieldNum(PrmRegionScheme, RegionCode))
.value(SysQuery::valueNot(_userRegionCode) + " && " + SysQuery::valueNot(SysQuery::valueEmptyString()));
}
André Arnaud de Cal...
293,309
Super User 2025 Season 1
Martin Dráb
232,160
Most Valuable Professional
nmaenpaa
101,156
Moderator