caliberrm sdk programmer's guide

54
CaliberRM SDK プログラマーズ ガイド

Upload: bn2552

Post on 12-Nov-2014

49 views

Category:

Documents


0 download

DESCRIPTION

CaliberRM SDK Programmer's Guide

TRANSCRIPT

Page 1: CaliberRM SDK Programmer's Guide

CaliberRM™

SDK プログラマーズ ガイド

Page 2: CaliberRM SDK Programmer's Guide

Borland Software Corporation は、 本書に記載されているアプリケーションに対する特許を取得または申請している場合があります。 適用される特許については、 製品 CD または [バージョン情報]ダイアログ ボックスを参照してください。 本書の提供によって、 これらの特許に関するいかなる権利も使用者に付与されるものではありません。

Copyright (c) 1997-2006 Borland Software Corporation およびその関連会社。 Borland のブランド名および製品名はすべて、 米国 Borland Software Corporation の米国およびその他の国における商標または登録商標です。 その他の商標は、 その所有者に帰属します。

CRM06-SDKPG2006 年 11 月

Page 3: CaliberRM SDK Programmer's Guide

i

目次

第 1 章はじめに 1CaliberRM SDK . . . . . . . . . . . . . . . . . . . . . . . 1ト レーサビ リティ アド イン テク ノ ロジー . . . . . . . 1その他の情報 . . . . . . . . . . . . . . . . . . . . . . . . 2

第 2 章Visual Basic を使用した SDK アプリケーシ ョンの記述 3はじめに . . . . . . . . . . . . . . . . . . . . . . . . . . 3IDE の設定 . . . . . . . . . . . . . . . . . . . . . . . . . 3CaliberRM ライブラ リの初期化 . . . . . . . . . . . . . 4CaliberRM Server への接続 . . . . . . . . . . . . . . . . 5セッシ ョ ンの使用 . . . . . . . . . . . . . . . . . . . . . 6CaliberRM オブジェク トの作成 . . . . . . . . . . . . . 6CaliberRM オブジェク トの変更 . . . . . . . . . . . . . 7CaliberRM オブジェク トの削除 . . . . . . . . . . . . . 8要件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

要件の作成 . . . . . . . . . . . . . . . . . . . . . . . 8属性と属性値 . . . . . . . . . . . . . . . . . . . . . . 9リ ス ト属性値 . . . . . . . . . . . . . . . . . . . . . 11属性値の設定 . . . . . . . . . . . . . . . . . . . . . 13要件の説明 . . . . . . . . . . . . . . . . . . . . . . 14ドキュ メン ト参照 . . . . . . . . . . . . . . . . . . 15責任者 . . . . . . . . . . . . . . . . . . . . . . . . . 16履歴 . . . . . . . . . . . . . . . . . . . . . . . . . . 17ディ スカッシ ョ ン . . . . . . . . . . . . . . . . . . 19要件ツ リー . . . . . . . . . . . . . . . . . . . . . . 20

ト レーサビ リティ . . . . . . . . . . . . . . . . . . . . 23ト レースの取得 . . . . . . . . . . . . . . . . . . . . 24要件間のト レースの作成 . . . . . . . . . . . . . . 24非要件ソフ ト ウェアの成果物へのト レースの作成 25ト レースの削除 . . . . . . . . . . . . . . . . . . . . 26

第 3 章Java を使用した SDK アプリケーシ ョ ンの記述 27はじめに . . . . . . . . . . . . . . . . . . . . . . . . . 27CaliberServer オブジェク トの作成 . . . . . . . . . . . 27セッシ ョ ンの使用 . . . . . . . . . . . . . . . . . . . . 29CaliberRM Java SDK の慣例 . . . . . . . . . . . . . . . 29CaliberRM オブジェク トの作成 . . . . . . . . . . . . 30CaliberRM オブジェク トの変更 . . . . . . . . . . . . 30CaliberRM オブジェク トの削除 . . . . . . . . . . . . 31要件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

要件ツ リー . . . . . . . . . . . . . . . . . . . . . . 31要件の作成 . . . . . . . . . . . . . . . . . . . . . . 35要件の属性 . . . . . . . . . . . . . . . . . . . . . . 36要件の履歴 . . . . . . . . . . . . . . . . . . . . . . 37

ト レーサビ リティ . . . . . . . . . . . . . . . . . . . . 38ト レースの取得 . . . . . . . . . . . . . . . . . . . . 39要件間のト レースの作成 . . . . . . . . . . . . . . 39非要件ソフ ト ウェアの成果物へのト レースの作成 40

第 4 章CaliberRM 用の ト レーサビリテ ィ アド インの作成 41はじめに . . . . . . . . . . . . . . . . . . . . . . . . . 41Visual Basic.NET サンプルの使用 . . . . . . . . . . . 41ト レーサビ リティ アド インのインターフェイス . . 42

VendorSession . . . . . . . . . . . . . . . . . . . . . 42Public ReadOnly Property InterfaceVersion() As Integer . . . . . . . . . . . . . . . . . . . . . . . 43

VendorView . . . . . . . . . . . . . . . . . . . . . . 44VendorObject . . . . . . . . . . . . . . . . . . . . . 44

ト レーサビ リティ アド インの登録と有効化 . . . . . 45

付録 ACaliberRM のオブジェ ク ト モデル 47CaliberRM のオブジェク ト モデル . . . . . . . . . . . 48

Page 4: CaliberRM SDK Programmer's Guide

ii

Page 5: CaliberRM SDK Programmer's Guide

第 1 章 : はじめに 1

第 章

Chapter1 はじめにCaliberRM は、 CaliberRM Software Development Kit (SDK) と ト レーサビ リティ アド イン API を通じて機能を拡張するこ とができます。

CaliberRM SDK

CaliberRM SDK を使用する と、 プロジェク ト 、 ベースライン、 要件、 ユーザー、 グループなどの CaliberRM 情報を作成したり、 変更したり、 削除するこ とができます。 CaliberRM SDK を利用して、 Java 言語や、 .NET または COM をサポートする任意の言語で記述されたプログラムから、 CaliberRM 内のあらゆる要件データにアクセスできます。

このドキュ メン トでは、 Visual Basic プログラマまたは Java プログラマが CaliberRM API を使い始めるために必要な情報を提供します。

メモ : Javadoc 形式の詳細なプログラマ向けドキュ メン トは、 Program Files\Borland\CaliberRM SDK <バージ ョ ン番号 >\api\index.html から参照できます。また、 追加情報についてはボーランドのサポートにお問い合わせください。

重要 : 既存の SDK アプリケーションが、まだこのリリースにアップグレードされていないサーバーに接続する必要がある場合は、そのアプリケーションをこのリリースの SDK で再コンパイルしないでください。一般に、SDK アプリケーションを記述する場合は、そのアプリケーションの接続先となるサーバーの最も古いバージョンと同じバージョンの SDK を使用してください。このリリースで提供されている新しい SDK 機能(セキュリティ プロファイルの作成と割り当て、LDAP ユーザー DN の取得 /設定)を利用するには、.NET/COM 用の SDK アプリケーションを再コンパイルする必要があります。また、再コンパイルしたアプリケーションは、このリリースのサーバーと互換性があります。

SDK アプリ ケーシ ョ ン作成の詳細については、 このガイ ドの 「Visual Basic を使用した SDK アプリケーシ ョ ンの記述」 と 「Java を使用した SDK アプリケーシ ョ ンの記述」 を参照して ください。

トレーサビリティ アドイン テクノロジー

CaliberRM は、 ト レーサビ リティ アド イン テク ノ ロジーを使用して、 任意のサードパーティ製ツールとの ト レーサビ リティ情報を拡張するためのユニークな方法を提供しています。 ト レーサビ リティ アド インを作成して、 外部アプリ ケーシ ョ ンへの ト レーサビ リティを提供できます。 たとえば、 Microsoft Project 用のト レーサビ リ ティ アド インを作成するこ とによ り、 CaliberRM の要件から Microsoft Project のタスクへのリ アルタイムな ト レースを簡単に定義し、 管理するこ とができます。 作成した ト レースは、 ト レーサビ リ ティ マ トリ クス、 ト レーサビ リティ図、 およびドキュ メン ト ファ ク ト リに表示できます。

Page 6: CaliberRM SDK Programmer's Guide

2 CaliberRM SDK プログラマーズ ガイド

ト レーサビ リティ アド イン作成の詳細については、 このガイ ドの 「CaliberRM 用のトレーサビリテ ィ アドインの作成」 を参照してください。

その他の情報

CaliberRM SDK についてご質問またはご要望がある場合は、 CaliberRM SDK Newsgroup(news://newsgroups.borland.com/borland.public.caliber-rm.sdk) にその内容をご投稿ください。

CaliberRM SDK の問題をご報告いただく場合は、 次のアドレスからサポート宛てにご連絡ください。http://support.borland.com/

Page 7: CaliberRM SDK Programmer's Guide

第 2 章 : Visual Basic を使用した SDK アプリケーシ ョ ンの記述 3

第 章

Chapter2Visual Basic を使用したSDK アプリケーションの記述

はじめに

この章では、 Visual Basic プログラマ向けに CaliberRM Software Development Kit (SDK) を紹介します。 この章の内容は、 次のとおりです。

■ CaliberRM SDK を使用するために IDE を設定する手順を説明します。

■ SDK を使用して Visual Basic アプリ ケーシ ョ ンから CaliberRM Server に接続する方法を説明します。

■ CaliberRM 情報を作成、 変更、 および削除する方法を説明します。

■ 要件ツ リー、 属性、 および履歴での作業の概要を説明します。

■ CaliberRM のディ スカッシ ョ ンで作業する方法を紹介します。

■ SDK を使用して ト レースの関係を表示、 作成、 および削除する方法を説明します。

IDE の設定

Visual Basic プロジェク トで CaliberRM SDK を使用するには、 IDE で SDK のオブジェク ト ライブラ リへの参照を設定する必要があ り ます。

Visual Studio 6.01 メ イン メニューから [ プロジェク ト|参照 ...] をク リ ッ ク します。 SDK が正常にインス

トールされていれば、 参照可能なライブラ リの一覧に CaliberRM library が表示されます。

2 CaliberRM library を選択し、 [OK] をク リ ッ ク して変更を保存します。

3 参照リ ス トに CaliberRM library という名前の参照が見当たらない場合は、 [ 参照 ...] をク リ ッ ク して、ハードディ スク上の CaliberRMSDK DLL ファ イルの場所を指定します (通常、 このライブラ リは、 Program Files\Borland\CaliberRM SDK <バージ ョン番号 >\lib フォルダにあ り、 ライブラ リ ファ イルの名前は CaliberRMSDK<バージ ョ ン番号 >.dll です)。

4 [OK] をク リ ッ ク し、 [ 参照 ] ダイアログ ボッ クスを閉じます。

Page 8: CaliberRM SDK Programmer's Guide

4 CaliberRM SDK プログラマーズ ガイド

Visual Studio .NET 20031 メ イン メニューから [ プロジェク ト|参照の追加 ...] をク リ ッ ク します。

2 [ 参照の追加 ] ダイアログ ボッ クスの [ 参照 ...] ボタンをク リ ッ ク します。

3 ハードディ スク上の CaliberRM SDK ライブラ リ を指定し、 [ 開く ] をク リ ッ ク します(通常、 このライブラ リは、 Program Files\Borland\CaliberRM SDK <バージ ョン番号 >\lib フォルダにあ り、 ライブラ リ ファ イルの名前は CaliberRMSDK<バージ ョ ン番号 >.NET.dll です)。

4 [OK] をク リ ッ ク し、 [ 参照の追加 ] ダイアログ ボッ クスを閉じます。

Visual Studio 20051 メ イン メニューから [ プロジェク ト|参照の追加 ...] をク リ ッ ク します。

2 [ 参照の追加 ] ダイアログ ボッ クスの [ 参照 ] タブをク リ ッ ク します。

3 ハードディ スク上の CaliberRM SDK ライブラ リ を指定し、 [OK] をク リ ッ ク します (通常、 このライブラ リは、 Program Files\Borland\CaliberRM SDK <バージ ョ ン番号 >\lib フォルダにあ り、 ライブラ リ ファ イルの名前は CaliberRMSDK<バージ ョン番号 >.NET.dll です)。

4 [OK] をク リ ッ ク し、 [ 参照の追加 ] ダイアログ ボッ クスを閉じます。

CaliberRM SDK への参照が正し く設定されたかど うかを確認するには、 以下を実行します。

1 メ イン メニューから [ プロジェク ト| Test VBNET Properties] をク リ ッ ク します。

2 [ 参照 ] タブをク リ ッ ク します。 [ 参照 ] ペインに CaliberRMSDK<バージ ョ ン番号>.NET が表示されます。

これで、 コード内で CaliberRMSDK ライブラ リ を使用できるよ うにな り ました。 以下のようにして、 CaliberRM SDK ク ラスをインポート して ください。

CaliberRM ライブラリの初期化

COM SDK を起動する と、 必ず Java 仮想マシン (VM) が起動されます。 いったん VM がロード されたらこのオプシ ョ ンは設定できないので、 上のコードは他のどの SDK 読み出しよ り も前に呼び出さなければなり ません。

COM アプリ ケーシ ョ ンでは、 SDK の Initilizer オブジェク ト と IStJavaVMInfo オブジェクト を次に示す例のよ うに使用できます。

Imports Starbase.CaliberRM.Interop

' Initializer オブジェク トは、 Java VM のロードを制御します。 Dim objInitializer As New Initializer

' IStJavaVMInfo は、 Java VM を表します。 Dim objStJavaVMInfo As IStJavaVMInfo

' 現在の VM を Initializer オブジェク トから取得します。 Set objStJavaVMInfo = objInitializer.JavaConfiguration.CurrentJavaVM

' 大メモ リ フラグを 1000 MB に設定します。 objStJavaVMInfo.Options = "-Xmx1000M"

Page 9: CaliberRM SDK Programmer's Guide

第 2 章 : Visual Basic を使用した SDK アプリケーシ ョ ンの記述 5

メモ :デフォルトでは、 ほとんどの VM が 大で 64 MB のメモ リ しか消費できません。 この制限は、 VM の 大メモ リ フラグ (Xmx) を設定するこ とによ り上書きできます。

メモ リ割り当てプールの 大サイズをバイ ト単位で指定します。 この値は、 2 MB よ り大きい、 1024 の倍数でなければなり ません。 末尾に k または K を付ける とキロバイ ト、 m または M を付ける と メガバイ ト を表します。 デフォルト値は 64 MB です。 次に例を示します。

■ -Xmx83886080■ -Xmx81920k■ -Xmx80m

アプリ ケーシ ョ ンが Java VM を起動できずに、 「Not enough space for object heap」 エラーが表示された場合は、 JVM のヒープ サイズを小さ く して ください。 一般に、 コンピュータ上で利用可能なメモ リに従って、 Java VM のメモ リ サイズを指定する必要があ ります。

CaliberRM Server への接続

CaliberRM SDK を使用する場合の 初の手順は、 CaliberRM Server への接続の作成です。 接続を確立するには、 CaliberServer オブジェク トの参照を作成する必要があ り ます。 簡単に言う と、 CaliberServer オブジェク ト を使用すれば、 CaliberRM ユーザーの代わりにアプリ ケーシ ョ ンから CaliberRM との接続を確立し、 その接続を維持するこ とができます。

次のコードは、 CaliberRM Server との接続を作成する単純な Visual Basic アプリ ケーシ ョ ンです。

上の例では、 CaliberRM のサーバー参照を作成するのに 2 段階の手順を取っているこ とに注目して ください。 まず、 CaliberRM のサーバー ファ ク ト リ を作成しなければなり ません。

次に、 サーバー ファ ク ト リ を使用して、 新しいサーバー参照を作成します。

Private Sub Form_Load()

' CaliberRM のサーバー ファ ク ト リ オブジェク ト、 サーバー オブジェク ' ト 、 およびセッシ ョ ン オブジェク トのためのオブジェク ト変数を宣言

' します。 Dim objServerFact As CaliberServerFactory Dim objServer As CaliberServer Dim objSession As Session

' サーバー ファ ク ト リ変数およびサーバー変数に ' オブジェク ト参照を代入します。 Set objServerFact = New CaliberServerFactory Set objServer = objServerFact.Create("foo")

' CaliberRM Server にログインして、 ' セッシ ョ ン変数にオブジェク ト参照を代入します。 Set objSession = objServer.login("admin", "admin")

End Sub

Set objServerFact = New CaliberServerFactory

Set objServer = objServerFact.Create("localhost")

Page 10: CaliberRM SDK Programmer's Guide

6 CaliberRM SDK プログラマーズ ガイド

セッションの使用

Session オブジェク トは、 CaliberRM でのユーザーのビューを表すオブジェク トであ り、CaliberRM のオブジェク ト モデルへのエン ト リ ポイン ト とな り ます。 前出の例で、CaliberServer オブジェク トにログインするこ とによって Session オブジェク ト を作成しました。 次のコードでは、 この Session オブジェク ト を使用して、 ユーザーが選択できるすべてのプロジェク トの名前を表示します。

CaliberRM オブジェクトの作成

CaliberRM SDK では、 以下のオブジェク トの作成、 変更、 および削除を行えます。

■ プロジェク ト

■ ベースライン

■ ユーザー

■ グループ

■ 部署

■ 要件

■ 要件タイプ

■ セキュ リティ プロファイル

■ 用語集

■ 用語集の用語

■ インテグレーシ ョ ン

ほとんどの CaliberRM 情報は、 以下の手順で作成できます。

1 新しいオブジェク ト を作成するためのファ ク ト リ を作成します。

2 ファ ク ト リの Create メ ソ ッ ドを呼び出します。

3 新しいオブジェク トの save メ ソ ッ ドを呼び出します。

' CaliberRM プロジェク ト用のオブジェク ト変数を宣言します。 Dim objProject As Project

' セッシ ョ ン内の全プロジェク ト を反復処理します。 For Each objProject In objSession.Projects Debug.Print objProject.Name Next objProject

Page 11: CaliberRM SDK Programmer's Guide

第 2 章 : Visual Basic を使用した SDK アプリケーシ ョ ンの記述 7

次のサンプルでは、 上記手順に従って新しい User オブジェク ト を作成します。

CaliberRM オブジェクトの変更

CaliberRM オブジェク トに変更を加えるには、 以下の手順を実行します。

1 CaliberRM オブジェク トのインスタンスを取得します。

2 オブジェク トの lock メ ソ ッ ドを呼び出します。

3 必要に応じて、 オブジェク トのプロパティを設定します。

4 オブジェク トの save メ ソ ッ ドを呼び出します。

次に例を示します。

' 新しい User オブジェク ト を作成するために使用するファ ク ト リ を作成します。 Set objUserFactory = New UserFactory

' 新しい User オブジェク ト を作成します。 Set objNewUser = objUserFactory.Create("jdoe", objSession)

' 新しい User オブジェク トのプロパティを設定します。 objNewUser.FirstName = "John" objNewUser.LastName = "Doe"

' 新しい User オブジェク ト を保存します。 objNewUser.save

' Group オブジェク ト を取得します。 Set objGroup = objSession.Groups.Item(2)

' Group オブジェク ト をロ ッ ク します。 objGroup.lock

' Group オブジェク トのプロパティに変更を加えます。 objGroup.Name = “New Name” objGroup.EmailAddress = “New Email Address” objGroup.Description = “New Description” ' 変更を加えた Group オブジェク ト を保存します。 objGroup.save

Page 12: CaliberRM SDK Programmer's Guide

8 CaliberRM SDK プログラマーズ ガイド

CaliberRM オブジェクトの削除

CaliberObject オブジェク トは、 その remove メ ソ ッ ドを呼び出すこ とによ り、 CaliberRM から削除できます。 次に例を示します。

remove メ ソ ッ ドが行うのは、 現在のベースラインからの要件の削除だけです。 その要件が、 それよ り前のすべてのベースラインから削除されるわけではあ り ません。

要件

こ こでは、 要件の作成、 変更、 および削除について詳し く説明します。

要件の作成

SDK には、 新しい要件を作成するためのメ ソ ッ ドが 2 つあ り ます。 1 番目のメ ソ ッ ドは、プロジェク トの要件ツ リー階層構造のト ップレベルに要件を作成します。 2 番目のメ ソ ッドは、 既存の要件の子要件を作成します。

次の例は、 1 番目の作成メ ソ ッ ド (Create1) を使用して新しい要件を作成します。

上の例で、 Create1 メ ソ ッ ドの 4 番目のパラ メータに 0 を渡しているこ とに注目してください。 これは、 新しい要件の挿入場所を指定するための、 要件ツ リー内での場所を示すインデッ クスです。

Dim objRequirement As RequirementSet objRequirement = objSession.getRequirement(1)objRequirement.remove

' セッシ ョ ンのコレクシ ョ ン内の先頭のプロジェク ト を取得します。 Set objProject = objSession.Projects.Item(0)

' プロジェク ト内の 初の要件タイプを取得します。 Set objType = objProject.CurrentBaseline.RequirementTypes.Item(0)

' 新しい Requirement オブジェク ト を作成するためのファ ク ト リ を作成します。 Set reqFactory = New RequirementFactory

' 新しい Requirement オブジェク ト を作成します。 Set newRequirement = reqFactory.Create1( _

“New Requirement”, _ objProject, _ objType, _ 0, _ objSession) newRequirement.save ""

Page 13: CaliberRM SDK Programmer's Guide

第 2 章 : Visual Basic を使用した SDK アプリケーシ ョ ンの記述 9

次の例は、 2 番目の作成メ ソ ッ ド (Create2) を使用して、 既存の要件の子となる要件を作成します。

属性と属性値

CaliberRM では、 任意の数のユーザー定義属性 (UDA) で要件を定義するこ とができます。 さ らに、 すべての要件が、 ステータスと優先度をシステム属性と して持ちます。 これと同じよ うに、 CaliberRM SDK の Requirement オブジェク ト も、 そのステータスを返す Status プロパティ と、 優先度を返す Priority プロパティ、 UDA の値を返す AttributeValues プロパティを持っています。

CaliberRM SDK では、 Attribute オブジェク トが CaliberRM の属性の型を表し、AttributeValue オブジェク トが各型のインスタンスを表します。

次の表は、 CaliberRM 属性と SDK での Attribute オブジェク トおよび AttributeValue オブジェク トの関係をま とめたものです。

CaliberRM 属性SDK での Attribute

オブジェ クトSDK での AttributeValue

オブジェ クト

単一行テキス ト

複数行テキス ト フ ィールド

UDAText UDATextValue

整数 UDAInteger UDAIntegerValue

継続期間 UDADuration UDADurationValue

浮動小数点数 UDAFloat UDAFloatValue

日付 UDADate UDADateValue

真偽値 UDABoolean UDABooleanValue

複数選択リ ス ト

単数選択リ ス ト

複数選択グループ リ ス ト

単数選択グループ リ ス ト

複数選択ユーザー リ ス ト

単数選択ユーザー リ ス ト

UDAList UDAListValue

' 新しい Requirement オブジェク ト を作成するためのファ ク ト リ を作成します。 Set reqFactory = New RequirementFactory

' 新しい Requirement オブジェク トの親とする Requirement オブジェク ト を取得します。 Set parentReq = objSession.getRequirement(1)

' 新しい Requirement オブジェク ト を parentReq の子と して作成します。 Set newChildRequirement = reqFactory.Create2( _

“New Child Requirement”, _ parentReq, _ 4, _ objSession)

Page 14: CaliberRM SDK Programmer's Guide

10 CaliberRM SDK プログラマーズ ガイド

たとえば、 次のコードは、 指定した要件タイプから Attribute オブジェク ト を取得する方法を示します。

AttributeValue オブジェク ト も、 同様の方法で要件から取得できます。 次の例は、 上の例と同じ一覧を、 値も追加して出力します。

この例では、 次に示す行で、 AttributeValue オブジェク トの Attribute プロパティを使用して属性の名前を取得しているこ とに注目して ください。

' セッシ ョ ン内の 初の要件タイプを取得します。Set objRequirementType = objSession.RequirementTypes.Item(0)

' その要件タイプ内の 初のカスタム タブを取得します。Set objCustomTab = objRequirementType.CustomTabs.Item(0)

' カスタム タブに割り当てられている属性の名前を出力します。Dim objAttribute As CaliberRM.AttributeFor Each objAttribute In objCustomTab.attributes Debug.Print vbTab & vbTab & objAttribute.NameNext objAttribute

Dim objAttribValue As AttributeValue

' すべての属性値をループ処理します。For Each objAttribValue In objRequirement.AttributeValues

' 属性の名前とその値を出力します。 Debug.Print _

objAttribValue.Attribute.Name _& " = " _ & objAttribValue.Value

Next objAttribValue

objAttribValue.Attribute.Name

Page 15: CaliberRM SDK Programmer's Guide

第 2 章 : Visual Basic を使用した SDK アプリケーシ ョ ンの記述 11

このプロパティは、 AttributeValue オブジェク トの型を取得する必要がある と きにはいつでも使用できます。 次の例では、 特定の型の Attribute オブジェク ト と AttributeValue オブジェク ト を扱う方法を示します。

リスト属性値

前出の表で示したよ うに、 UDAListValue オブジェク トは、 要件に割り当てるこ とができるすべてのリ ス ト属性値を表すオブジェク トです。 こ こでは、 単一選択リ ス ト属性と複数選択リ ス ト属性のどちらの表示にも UDAListValue を使用できる様子を示す、 実際的な例を示します。

' すべての属性値をループ処理します。 For Each objAttribValue In objRequirement.AttributeValues

' UDATextValue を探します。 If TypeOf objAttribValue Is UDATextValue Then

' AttributeValue オブジェク ト を UDATextValue にキャス ト します。 Dim textValue As UDATextValue Set textValue = objAttribValue

' Attribute オブジェク ト を UDAText にキャス ト します。 Dim textAttribute As UDAText Set textAttribute = objAttribValue.Attribute

' この値に固有の情報を出力します。 Debug.Print _

“The value of the UDATextValue is: “ _ & textValue.Value

' この値の型に固有の情報を出力します。 Debug.Print _

“The maximum length this value can be: “_& textAttribute.MaximumLength

Debug.Print _

“The minimum length this value can be: “_& textAttribute.MinimumLength

End If

Next objAttribValue

Page 16: CaliberRM SDK Programmer's Guide

12 CaliberRM SDK プログラマーズ ガイド

下の例は、 要件のステータス リ ス トの リ ス ト エン ト リ と選択中の値を出力します。

このコードは、 次のよ うに修正するこ とによ り、 単一選択ユーザー リ ス ト属性を出力するよ うにできます。

上の例では、 次に示す行で、 属性の UITypeName プロパティを UI_NAME_SSUL 定数と比較するこ とによって、 属性のコレクシ ョ ンから単一選択ユーザー リ ス トのみを取り出しているこ とに注目して ください。

Private Sub Form_Load() ... Dim objRequirement As Requirement Set objRequirement = objSession.getRequirement(1) PrintList objRequirement.StatusEnd Sub

Private Sub PrintList(objListValue As UDAListValue)

' リ ス トエン ト リ を出力します。 Debug.Print “List Entries(s):” Dim listEntry As UDAListEntry For Each listEntry In objListValue.ListEntries Debug.Print listEntry.Object Next listEntry

' 選択中の値を出力します。 Debug.Print “Selected Value = “& objListValue.selectedValueEnd Sub

Private Sub PrintSSUserList(objReq As Requirement) Dim objAttribValue As CaliberRM.AttributeValue

' 渡された要件に割り当てられているすべての属性 ' を反復処理します。 For Each objAttribValue In objReq.AttributeValues

' 「単一選択ユーザー リ ス ト 」 属性のみを出力します。 Set objAttribute = objAttribValue.Attribute If objAttribute.UITypeName = objAttribute.UI_NAME_SSUL Then

' ユーザー リ ス トのエン ト リ を出力します。 Debug.Print “User List Entries(s):”

Dim listEntry As UDAListEntry For Each listEntry In objAttribValue.ListEntries Debug.Print listEntry.Object.Name Next listEntry Debug.Print “Selected Value: “ & _ objAttribValue.SelectedValue.Name End If Next objAttribValue End Sub

If objAttribute.UITypeName = objAttribute.UI_NAME_SSUL Then

Page 17: CaliberRM SDK Programmer's Guide

第 2 章 : Visual Basic を使用した SDK アプリケーシ ョ ンの記述 13

これに対し、 名前を使用してコレクシ ョ ンから属性を選択するこ と もできます。 次に例を示します。

UDAListValue オブジェク トは、 複数選択リ ス ト値も表すこ とができます。 たとえば、 次のコードは、 複数選択グループ リ ス ト値に含まれる各要素の Name プロパティ と Selected プロパティを出力します。

属性値の設定

要件の属性値に変更を加えるには、 以下の手順を実行します。

1 要件を取得します。

2 要件の lock メ ソ ッ ドを呼び出します。

3 要件に含まれている属性値の型 (UDATextValue、 UDAListValue など) を調べます。

4 属性値の型に基づいて、 AttributeValue オブジェク トに変更を加えます。

5 AttributeValue プロパティに新しい値を設定するこ とによ り、 要件を更新します。

6 要件の save メ ソ ッ ドを呼び出します。

次に例を示します。

If objAttribute.Name = "My SSUL Attribute" Then

Dim listEntry As UDAListEntry For Each listEntry In objAttribValue.ListEntries

' リ ス ト エン ト リの 「Selected」 プロパティを使用して ' そのグループが選択されているかど うかを調べます。 If listEntry.Selected Then

Debug.Print listEntry.Object.Name & “ *** Selected ***"“

Else Debug.Print listEntry.Object.Name End If Next listEntry

Page 18: CaliberRM SDK Programmer's Guide

14 CaliberRM SDK プログラマーズ ガイド

要件の説明

CaliberRM では、 要件の説明をテキス ト文字列と して入力するこ と もできれば、 他の説明とのマッピング / 共有関係によ り指定するこ と もできます。 他の要件に使用されている要件説明のこ とを、 「共有されている ("Shared")」 と言います。 逆に、 要件がその説明と して他の要件の説明を使用している場合、 その要件の説明こ とを 「マッピングされている("Mapped")」 と言います。

CaliberRM SDK には、 要件説明が取り得る 3 種類のステータスを表すために、RequirementDescription、 RequirementDescriptionMapped、RequirementDescriptionShared の 3 つのクラスが用意されています。 この 3 つの説明オブジェク トはすべて Text プロパティを持っており、 それを使用して説明テキス ト を取得するこ とができます。 このため、 次に示すコードは、 すべての要件に対して正常に実行できます。

Set objRequirement = objSession.getRequirement(1) objRequirement.lock

' Requirement オブジェク トのすべての属性値をループ処理します。Dim objAttribValue As AttributeValueFor Each objAttribValue In objRequirement.AttributeValues

If TypeOf objAttribValue Is UDABooleanValue Then

' 値が真偽値型の UDA 値の場合、 現在の値とは' 逆の値を新しい値と して設定します。objAttribValue.Value = Not objAttribValue.Value

ElseIf TypeOf objAttribValue Is UDATextValue Then

' 値がテキス ト型の UDA 値の場合、 現在の時刻を' 新しい値と して設定します。objAttribValue.Value = Time

ElseIf TypeOf objAttribValue Is UDAIntegerValue Then

' 値が整数型の UDA 値の場合、' 値を 1 だけインク リ メン ト します。objAttribValue.Value = objAttribValue.Value + 1

ElseIf TypeOf objAttribValue Is UDAListValue ThenIf objAttribValue.MaximumSelections = 1 Then

' 値が単一選択リ ス ト値の場合は、' 選択中のインデッ クスを 1 だけインク リ メン ト します。objAttribValue.SelectedIndex = _

objAttribValue.SelectedIndex + 1End If

End If

' 要件オブジェク ト を新しい値で更新します。objRequirement.AttributeValue = objAttribValue

Next objAttribValue

' 変更後の要件を保存します。objRequirement.save "UDA 値を変更しています "

Page 19: CaliberRM SDK Programmer's Guide

第 2 章 : Visual Basic を使用した SDK アプリケーシ ョ ンの記述 15

要件の説明を変更するには、 単に要件の Description プロパティに新しい RequirementDescription オブジェク ト または RequirementDescriptionMapped オブジェク ト を代入します。 たとえば、 次のコードは、 簡単なテキス トの説明を作成します(分かりやすくするために、 lock メ ソ ッ ド と save メ ソ ッ ドの呼び出しは省略してあ り ます)。

次の例は、 要件に HTML 形式の簡単な説明を作成します。

次の例は、 1 番目の要件の説明を 2 番目の要件にマッピングします。

ドキュメント参照

CaliberRM SDK には、 ドキュ メン ト参照オブジェク ト と して FileReference、TextReference、 WebReference の 3 つが用意されています。 これらの参照オブジェク トはいずれも、 作成した後、 要件の DocumentReferences プロパティに追加できます。 以下の例は、 これらのオブジェク トのインスタンスをそれぞれ作成し、 それを使用して要件に変更を加えます。

Debug.Print req.Description.Text

' 説明を作成するためのファ ク ト リ を作成します。 Dim descriptionFactory As New RequirementDescriptionFactory

' 新しい説明オブジェク ト を作成し、 それを使用して、 要件の' Description プロパティを設定します。req.Description = descriptionFactory.Create(“A new description.”)

' 説明を作成するためのファ ク ト リ を作成します。Dim descriptionFactory As New RequirementDescriptionFactory

' 新しい説明オブジェク ト を作成し、 それを使用して、 要件の' Description プロパティを設定します。req.Description = descriptionFactory.Create("<html><body>A new <i><b>formatted description.</b></i></body></html>")

Set req1 = objSession.getRequirement(1)Set req2 = objSession.getRequirement(2)

' マッピングされる説明を作成するためのファ ク ト リ を作成します。 Dim mapDescriptionFactory As New RequirementDescriptionMappedFactory

' 被マッピング説明を新し く作成し、 それを使用して、 1 番目の要件の' Description プロパティを設定します。 req1.Description = mapDescriptionFactory.Create(req2, objSession)

Page 20: CaliberRM SDK Programmer's Guide

16 CaliberRM SDK プログラマーズ ガイド

上の例で 初に行っているこ とは、 CollectionFactory オブジェク トの CreateByIStCollection メ ソ ッ ドを使用した新しいコレクシ ョ ンの作成だという点に注目して ください。 これが必要になるのは、 要件の DocumentReferences プロパティが読み取り専用のコレクシ ョ ンであ り、 変更を加えるこ とができないためです。

責任者

一般に、 CaliberRM 内の各要件には、 その要件の責任を持つユーザーと して複数の担当者が割り当てられます。 これらのユーザー、 および各ユーザーが所属するグループは、 要件の Responsibilities プロパティ (GroupMemberAssignment オブジェク トのコレクシ ョン) を通じて取得できます。

' まず、 要件の既存の参照コレクシ ョ ンを' 変更可能なコレクシ ョ ンにコピーしなければなり ません。Dim colFactory As New CollectionFactorySet docRefs = colFactory.CreateByIStCollection(req.DocumentReferences)

' テキス ト参照を作成し、 docRefs コレクシ ョ ンに追加します。Dim textRefFactory As New TextReferenceFactorydocRefs.Add textRefFactory.Create("Text Reference")

' Web 参照を作成し、 docRefs コレクシ ョ ンに追加します。Dim webRefFactory As New WebReferenceFactorydocRefs.Add webRefFactory.Create("www.microsoft.com")

' ファ イル参照を作成し、 docRefs コレクシ ョ ンに追加します。Dim fileRefFactory As New FileReferenceFactorydocRefs.Add fileRefFactory.Create("C:\foo.txt")

' 参照を設定し、 保存します。req.lockreq.DocumentReferences = docRefsreq.save ""

Page 21: CaliberRM SDK Programmer's Guide

第 2 章 : Visual Basic を使用した SDK アプリケーシ ョ ンの記述 17

次のコードは、 要件に対して責任を持つすべてのユーザーの割り当てを解除します。

履歴

CaliberRM SDK では、 要件の履歴レコードに完全にアクセスするこ とができます。 要件の履歴は、 どの Requirement オブジェク トでも History プロパティを使用して取得できます。 次のコードで、 これらのオブジェク ト を使用して履歴のリ ビジ ョ ンを表示する方法を示します。

次に、 この例を展開させて、 これらのリ ビジ ョ ンを構成する個々の変更に関する情報も含めます。 次のコードは、 与えられた HistoryRevision オブジェク トに対するすべての HistoryChange オブジェク ト を反復処理して、 変更された要件フ ィールドの名前、 加えられた変更のタイプ、 およびフ ィールドの変更前の値と変更後の値を出力します。

' 要件の責任者に関する情報が入った GroupMemberAssignment ' オブジェク トのコレクシ ョ ンを取得します。 Dim gmaCollection As CaliberRM.Collection Set gmaCollection = req.responsibilities

' コレクシ ョ ン内のすべての GroupMemberAssignment オブジェク ト' を反復処理します。 Dim gma As GroupMemberAssignment For Each gma In gmaCollection

' 割り当てられているすべてのメンバーを反復処理します。 Dim assignedMember As User For Each assignedMember In gma.AssignedMembers

' ... そして、 それぞれについて割り当てを解除します。 gma.removeAssignedMember assignedMember Next assignedMember Next gma

' Requirement オブジェク ト をロ ッ ク して、 その責任者を設定し、 保存します。 req.lock req.responsibilities = gmaCollection req.save ""

Dim revision As HistoryRevision For Each revision In objReq.History.Revisions Debug.Print “Major Ver: “ & revision.Version.MajorVersion Debug.Print “Minor Ver: “ & revision.Version.MinorVersion Debug.Print “Date: “ & Format(revision.OLEDate, "d-mmm") Debug.Print “User Name: “ & revision.UserName Debug.Print “Comment: “ & revision.Comment Next revision

Page 22: CaliberRM SDK Programmer's Guide

18 CaliberRM SDK プログラマーズ ガイド

Change オブジェク トの OldValue プロパティ と NewValue プロパティには、 要件フ ィールドの変更前の値と変更後の値が格納されています。 これらのオブジェク トで作業するには、 これらをタイプごとに区別する必要があ り ます。 原則と して、 変更値オブジェク トは、次の 3 つのタイプのいずれかになり ます。

■ String : UDA ではないテキス ト フ ィールド (要件の名前、 説明など) への変更を表します。

■ Attribute : すべてのユーザー定義属性およびシステム属性への変更を表します。

■ User : 要件の所有者フ ィールドへの変更を表します。

次のサブルーチン (前出の例で 2 度呼び出されたもの) は、 これらの OldValue オブジェク ト と NewValue オブジェク トが String、 Attribute、 User のいずれであるかを区別します。

Dim objChange As HistoryChange For Each objChange In revision.Changes Debug.Print “Field Name: “ & objChange.FieldName Debug.Print “Type: “ & ChangeTypeToString(objChange.changeType) Debug.Print “Old Value: “ & VariantToString(objChange.OldValue) Debug.Print “New Value: “ & VariantToString(objChange.NewValue) Next objChange

' 渡された Variant 型を String 型に変換します。Private Function VariantToString(ByVal vntValue As Object) As String

' まず変更がない (null) 場合を、 排除します。 If IsNull(vntValue) Then VariantToString = "[NULL]"

' 既に文字列型になっている場合は、 単純にそれを返します。 ElseIf VarType(vntValue) = vbString Then VariantToString = vntValue

Else

' Variant 型をオブジェク トにまで絞り込みます。 Dim objValue As Object objValue = vntValue

' オブジェク トが CaliberObject の場合には、 その ' Name 属性を返します。 If TypeOf objValue Is CaliberObject Then VariantToString = objValue.Name

' ユーザー定義属性およびシステム属性の変更を出力します。 ElseIf TypeOf objValue Is AttributeValue Then VariantToString = UDAValueToString(objValue)

Else VariantToString = "" End If

End IfEnd Function

Page 23: CaliberRM SDK Programmer's Guide

第 2 章 : Visual Basic を使用した SDK アプリケーシ ョ ンの記述 19

このコードが 初に行っているこ とは、 このサブルーチンに渡された Variant 変数が null でないこ との確認だという点に注目して ください。 一般に、 null 変更オブジェク トが現れるのは、 UDA が要件のタイプに追加されたり、 要件のタイプから削除されたり した場合です。

また、 AttributeValue オブジェク トの処理ルーチンが、 次のよ うに UDAValueToString 関数を呼び出しているこ とにも注目して ください。

この変換関数 (下のコードを参照) で、 異なる型の AttributeValue オブジェク ト を汎用的な方法で扱える様子を示します。

ディスカッション

CaliberRM では、 プロジェク ト チームは、 グループ ディ スカッシ ョ ン機能を通じて要件とプロジェク トに対するフ ィードバッ クを提出するこ とができます。 これと同様に、CaliberRM SDK では、 要件とプロジェク トに関するディ スカッシ ョ ンを表示するこ とができます。

次のサブルーチンは、 CaliberObject オブジェク ト を受け取り、 その各ディ スカッシ ョ ンメ ッセージに関する情報を表示します。 これは、 渡された CaliberObject オブジェク トの Discussion プロパティを使用するこ とによ り行われます。 ディ スカッシ ョ ンを持てるのは要件とプロジェク トだけなので、 このサブルーチンは、 渡された CaliberObject オブジェクトが Requirement オブジェク トでも Project オブジェク トでもない場合にはすぐに終了します。

ElseIf TypeOf objValue Is AttributeValue Then VariantToString = UDAValueToString(objValue)

' AttributeValue (つま り、 UDA 値) を文字列に変換します。Function UDAValueToString(ByVal objValue As AttributeValue) As String

' まず、 "Values" 属性を簡単に文字列に変換できる ' すべての AttributeValue オブジェク ト を処理します。 If TypeOf objValue Is UDABooleanValue _ Or TypeOf objValue Is UDAFloatValue _ Or TypeOf objValue Is UDAIntegerValue _ Or TypeOf objValue Is UDATextValue Then UDAValueToString = objValue.Value

ElseIf TypeOf objValue Is UDADateValue Then UDAValueToString = Format(objValue.OLEDate, "d-mmm")

ElseIf TypeOf objValue Is UDADurationValue Then UDAValueToString = objValue.Value _ & objValue.Attribute.GranularityTextElseIf TypeOf objValue Is UDAListValue Then UDAValueToString = “Selected List Entries: “ For Each objListEntry In objValue.ListEntries If objListEntry.Selected = True Then UDAValueToString = UDAValueToString & _ VariantToString(objListEntry.Object) & _ "," End If Next objListEntry End If

End Function

Page 24: CaliberRM SDK Programmer's Guide

20 CaliberRM SDK プログラマーズ ガイド

CaliberRM SDK では、 Discussion オブジェク トの postMessage メ ソ ッ ドを通じて、 ディ スカッシ ョ ン メ ッセージを投稿するこ と もできます。 同様に、 DiscussionMessage オブジェクトの postReply メ ソ ッ ドを使用して、 ディ スカッシ ョ ン メ ッセージに返信するこ と もできます。 次の例で、 この 2 つのメ ソ ッ ドの使用方法を示します。

要件ツリー

一般に、 CaliberRM のベースライン内の一連の要件の間には、 階層構造状の関係が存在します。 このため、 これらの要件は要件ツ リーを構成します。 RequirementTree オブジェクト と RequirementTreeNode オブジェク ト を使用する と、 これらのツ リーを操作するこ とができます。

次の手順によ り、 要件ツ リーのノードをたどるこ とができます。

1 ベースラインから RequirementTree オブジェク ト を取得します。

2 RequirementTree オブジェク トの Root プロパティにアクセスして、 ルートの RequirementTreeNode オブジェク ト を取得します。

3 RequirementTreeNode オブジェク トの Children プロパティを再帰的に呼び出します。

Private Sub PrintDiscussion(objCaliberObj As CaliberObject)

' ディ スカッシ ョ ンを持てるのは、 プロジェク ト と要件だけです。 If Not TypeOf objCaliberObj Is Project _ And Not TypeOf objCaliberObj Is Requirement Then Exit Sub End If Dim objDiscussion As Discussion Set objDiscussion = objCaliberObj.Discussion Dim objMessage As DiscussionMessage For Each objMessage In objDiscussion.Messages intTab = objMessage.Depth * 5 Debug.Print Tab(intTab); “Subject: “ & objMessage.Subject Debug.Print Tab(intTab); “Have read: “ & objMessage.Read Debug.Print Tab(intTabDepth); “Date: “ & _ Format(objMessage.OLEDate, "d-mmm") Next objMessage End Sub

' 要件のディ スカッシ ョ ンを取得します。 Set objDiscussion = req.Discussion

' ディ スカッシ ョ ンにメ ッセージを投稿します。 Set objMessage = objDiscussion.postMessage(“My Subject”, “My Message”)

' 新しいメ ッセージへの返信を投稿します。 objMessage.postReply “Re: My Subject”, “My Reply”

Page 25: CaliberRM SDK Programmer's Guide

第 2 章 : Visual Basic を使用した SDK アプリケーシ ョ ンの記述 21

次のコードは、 上の手順に従って、 要件ツ リー内の各ノードに関する情報を出力します。

RequirementTreeNode オブジェク トは、 要件ツ リー内のプロジェク ト 、 要件タイプ、 要件ノードのいずれかを表すこ とができます。 RequirementTreeNode オブジェク トには、 それに関連付けられている CaliberRM オブジェク ト を表すための必要 小限のデータが格納されています。 たとえば、 ノードが Project オブジェク トに関連付けられている場合は、RequirementTreeNode オブジェク トからプロジェク トの名前と ID 番号を取得できますが、プロジェク トの説明やベースラインをこのオブジェク トから直接取得するこ とはできません。

...

' ベースラインの要件ツ リーを取得します。 Dim objRequirementTree As RequirementTree Set objRequirementTree = objBaseline.RequirementTree

' ツ リー内の移動をルート ノードから開始します。 TraverseTree objRequirementTree.Root End Sub

' 指定されたノードをサブツ リーのルート と して、 サブツ リー内をたど り、 ' 各ノードに関する情報を出力します。 Private Sub TraverseTree(ByVal parent As RequirementTreeNode)

' 親ノードに関する情報を出力します。 Debug.Print _ String(parent.Level, vbTab) _ & parent.HierarchyNumber _ & " " _ & parent.Name _ & " " _ & parent.SerialNumberTag

' その親の子ノードそれぞれに対してこの関数を ' 再帰的に呼び出します。 Dim child As RequirementTreeNode For Each child In parent.Children TraverseTree(child) Next child

End Sub

Page 26: CaliberRM SDK Programmer's Guide

22 CaliberRM SDK プログラマーズ ガイド

RequirementTreeNode オブジェク トに関連付けられている ノードを表す完全なオブジェクト を取得するには、 RequirementTreeNode オブジェク トの AssociatedObjectID プロパティを使用します。 次に例を示します。

RequirementTreeNode オブジェク トの addChild メ ソ ッ ド と insertChild メ ソ ッ ドを使用する と、 要件ツ リーに変更を加えるこ とができます。 次のサンプルコードは、 addChild メソ ッ ドを使用して、 要件ツ リー内の 1 番目の要件ノードの下に 2 番目の要件ノードを追加します。

ベースラインの Requirements コレクシ ョ ンを要件の ChildRequirements コレクシ ョ ンと組み合わせて使用するこ とでも、 要件ツ リーをたどるこ とができます。 ただし、 この方法はリモートの CaliberRM Server に Requirement オブジェク ト全体を要求するこ とになるため、 ツ リーをたどる方法と しては、 RequirementTree オブジェク ト と RequirementTreeNode オブジェク ト を使用する場合に比べてはるかに多くの リ ソースを消費します。

次のサンプル コードは、 この方法を使用して、 要件ツ リーの 初の 2 レベルを表示します。

' そのノードが表す CaliberObject オブジェク トの ID を取得します。 Dim id As CaliberObjectID Set id = objRequirementTreeNode.AssociatedObjectID

' そのノードが表す CaliberObject オブジェク ト を取得します。 Dim co As CaliberObject Set co = objSession.get(id)

' CaliberObject オブジェク トの各サブタイプに固有の属性を出力します。 If TypeOf co Is Project Then

' プロジェク トの説明を出力します。 Debug.Print co.Description

ElseIf TypeOf co Is RequirementType Then

' そのタイプのタグを出力します。 Debug.Print co.Tag

ElseIf TypeOf co Is Requirement Then

' 要件の説明を出力します。 Debug.Print co.Description.Text End If

...

' プロジェク ト ノードを取得します。 これは必ずルート ノード とな り ます。 Set objProjectNode = objRequirementTree.Root

' プロジェク ト ノードの下の 初の要件タイプ ノードを取得します。 Set objTypeNode = objProjectNode.Children.Item(0)

' その要件タイプの下の 1 番目の要件と 2 番目の要件を取得します。 Set firstRequirementNode = objTypeNode.Children.Item(0) Set secondRequirementNode = objTypeNode.Children.Item(1)

' 2 番目の要件を 1 番目の要件に追加します。 firstRequirementNode.addChild secondRequirementNode

' ツ リーに加えた変更を保存します。 objRequirementTree.save

Page 27: CaliberRM SDK Programmer's Guide

第 2 章 : Visual Basic を使用した SDK アプリケーシ ョ ンの記述 23

Requirement オブジェク トの ParentRequirement プロパティを使用するこ とによ り、 子から親へとツ リーをたどるこ と もできます。 たとえば、 次のプロシージャは、 渡された要件からツ リー内のルート要件までのパスを出力します。

CaliberRM アプリ ケーシ ョ ンは、 一般に、 ツ リー内の ト ップレベルにあるすべての要件を要件タイプごとにグループ化し、 並べ替えて表示します。 このため、 Baseline オブジェクトの Requirements プロパティ も、 常にこれと同じよ うに要件をグループ化し、 並べ替えた状態で返すよ うになっています。

メモ : 要件のプロジェク ト 、 ベースライン、 およびタイプは、 各要件の Project プロパティ、 Baseline プロパティ、 および RequirementType プロパティにアクセスするこ とによ り調べられます。

トレーサビリティ

CaliberRM では、 2 つの要件間や、 要件と CaliberRM 外のオブジェク ト間に ト レースの関係を持たせるこ とができます。 CaliberRM SDK でも、 同様に、 CaliberRM の要件と非要件ソフ ト ウェアの成果物の両方の間のト レースの作成、 削除、 および変更がサポート されています。

ト レース関連で比較的重要なオブジェク ト をいくつか次に示します。

' Project オブジェク ト と Baseline オブジェク トのための変数を宣言します。 Dim firstProject As Project Dim curBaseline As Baseline

' Session オブジェク トの Projects コレクシ ョ ン内の ' 初のプロジェク ト を参照するよ うに Project 変数を設定します。 Set firstProject = objSession.Projects.Item(0)

' 初のプロジェク ト内の 「現在の」 ベースライン ' を参照するよ うにベースライン変数を設定します。 Set curBaseline = firstProject.CurrentBaseline

' ツ リー内の 初のレベルの要件を ' 一時的に格納するための変数を宣言します。 Dim parentReq As Requirement

' 初のレベルの要件を反復処理します。 For Each parentReq In curBaseline.Requirements Debug.Print parentReq.Name Dim childReq As Requirement

' 現在の親要件のすべての子を ' 反復処理します。 For Each childReq In parentReq.ChildRequirements log vbTab & childReq.Name Next childReq

Next parentReq

Private Sub PrintPathToRoot(ByVal objRequirement As Requirement) Do While Not objRequirement Is Nothing Debug.Print objRequirement.Name Set objRequirement = objRequirement.ParentRequirement Loop End Sub

Page 28: CaliberRM SDK Programmer's Guide

24 CaliberRM SDK プログラマーズ ガイド

■ Trace : 2 つの CaliberRM オブジェク ト間の ト レースの関係を表します。 対象となる CaliberRM オブジェク トは、 要件でも、 CaliberRM の外にあるオブジェク トでもかまいません。

■ TraceManager : ト レースの作成、 変更、 および削除を行うための機能を提供します。

■ XGenericObjectManager : 要件と非要件ソフ ト ウェアの成果物の間にト レースを作成するための機能を提供します。

■ VendorAddIn : 他のアプリ ケーシ ョ ンの領域内にあるオブジェク トへの参照を表します。 CaliberRM の ト レーサビ リティ アド イン モジュールを実装したアプリ ケーシ ョ ンのソフ ト ウェア ベンダーが、 これらのオブジェク ト を提供します。

トレースの取得

CaliberRM SDK では、 CaliberRM オブジェク ト モデルのさまざまなレベルで ト レースを取得するこ とができます。 たとえば、 Session オブジェク トは、 使用可能なすべての CaliberRM オブジェク トの間のすべての ト レースを返す Traces プロパティを持ちます。 さらに、 Project オブジェク トの Traces プロパティは、 プロジェク ト内の要件がト レース先またはト レース元となっているすべての ト レースを返します。 そして、 Requirement オブジェク トは、 ト レースを取得するためのプロパティ と して TracesFrom と TracesTo の 2 つを持ちます。

次の例は、 TracesTo プロパティ と TracesFrom プロパティを使用して、 要件の ト レース元またはト レース先となっているオブジェク トの名前を出力します。

要件間のトレースの作成

TraceManager オブジェク ト を使用する と、 ト レースの関係を作成したり変更したりできます。 ト レースを作成する際の 初の手順は、 次のよ うなコードによるこのオブジェク トの参照の取得です。

Private Sub PrintTraces(objRequirement As Requirement) Dim objTrace As CaliberRM.Trace Debug.Print “Objects tracing from “ & objRequirement.Name For Each objTrace In objRequirement.TracesFrom

' 次のト レースは、 他の何らかのオブジェク トから ' このシステム内の要件へのト レースです。 Debug.Print objTrace.FromObject.Name _ & vbTab _ & objTrace.Suspect Next objTrace Debug.Print “Objects tracing to “ & objRequirement.Name For Each objTrace In objRequirement.TracesTo

' 次のト レースは、 このシステム内の要件から ' 他の何らかのオブジェク トへの ト レースです。 Debug.Print objTrace.ToObject.Name _ & vbTab _ & objTrace.Suspect Next objTrace End Sub

Dim objTraceManager As TraceManager Set objTraceManager = objSession.TraceManager

Page 29: CaliberRM SDK Programmer's Guide

第 2 章 : Visual Basic を使用した SDK アプリケーシ ョ ンの記述 25

TraceManager オブジェク ト を取得したら、 それを使用して ト レースを作成できます。 次の例は、 2 つの要件間にト レースの関係を作成します。

非要件ソフトウェアの成果物へのトレースの作成

前の例では、 CaliberRM 内にある 2 つのオブジェク ト (両方と も要件) の間に ト レースの関係を作成する方法を示しました。 次の例では、 XGenericObjectManager オブジェク トを使用して、 要件と CaliberRM の外にあるオブジェク トの間に ト レースを作成します。。

XGenericObjectManager は、 2 つの外部 VendorAddIn オブジェク ト間に ト レースを作成する機能も提供します。

Dim req1 As Requirement Set req1 = objSession.getRequirement(1) Dim req2 As Requirement Set req2 = objSession.getRequirement(2)

objTraceManager.createTrace3 req1, req2, False

... Dim req1 As Requirement Set req1 = objSession.getRequirement(1) Dim objIntegrationMgr As IntegrationManager Set objIntegrationMgr = objSession.IntegrationManager

' req1 から、 ABCCorp によ り提供された ' ABCObject へのト レースを作成します。 objIntegrationMgr. createTrace2 _ req1, _ True, _ "ABCCorp", _ "ABCObjectID" ...

objIntegrationMgr. createTrace1 _ "ABCCorp", _ "ABCObjectID", _ "XYZCorp", _ "XYZObjectID"

Page 30: CaliberRM SDK Programmer's Guide

26 CaliberRM SDK プログラマーズ ガイド

トレースの削除

ト レースを削除するには、 TraceManager オブジェク トの deleteTrace メ ソ ッ ドを使用します。 たとえば、 次のサブルーチンは、 渡された要件からすべての ト レースを削除します。

CaliberRM のオブジェク ト モデルについては、 「付録 A : CaliberRM のオブジェク ト モデル」 の図を参照して ください。 この図は、 使用したいオブジェク ト を探した り、 各オブジェク トが CaliberRM のオブジェク ト モデル全体の中でどのよ うな位置付けにあるかを理解したりする際に役立ちます。

Private Sub DeleteTraces(objRequirement As Requirement) Dim objTraceManager As TraceManager Set objTraceManager = objSession.TraceManager Dim objTrace As Trace For Each objTrace In objRequirement.TracesFrom objTraceManager.deleteTrace objTrace Next objTrace End Sub

Page 31: CaliberRM SDK Programmer's Guide

第 3 章 : Java を使用した SDK アプリケーシ ョ ンの記述 27

第 章

Chapter3Java を使用したSDK アプリケーションの記述

はじめに

この章では、 Java プログラマ向けに CaliberRM SDK を紹介します。 この章の内容は、 次のとおりです。

■ SDK を使用して Visual Basic アプリ ケーシ ョ ンから CaliberRM Server に接続する方法を説明します。

■ SDK で使用される慣例について説明します。

■ 要件ツ リー、 属性、 および履歴での作業の概要を説明します。

■ SDK を使用して ト レースの関係を表示したり作成したりする方法を説明します。

CaliberServer オブジェクトの作成

CaliberRM SDK を使用するアプリ ケーシ ョ ンは、 必ず 初に CaliberRM Server との接続を作成しなければなり ません。 接続を確立するには、 CaliberServer ク ラスの新しいインスタンスを作成する必要があ り ます。 CaliberServer ク ラスを使用する と、 CaliberRM ユーザーの代わりにアプリ ケーシ ョ ンから CaliberRM との接続を確立し、 その接続を維持するこ とができます。

Page 32: CaliberRM SDK Programmer's Guide

28 CaliberRM SDK プログラマーズ ガイド

次のコードは、 CaliberRM Server との接続を作成する単純な Java アプリ ケーシ ョ ンです。

このコードは、 すべての CaliberRM アプリ ケーシ ョ ンが実行しなければならない、 次の基本手順を示しています。

■ 適切な CaliberRM パッケージをインス トールします。

■ CaliberRM Server を作成します。

■ CaliberRM Server にログインします。

初の行は、 メ インの CaliberRM パッケージをインポート しています。

このパッケージには、 Session ク ラスが含まれています。 Session ク ラスの詳細については、 29 ページの 「セッシ ョ ンの使用」 を参照してください。

2 行目は、 CaliberRM Server パッケージをインポート しています。

このパッケージには、 サーバー接続、 ト ランザクシ ョ ン、 および例外に関連したすべてのクラスが入っています。 CaliberServer ク ラスは、 このパッケージに入っています。

次のコードは、 CaliberServer ク ラスのインスタンスを作成します。 このインスタンスは、ホス ト 「foo」 上にある CaliberRM Server との通信に使用されます。

import com.starbase.caliber.*;import com.starbase.caliber.server.*;

public class ConnectionCreator { public static void main(String[] args) { CaliberServer server = new CaliberServer("foo");try{ Session session = server.login("admin", "admin");

} catch(RemoteServerException rse) { rse.printStackTrace();

} } }

import com.starbase.caliber.*;

import com.starbase.caliber.server.*;

CaliberServer server = new CaliberServer("foo");

Page 33: CaliberRM SDK Programmer's Guide

第 3 章 : Java を使用した SDK アプリケーシ ョ ンの記述 29

後に、 CaliberServer にログインして新しい Session オブジェク ト を作成します。

上の例では、 login メ ソ ッ ドは、 ク ライアン トが リモート CaliberRM Server にログインできない場合には、 RemoteServerException をスローします。 一般に、 ログインの失敗は、login メ ソ ッ ドに渡されたユーザー ID かパスワードが間違っていた場合に発生します。 RemoteServerException の詳細については、 下の 「CaliberRM Java SDK の慣例」 を参照して ください。

メモ : Java SDK を起動する と、 必ず Java 仮想マシン (VM) が起動されます。 デフォルトでは、 ほとんどの VM が 大で 64 MB のメモ リ しか消費できません。 この制限は、 VM の大メモ リ フラグ (Xmx) を設定するこ とによ り上書きできます。

Java SDK アプリ ケーシ ョ ンについては、 このフラグはコマンド ラ インから、 次のよ うなコマンドで設定できます。

いったん VM がロード されたら このオプシ ョ ンは設定できないので、 上のコードは他のどの SDK 読み出しよ り も前に呼び出さなければなり ません。

セッションの使用

Session は、 CaliberRM Server のユーザーのビューを表すオブジェク トであ り、 したがって CaliberRM のオブジェク ト モデルへのエン ト リ ポイン ト とな り ます。 次のコードでは、 前の例で作成した Session オブジェク ト を使用して、 ユーザーが選択できるすべての CaliberRM プロジェク トの名前を表示します。

CaliberRM Java SDK の慣例

前出の 2 つの例には、 CaliberRM SDK で使用されるさまざまな慣例が示されています。 まず第 1 に、 SDK のメ ソ ッ ドが、 オペレーシ ョ ンの実行を CaliberRM Server に依存する場合には、 必ずそのメ ソ ッ ドが RemoteServerException をスローするよ うに宣言しなければなり ません。 RemoteServerException は、 リモート サーバーによ り スローされる例外を「ラ ップ」 します。 例外の getMessage メ ソ ッ ドを呼び出すこ とによ り、 このラ ップされた例外を表す詳しいメ ッセージを取得できます。

次に、 複数のオブジェク ト を返すメ ソ ッ ドはすべて、 それらのオブジェク ト を配列に入れて返します。

try{ Session session = server.login("jdoe", "1234ABC");

} catch(RemoteServerException rse) { rse.printStackTrace();}

java -Xmx1000M com.company.SDKApp

try{ Project[] arrayOfProjects = session.getProjects();

for(int i = 0; i < arrayOfProjects.length; i++) { System.out.println(arrayOfProjects[i].getName());

}} catch(RemoteServerException) {

rse.printStackTrace();}

Page 34: CaliberRM SDK Programmer's Guide

30 CaliberRM SDK プログラマーズ ガイド

後に、 CaliberRM SDK は、 Java のコア API で確立された名前付け標準に従っています。 次の表は、 これらの規則をま とめたものです。

CaliberRM オブジェクトの作成

CaliberRM SDK では、 以下のオブジェク トの作成、 変更、 および削除を行えます。

■ プロジェク ト

■ ベースライン

■ ユーザー

■ グループ

■ 部署

■ 要件

■ 要件タイプ

■ セキュ リティ プロファイル

■ 用語集

■ 用語集の用語

■ インテグレーシ ョ ン

次のサンプルコードで、 CaliberRM オブジェク ト を作成する典型的なパターンを示します。

CaliberRM オブジェクトの変更

CaliberRM オブジェク トに変更を加えるには、 以下の手順を実行します。

1 CaliberRM オブジェク トのインスタンスを取得します。

2 オブジェク トの lock メ ソ ッ ドを呼び出します。

3 必要に応じて、 オブジェク トのプロパティを設定します。

4 オブジェク トの save メ ソ ッ ドを呼び出します。

グループ 規則 例

取得 / 設定メ ソ ッ ド getXxxx/setXxxx getName() setName()

論理メ ソ ッ ド isXxxx isEstablished()isKeyReference()

イベン ト リ スナ インターフェイス

XxxxListener ServerConnectionListenerServerTransactionListener

イベン ト リ スナ登録 addXxxxListener addServerConnectionListeneraddServerTransactionListener

イベン ト ハンド ラ メ ソ ッ ド onXxxx onConnectionEstablishedonServerTransaction

イベン ト ク ラス XxxxEvent ServerTransactionEventServerConnectionEvent

User newUser = new User(“A New User”, session);newUser.save();

Page 35: CaliberRM SDK Programmer's Guide

第 3 章 : Java を使用した SDK アプリケーシ ョ ンの記述 31

次の例は、 上の手順に従って Group オブジェク トに変更を加えます。

CaliberRM オブジェクトの削除

CaliberObject オブジェク トは、 その remove メ ソ ッ ドを呼び出すこ とによ り、 CaliberRM から削除できます。 次に例を示します。

remove メ ソ ッ ドが行うのは、 現在のベースラインからの要件の削除だけです。 その要件が、 それよ り前のすべてのベースラインから削除されるわけではあ り ません。

要件

こ こでは、 Requirement オブジェク トで行う基本的な作業について説明します。

要件ツリー

一般に、 CaliberRM のベースライン内の一連の要件の間には、 階層構造状の関係が存在します。 このため、 これらの要件は要件ツ リーを構成します。 RequirementTree ク ラス と RequirementTreeNode ク ラスを使用する と、 これらのツ リーを操作するこ とができます。

次の手順によ り、 要件ツ リーのノードをたどるこ とができます。

■ Baseline オブジェク トから RequirementTree オブジェク ト を取得します。

■ RequirementTree オブジェク トの getRoot メ ソ ッ ドを呼び出して、 ルートの RequirementTreeNode オブジェク ト を取得します。

■ RequirementTreeNode オブジェク トの getChildren メ ソ ッ ドを再帰的に呼び出します。

Group group = session.getGroups()[2];group.lock();group.setDescription("A New Description");group.setEmailAddress("[email protected]");group.save();

Requirement requirement = session.getRequirement(77);requirement.remove();

Page 36: CaliberRM SDK Programmer's Guide

32 CaliberRM SDK プログラマーズ ガイド

次のコードは、 上の手順に従って、 要件ツ リー内の各ノードに関する情報を出力します。

このコードを実行する と、 次のよ うな出力が得られます。

RequirementTreeNode オブジェク トの getDepthFirstEnumeration メ ソ ッ ド と getBreadthFirstEnumeration メ ソ ッ ドを使用するこ とでも、 要件ツ リーをたどるこ とができます。 この方法を示すために、 上のコードの一部分を getDepthFirstEnumeration メ ソ ッドを使用するよ うに書き直したコードを次に示します。

...

// 現在のベースラインのツ リーを取得します。 RequirementTree tree = currentBaseline.getRequirementTree();

// ツ リーのルート ノードを取得します。 RequirementTreeNode root = tree.getRoot(); TraverseTree(root);}

public void TraverseTree(RequirementTreeNode parentNode) {

// 現在のノードに関する関連情報を出力します。 PrintTreeNode(parentNode);

// 子コレクシ ョ ンに対して反復処理を実行します。 RequirementTreeNode[] children = parentNode.getChildren(); for (int i = 0; i < children.length; i++) { TraverseTree(children[i]);}}private void PrintTreeNode(RequirementTreeNode node) { StringBuffer sb = new StringBuffer(); for(int i = 0; i < node.getLevel(); i++) { sb.append(" "); } sb.append(node.getHierarchyNumber()); sb.append(" "); sb.append(node.getName()); sb.append(" "); sb.append(node.getSerialNumberTag()); System.out.println(sb);}

X100 Droid 2016412 Business Requirements BR2016416 1 Operating Environment BR1 1.1 Temperature BR2 1.2 Humidity BR3 1.3 Radiation BR4 2 Continuous operation BR5 2.1 Recharge Time BR73 3 Startup time BR6

Page 37: CaliberRM SDK Programmer's Guide

第 3 章 : Java を使用した SDK アプリケーシ ョ ンの記述 33

要件ツ リーに含まれる RequirementTreeNode オブジェク トは、 プロジェク ト 、 要件タイプ、要件のいずれかを表すこ とができます。 RequirementTreeNode オブジェク トに関連付けられている CaliberObject オブジェク トの ID を取得するには、 RequirementTreeNode オブジェクトの getAssociatedObjectID メ ソ ッ ドを使用します。 次に例を示します。

RequirementTreeNode オブジェク トの addChild メ ソ ッ ド と insertChild メ ソ ッ ドを使用する と、 要件ツ リーに変更を加えるこ とができます。 次のサンプル コードは、 addChild メソ ッ ドを使用して、 要件ツ リー内の 1 番目の要件ノードの下に 2 番目の要件ノードを追加します。

// 現在のベースラインのツ リーを取得します。RequirementTree tree = currentBaseline.getRequirementTree();

// ツ リーのルート ノードを取得します。RequirementTreeNode root = tree.getRoot();

// ルートの下位レベルの全ノードの列挙を// 取得します。Enumeration nodes = root.getDepthFirstEnumeration();

// 全ノードに対して反復処理を実行します。while(nodes.hasMoreElements()) { RequirementTreeNode node = (RequirementTreeNode)nodes.nextElement(); PrintTreeNode(node); }

// ノードに関連付けられている CaliberObject オブジェク トの ID を

取得します。CaliberObjectID coid = node.getAssociatedObjectID();

// CaliberObjectID を使用して、 CaliberObject オブジェク ト を取得し

ます。CaliberObject co = session.get(coid);if(co instanceof Project) { // プロジェク ト固有の情報を出力します。 Project p = (Project)co; System.out.println(p.getDescription());

} else if(co instanceof RequirementType) { // タイプ固有の情報を出力します。 RequirementType rt = (RequirementType)co; System.out.println(rt.getTag());

} else { // 要件固有の情報を出力します。 Requirement r = (Requirement)co; System.out.println(r.getStatus().getSelectedValue());}

Page 38: CaliberRM SDK Programmer's Guide

34 CaliberRM SDK プログラマーズ ガイド

ベースラインの getRequirements メ ソ ッ ドを要件の getChildRequirements メ ソ ッ ド と組み合わせて使用するこ とでも、 要件ツ リーをたどるこ とができます。 ただし、 この方法はリモートの CaliberRM Server に Requirement オブジェク ト全体を要求するこ とになるため、ツ リーをたどる方法と しては、 RequirementTree オブジェク ト と RequirementTreeNode オブジェク ト を使用する場合に比べてはるかに多くのリ ソースを消費します。

次のサンプル コードは、 この方法を使用して、 要件ツ リーの 初の 2 レベルを表示します。

RequirementTree tree = currentBaseline.getRequirementTree();

// プロジェク ト ノードを取得します。 これは、 必ずルート ノード とな り ます。RequirementTreeNode projectNode = tree.getRoot();

// プロジェク ト ノードの下の 初の要件タイプ ノードを取得します。RequirementTreeNode typeNode = projectNode.getChildAt(0);

// その要件タイプの下の 1 番目の要件と 2 番目の要件を取得します。RequirementTreeNode requirementNode1 = typeNode.getChildAt(0);RequirementTreeNode requirementNode2 = typeNode.getChildAt(1);

// 2 番目のノードを 1 番目のノードに追加するこ とによ り、 ツ リーに変更を加えます。requirementNode1.addChild(requirementNode2);

// 変更内容をコ ミ ッ ト します。tree.save();

try{

// デフォルト または現在のベースラインを取得します。 Baseline defaultBaseline = project.getDefaultBaseline();

// ベースラインの要件ツ リー内の 初のレベルの // 要件を取得します。 Requirement[] topLvlReqs = defaultBaseline.getRequirements();

// 初のレベルにある一連の要件に反復処理を実行します。 for(int i; i < topLvlReqs.length; i++) {

Requirement req = topLvlReqs [i];System.out.println(req.getName());

// 現在の要件の 「子」 を取得します。Requirement[] childReqs = req.getChildRequirements();

// 子を反復処理します。for(int j; j < childReqs.length; j++) {

Requirement childReq = childReqs[j];System.out.println("\t" + childReq.getName());

} }}

Page 39: CaliberRM SDK Programmer's Guide

第 3 章 : Java を使用した SDK アプリケーシ ョ ンの記述 35

要件の getParentRequirement メ ソ ッ ドを使用するこ とによ り、 子から親要件へとツ リーをたどるこ と もできます。 たとえば、 次のコードは、 1 つの要件からツ リー内のルート要件までのパスを出力します。

CaliberRM アプリ ケーシ ョ ンは、 一般に、 ツ リーの ト ップレベルにあるすべての要件を要件タイプごとにグループ化し、 並べ替えて表示します。 このため、 Baseline オブジェク トの getRequirements メ ソ ッ ドは、 必ずこれと同じよ うに要件をグループ化して並べ替えた状態で返します。

メモ : 要件のプロジェク ト 、 ベースライン、 およびタイプは、 それぞれ要件の getProject メ ソ ッ ド、 getBaseline メ ソ ッ ド、 および getRequirementType メ ソ ッ ドを呼び出すこ とにより調べられます。

要件の作成

CaliberRM SDK には、 Requirement オブジェク トのコンス ト ラ ク タが 2 つ用意されています。 1 番目のコンス ト ラ ク タでは、 プロジェク トの要件ツ リー階層構造のト ップレベルに要件を作成できます。 そして、 2 番目のコンス ト ラ ク タは、 既存の要件の子と して作成する際に使用します。 次の例で、 1 番目のコンス ト ラ ク タを使用して新しい要件を作成する方法を示します。

try{

// ID 番号が 10 の要件の // 新バージ ョ ンを取得します。 Requirement req = session.getRequirement( 10 );

while(req != null) { System.out.println(req.getName());

req = req.getParent(); }

} catch(RemoteServerException) { rse.printStackTrace();

}

// セッシ ョ ンの 初のプロジェク ト を取得します。 Project project = session.getProjects()[0];

// プロジェク トの現在のベースラインを取得します。 Baseline currentBaseline = project.getCurrentBaseline();

// ベースライン内の 初の要件タイプを取得します。 RequirementType type = currentBaseline.getRequirementTypes()[0];

// 新しい要件を作成します。Requirement newRequirement = new Requirement(

“New Requirement”, project, type, 0, session);

// 新しい要件を保存します。 newRequirement.save();

Page 40: CaliberRM SDK Programmer's Guide

36 CaliberRM SDK プログラマーズ ガイド

次の例では、 2 番目のコンス ト ラ ク タを使用して、 既存の要件の子となる要件を作成する方法を示します。 この新しい要件は、 「子要件」 という名前になり、 その親の子階層構造内の 4 番目の子とな り ます。

要件の属性

CaliberRM では、 任意の数のユーザー定義属性 (UDA) を使用して要件を定義するこ とができます。 これに加えて、 どの要件も必ず、 ステータスと優先度をシステム属性と して持ちます。

CaliberRM SDK の Requirement オブジェク トには、 その UDA 値を取得するための getAttributeValues メ ソ ッ ド と、 システム属性値を取得するための getStatus メ ソ ッ ドおよび getPriority メ ソ ッ ドが用意されています。 たとえば、 次のコードは、 要件のステータスの選択中の値を出力します。 これは、 AttributeValue のサブク ラス UDAListValue のインスタンスです。

getAttributeType( ) メ ソ ッ ドを使用するこ とによって、 属性のデフォルト値を取得すること もできます。 次に例を示します。

各 AttributeValue サブクラスが 1 つの Attribute サブク ラス と関連付けられているこ とに注意して ください。 このため、 UDABooleanValue オブジェク トの getAttributeType メ ソ ッドは UDABoolean ク ラスのインスタンスを返し、 UDATextValue オブジェク トの getAttributeValue メ ソ ッ ドは UDAText ク ラスのインスタンスを返します。

// 新しい要件の親とする要件を取得します。 Requirement parentReq = session.getRequirement(125);

// 親要件オブジェク ト を使用して、 新しい要件を作成します。 Requirement newRequirement = new Requirement(

“Child Requirement”,parentReq,3,session);

// 新しい要件を保存します。 newRequirement.save();

UDAListValue status = requirement.getStatus();Object selectedValue = status.getSelectedValue();System.out.print("Selected Value: " + selectedValue);

// 対応する属性の型を取得します。 UDAList attributeType = status.getAttributeType();

// その属性の型のデフォルト値オブジェク ト を取得します。UDAListValue defaultValue = attributeType.getDefaultValue();

// デフォルト UDAListValue から、 選択中の値を取得します。Object selectedDefaultValue = defaultValue.getSelectedValue();

System.out.print(“Default Value: “ + selectedDefaultValue);

Page 41: CaliberRM SDK Programmer's Guide

第 3 章 : Java を使用した SDK アプリケーシ ョ ンの記述 37

次の表は、 SDK の AttributeValue ク ラスおよび Attribute ク ラス と CaliberRM の属性の型との関係をまとめたものです。

要件の履歴

CaliberRM SDK では、 要件の履歴レコードに完全にアクセスするこ とができます。 要件の履歴は、 要件の任意のインスタンスに対して getHistory メ ソ ッ ドを呼び出すこ とによ り取得できます。

次のク ラス図は、 Requirement ク ラス、 History ク ラス、 HistoryRevision ク ラス、 および HistoryChange ク ラスの関係をま とめたものです。

AttributeValue サブクラス Attribute サブクラス アプリ ケーショ ンでの属性の型

UDATextValue UDAText 単一行テキス ト

複数行テキス ト フ ィールド

UDAIntegerValue UDAInteger 整数

UDADurationValue UDADuration 継続期間

UDAFloatValue UDAFloat 浮動小数点数

UDADateValue UDADate 日付

UDABooleanValue UDABoolean 真偽値

UDAListValue UDAList 複数選択リ ス ト

単数選択リ ス ト

複数選択グループ リ ス ト

単一選択グループ リ ス ト

複数選択ユーザー リ ス ト

単一選択ユーザー リ ス ト

Page 42: CaliberRM SDK Programmer's Guide

38 CaliberRM SDK プログラマーズ ガイド

次の例で、 これらのク ラスを使用して履歴情報を表示する方法を示します。

トレーサビリティ

CaliberRM では、 2 つの要件間や、 要件と CaliberRM 外のオブジェク ト間に ト レースの関係を持たせるこ とができます。 CaliberRM SDK でも、 これと同様に、 CaliberRM の要件と非要件ソフ ト ウェアの成果物の両方に対する ト レースの作成、 削除、 および変更がサポート されています。

ト レース関連で比較的重要なク ラスをいくつか次に示します。

■ Trace : 要件とその他の CaliberRM オブジェク トの間の ト レースの関係を表します。 対象となる CaliberRM オブジェク トは、 要件でも、 CaliberRM 外にあるオブジェク トでもかまいません。

■ TraceManager : ト レースの作成、 変更、 および削除を行うための機能を提供します。

■ ExternalObject : CaliberRM 外にあるすべてのオブジェク ト を表す抽象基本クラスです。

■ File : ファ イルシステムオブジェク ト を表します。

■ SCMFile : ソース構成管理ツールによ り管理されるオブジェク ト を表します。 File ク ラス と SCMFile ク ラスは、 両方と も com.starbase.caliber.external.file 内にあり ます。

■ XGenericObjectManager : 要件と非要件ソフ ト ウェアの成果物の間にト レースを作成するための機能を提供します。

■ VendorAddIn : 他のアプリ ケーシ ョ ンの領域内にあるオブジェク トへの参照を表します。

// 要件オブジェク トの履歴を取得します。History history = req.getHistory();

// 履歴を含むリ ビジ ョ ンを取得します。HistoryRevision[] revisions = history.getRevisions();

for(int i = 0; i < revisions.length; i++) { Revision revision = revisions[i]; System.out.println(“Revision: “ + revision.getVersion()); System.out.println(“Date: “ + revision.getDate()); System.out.println(“User: “ + revision.getUserName()); System.out.println(“Comment: “ + revision.getComment());

// リ ビジ ョ ンを含む変更内容を取得します。 HistoryChange[] changes = revision.getChanges(); For(int j = 0; j < changes.length; j++) { Change change = changes[j];

System.out.println(

“\tField: “ + change.getFieldName()); System.out.println(“\tOld Value: “ + change.getOldValue());System.out.println(“\tNew Value: “ + change.getNewValue()); }}

Page 43: CaliberRM SDK Programmer's Guide

第 3 章 : Java を使用した SDK アプリケーシ ョ ンの記述 39

トレースの取得

ト レースは、 CaliberRM オブジェク ト階層構造のさまざまなレベルで取り出すこ とができます。 Session ク ラスは、 そのセッシ ョ ンで使用可能なすべての ト レースを返す getTraces メ ソ ッ ドを提供します。 同様に、 プロジェク ト ク ラスの getTraces メ ソ ッ ドは、 プロジェクト内にある要件がト レース元か ト レース先となっているすべての ト レースを返します。

要件ク ラスには、 ト レースを取得するためのメ ソ ッ ド と して getTracesFrom と getTracesTo の 2 つがあ り ます。 次の例は、 これらのメ ソ ッ ドを使用して、 要件の ト レース元またはト レース先となっているオブジェク トの名前を出力します。

要件間のトレースの作成

TraceManager ク ラスを使用する と、 ト レースの関係を作成したり変更したりできます。 TraceManager のインスタンスを取得するには、 Session オブジェク トの getManager メソ ッ ドを呼び出さなければなり ません。 次の例で、 TraceManager のインスタンスを取得する方法を示します。

try{

// 次の行は ID 番号が 1 の要件の// 新バージ ョ ンを取得します。Requirement requirement = session.getRequirement(1);

Trace[] tracesTo = requirement.getTracesTo();for(int i = 0; i < tracesTo.length; i++) {

// 次のト レースは、 このシステム内の要件から// 他の何らかのオブジェク トへの ト レースです。Trace trace = tracesTo[i];CaliberObject obj = trace.getToObject();System.out.println(obj.getName());

}

Trace[] tracesFrom = requirement.getTracesFrom();for(int i = 0; i < tracesFrom.length; i++) {

// 次のト レースは、 他の何らかのオブジェク トから // このシステム内の要件へのト レースです。

Trace trace = tracesFrom[i];CaliberObject obj = trace.getFromObject();System.out.println(obj.getName());

}

} catch(RemoteServerException) { rse.printStackTrace();

}

TraceManager traceMgr;traceMgr = (TraceManager)session.getManager(Trace.class);

Page 44: CaliberRM SDK Programmer's Guide

40 CaliberRM SDK プログラマーズ ガイド

TraceManager オブジェク ト を取得したら、 それを使用して ト レースを作成できます。 次の例は、 2 つの要件間にト レースを作成します。

非要件ソフトウェアの成果物へのトレースの作成

前の例では、 CaliberRM の範囲内にある 2 つのオブジェク ト (両方と も要件) の間の トレースの関係を作成しました。 次の例では、 CaliberRM の外部にあるオブジェク ト を トレース先とする ト レースを作成する方法を示します。

外部オブジェク トへの参照を作成するには、 まず適切なオブジェク ト マネージャの参照を取得しなければなり ません。 既に説明したよ うに、 CaliberObjectManager のインスタンスは、 Session オブジェク トの getManager メ ソ ッ ドを呼び出すこ とによ り取得できます。 上の例では、 次に示す行で、 com.starbase.caliber.xgeneric.XGenericObjectManager (CaliberRM 外部のほとんどのオブジェク ト を管理するク ラス) のインスタンスを取得しています。

createFileTrace メ ソ ッ ドは、 次に示すよ うに、 その 1 番目のパラ メータ と して要件への参照を必要とするこ とに注意して ください。

これは、 外部オブジェク トへの参照は CaliberRM 内にしか存在できないのに、 そのオブジェク トが要件との ト レースの関係に参加するためです。 この関係が削除される と、 参照も削除されます。 この規則の唯一の例外は、 Mercury TestDirector オブジェク ト と Select Enterprise オブジェク トです。 これらは、 要件と リ ンクするこ とな く CaliberRM に追加したり CaliberRM から削除したりできます。

Requirement req1 = session.getRequirement(1);Requirement req2 = session.getRequirement(2);

// 次の行は、 req1 から req2 へのト レースを作成します。TraceMgr.createTrace(req1, req2, false);

Class clazz = File.class;XGenericObjectManager extGenObjMgr =

(XGenericObjectManager)session.getManager(clazz);

Requirement req1 = session.getRequirement(1);

// 次の行は CaliberRM システム内に File オブジェク ト を作成し、// req1 から新しい File へのト レースを作成します。File f = extGenObjMgr.createFileTrace(

Req1, true, "foo.txt", "C:\\temp\\");

Class clazz = File.class;FileManager fileMgr = (FileManager)session.getManager(clazz);

File f = fileMgr.createFileTrace( Req1, ...

Page 45: CaliberRM SDK Programmer's Guide

第 4 章 : CaliberRM 用の ト レーサビリテ ィ アドインの作成 41

第 章

Chapter4CaliberRM 用のトレーサビリティ アドインの作成

はじめに

ト レーサビ リティ アド インの開発と配布は、 CaliberRM のためのカスタム ソ リ ューシ ョ ンをユーザーに提供する も簡単な方法です。 アド インは、 CaliberRM に一連のオブジェクト を提供します。 これらのオブジェク トは CaliberRM のユーザー インターフェイスを通じて表示されるため、 ユーザーは、 それら と要件との ト レース関係を作成できるよ うになります。 たとえば、 アド インが Microsoft Project のタスクや、 設計ツールやテス ト ツールのオブジェク ト を表示します。

このドキュ メン トでは、 Microsoft Visual Basic.NET プロジェク トのサンプルを使用して CaliberRM 用のト レーサビ リティ アド インを作成する方法を説明します。 サンプル ファ イルは、 Program Files\Borland\CaliberRM\Samples\Addins\ にあ り ます。

Visual Basic.NET サンプルの使用

CaliberRM のインス トールには、 CaliberRM 用のト レーサビ リ ティ アド インを Visual Basic.NET で作成するために使用できる一連のサンプル ファ イルが含まれています。

メモ : ト レーサビ リティ アド イン ファ イルと Assembly.Info.vb 内の GUID をすべて変更する必要があ り ます。

デフォルトでは、 サンプル プロジェク トは、 Program Files\Borland\CaliberRM\Samples\Addins\HelloWorld2 VB.NET に置かれています。 こ こには以下のファイルがあ り ます。

■ AssemblyInfo.vb

■ HelloWorld2_VBNet.sln

■ HelloWorld2_VBNet.vbproj

■ HelloWorld2_VBNet.vbproj.user

■ Icon1.ico

■ Icon2.ico

■ Icon3.ico

■ Icon4.ico

Page 46: CaliberRM SDK Programmer's Guide

42 CaliberRM SDK プログラマーズ ガイド

■ Icon5.ico

■ VendorObject.vb

■ VendorSession.vb

■ VendorView.vb

ト レーサビ リティ アド インを新規に作成するには、 以下の手順を実行します。

1 " ク ラス ライブラ リ " テンプレート を使用して新規の Visual Basic プロジェク ト を作成します。

2 VendorSession.vb、 VendorView.vb、 および VendorObject.vb ファ イルを、 この新規 VB プロジェク トのディ レク ト リにコピーします。 次に、 [ 既存項目の追加 ...] を使用して、 これらのファイルをプロジェク トに追加します。

3 VB.NET の CreateGUID ツール ([ ツール| GUID の作成 ] メニュー) を使用して、 新たに追加したファイルの COM GUID 値をすべて変更します。

4 次に、 この新規プロジェク ト をビルド します。 VS.NET が、 ビルドの 後に、 新たにビルド された DLL を登録します。 コマンド ラインから regasm (.NET Assembly Registration ツール ) を使用して、 他のマシンにこの DLL を登録するこ と もできます。

5 これで ト レーサビ リティ アド インを使用する準備ができました。 インターフェイスで必要なプロパティ と メ ソ ッ ドを実装できます。

トレーサビリティ アドインのインターフェイス

アド インを作成するには、 VendorSession、 VendorView、 VendorObject の 3 つのクラスのプロパティ と関数を入力する必要があ り ます。 以下、 これらのク ラスそれぞれと、 そのプロシージャについて詳し く説明します。

VendorSession

VendorSession ク ラスは、 CaliberRM ク ライアン トがアド インとやり取りする際のコンテキス ト を提供します。 その後は、 VendorSession が、 公開で作成可能な唯一のクラスにな り ます。

Public ReadOnly Property SupportsViewBuilding() As Booleanアド インを利用して、 ユーザーが動的にカスタム ビューを作成できるよ うにするには、 このプロパティを "true" にます。 たとえば、 データベースとのインテグレーシ ョ ンを構築している場合に、 クエ リに基づいてデータの複数のビューを公開したいこ とがあ り ます。 逆に、 デフォルトのビューだけをサポートするアド インを作成している場合は、 このプロパティを "false" にします。

詳細については、 44 ページの 「VendorView」 を参照して ください。

Public WriteOnly Property ConfigFilePath() As StringConfigFilePath プロパティは、 CaliberRM によ り設定され、 アド インが使用する構成ファイルのパスを示します。 この構成ファイルは、 CaliberRM Administrator でアド インを登録する際に指定します。 新規の ト レーサビ リティ アド インを有効にする方法については、 45ページの 「 ト レーサビ リティ アド インの登録と有効化」 を参照してください。

いったん設定された構成ファイルは、 CaliberRM システムによ り管理され、 VendorSession ク ラスが初期化された直後に (ConfigFilePath プロパティを使用して) インテグレーシ ョ ンに渡されます。

Page 47: CaliberRM SDK Programmer's Guide

第 4 章 : CaliberRM 用の ト レーサビリテ ィ アドインの作成 43

Public Property SilentMode() As Booleanこのプロパティは、 CaliberRM によ り設定され、 アド インがサイレン ト モードで実行されるこ とを示します。 サイレン ト モードでは、 アド インは、 ユーザー入力を必要とするダイアログ ボッ クスを一切表示しません。

CaliberRM がこのプロパティを取得した場合、 アド インはサイレン ト モードで動作しているこ とを示します。

メモ : サイレン ト モードを利用する と、 Datamart のレポート をスケジュールして、 空いている時間にレポート生成をするこ とができます。 CaliberRM Server に、 ト レーサビ リティ アド インへの ト レースを持つプロジェク トが含まれる場合、 Datamart がタスクを実行すると きには認証情報を探しますが、 アド インがサイレン ト モードで実行されている と、 ログイン ダイアログは表示されません。 ログイン ダイアログを表示しな くても、 認証情報を収集できるよ うに、 それをファイルまたはアド イン用のレジス ト リに保存しておく こ とをお勧めします。

Public ReadOnly Property InterfaceVersion() As Integerこのプロパティは、 アド インが実装しているアド イン インターフェイスのバージ ョ ンを提供します。 現在の CaliberRM は、 このインターフェイスのバージ ョ ン 2.0 をサポート しています。 従って、 このプロパティは常に 2 になり ます。

Public Function GetVendorViews(ByVal BuildView As Boolean) As Collectionこの関数は、 CaliberRM に VendorView オブジェク トのコレクシ ョ ンを提供します。 これらのビューは、 CaliberRM の [ ト レーサビリテ ィ修正 ] ウ ィンド ウに、 それぞれ 1 つのタブとして表示されます。

CaliberRM は、 [ ト レーサビ リティ修正 ] ウ ィンド ウを初期化する と きに、 BuildView パラメータを "false" に設定して (これは、 CaliberRM が初期の (つま りデフォルトの) ビューを要求しているこ とを示します)、 アド インの GetVendorViews メ ソ ッ ドを呼び出します。 アド インが動的なビューの構築をサポート している場合は (詳細は 42 ページの「Public ReadOnly Property SupportsViewBuilding() As Boolean」 を参照)、 [ ビューの構築 ] ボタンが有効になり ます。 ユーザーが [ ビューの構築 ] ボタンをク リ ッ クする と、 CaliberRM は BuildView パラ メータを "true" に設定して GetVendorViews メ ソ ッ ドを呼び出します。 アド インは、 ダイアログ ボッ クスを表示し、 ユーザーにビュー パラ メータの指定を要求します。 戻されたビューは、 既存のビュー タブに追加されます。

Page 48: CaliberRM SDK Programmer's Guide

44 CaliberRM SDK プログラマーズ ガイド

Public Function GetVendorObject(ID As String) As VendorObjectGetVendorObject 関数は、 単一の VendorObject オブジェク ト を取得するために、 CaliberRM によ り呼び出されます。

VendorView

すでに説明したよ うに、 ト レーサビ リティ アド インは、 VendorSession オブジェク トの GetVendorViews メ ソ ッ ドを通じて一連の VendorView オブジェク ト を提供します。 こ う して取得された各 VendorView オブジェク トは、 CaliberRM の [ ト レーサビ リティ修正 ] ウ ィンド ウでビューのタブに表示される一連の VendorObjects オブジェク ト を提供します。

Public ReadOnly Property ViewName() As Stringこのプロパティは、 ビューの名前を提供します。

Public ReadOnly Property IsList() As BooleanCaliberRM は、 アド イン オブジェク トのコレクシ ョ ンをツ リーまたはリ ス ト と して表示するこ とができます。 このプロパティを "true" にする と、 ビューのオブジェク トが リ ス ト として表示されます。 "false" にする と、 ツ リーと して表示されます。

Public ReadOnly Property VendorObjects() As Collectionこのプロパティは、 ビューを構成するオブジェク ト を提供します。 ビューがオブジェク トのツ リーを表す場合 (つま り IsList = "false") は、 このオブジェク ト コレクシ ョ ンは、 ツリー内のノードの第一レベルを表します。

VendorObject

VendorObject ク ラスは、 アド インによ り公開される単一のオブジェク ト を表します。CaliberRM は、 これらのオブジェク ト を VendorView オブジェク トのメンバと して取得するか、 または VendorSession オブジェク トの GetVendorObject メ ソ ッ ドを通じて取得します。

Public ReadOnly Property ID() As StringID プロパティは、 CaliberRM 内でのオブジェク トの一意の識別子を提供します。CaliberRM は、 以降に VendorSession オブジェク トの GetVendorObject メ ソ ッ ドを呼び出す際に、 この ID を使用します。

Public ReadOnly Property ObjectName() As StringObjectName プロパティは、 VendorObject の名前を提供します。

Public ReadOnly Property ShortObjectName() As Stringこのプロパティは、 オブジェク トの省略名を CaliberRM に提供します。 CaliberRM は、 この名前が 16 文字を超えている場合には、 これを切り詰めます。

Public ReadOnly Property Icon() As Longこのプロパティは、 オブジェク トのウ ィンド ウ アイコン ハンドルを提供します。

Public ReadOnly Property Traceable() As BooleanTraceable プロパティは、 CaliberRM がユーザーに VendorObject オブジェク トへの ト レースの作成を許可するかど うかを決定します。

Page 49: CaliberRM SDK Programmer's Guide

第 4 章 : CaliberRM 用の ト レーサビリテ ィ アドインの作成 45

Public ReadOnly Property HasChildren() As Booleanこのプロパティは、 VendorObject オブジェク トが子を持つかど うかを決定します。CaliberRM は、 VendorObject がオブジェク トのツ リーと して提供された場合にのみ(VendorView オブジェク トの IsList プロパティを参照)、 このプロパティをチェッ ク します。 このプロパティが "true" の場合、 CaliberRM は、 オブジェク ト ツ リーでそのオブジェク トの横に 記号を表示します。

Public ReadOnly Property Children() As Collectionこのプロパティは、 CaliberRM から VendorObject オブジェク トの子へのアクセス手段を提供します。 CaliberRM は、 HasChildren プロパティが "true" であ り、 ユーザーがツ リー内の VendorObject オブジェク ト を展開した場合に、 このメ ソ ッ ドを呼び出します。

Public ReadOnly Property Operations() As Variant各 VendorObject オブジェク トは、 その Operations プロパティを通じて、 必要な数だけの操作を CaliberRM ユーザーに公開できます。 このプロパティは、 オブジェク トに対して実行できる操作を表す文字列を要素とする配列を返します。 たとえば、 ファ イルを表す VendorObject オブジェク ト を作成している場合なら、 それに対して実行できる操作と して Open や Properties などを公開するこ とになるでし ょ う。

Public Sub DoOperation(Operation As String)ユーザーが CaliberRM 内で VendorObject オブジェク ト を右ク リ ッ クする と、 CaliberRM は、Operations プロパティを参照し、 返された文字列を入れたポップアップ メニューを表示します。 その後、 ユーザーがどれかの操作のメニュー項目を選択する と、 CaliberRM は、VendorObject オブジェク トの DoOperation メ ソ ッ ドを呼び出して、 選択された操作の名前を渡します。

Public Sub OnTraceCreated(RequirementID As Integer)このメ ソ ッ ドは、 CaliberRM の要件と VendorObject との間に ト レースが作成されたと きに、CaliberRM によって呼び出されます。

Public Sub OnTraceDeleted(RequirementID As Integer)このメ ソ ッ ドは、 CaliberRM の要件と VendorObject オブジェク ト との間の ト レースが削除されたと きに、 CaliberRM によって呼び出されます。

Public Sub OnStatusChange(RequirementID As Integer, MadeSuspect As Boolean)このメ ソ ッ ドは、 CaliberRM の要件と VendorObject オブジェク ト との間の ト レースの " 要検討 " ステータスが変更されたと きに、 CaliberRM によって呼び出されます。

トレーサビリティ アドインの登録と有効化

アド インをコーディングしてコンパイルしたら、 各 CaliberRM ク ライアン ト コンピュータにそれをデプロイするだけでなく、 CaliberRM Server 上の特定のプロジェク ト用にそれを登録して有効化する必要があ り ます。

アド インを登録して有効化するには、 以下の手順を実行します。

1 CaliberRM Server のコンピュータ上で、 CaliberRM Administrator を開き、 左ペインからプロジェク ト を選択します。

2 右ペインで [External Traceability] タブを選択します。

3 [New...] ボタンをク リ ッ ク します。 [New Integration] ダイアログ ボッ クスが表示されます。

Page 50: CaliberRM SDK Programmer's Guide

46 CaliberRM SDK プログラマーズ ガイド

4 [Vendor Name] ( [ ト レーサビリテ ィ修正 ] タブに表示される名前) と [Library Name](Visual Basic で、 プロジェク トの [ プロジェク ト プロパティ ] ダイアログ ボッ クスの [プロジェク ト名 ] フ ィールドに表示される名前) を入力し、 アイコンを選択します。 アド インが使用する構成ファイルの場所も指定できます。 CaliberRM は、 このインテグレーシ ョ ンを使用するすべてのク ライアン トに、 このファ イルを自動的に配布します(詳細については、 42 ページの 「VendorSession」 の ConfigFilePath プロパティの説明を参照して ください)。

5 [OK] をク リ ッ ク して、 新しいインテグレーシ ョ ンを作成します。 これで、 すべての CaliberRM プロジェク トの [Disabled] リ ス ト ボッ クスに新しいインテグレーシ ョ ンが追加されます。

6 インテグレーシ ョ ンを有効にするには、 [Disabled] リ ス ト ボッ クスでインテグレーシ ョ ンを選択し、 [ < ] ボタンをク リ ッ ク します。

7 [File | Save Changes] をク リ ッ ク します。 アド インが登録されて CaliberRM Server で有効になり ます。

8 ユーザーが要件からアド イン オブジェク トへの ト レースを必要とする場合は、 各 CaliberRM ク ライアン ト マシンにアド インをデプロイします。 セッ ト アップ プログラムを使用するか、 必要なファイルを手動またログイン スク リプ ト を使用して配布して登録するこ とができます。

Page 51: CaliberRM SDK Programmer's Guide

付録 A: CaliberRM のオブジェクト モデル 47

付録

Appendix ACaliberRM のオブジェクトモデル

以下の図は、 使用したいオブジェク ト を探す場合や、 使用するオブジェク トの CaliberRM オブジェク ト モデルにおける位置付けを理解したい場合に使用できます。

以下の表に、 図中でのオブジェク ト と コレクシ ョ ンの表示を示します。

オブジェク ト を示します。

オブジェク トのコレクシ ョ ンを示します。

オブジェク ト階層構造の完全な表示が図中の他の場所にあるこ とを示します。

Page 52: CaliberRM SDK Programmer's Guide

48 CaliberRM SDK プログラマーズ ガイド

CaliberRM のオブジェクト モデル

Page 53: CaliberRM SDK Programmer's Guide

付録 A: CaliberRM のオブジェクト モデル 49

Page 54: CaliberRM SDK Programmer's Guide

50 CaliberRM SDK プログラマーズ ガイド