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

Axapta 如何使用来自多个数据源的字段创建查找?,axapta,x++,dynamics-ax-2012,Axapta,X++,Dynamics Ax 2012,我需要在表单字段中创建动态查找,该字段应显示来自两个不同数据源的字段。。我尝试将其作为: public void lookup() { query = new Query(); sysTableLookup = SysTableLookup::newParameters(tableNum(smmBusRelTable), this); qbds = query.addDataSource(tablenum(smmBusRelTable)); // qbds.addD

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

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

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

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

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


根据你到底想完成什么,可能有一个更简单的方法。您可以将display方法添加到SmmBusRelTable的AutoLookup table字段组中,并避免重写lookup()方法。

在一个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();
}
静态客户端无效lookupItemActive(FormStringControl\u ctrl)
{
SysTableLookup SysTableLookup=SysTableLookup::newParameters(tablenum(),_ctrl);
Query Query=新查询(queryStr());
addLookupfield(fieldnum(,ItemId));
sysTableLookup.addLookupfield(fieldNum(,Name));
addLookupfield(fieldNum(,ItemGroupId));
sysTableLookup.addLookupfield(fieldnum(,Status));
addLookupfield(fieldnum(,RevId));
addLookupfield(fieldnum(,ItemType));
sysTableLookup.parmQuery(查询);
sysTableLookup.performFormLookup();
}

此外,您还可以创建一个视图来连接
smmBusRelTable
DirPartyTable
(我认为已经存在了一个)。然后,
SysTableLookup
可以使用该视图。