You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:39:19