能否在IBM DOORS中基于其他属性值动态更新枚举类型?
在IBM DOORS中动态同步枚举属性与配置项列表
要实现基于配置项列表自动更新枚举属性,核心是通过DOORS的DXL脚本读取配置项并同步枚举值,以下是具体实现方案:
实现步骤与脚本示例
- 提取配置项列表:从存储配置项的模块中读取所有对象文本作为枚举候选值
- 定位目标枚举属性:找到需要动态更新的枚举类型属性定义
- 同步枚举值:清空旧枚举值,批量添加新的配置项作为枚举选项
- 触发同步:可手动执行脚本,或配置模块事件自动触发
示例DXL脚本
// 配置参数:替换为你的实际模块路径和属性名 string configModulePath = "/项目/配置项模块" // 存储配置项的模块路径 string targetAttrName = "关联配置项" // 需要更新的枚举属性名 // 打开配置项模块 Module configModule = edit(configModulePath, false) if (null configModule) { print "错误:无法打开配置项模块\n" exit } // 收集非空的配置项名称 Skip configItems = create() Object configObj for configObj in configModule do { string itemName = configObj."Object Text" if (!null itemName && itemName != "") { put(configItems, itemName, itemName) } } // 定位目标枚举属性 Module targetModule = current // 若需指定其他模块,替换为open("目标模块路径", false) AttrDef enumAttr = attrDef(targetModule, targetAttrName) if (null enumAttr || type(enumAttr) != ENUM) { print "错误:目标属性不存在或不是枚举类型\n" delete configItems close configModule exit } // 清空旧枚举值并添加新配置项 Enum enumDef = enumType(enumAttr) clear enumDef string itemKey for itemKey in configItems do { add(enumDef, itemKey) } // 保存变更并反馈结果 save(targetModule) print "枚举属性同步完成,共添加 " numberOf(configItems) " 个配置项\n" // 清理资源 delete configItems close configModule
关键注意事项
- 权限要求:运行脚本需要目标模块和配置项模块的编辑权限,配置自动触发需管理员权限
- 非法字符处理:确保配置项名称不包含枚举值禁止的字符(如逗号、双引号),否则脚本会报错
- 自动触发配置:如需在配置项变更时自动同步,可将脚本绑定到配置项模块的
Post-Modify事件,或通过定时任务执行脚本 - 数据校验:可在脚本中添加重复值过滤、空值排除等逻辑,避免无效枚举值
内容的提问来源于stack exchange,提问作者Hannibal
相关产品推荐
相关产品推荐

