如何在循环中跟踪对象和对象历史信息

时间:2017-01-12 16:22:34

标签: ibm-doors

我正在编写DXL脚本以从所有对象中提取历史信息,并将一些历史参数写入DOORS模块中的其他属性(列)。我开始使用DXL参考手册(rev 9.6,第333页)中的示例脚本,它只是将信息打印到DXL编辑器窗口中。我尝试添加一些代码来写入属性SomeObject - 见下文。写入的代码查看当前选定的对象,而不是当前SomeObject历史所属的对象。传递给函数SomeObject的最安全的变量是什么,所以我可以访问所需的对象并写入其_Reviewer属性?

h

1 个答案:

答案 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