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