D365 F&O X++实现服务lookup联动过滤子服务lookup功能咨询
D365 Finance and Operations 级联Lookup实现方案
现有代码核心问题
- lookup绑定表错误:子服务下拉对应的数据表是
SubService,原有代码错误绑定了Service表 - 取值逻辑错误:需要获取父级
service字段的选中值,原有代码错误读取了当前sub-service字段自身的值 - 过滤规则错误:应过滤
SubService表中关联Service的外键字段,原有代码过滤逻辑完全不匹配需求 - 多余配置错误:
firstOnly配置会导致下拉只展示一条数据,不符合多选展示要求
修正后完整代码
[FormControlEventHandler(formControlStr(InventSite, InventSite_SubServiceRefRecId), FormControlEventType::Lookup)] public static void InventSite_SubServiceRefRecId_OnLookup(FormControl sender, FormControlEventArgs e) { SysReferenceTableLookup sysRefTableLookup; Query query = new Query(); QueryBuildDataSource qbds; FormRun formRun = sender.formRun(); // 获取父级service字段的选中RecId FormControl serviceControl = formRun.design().controlName(formControlStr(InventSite, InvenSite_ServiceRefRecId)); RecId selectedServiceRecId = serviceControl.value() as RecId; FormControlCancelableSuperEventArgs ce = e as FormControlCancelableSuperEventArgs; // 绑定子服务对应数据表SubService sysRefTableLookup = SysReferenceTableLookup::newParameters(tableNum(SubService), sender); qbds = query.addDataSource(tableNum(SubService)); // 按选中的父级service过滤子服务 // 注意:请将下方ServiceRefRecId替换为你SubService表中实际关联Service表的外键字段名 qbds.addRange(fieldNum(SubService, ServiceRefRecId)).value(queryValue(selectedServiceRecId)); sysRefTableLookup.parmQuery(query); // 配置下拉展示字段,可根据实际业务需求增删调整 sysRefTableLookup.addLookupfield(fieldNum(SubService, SubServiceName)); sysRefTableLookup.addLookupfield(fieldNum(SubService, SubServiceDescription)); sysRefTableLookup.performFormLookup(); ce.CancelSuperCall(); }
参考配置界面
你提供的Service表单配置如下:
注意事项
如果你的
SubService表中关联Service的外键字段名称与示例不同,务必替换代码中对应的字段名,否则过滤会失效。
下拉展示的字段可根据业务需要自行调整,只需要修改addLookupfield的参数即可。
内容的提问来源于stack exchange,提问作者Granger
相关产品推荐
相关产品推荐

