3

我需要在我的表单字段中创建动态查找,它应该显示来自两个不同数据源的字段。我试图将其执行为:

  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();
}

注释行是我尝试执行以添加不同数据源的操作。

4

2 回答 2

5

据我所知,SysTableLookup 类不支持显示其他表中的字段。addLookup() 方法不采用 TableId,并假定所有字段都在查询的第一个数据源中。

您可以编写自己的 SysTableLookup 版本,支持从各种表中引用字段。一种更简单、更实用(且成本更低)的方法可能是在 SmmBusRelTable 上创建一个显示方法,以从 DirPartyTable 获取名称(如果它不存在)并将其用作查找中的字段。如果我没记错的话,支持主表上的显示方法。

根据您要完成的具体工作,可能会有更简单的方法。您可以将 display 方法添加到 SmmBusRelTable 的 AutoLookup 表字段组中,而不必重写 lookup() 方法。

于 2013-02-02T14:32:46.540 回答
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();
}
于 2014-08-28T19:55:02.650 回答