如何向自定义查找查询添加额外行



我在ProdBom表上创建了一个自定义查找,它只显示给定生产订单的BOM项目,以便用户可以只选择BOM上列出的项目。我还希望他们能够在列表中选择生成的BOM项目(ProdTable.ItemId)(1个额外的项目)。我怎么能这么做?

下面是我当前的查找:

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);
    sysTableLookup.addLookupMethod(tablemethodstr(ProdBOM, itemName));
    sysTableLookup.addLookupfield(fieldnum(ProdBOM, ProdLineType));
    sysTableLookup.addLookupfield(fieldnum(ProdBOM, InventTransId));
    sysTableLookup.performFormLookup();
}

您可以尝试使用ProdBOM的临时版本,用必要的信息填充它,并使用缓冲区执行查找:

ProdBom         tmpProdBom,
                prodBom;
ProdTable       prodTable;
;
//Set table as temp buffer
tmpProdBom.setTmp();
//First record, insert into temp buffer
select prodTable where prodTable.prodId = _prodId;
tmpProdBom.lineNum = 0;
tmpProdBom.bomId   = "";
tmpProdBom.ItemId  = prodTable.itemId;
//...etc for each field you have/want to be available
tmpProdBom.insert();
//Insert the rest of the records
while select prodBom where prodBom.ProdId = _prodId
{
    tmpProdBom.lineNum = prodBom.lineNum;
    tmpProdBom.bomId   = prodBom.bomId;
    //...etc for each field you want available
    tmpProdBom.insert();
}
sysTableLookup.parmTmpBuffer(tmpProdBom);
sysTableLookup.addLookupfield(fieldNum(ProdBOM, LineNum));
//etc
sysTableLookup.performFormLookup();

我目前没有足够的表单设置来测试此查找,因此您可能需要在测试环境中使用它,但我过去使用过类似的方法。

最新更新