我正在编写DXL脚本以从所有对象中提取历史信息,并将一些历史参数写入DOORS模块中的其他属性(列)。我开始使用DXL参考手册(rev 9.6,第333页)中的示例脚本,它只是将信息打印到DXL编辑器窗口中。我尝试添加一些代码来写入属性SomeObject
- 见下文。写入的代码查看当前选定的对象,而不是当前SomeObject
历史所属的对象。传递给函数SomeObject
的最安全的变量是什么,所以我可以访问所需的对象并写入其_Reviewer
属性?
h
答案 0 :(得分:1)
我想你不仅要为一个对象设置_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
}
另外一个提示:您将#34;写入其他属性(列)"。上述解决方案适用于持久属性。除此之外,您可能希望将视图中的信息显示为DXL布局列或DXL属性 - 两种可能性都具有以下优势:信息或多或少始终是最新的,但具有持久属性运行脚本后,信息才会是最新的。另请注意,此方法仅提供自上次基线以来的更改。如果您需要更多,问题将更加复杂。请参阅Rational DXL论坛或Google以获取更复杂的显示历史记录条目的解决方案
//编辑:删除字符串连接中的拼写错误,使用Buffer insted