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

如何通过DXL脚本从IBM Doors 9.6加载指定基线?

解决IBM DOORS DXL脚本加载指定Baseline的问题

问题根源

你的代码已经成功获取了Baseline对象b,但打开模块时使用m = read(mod),这个方法默认加载模块的当前基线,没有关联你指定的基线对象,因此导致加载错误。

正确步骤与代码修正

1. 修正Baseline对象的获取

baseline()函数的正确调用需要关联目标模块,不能传入空字符串。你需要先通过模块路径获取模块元数据引用,再用它定位对应版本号的基线:

// 获取模块元数据引用(无需打开模块)
Module modRef = find(mod)
// 通过版本号+模块引用获取基线对象
Baseline b = baseline(intOf(bsMajor), intOf(bsMinor), modRef)

2. 加载指定基线的模块

使用read()函数的重载版本,直接打开绑定指定基线的模块:

// 打开指定基线的模块
m = read(mod, b)
// 加载指定视图
load view mView

完整修正后的代码

mod = #MODULE#
xi_baseline = #BASELINE#
string mView = #VIEW#
Module m
Module modRef

int indexOf(string source, char c)
{
    int i = 0
    for (i = 0; i < length(source); i++)
    {           
        if(source[i] == c)
        {                                
            return i
        }
    }
    return -1
 }

int pos = indexOf(xi_baseline,'.')
string bsMajor = xi_baseline[0:pos - 1]
string bsMinor = xi_baseline[pos + 1:]

// 获取模块元数据引用
modRef = find(mod)
// 正确获取对应模块的基线对象
Baseline b = baseline(intOf(bsMajor), intOf(bsMinor), modRef)

// 打开指定基线的模块
m = read(mod, b)
// 加载指定视图
load view mView

备选方案:打开模块后切换基线

如果需要先打开模块再动态切换基线,可使用load()函数(模块需处于可编辑状态,只读模式需添加-read参数):

// 以只读模式打开模块
m = read(mod, false)
// 加载指定基线
load(b)
// 加载视图
load view mView

关键函数说明

  • find(string modPath):根据模块路径获取模块元数据引用,无需打开模块,用于精准定位基线。
  • baseline(int major, int minor, Module m):通过主版本号、次版本号和模块对象,获取对应的基线实例。
  • read(string modPath, Baseline bl):直接打开绑定指定基线的模块,是加载指定基线最直接的方式。
  • load(Baseline b):将指定基线加载到已打开的模块中,适用于动态切换基线的场景。

内容的提问来源于stack exchange,提问作者asaf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 06:35:32