我需要在我的表单字段中创建动态查找,该字段应显示来自两个不同数据源的字段。我正在尝试执行它:
public void lookup()
{
query = new Query();
sysTableLookup = SysTableLookup::newParameters(tableNum(smmBusRelTable), this);
qbds = query.addDataSource(tablenum(smmBusRelTable));
// qbds.addDataSource(tableNum(DirPartyTable));
//qbds.relations(true);
sysTableLookup.parmQuery(query);
sysTableLookup.addLookupField(fieldNum(smmBusRelTable, Busrelaccount));
//sysTableLookup.addLookupfield(fieldNum(DirPartyTable, Name));
sysTableLookup.performFormLookup();
}
注释行是我试图添加不同数据源的操作。
答案 0 :(得分:5)
据我所知,SysTableLookup类不支持显示其他表中的字段。 addLookup()方法不接受TableId,并假设所有字段都在查询的第一个数据源中。
您可以编写自己的SysTableLookup版本,该版本支持从各种表中引用字段。一种更简单,更实用(也更便宜)的方法可能是在SmmBusRelTable上创建一个显示方法,以从DirPartyTable中获取名称(如果它尚不存在),并将其用作查找中的字段。如果我没记错的话,支持主表上的显示方法。
根据您要完成的具体内容,可能会有更简单的方法。您可以将显示方法添加到SmmBusRelTable的AutoLookup表字段组,并避免必须覆盖lookup()方法。
答案 1 :(得分:3)
在sysTableLookup中组合多个数据源实际上非常容易。以下是我过去能够在查找项目时从EcoResProductTranslation
过滤名称的技巧。
1)创建一个结合了所有数据源的视图,并将您希望在查找中看到的字段添加到视图中。
2)从步骤1中创建的视图创建查询
3)使用这些来执行查找,如下所示......
static client void lookupItemActive(FormStringControl _ctrl)
{
SysTableLookup sysTableLookup = SysTableLookup::newParameters(tablenum(<ViewName>),_ctrl);
Query query = new Query(queryStr(<QueryName>));
sysTableLookup.addLookupfield(fieldnum(<ViewName>, ItemId));
sysTableLookup.addLookupfield(fieldNum(<ViewName>, Name));
sysTableLookup.addLookupfield(fieldNum(<ViewName>, ItemGroupId));
sysTableLookup.addLookupfield(fieldnum(<ViewName>, Status));
sysTableLookup.addLookupfield(fieldnum(<ViewName>, RevId));
sysTableLookup.addLookupfield(fieldnum(<ViewName>, ItemType));
sysTableLookup.parmQuery(query);
sysTableLookup.performFormLookup();
}