SCMLife.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 10244|回复: 4

[推荐] 使用 Rational Rhapsody ReporterPLUS 从 SysML 模型中自动生成文档

[复制链接]
发表于 2011-10-25 17:30:53 | 显示全部楼层 |阅读模式
本帖最后由 技术狂人 于 2011-10-25 17:34 编辑
* m) y+ p5 r# {  `; b* N; S% T" a: a
在谈到复杂或者与安全相关的设计时,人们普遍认为基于模型的系统工程(MBSE)对传统的开发方法提供了很大的改进。今天,使用文件中心的方法,填补了这些方法之间存在的空白。
( b3 }1 W( f( j: U
) U1 W: \5 z1 W0 x& V有了 SysML,就有了特别适合于系统工程的 UML,开发团队有了一个语义丰富的注释,以构建演示开发系统各个不同方面的模型。它还支持各种类型的分析任务。
4 ~9 j( J+ R1 d
$ v2 z4 L3 W! B3 wSysML 模型包含了来自不同域的如此之多的信息,当您需要它们作为部分可交付项目时,这是使用信息生成文档的逻辑性步骤。本文关注的是使用 ReporterPLUS 特性与 IBM® Rational® Rhapsody 的合并,以及 Microsoft Word,以将从 IBM Rational Rhapsody SysML 模型创建人类可读文件的创建过程实现自动化。$ _4 t, I3 d/ [

, q$ B; f+ ]6 P6 p对于文件生成使用的背景信息,您可以查看《生成文档的一种建模方法》与《作为文件生成操作自动化的 SysML 模型》,在本文的 参考资料 部分中对它们都作出了列出。
* `# P3 L5 w1 k! [- L* p% ]: Q+ n( z( [7 t
具体的文件生成技术
: i1 c4 s& P$ r使用 Rhapsody ReporterPLUS 特性从 SysML 模型生成文档可以是非常直接的。该软件已经交付了非常有用的模板。使用下拉菜单可以很轻松地创建简单新的模板(如果您想要得到具体的内容,那么您可以查看 参考资料 以得到在线文献的链接)。, h( \: }" ?4 M7 @7 s
Simon Morrish 已经提供了一些非常好的建议,这些建议在其《与 ReporterPLUS 同行!》的演讲中对 ReporterPLUS 所做的操作相关(该演讲见于 参考资料)。想要更多更适合模板的系统开发员需要熟悉 Q 语言,以及 ReporterPLUS 的脚本语言(见于官方的文献)。本文将会进一步讨论与文件生成相关的高级主题,旨在创建更可读的文件,这些文件从一个 SysML 模型获得重要的信息,并将这些信息放到合适的位置。: m( g  g& q6 {# S0 O1 z% S, c8 Q
图 1 显示了本文所描述工具链中生成文档的基本步骤。1 D* @: n, V7 f& {  v' K2 J

0 s/ R9 [# S7 z8 I  [图 1. 工具链创建
$ q3 Q1 L5 U2 {0 E
/ P3 l3 q9 `) `- t" b有一些文件生成的工作是由 .tpl 文件中的 ReporterPLUS 完成的(ReporterPLUS 模板)。它包括了从 SysML 模型获得信息的所有工作,以及生成文档的一些格式。另外一部分工作是由 .dot 文件(Microsoft Word 模板)完成的,它会执行大多数的格式化操作,甚至通过 Visual Basic for Applications(VBA)宏对文本的一些更高级的转化操作。这种高度可配置进程的结果就是,一个高度可读的文件,能够适应大多数客户的需求。
( S/ D+ n' w+ V" z- G3 s本文所描述创建步骤的目标在于,生成一个带有以下特征的文件:& x0 |- T: e4 \* ?5 ]
  • 使用来自模型提供信息的一些字段来定制标题页
  • 表格内容(ReporterPLUS 的标准特性,本文中并没有进行进一步的描述)
  • 图的表格
  • 在描述文献区域的 Rhapsody 模型中使用高级文本格式化操作
  • 首行宽度和颜色可编辑的表格
  • 模型元素与其附属特定构造型的压缩
  • 模型元素文献作为分配建模
  • 需求追踪性表格显示了与生成文档中相应模型元素描述相联系的所有可应用程序(只是那些与文件所描述模型元素相联系的部分)。
    % i2 C7 M3 f' [' l/ h/ [
但是接下来的部分介绍了 Rational Rhapsody ReporterPLUS 特性中所使用到的技术。4 \0 t+ e; Y- f


/ B! e' p( T8 Q
( P3 \5 c; i% b5 h" H* {! BRhapsody ReporterPLUS 技术% Q+ f: d" V' k" F" j8 I7 G
在 Rational Rhapsody 之中,不管何时创建用户不想让其成为文件一部分的模型元素,都需要一个特定的构造型。例如,如果模型包含了与模拟相关的元素,它们不会出现在系统文献中(因为它只会描述物理系统),那么用户就可以加入一个名为 «forSimulationOnly» 的构造型。在 Rhapsody ReporterPLUS 之中,您可以将该限制因素(见于图 2 中的屏幕截图)加入到一个地方,在这个地方可以让模型元素不出现在最终的文件之中:% e6 F6 z& T0 s3 k  k" q8 f( h7 Z
$name of [stereotypes]~<> "forSimulationOnly"
  i$ d9 y4 O! r4 c
/ j7 e; j) i( F+ ~
图 2. 省略特定的构造型2 r: B6 `4 r+ [0 w/ j+ C

/ e6 H$ R6 g7 q# v在文件的不同地方,要插入来自 SysML 模型的描述区域。它们拥有高级的文本格式化操作(RTF),Microsoft Word 不会将其自动转化为相应的格式。为了将该格式化代码转化为实际的粗体,斜体,字体大小,以及其他的样式,您需要使用 Microsoft 的 Visual Basic for Applications(VBA)。在结尾,首个步骤是标签 RTF 区域,这样 VBA 宏稍后就可以找到它们:# W( E  }1 K3 j% M
  • 首先,在 ReporterPLUS 的文件树形结构中,找到 RTF 格式的模型元素。这些元素是与模型元素相关的描述,您可以通过 «$descriptionRTF» 区域找到这些模型元素。
  • 在文件部分的主体中,在该标签的前面是 ##BeginRTF##, 并在描述区域之后插入 ##EndRTF##。8 @6 n; P: X/ f+ M4 h  k
图 3 显示了它在 ReporterPLUS 中的样式。如此处理标签,使得使用 VBA 中的规范表达式找到 RTF 格式化代码变得更加容易。0 Z, C2 _" ?9 M% ~

3 q# }2 y2 u, g9 w6 f图 3. 标签 RTF Heading 与 Body 区域0 Y$ C5 O7 ~# d1 ?$ {# o8 Y7 ]* e
: Y% l! V# B/ w
您可以按照相同的方式,使用该标记指示您想在什么地方放置图的表:##InsertTOF##。
* v! ^# V% N+ I$ m+ s; O对于图表,您可以在 ##BeginFigureCaption## 与 ##EndFigureCaption## 标签中输入图表的名字。
% U/ f2 a/ X: T# l5 K% X# q根据假设的需求条件,结果文件应该包含来自分配元素需求的超链接。出于这个目的考虑,您可以使用 Microsoft Word 书签。为了让书签变得独一无二,从 Rational Rhapsody 模型处获得 GUID,在一个模型中它是独一无二的。
5 c5 U0 M" A% C  H0 w& dGUID 是近一步的建模属性,可以从 ReporterPLUS 中获得。在 Q-Language 中,它可以作为 «$GUID» 获得。为了生成属性,您需要使用以下的代码:
* S. E' k+ w2 g4 r) I/ w. N9 N- y
[BOOKMARK: name=(«$GUID»)]«$displayName» [CR]
# }* k' D+ z! S8 Z& L2 v
图 4 显示了在 ReporterPLUS 中创建这些书签的步骤:8 @* g& i2 I5 w  z7 }( x

5 O8 d% z- V1 m图 4. 使用 GUID 创建书签; E; l+ G' B: v$ j4 H
! |7 K& Y% K' J1 c6 L
在一般的系统工程过程,例如 IBM® Harmony,T. Weilkien 的 SYSMOD 或者 S. Friedenthal 的 OOSEM,模型中的功能被一直分配给物理块,以指示它们预期的行为。除了 SysML 活动与块之间的分配,您可以使用活动及状态之间的特定分配,例如 «validInState» ,以创建活动,操作状态或模型之间的沟通桥梁。我们以这种方式显示了这种关系,如图 5 所示(“Function Name”与“Available in States/Modes”)。
) m; S( j4 ^3 O  |$ ^
( j3 N/ G) s! B/ V9 ~( Q8 w: z
2 r+ q7 k6 Q$ b0 d6 j图 5. 生成文档之中快与状态活动的分配
, @  x- N2 `8 L, l, L1 f* V2 h
3 M) ^1 D  g* v/ T/ Q  Q9 G- F为了实现这一点,需要一个更加复杂的构造。下面就是步骤:+ S8 U4 r, J8 ]+ w' g0 [
  • 块之间的迭代。
  • 在以下条件下“引用”联系之上的迭代:2 G" z8 C# l' _) d  ~' S( k
    $name = $name of [dependsOn]
  • 活动名是通过以下条件的输出:4 T% Q- z# {! O2 S+ T6 N( M" D
    «$displayName of [owner]»
  • 以下条件下“附属”类上的迭代:
  • $metaClass of [dependsOn] = "State" and (for_all x in [dependsOn]->[stereotypes] =>$name of x = "validInState")
    ! d7 r! U& Q8 v/ h0 g6 F% S" x这将会查找所有拥有 «validInState» 构造型以及与状态相联系的所有附件。
  • 通过下面的内容输出状态名:" S. ?& \* n, R! R" x" S+ E
    «$displayName of [dependsOn]»
    . n  ]# K$ b9 m
图 6 显示了 ReporterPLUS 模板中相应的节点结构。; p3 b% Z4 V0 z. f5 w0 b

6 Y9 [, D; k. N图 6. 块,状态,模板节点结构的分配活动
1 X% j' u- E( Q2 Z0 f0 K3 r * v/ u1 f+ |. W; r' w
最后,您需要分配至元素需要的超链接。您已经看到了用于创建书签的模型之中不同模型的 GUID。超链接是由 ReporterPLUS 中以下的命令创建的:* p+ m& ~5 M# g9 R/ A) f" G% k7 X/ s
[LINK: text=("some text"), bookmark=(someBookmark)]

+ a' z7 r$ T2 u9 }! {, D3 c$ U6 i现在您需要对所有的需求执行迭代操作,查看它们是否分配给模型元素,并搜索该元素的 GUID:
- Y5 c* v7 ^0 v# V5 M
  • Requirement 类上的迭代。
  • 以下条件下 Class 类上的迭代:
    # a. k3 b/ {5 X( z4 i<Specific Object>filter { ($name of [dependsOn] ~= $name of this) } over all "Dependency"
    # B/ i4 ]- B6 Q- f' n提示: , l* l' g; [, y% b# p
    在模型中搜索带有该需求附件的所有元素。
  • 使用 «$name of [dependent]» 作为文本并使用 «$GUID of [dependent]» 作为书签,来创建一个超链接。
    0 ?1 ?) j# s$ K) o$ b/ D/ ~; G
Rational Rhapsody ReporterPLUS 可以执行文字样式(粗体,斜体,下划线)方面的基本操作。它还可以创建书签,以及对书签的链接。但是它不能执行更高级的表格格式化操作(宽度,单元颜色,等等)以创建图和表标题,或者理解更高级的文本格式。接下来的章节,“使用 Microsoft Word 和 VBA 宏进行格式化”,涉及到了克服这些限制所需要的具体步骤。
$ i4 m: |2 L* _

3 }# q0 T" _/ S2 l2 n: L2 e3 }6 w3 F! b/ }  g6 I
使用 Microsoft Word 及 VBA 宏进行格式化
7 N% ]& D& h8 t. ?6 N; B( tMicrosoft Word 模板将会处理文件的一些重新格式化操作。为了让这个过程实现自动化,相应的程序会在文件的 AutoOpen() 宏中调用。这是一个特定的宏,它会得到自动调用以打开文件。$ M$ Y5 t8 i1 g) U
  • 为了创建 AutoOpen() 宏,您需要在 Microsoft Word 中点击 Alt-F11 以访问 VBA 环境,然后创建一个模块。
  • 在该模型中,您可以编写一个名为 AutoOpen() 的程序。
  • 在该程序中,您可以输入通用的格式化代码。
    ( o) N# s: x  j, r
您可以在 Microsoft Support 网站的 AutoOpen() 宏上找到更多的信息(查看 参考资料)。
$ H  i4 [- I6 S9 A" @, g简单使用 AutoOpen() 的问题就是 每次 打开文件时都会执行所有的重新格式化操作,而不是首次打开时才会执行。为了解决这个问题,您可以定义一个(在模板中)名为“FormattingPerformed”的 Boolean 文件属性,并设置为 false。AutoOpen() 宏会检查该属性。如果它为假,那么就会执行所有的格式化操作,然后将该属性设置为 true。如果属性是真,那么格式化操作已经执行了,而 AutoOpen() 被终止。$ P  `, G" q" Y2 `* V0 r4 ]! U
创建图标题
/ d, x7 S  q2 V6 D  i8 B& g接下来的一步是为文件中的所有图创建标题。宏会搜索 ##BeginFigureCaption## 及 ##EndFigureCaption## 的所有实例,删除这些标签,并使用 InsertCaption VBA 方法在图标题的这些标签之间输入文本。本文并没有进一步介绍这些宏的实施细节信息,您可以参考基本的 VBA 词汇。
2 f. p0 g4 j3 d4 W8 V0 I* v% K5 U3 i; d在创建标题之后,您可以让 Microsoft Word 生成一个图的 Table。查看 ##InsertTOF## 标签,将其删除,并在文件中的相同位置,执行以下的 VBA 代码:
. C) v2 M+ k' }& h  Y1 j" s
ActiveDocument.TablesOfFigures.Add Caption:="Figure"

5 E7 Y7 O$ i, J8 A% N2 b& ^: r格式表格: C/ `2 U3 y1 \* ^
按照下面的方式来格式化表格:3 v- V5 _. H" }% d6 ~5 U
  • 定义一个新的表格样式,首行带有阴影。
  • 对文件中的每一个表格都应用样式。
  • 然后您可以设置 wdAutoFitContent 属性,并更改边缘样式以实现需要的外观(查看 图 5)。
    * J; ?8 x; ^4 A8 i7 v4 ~: i
接下来,您需要处理一些任务,就是替换 ReporterPLUS 中所包含的 RTF 格式化命令,带有正确格式化的文本。为了实现这一点,您可以使用 Microsoft Help 中提到的方法以及在线支持:怎样将 Rich Text Format 字符串粘贴到 Word 与 Visual Basic Automation(查看 Resources 以得到一个链接)。方法基本上需要将 RTF 作为 RTF 文本精确粘贴到粘贴板:
) q" d$ e" A4 i% b9 e/ y
lRTF = RegisterClipboardFormat("Rich Text Format")
* F0 P' a0 ]; |' F" B
然后您可以从粘贴板中复制它,并粘贴到文件之中。因为这需要访问 Microsoft Windows DLL 文件,但是这些文件尚不能从 VBA 宏处直接获得,所以您需要添加额外的代码。如果您想要详细了解,您可以查看上面提到过的一些 Microsoft Support 文件。, m; [! e4 o# c


) x) W% m8 l% \$ \9 Q  d8 Z) Y# g, V1 z5 f  S4 b9 M
总结* M: T- O# b5 {3 x" |0 F! _
正如本文所解释的那样,您可以使用 Rational Rhapsody ReporterPLUS 特性(这是高度可配置的,使用的是 Q 语言),以及通过 VBA 文件控制可获得的灵活性,来定制来自 IBM Rational Rhapsody SysML 模型的文件生成过程。有了这些工具,您就可以真正实现客户的需求了。
) m8 \# Z9 {7 V/ P/ t5 W. c, |

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
 楼主| 发表于 2011-10-25 17:32:32 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2011-11-21 15:17:10 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

发表于 2013-9-9 09:51:13 | 显示全部楼层
这个是RPE么?
回复 支持 反对

使用道具 举报

发表于 2016-3-18 18:37:51 | 显示全部楼层
这个很有用,特别是需要把文档给客户的时候
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

SCMLife推荐上一条 /5 下一条

QQ|小黑屋|手机版|无图版|SCMLife.com ( 京ICP备06056490号-1 )

GMT+8, 2020-1-22 07:02 , Processed in 0.072274 second(s), 6 queries , Gzip On, MemCache On.

Powered by SCMLife X3.4 Licensed

© 2001-2017 JoyShare.

快速回复 返回顶部 返回列表