2017-01-12 8 views
1

Я пишу сценарий DXL для извлечения истории из всех объектов и записи некоторых параметров истории в другие атрибуты (столбцы) в модуле DOORS. Я начал с примера сценария в Справочном руководстве DXL (rev 9.6, рядом со стр. 333), который просто печатает информацию в окне редактора DXL. Я попытался добавить код для записи в атрибут _Reviewer - см. Ниже. В написанном коде рассматривается текущий выбранный объект, а не тот, к которому принадлежит текущая история h. Какая самая безопасная переменная переходит в функцию print, чтобы я мог получить доступ к нужному объекту и написать его атрибут _Reviewer?как отслеживать информацию об объекте и истории объектов в цикле

ответ

1

Я полагаю, что вы хотите установить атрибут _Reviewer не только для одного объекта, а для всех объектов модуля. Таким образом, у вас будет цикл по всем объектам, и для каждого объекта у вас будет цикл по каждой из записей истории.

Таким образом, основной цикл будет как

Module m = current 
string sHistoryAttributeName = "_Reviewer" 
if (null m) then {infoBox "Open this script from a module";halt) 
// […]add more code to check whether the attribute "_Reviewer" already exists in the current module and whether the module is open in edit mode 
Object o 
for o in entire m do { 
    if isDeleted(o) then continue // deleted objects are not of interest 
    // perhaps there are more objects that are not of interest. add relevant code here 
    if (!canModify o.sHistoryAttributeName) then {warn "cannot modify history entry for object " (identifier o) "\n"; continue} 
    Buffer bContentOfReview = create 
    History h 
    for h in o do { 
    bContentOfReview += getHistoryContent(h) "\n" 
    } 
    o.sHistoryAttributeName = sContentOfReview 
    delete bContentOfReview 
} 
save m 

и вашей функции getHistoryContent будет похожа на вашу функцию void print (History h), только то, что вы будете возвращать строку вместо того, чтобы печатать запись истории. Что-то вроде

string getHistoryContent (History h) { 
    HistoryType ht = h.type 
    string sReturnValue = h.author "\t" h.date "\t" ht "" 
    return sReturnValue 
} 

Еще один совет: вы написали «в другие атрибуты (столбцы)». Вышеупомянутое решение предназначено для постоянных атрибутов. Вместо этого вы можете отображать информацию в представлении в виде столбца макета DXL или или как атрибут DXL - обе возможности имеют то преимущество, что информация более или менее всегда обновляется, но с постоянным атрибутом информация будет действовать только после запуска сценария. Также обратите внимание, что этот подход даст вам только изменения с момента последней базовой линии. Если вам нужно больше, проблема будет сложнее. См. Форум Rational DXL или google для более сложных решений с указанием записей истории.

// Редактировать: удалена опечатка в конкатенации строк, используйте Buffer insted