Axapta 工作区上的D365FO过滤

Axapta 工作区上的D365FO过滤,axapta,microsoft-dynamics,x++,dynamics-365-operations,Axapta,Microsoft Dynamics,X++,Dynamics 365 Operations,我正在使用D365FO(更新28)。需要根据自定义创建的工作区上的负责人进行筛选。表PMCContract包含HCMWORKERRECID列。过滤器正在正确打开人员列表,但不管选择了哪个人员。另外,当加载工作区时,默认情况下它总是加载列表中的第一个人,但它应该是空的 [Form] public class PMCContractManagementWorkspace extends FormRun implements SysIFilterProvider { SysFilte

我正在使用D365FO(更新28)。需要根据自定义创建的工作区上的负责人进行筛选。表PMCContract包含HCMWORKERRECID列。过滤器正在正确打开人员列表,但不管选择了哪个人员。另外,当加载工作区时,默认情况下它总是加载列表中的第一个人,但它应该是空的

    [Form]
public class PMCContractManagementWorkspace extends FormRun implements SysIFilterProvider
{

    SysFilterChangeEvent changeEvent;

    public void close()
    {
        super();

        SysFilterLastValueHelper::saveLastValue(worker);
    }

    public void initParmDefault()
    {
        if (!Worker.value())
        {
            HcmWorker     hcmWorker;
            PMCContract personUser;

            select firstonly RecId from hcmWorker
                exists join personUser
                where hcmWorker.RecId == personUser.HCMWORKERRECID;
                && personUser.HCMWORKERRECID == curUserId();

            Worker.value(hcmWorker.recId);
        }
    }

    public void init()
    {
        super();

        SysFilterLastValueHelper::getLastValue(worker);

        changeEvent = SysFilterChangeEvent::newFromFormControl(worker);

        this.initParmDefault();
    }

    public SysIFilter parmFilter()
    {
        SysIFilter                      filter = SysFilterFactory::createEmptyFilter();
        UserInfo                        currentUser;
        HcmWorker                       hcmWorker;
        PMCContract                     personUser;
        SysFilterValueResolutionMethod  filterValueResolutionMethod = SysFilterValueResolutionMethod::All;

        select HCMWORKERRECID from personUser
            //exists join hcmWorker
            where hcmWorker.RecId == personUser.HCMWORKERRECID;
                    //&& hcmWorker.RecId == Worker.value();

        SysIFilterValue  filterValue = SysFilterValueFactory::createFilterValueForBuffer(currentuser);

        if (currentUser)
        {
            filterValueResolutionMethod = SysFilterValueResolutionMethod::None;
        }

        filter.addItem(filterValue, SysFilterOperator::Equal, filterValueResolutionMethod);

        return filter;
    }

    public SysFilterChangeEvent parmChangeEvent()
    {
        return changeEvent;
    }

}

parmFilter
方法中的逻辑看起来很奇怪。它从
personUser
中进行选择,并在
hcmWorker.RecId
上添加一个条件,但
hcmWorker
未加入到语句中。但是它不使用
personUser
。相反,使用的是
currentUser
,它似乎没有初始化。您能在代码中添加一些注释来解释您认为代码在做什么吗?我使用了SalesOrderProcessing工作区中的逻辑。我需要根据负责人过滤工作区中的所有数据,在本例中为(hcmworkerrecId)。parmFilter方法中的逻辑看起来很奇怪。它从
personUser
中进行选择,并在
hcmWorker.RecId
上添加一个条件,但
hcmWorker
未加入到语句中。但是它不使用
personUser
。相反,使用的是
currentUser
,它似乎没有初始化。您能在代码中添加一些注释来解释您认为代码在做什么吗?我使用了SalesOrderProcessing工作区中的逻辑。我需要根据负责人筛选工作区中的所有数据,在本例中为(hcmworkerrecId)。