如何通过DXL脚本删除DOORS中特定模块内特定对象的出入链接
用DXL脚本删除IBM Rational DOORS中特定对象的传入/传出链接
没问题,我来给你详细拆解怎么用DXL脚本搞定这个需求——不管是删除特定对象的传入链接还是传出链接,都有清晰的实现方式,我会把完整的脚本示例和关键细节都讲清楚。
前提准备
- 首先得确保你拥有模块编辑权限,毕竟删除链接属于修改模块内容的操作,没有权限的话脚本会执行失败
- 提前确定两个关键信息:目标模块的完整路径(比如
"/Project/My Test Module"),以及要处理的特定对象的标识符(最常用的是对象的Object ID,也可以用自定义属性值来定位对象)
删除特定对象的传出链接(Outgoing Links)
传出链接是指从目标对象指向其他对象的链接,实现起来相对直接,因为链接的所有权在当前模块。下面是完整的脚本示例:
// 定义目标模块的完整路径 string targetModulePath = "/Project/Your Target Module" // 定义要处理的目标对象ID(你可以换成属性匹配,比如obj."Object Text" == "特定文本") int targetObjectID = 123 // 以编辑模式打开目标模块 Module targetMod = edit(targetModulePath, false) if (null targetMod) { print "无法打开目标模块:" targetModulePath "\n" exit } // 遍历模块对象,定位目标对象 Object currentObj for currentObj in targetMod do { if (currentObj.id == targetObjectID) { // 遍历该对象的所有传出链接("*"匹配所有链接类型,可替换为特定链接模块路径) Link outgoingLink for outgoingLink in currentObj -> "*" do { // 执行删除操作 delete(outgoingLink) print "已删除传出链接:对象ID " currentObj.id " → " target(outgoingLink).id "\n" } break // 找到目标对象后直接退出循环,提升效率 } } // 保存修改并关闭模块,这一步很重要,不然修改不会生效 save(targetMod) close(targetMod) print "传出链接删除操作完成!\n"
关键细节说明
currentObj -> "*"表示匹配该对象的所有类型传出链接,如果只想删除特定链接模块的链接,把"*"换成链接模块的完整路径即可(比如"/Link Modules/Requirements Traceability")delete(outgoingLink)是删除链接的核心DXL函数,执行后链接会被立即标记为删除,直到模块保存后彻底生效
删除特定对象的传入链接(Incoming Links)
传入链接是其他对象指向目标对象的链接,这里要注意:传入链接的所有权属于源对象所在的模块,所以必须打开源模块才能删除。下面是实现脚本:
// 定义目标模块路径 string targetModulePath = "/Project/Your Target Module" // 定义要处理的目标对象ID int targetObjectID = 123 // 以编辑模式打开目标模块 Module targetMod = edit(targetModulePath, false) if (null targetMod) { print "无法打开目标模块:" targetModulePath "\n" exit } // 直接通过对象ID定位目标对象,比遍历更高效 Object targetObj = find(targetMod, targetObjectID) if (null targetObj) { print "未找到对象ID为 " targetObjectID " 的对象\n" close(targetMod) exit } // 遍历所有指向目标对象的传入链接 Link incomingLink for incomingLink in <- targetObj do { // 获取源对象所在的模块,并以编辑模式打开 Module sourceMod = edit(source(incomingLink), false) if (null sourceMod) { print "无法打开源模块:" fullName(source(incomingLink)) "\n" continue } // 删除这条传入链接 delete(incomingLink) print "已删除传入链接:对象ID " source(incomingLink).id " → " targetObj.id "\n" // 保存源模块的修改并关闭 save(sourceMod) close(sourceMod) } // 保存并关闭目标模块 save(targetMod) close(targetMod) print "传入链接删除操作完成!\n"
关键细节说明
<- targetObj是DXL中获取对象所有传入链接的语法- 必须打开源模块并保存,因为链接的修改需要在源模块中生效,这是很多新手容易踩的坑
find(targetMod, targetObjectID)是DXL提供的快速定位对象的函数,比遍历整个模块效率高很多
重要注意事项
- 执行脚本前一定要备份模块,避免误删重要的链接数据
- 如果需要批量处理多个对象,可以修改脚本中的定位逻辑(比如遍历符合特定属性条件的所有对象)
- 若要限制删除特定类型的链接,记得把脚本中的
"*"替换为具体的链接模块路径,缩小操作范围
内容的提问来源于stack exchange,提问作者Javed
相关产品推荐
相关产品推荐

