2

这是应该与添加到 Tables\ProdBOM 的任何基本系统一起使用的代码。不知何故,查询正在从字段中删除数据。

static void lookupItemIdBOMSubset(FormStringControl   _ctrl,
                                  ProdId              _prodId)
{
    SysTableLookup          sysTableLookup  = SysTableLookup::newParameters(tableNum(ProdBOM), _ctrl);
    Query                   query           = new Query();
    QueryBuildDataSource    qbds            = query.addDataSource(tableNum(ProdBOM));
    ;

    qbds.addRange(fieldNum(ProdBOM, ProdId)).value(queryvalue(_prodId));
    qbds.addSortField(fieldNum(ProdBOM, LineNum), SortOrder::Ascending);

    sysTableLookup.parmQuery(query);

    sysTableLookup.addLookupfield(fieldNum(ProdBOM, LineNum));
    sysTableLookup.addLookupfield(fieldNum(ProdBOM, BOMId));
    sysTableLookup.addLookupfield(fieldNum(ProdBOM, ItemId), true);

    // This doesn't work \/
    sysTableLookup.addLookupMethod(tablemethodstr(ProdBOM, configId));
    // This doesn't work /\

    sysTableLookup.addLookupMethod(tablemethodstr(ProdBOM, itemName));
    sysTableLookup.addLookupfield(fieldNum(ProdBOM, ProdLineType));
    sysTableLookup.addLookupfield(fieldNum(ProdBOM, InventTransId));

    sysTableLookup.performFormLookup();
}

在 Tables\ProdBOM\Methods\configId 中,您可以清楚地看到这段代码有问题。这是怎么回事??

//BP Deviation documented
display ConfigId configId()
{
    ProdBOM pb;
    ;
    select firstonly pb where pb.RecId == this.RecId;

    info(strfmt("Bad: [%1, %2], Good:[%3, %4]", this.ItemId, this.InventDimId, pb.ItemId, pb.InventDimId));
    return this.inventDim().ConfigId;
}
4

2 回答 2

4

所以我想通了。在Classes\SysTableLookup\buildSelectionList中,它将查找字段中包含的所有字段添加到 QBDS.addSelectionField,这似乎将其从返回字段中删除?

但是它并没有去掉 RecId,所以我能够创建另一个显示方法,使用 recId 重新选择记录。

//BP Deviation documented
display ConfigId configIdFromRecId()
{
    return InventDim::find((select firstonly prodBOM where prodBOM.RecId == this.RecId).InventDimId).configId;
}
于 2013-07-26T17:43:34.857 回答
1

您可以通过修改其字段列表来强制 QueryBuildDatasource 加载所需的字段。您可以使用QueryBuildDatasource.fields().addField() 方法添加应获取的字段并由您的 LookupMethod 使用

于 2015-04-02T10:55:37.590 回答