【问题标题】:DXL ignoring the error if an attribute doesn't exist in a module如果模块中不存在属性,DXL 会忽略错误
【发布时间】:2016-12-05 16:08:43
【问题描述】:

我正在编写一些 DXL 用作 DXL 列,该列针对模块中的每个对象,查看内链接并返回链接名称。然后如果链接名称以“verif”开头,它将从链接模块中的属性“TestResultFloating”中获取对象文本,并将其显示在当前模块的DXL列中。

当我在整个数据库(目前我只是使用沙箱)上使用它时,我会遇到的问题是,通过“verif”链接模块链接的某些模块将不包含“TestResultFloating”属性。对于这些,我想抑制“未知对象属性(TestResultFloating)”错误,而是在当前模块中为该对象显示类似 N/A 的内容。

下面是我的代码,只要链接模块中存在“TestResultFloating”属性,当前就可以工作,但如果该属性不存在,则会抛出错误。

ModName_ mSrc
Object o = current
Object nObject
Object oSrc, oDest
LinkRef lr = null
Link l = null
string linkname = ""
string attrbName = "TestResultFloating"

  for mSrc in (obj <- "*") do {

    if (!open(mSrc)) {
      read(fullName(mSrc), true)
    }
  }

  for l in (obj <- "*") do {

    oSrc = source(l)
    linkname = name(module(l))
    string linkmodname = upper(linkname[0:4])

    if(linkmodname == "VERIF") {
      string objText = oSrc."TestResultFloating"
      display(objText)
      }
  }

我尝试了从 dxl 参考手册中获得的一种方法,即检查属性是否存在,然后进行操作。这是我添加的,但它似乎不起作用,我仍然收到相同的错误“未知对象属性(TestResultFloating)” 我尝试的如下所示:

if(linkmodname == "VERIF") {
      if(exists attribute "TestResultFloating"){
        string objText = oSrc."TestResultFloating"
        display(objText)
    }
      else {
        display("N/A")
      }
    }

还请注意,我对 DOORS 和 DXL 很陌生,所以如果我做错了什么或者我问的是一个简单的问题,请原谅我。

【问题讨论】:

    标签: ibm-doors


    【解决方案1】:

    有一个名为string probeAttr_(Object o, string attrName) 的实用函数可用于在您不确定属性是否可读或是否存在时获取属性值。
    这个函数和很多针对不同情况量身定制的类似函数可以在文件“c:\Program Files\IBM\Rational\DOORS\9.6\lib\dxl\utils\attrutil.inc”中找到

    【讨论】:

    • 在这种情况下我将如何使用它?我以前没有使用过这些功能。是否类似于设置 string = probeAttr_(obj, "TestResultFloating") 然后检查字符串是否为空?
    猜你喜欢
    • 2021-11-28
    • 2013-08-07
    • 2020-04-25
    • 2019-07-02
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多