如何通过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
相关产品推荐
相关产品推荐

