如何使用多个数据源中的字段创建查找?

时间:2013-02-02 08:16:20

标签: axapta x++ dynamics-ax-2012

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

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

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

2 个答案:

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