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

如何通过DXL规避加载含无效筛选器视图时的错误弹窗?

解决DOORS 9.7中DXL分析视图时的无效筛选器弹窗问题

方案一:提前排查无效视图(推荐)

核心想法是在加载视图前,先解析视图的筛选器配置,找出那些引用了已删除枚举的视图,直接跳过不处理,从根源上避免弹窗。

具体实现步骤

  • 遍历模块里的所有视图,拿到每个视图的筛选器字符串:
    Module m = current
    View v
    for v in m do {
        string filterStr = v."filter"
        // 接下来解析这个字符串检查无效枚举
    }
    
  • 先把模块里现存的所有枚举类型存到一个集合里:
    Skip validEnums = create()
    Type t
    for t in m do {
        if (type(t) == typeEnum) {
            put(validEnums, name(t), true)
        }
    }
    
  • 解析筛选器字符串,找出里面的枚举引用,对比有效枚举集合,发现不在里面的就跳过该视图:
    // 用正则匹配筛选器里的枚举名(示例匹配"EnumName="这种格式)
    RegExp enumRegex = regexp2("([A-Za-z0-9_]+)=")
    if (enumRegex.search(filterStr)) {
        string enumName = enumRegex.group(1)
        if (!find(validEnums, enumName)) {
            print "跳过无效视图:" name(v) "\n"
            continue
        }
    }
    // 没问题再加载视图做分析
    load(v)
    // ... 你的分析逻辑代码
    

方案二:拦截错误弹窗(兼容9.7的替代方案)

之前9.6用的“设默认视图+不可见打开”在9.7会崩溃,可以试试用DXL的自定义错误处理来拦截弹窗:

  • 写一个错误处理函数,专门拦截视图筛选器相关的错误:
    void suppressFilterError(int errCode, char *errMsg) {
        // 匹配无效筛选器的错误提示,根据你的DOORS语言版本调整文本
        if (errMsg contains "无效筛选器" || errMsg contains "枚举类型不存在") {
            print "忽略错误:" errMsg "\n"
            return
        }
        // 其他错误还是用默认处理
        defaultErrorProc(errCode, errMsg)
    }
    
    // 启用自定义错误处理
    errorProc(suppressFilterError)
    
    // 不可见打开模块(注意路径替换成你的)
    Module targetMod = read("/项目路径/目标模块", false)
    View v
    for v in targetMod do {
        load(v)
        // ... 分析逻辑
    }
    
    // 记得恢复默认错误处理
    errorProc(defaultErrorProc)
    
  • 注意:这个方法依赖错误提示文本的匹配,如果你的DOORS是英文版本,要把判断里的中文换成对应的英文提示,比如"invalid filter"、"enum type does not exist"。

额外提醒

  • 先拿几个小模块测试逻辑,没问题再批量跑,避免出问题。
  • 如果筛选器逻辑复杂(比如嵌套条件、多个枚举引用),要优化正则表达式或者解析逻辑,确保不漏判也不误判。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 21:53:20