如何通过DXL或向导基于ReqID将模块A链接复制到模块B?
基于ReqID属性复制DOORS模块间对象链接的实现方案
DXL脚本实现方案
完全可以通过DXL脚本实现,核心逻辑是以ReqID属性为匹配键,替代原有的绝对对象编号匹配。以下是可直接复用的脚本框架:
// 定义要操作的两个模块 Module modA = read("模块A的完整路径", false) // 只读打开模块A Module modB = edit("模块B的完整路径", false) // 可编辑打开模块B // 遍历模块B中的所有对象 Object objB for objB in entire modB do { // 获取当前B对象的ReqID属性值 string reqID = objB."ReqID" // 注意属性名要和实际模块中的一致,区分大小写 if (reqID == "") continue // 跳过无ReqID的对象 // 在模块A中查找具有相同ReqID的对象 Object objA for objA in entire modA do { if (objA."ReqID" == reqID) { // 复制objA的所有 outgoing 链接到objB Link lnk for lnk in objA -> "*" do { create(objB, target(lnk), linkType(lnk)) } // 复制objA的所有 incoming 链接到objB for lnk in objA <- "*" do { create(source(lnk), objB, linkType(lnk)) } break // 找到匹配对象后退出内层循环,避免重复处理 } } } // 保存模块B并关闭 save(modB) close(modB) close(modA)
脚本注意事项
- 替换脚本中
模块A的完整路径和模块B的完整路径为实际模块路径,比如"/项目/需求模块/模块A" - 确保
ReqID属性名和模块中定义的完全一致(DOORS属性区分大小写) - 若模块A中存在多个ReqID相同的对象,脚本会只取第一个匹配的对象;如果需要处理多匹配场景,可去掉
break并添加重复判断逻辑 - 操作前建议备份模块,避免误操作
向导实现可行性
DOORS自带的向导(比如链接导入/导出向导)无法直接基于自定义属性(如ReqID)匹配对象并复制链接,因为向导仅支持基于对象编号、层级结构或固定列映射的匹配逻辑。因此向导无法满足你的需求,必须通过自定义DXL脚本实现。
内容的提问来源于stack exchange,提问作者Anton
相关产品推荐
相关产品推荐

