Doors中如何实现两个模块基线间的双向链接创建
DOORS 9.6.1 基线间双向链接实现方案
核心结论
DOORS原生不支持直接在两个已冻结的基线对象之间直接创建链接,但可通过标准操作流程配合DXL脚本实现两个指定基线版本对象的稳定双向关联,不会出现链接随当前版本修改失效的问题。
两种测试方案失效的根本原因
- 方案1问题:DOORS链接实体仅存储在链接发起端的可编辑版本中,基线侧展示的反向链接为系统实时遍历可编辑模块计算得到的动态结果,不会在基线生成时自动固化指向。从当前版Module A发起指向Module B基线1.0的链接时,链接实体仅存在于Module A的可编辑版本内,一旦删除当前版Module A的源对象,Module B基线1.0侧动态计算得到的反向链接自然失效。基线本身为只读冻结状态,不可能自动写入新的链接指向。
- 方案2问题:DOORS所有基线版本均为只读状态,禁止任何写入操作,因此无法直接在两个已生成的基线对象之间创建链接,这是产品的基础设计规则。
具体实现方式
根据目标基线是否已生成,分两种场景操作:
场景1:两个模块的目标Baseline 1.0尚未最终冻结
这是最符合DOORS设计逻辑、无额外冗余版本的实现方式:
- 先将Module A、Module B都调整到待打Baseline 1.0的可编辑状态,确认两个模块内需要关联的对象全部创建完成,无待删除、调整的内容。
- 在Module A的可编辑版本中,为待关联对象创建指向Module B当前版本对应对象的出链;再切换到Module B的可编辑版本,为对应关联对象创建指向Module A当前版本对应对象的出链。如果用DXL批量操作,直接遍历匹配两个模块的对应对象,双向调用链接创建接口即可,注意提前指定对应链接模块。
- 两个模块内容不再做任何修改,依次为Module A、Module B创建Baseline 1.0。
- 原理:基线生成时会固化当前模块内所有链接的指向,此时Module A基线1.0内的出链会自动匹配Module B同批次Baseline 1.0的对应对象,Module B基线1.0内的出链也会指向Module A基线1.0的对应对象。后续无论怎么修改、删除两个模块当前版本的对象,两个基线之间的链接都不会失效,因为链接实体已经随基线冻结。
场景2:两个模块的Baseline 1.0已单独生成,无法退回重打
已生成的基线无法写入链接,需要通过分支补基线的方式实现:
- 分别以Module A Baseline 1.0、Module B Baseline 1.0为基准,拉出独立的可编辑分支版本。
- 在两个可编辑分支版本中,通过DXL脚本批量匹配待关联对象,双向创建链接。注意打开模块时要准确指定对应基线版本句柄,核心DXL代码片段参考:
// 打开Module A从Baseline1.0拉出的可编辑分支 Module mA = edit("Module A", false, "A_baseline1.0_link_branch") // 只读打开Module B的Baseline1.0(主版本号1,次版本号0) Module mB = read("Module B", false, 1, 0) Object oA, oB // 按业务规则遍历匹配关联对象,以下为示例逻辑 for oA in mA do { // 按属性匹配找到Module B Baseline1.0中对应的oB对象,匹配规则可自定义 string reqId = oA."ReqID" oB = find(mB, "ReqID", reqId) if (!null oB) { // 创建从oA指向oB的链接,替换为实际使用的链接模块名 oA -> "Traceability Link" -> oB } } // 反向创建Module B分支到Module A Baseline1.0的链接逻辑同上 save mA close mA save mB close mB
- 链接全部创建完成并校验无误后,为这两个分支版本分别打上补录基线(可命名为Baseline 1.0_LinkFixed),两个补录基线之间就会存在稳定的双向链接,后续当前版本的修改不会影响基线内的链接有效性。
操作注意事项
- 基线审计场景下不要依赖动态计算的反向链接,所有需要固化的关联关系必须在打基线前写入对应模块的可编辑版本,随基线一起冻结才能保证永久可追溯。
- 批量创建链接前必须提前校验对象匹配规则,避免错链。基线一旦生成无法修改内容,错链只能通过新建补丁基线的方式修正。
内容的提问来源于stack exchange,提问作者Mite
相关产品推荐
相关产品推荐

