解决参考方法

时间:2014-09-10 05:20:00

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

我是Dynamics AX 2012新手,在我们的项目中,我们查找了参考组,查找值如下:

A
C
B
D
C
B
C
A
D

值正确, 但我希望查找只显示不同的值,如

A
B
C
D

我需要在Resolve引用方法中编写代码。但我不知道如何过滤不同的值,查找值是RECID。我不知道如何过滤值请检查代码。

public Common lookupReference(FormReferenceControl _formReferenceControl)
{
    Common ret;
    SysReferenceTableLookup   sysReferenceTableLookup;
    QueryBuildDataSource qbdsPositionDetails,qbdsJobDetails,qbdsJob;
    HcmJob _HcmJob;    
    Query query = new Query();  

    sysReferenceTableLookup = SysReferenceTableLookup::newParameters(tableNum(HcmJob),_formReferenceControl, true);
    qbdsJob = query.addDataSource(tableNum(HcmJob));
    qbdsPositionDetails = qbdsJob.addDataSource(tableNum(HcmPositionDetail));
    qbdsPositionDetails.relations(true);   
    qbdsPositionDetails.addRange(fieldNum(HcmPositionDetail,Department)).value(queryValue(HCMResRequirement.Department));
    sysReferenceTableLookup.addLookupField(fieldNum(HcmJob,JobId));
    sysReferenceTableLookup.addLookupMethod('description');
     sysReferenceTableLookup.parmQuery(query);
    _HcmJob = sysReferenceTableLookup.performFormLookup();
    return _HcmJob;
}

1 个答案:

答案 0 :(得分:1)

你的两张桌子是inner joined,这不是你想要的!

您想要一个存在联接,返回部门中已存在的作业。

这可以通过以下行完成:

qbdsPositionDetails.joinMode(JoinMode::ExistsJoin);

清理这个给了我们:

public Common lookupReference(FormReferenceControl _formReferenceControl)
{
    SysReferenceTableLookup lookup = SysReferenceTableLookup::newParameters(tableNum(HcmJob),_formReferenceControl, true);
    QueryBuildDataSource ds = lookup.parmQuery().dataSourceNo(1).addDataSource(tableNum(HcmPositionDetail));
    ds.addRange(fieldNum(HcmPositionDetail,Department)).value(queryValue(HCMResRequirement.Department));
    ds.joinMode(JoinMode::ExistsJoin);    
    ds.relations(true);        
    lookup.addLookupField(fieldNum(HcmJob,JobId));
    lookup.addLookupMethod(tableMethodStr(HcmJob,description));
    return lookup.performFormLookup();   
}