2016-12-05 13 views
0

Я пишу какой-то DXL для использования в качестве столбца DXL, который для каждого объекта в модуле, смотрит на ссылки и возвращает имя ссылки. Затем, если имя ссылки начинается с «verif», он получит текст объекта из атрибута «TestResultFloating» в связанном модуле и покажет его в текущем модуле в столбце DXL.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, поэтому, если я делаю что-то совершенно неправильное или я задаю простой вопрос, пожалуйста, простите меня.

ответ

1

Существует функция утилиты, называемая string probeAttr_(Object o, string attrName), которая может использоваться для получения значения атрибута, если вы не уверены, читается ли этот атрибут или существует ли он вообще.
Эта функция и множество аналогичных функций, адаптированных для разных обстоятельств, можно найти в файле «c: \ Program Files \ IBM \ Rational \ DOORS \ 9.6 \ lib \ dxl \ utils \ attrutil.inc"

+0

Как бы Я использую это в этом случае? Я раньше не использовал функции. Было бы что-то вроде установки строки = probeAttr_ (obj, «TestResultFloating»), а затем проверки, является ли строка пустой или нет? – Gurn64

+0

да, точно так же. – Mike

 Смежные вопросы

  • Нет связанных вопросов^_^