我们的想法是去构造具有独特的用人单位名称进行查找。 查找工作正常,但是当我选择一个值,然后再次选择查找按钮,点击红色标记的地方,也有重复的值,这是不对的。
请参阅该代码段和快照
QueryBuildDataSource qbds;
Query query = new Query();
FormStringControl control = dialog.formRun().controlCallingMethod();
SysTableLookup sysTableLookup = SysTableLookup::newParameters(tablenum(VendTable), control);
;
qbds = query.addDataSource(tablenum(VendTable));
qbds.addGroupByField(fieldnum(VendTable,EmployerName));
sysTableLookup.addLookupfield(fieldnum(VendTable, EmployerName));
sysTableLookup.parmQuery(query);
sysTableLookup.parmUseLookupValue(false);
sysTableLookup.performFormLookup();
这里和灰] 2
就表的视图VendTable
和现场EmployerName
和RecId的计数 ,然后立足于视图的查询。
如下所示为CustTable
和CustGroup
:
在这种情况下,我使用这种方法。 它类似于由Jan提出的答案,但更简单。
创建要在查找,看场,其中包括一个EmployerName TMP表,我将其称之为MyTmpTable。 嗯,其实你可以(之前,如果你插入()和忘记setTmp(什么)?)使用VendTable与setTmp()TMP表,但它是容易出错的,它有很多领域(更RAM消耗,即使他们”再空); 所以我宁愿创建一个新的TMPTable。
现在VendTable在这里不用此查找方法:
static voidlookup_EmployerName(FormControl _callingControl)
{
VendTable vendTable;
MyTmpTable tmpTable;
SysTableLookup sysTableLookup;
;
while select EmployerName from vendTable
group by EmployerName
{
tmpTable.EmployerName = vendTable.EmployerName;
tmpTable.insert();
}
sysTableLookup = SysTableLookup::newParameters(tableNum(MyTmpTable),_callingControl);
sysTableLookup.addLookupField(fieldNum(MyTmpTable, EmployerName),true);
sysTableLookup.addLookupMethod(tableMethodStr(MyTmpTable, yourMethod));
sysTableLookup.addLookupField(fieldNum(MyTmpTable, otherfieldtosee),false);
//More field/methods...
sysTableLookup.parmTmpBuffer(tmpTable);
sysTableLookup.performFormLookup();
}
现在你可以在愉悦使用该查询。 在选择时可以重写,以提高性能,但是用这个在这里再清楚不过了。