我正在使用 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;
}
}