如何在自定义查找查询中添加额外的行?

时间:2014-06-02 17:10:11

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

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

1 个答案:

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

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