DXL创建DOORS模块列时如何仅让单元格显示当前对象的前缀加ForeignID
问题根因
你遇到的单元格显示全量对象内容的异常,核心是混淆了全局DXL脚本和自定义DXL列脚本的执行逻辑:
自定义DXL列的运行机制为DOORS系统逐行(逐对象)触发列计算,每个单元格计算时,系统会自动传入当前行对应的对象上下文,不需要你手动编写for o in m的全模块遍历逻辑。你写的循环会导致每计算一个单元格时,都把模块内所有对象的ForeignID值通过displayRich依次追加渲染到当前单元格,最终每个格子都积累了全模块的内容列表。
具体调整点
- 删除整套手动遍历模块的全局代码:包括
Module m = current、Object o、for o in m do的循环结构,这些代码是独立批量脚本的写法,不适用列计算场景 - 直接使用列计算上下文内置的当前对象变量
obj(全小写,由系统自动注入,无需手动声明)读取ForeignID属性值 - 增加空值容错判断,避免部分对象未配置ForeignID时脚本报错中断
可直接使用的修正后列代码
// 直接获取当前行对象的ForeignID值 string currentForeignId = obj."ForeignID" // 空值判断,即使无ForeignID也保留固定前缀 if (!nullExists(currentForeignId)) { displayRich("Prefix " currentForeignId) } else { displayRich("Prefix ") }
新手注意事项
- 只有独立运行、需要批量遍历模块对象的全局DXL脚本,才需要手动编写
for o in 目标模块的循环逻辑 - 列代码的所有取数、格式调整操作,都只针对当前行的对象完成,不要在列代码里写跨对象、跨模块的遍历逻辑
- 保存列定义后,右键点击列头选择「重新计算列」,即可看到逐行匹配的正确显示效果
内容的提问来源于stack exchange,提问作者DreamOfMugen
相关产品推荐
相关产品推荐

