我在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();
}
答案 0 :(得分:1)
您可以尝试使用临时版本的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();
我目前没有足够的表单来测试此查找,因此您可能需要在测试环境中使用它,但我过去使用过类似的方法。