X++字符串类型Lookup查找字段的过滤逻辑适配问题求助
解决方案
你之前使用的SysReferenceTableLookup类是专门为Int64类型的引用分组(reference group)控件设计的,仅支持返回RecId类型的值,字段改为字符串类型后,需要改用适配普通字段查找的SysTableLookup类实现过滤逻辑,修改后的代码如下:
[FormControlEventHandler(formControlStr(InventSite, InventSite_MyField), FormControlEventType::Lookup)] public static void InventSite_MAndEDay_OnLookup(FormControl sender, FormControlEventArgs e) { // 替换为SysTableLookup适配字符串类型控件 SysTableLookup tableLookup = SysTableLookup::newParameters(tableNum(ReferenceTables), sender); Query query = new Query(); QueryBuildDataSource qbds = query.addDataSource(tableNum(ReferenceTables)); // 原有过滤逻辑保持不变 qbds.addRange(fieldNum(ReferenceTables,ReferenceTablesType )).value(queryValue(ReferenceTablesTypeBaseEnum::MyField)); // 显式指定要返回的字符串字段,可根据实际业务需求调整目标字段 tableLookup.parmReturnField(fieldNum(ReferenceTables, Name)); tableLookup.addLookupField(fieldNum(ReferenceTables, Name )); tableLookup.addLookupField(fieldNum(ReferenceTables, Description )); tableLookup.parmQuery(query); tableLookup.performFormLookup(); }
核心修改说明
- 替换查找实现类:将
SysReferenceTableLookup替换为SysTableLookup,适配非引用类型的普通字段查找场景 - 新增返回字段指定:调用
parmReturnField方法明确查找后回写到控件的字段,避免默认返回RecId导致类型不匹配报错
注意事项
请确保parmReturnField指定的字段是ReferenceTables表中的字符串类型字段,且字段长度和当前表单控件绑定的字段长度一致,避免出现值截断或匹配错误的问题,之前配置的表关系无需调整,选值后会自动触发校验。
内容的提问来源于stack exchange,提问作者Granger
相关产品推荐
相关产品推荐

