如果模块中不存在属性,则 DXL 会忽略错误

DXL ignoring the error if an attribute doesn't exist in a module

我正在编写一些 DXL 用作 DXL 列,对于模块中的每个对象,查看 in-links 和 returns link 名称。然后如果link名称以"verif"开头,它将从linked模块中的属性"TestResultFloating"中获取对象文本并显示在当前模块中,在DXL 列。

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

下面是我的代码,只要 "TestResultFloating" 属性存在于 linked 模块中,它目前就可以工作,但如果该属性不存在,则会抛出错误。

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参考手册中获得的方法,即检查属性是否存在,然后进行操作。这是我添加的,但它似乎不起作用,我仍然得到同样的错误 "unknown Object attribute (TestResultFloating)" 我尝试的结果如下所示:

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

另请注意,我是 DOORS 和 DXL 的新手,所以如果我做错了什么或者我问的是一个简单的问题,请原谅我。

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

中找到