Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Axapta SysTableLookup的查找方法错误?_Axapta_X++_Dynamics Ax 2009 - Fatal编程技术网

Axapta SysTableLookup的查找方法错误?

Axapta SysTableLookup的查找方法错误?,axapta,x++,dynamics-ax-2009,Axapta,X++,Dynamics Ax 2009,这是应该与添加到Tables\ProdBOM的任何基本系统一起使用的代码。不知何故,查询正在从字段中剥离数据 static void lookupItemIdBOMSubset(FormStringControl _ctrl, ProdId _prodId) { SysTableLookup sysTableLookup = SysTableLookup::newPara

这是应该与添加到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();
}
在表\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;
}

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

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

//BP Deviation documented
display ConfigId configIdFromRecId()
{
    return InventDim::find((select firstonly prodBOM where prodBOM.RecId == this.RecId).InventDimId).configId;
}

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

这刚刚让我免于发疯-有没有发现为什么会发生这种情况?2012年也一样,我很高兴它帮助了别人!!我想我只是治好了我的症状,没有再回头看。我相信这是一个很好的解释,但我必须挖掘并盯着它看一段时间。你可以自由试一试:)