如何修改DOORS中分析向导生成的DXL代码?
问题根因
分析向导自动生成的追踪列属于DOORS内置的受保护列,默认锁死DXL编辑入口,所以打开列属性浏览DXL时所有选项灰化、无法选中Current、看不到生成源码是默认机制,不是操作错误或者软件故障。
可落地实现方案
- 方案1:新建自定义DXL列替代原受保护列(推荐,无后续覆盖风险)
不需要强行修改原锁死的向导列,直接新建一个同位置的DXL类型列,复现原列的多层链接追踪逻辑,同时嵌入skip list去重逻辑即可。核心去重代码可直接复用:
// 初始化去重skip列表,用字符串key存储已处理对象的唯一标识 Skip processedObjs = createString() Object currentObj, linkTgt string uniqueKey // 替换成你实际的多层链接遍历逻辑,比如递归遍历入链/出链 for currentObj in <你的多层链接遍历范围> do { uniqueKey = fullName(currentObj) // 用对象全路径当唯一标识,跨模块不会重名 if (find(processedObjs, uniqueKey, linkTgt)) continue // 已处理过的对象直接跳过,避免重复展示 put(processedObjs, uniqueKey, currentObj) // 新对象加入已处理列表 // 此处写原列的内容输出逻辑,比如输出对象编号、标题、链接属性等 displayRich(number(currentObj) " " text(currentObj) "\n") } // 列渲染完成后销毁skip列表,释放内存避免泄漏 delete(processedObjs)
代码调试完成后,把列宽、显示样式调整到和原向导列一致,隐藏或删除原灰化的受保护列即可,后续需要调整逻辑可以直接打开列属性修改,不会被系统自动覆盖。
- 方案2:临时解锁原列编辑权限(不推荐,有修改丢失风险)
打开原向导列的属性窗口时,按住Ctrl+Shift组合键再点击DXL浏览按钮,原本灰化的选项会临时解锁可编辑,可以直接插入skip list去重逻辑。注意:分析向导后续重跑、列刷新时会自动覆盖所有自定义修改,临时改的代码会丢失,仅适合临时验证逻辑用。
去重逻辑注意事项
- skip列表的key不要只用对象编号,跨模块场景下会出现编号重复导致误判,优先用
fullName(o)或者identifier(o)作为唯一key。 - 如果用递归方式遍历多层嵌套链接,skip列表要定义在递归函数的外层,不要在递归逻辑里重复新建,否则无法实现跨层级去重。
- 每次列渲染完成后必须手动删除创建的skip列表,长时间打开模块会出现内存占用持续升高的问题。
内容的提问来源于stack exchange,提问作者Kyle Stewart
相关产品推荐
相关产品推荐

