198
B1WD-2807-01Z0(00) 20101Interstage Business Process Manager V11 開発者ガイド

Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

B1WD-2807-01Z0(00)2010年1月

Interstage Business Process Manager V11

開発者ガイド

Page 2: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

まえがき

本書の目的

本書では、ユーザの要件に適応するよう、Interstage BPMのAPIを使用してInterstage BPMのカスタマイズや拡張方法について説明さ

れています。

本書の読者

本書は、次の読者を対象としています。

・ ビジネスプロセスの開発に携わるIT専門家

・ ワークフローによる自社製品の強化を考えている独立ソフトウェアベンダー

・ ワークフローを活用するアプリケーションの構築やワークフローによる既存アプリケーションの強化を計画しているシステム管理者

注意

本書では、“管理者”とは“Interstage BPM Super Users”ではなく、“Interstage BPM Tenant Owners”を指します。

本書の構成

本書は以下の内容で構成されています。

章 タイトル 説明

1 概要 Interstage BPMの特長や概要など、全体の概要について説明します。

2 Interstage BPM の基本設計 Interstage BPMのコンポーネントとその連携について説明します。

3 Interstage BPMの基礎知識 Interstage BPMを操作するために必要な、基本的な事項について説明しま

す。

4 Model API Model APIを使用したアプリケーション開発のためのシステム環境につい

て説明します。

5 プロセス定義のデザイン 単純なプロセス定義と複雑なプロセス定義のプログラミング例、およびプロ

セスインスタンスのプログラミング例について説明します。

6 Interstage BPMの強化 JavaActionと詳細なフィルタとソートを含む、Interstage BPMを強化するさま

ざまな手法について説明します。

7 運用管理 運用管理機能のプログラミング例について説明します。

8 履歴情報の取得 ワークフローの履歴情報をデータベースから取得する方法について説明

します。

付録A Interstage BPMのサンプル Interstage BPMに提供されているサンプルの一覧、その構造、および使い

方について説明します。

付録B JavaScript関数 JavaScriptについて説明します。

付録C トラブルシューティング Interstage BPMの使用に関連する問題の解決に役立つ情報について説明

します。

用語集 用語の解説です。

本書の読み方

本書は、以下の表を目安にお読みください。

- i -

Page 3: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

目的 章

Interstage BPMの概要について知りたい。 1

Interstage BPMの基本設計について知りたい。 2

Interstage BPMの基礎知識について知りたい。 3

Model APIの使用方法について知りたい。 4

プロセス定義およびプロセスインスタンスのプログラミングについて知りたい。 5

システムの拡張方法について知りたい。 6

運用管理アクティビティのプログラミングについて知りたい。 7

ワークフローの履歴情報をデータベースから取得する方法について知りたい。 8

サンプルプログラムについて知りたい。 付録A

JavaScriptについて知りたい。 付録B

トラブルシューティングについて知りたい 付録C

表記規則

本書は、次の規則に従って記述されています。

例 意味

[画面に表示されるテキスト] ユーザインタフェースに表示されるテキストです。[]付きで表示されます。

「参照先」 参照先は「」付きで表示されます。

関連マニュアル

Interstage Business Process Managerには、以下のマニュアルがあります。必要に応じてご利用ください。

・ ソフトウェア説明書

ソフトウェア説明書には、提供媒体の内容、留意事項など重要な情報について説明します。ご使用になる前に、ソフトウェア説明

書を必ずお読みください。

・ マニュアル体系と読み方

Interstage Business Process Manager のマニュアル体系とそれぞれのマニュアルの読み方について説明します。

・ サーバ・コンソール導入ガイド

Interstage Business Process Managerサーバのソフトウェア、ハードウェア要件と、Interstage Business Process Managerサーバ、コン

ソールのインストール方法について説明します。

・ コンソールユーザーズガイド

Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。

・ サーバ管理者ガイド

Interstage Business Process Managerの設定および管理方法について説明します。Interstage Business Process Managerサーバの

設定パラメータの説明が含まれます。

・ 開発者ガイド

Interstage Business Process Manager開発の手順について説明します。

Interstage Business Process Manager のAPI を使用したInterstage Business Process Manager のカスタマイズやカスタムアプリケー

ションの開発方法について説明します。

・ Studioユーザーズガイド

Interstage Business Process Manager Studioを使用してプロセスをモデル化する方法について説明します。

- ii -

Page 4: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

・ Javadoc (APIリファレンス)

カスタムアプリケーションの開発のためのAPIおよびパッケージ、インタフェース、クラスの構文について説明します。

略称

本マニュアルで説明される製品を次のように省略します。

・ 「BEA WebLogic Server」は「WebLogic Application Server」と呼ばれ、「WebLogic」と省略します。

・ 「Interstage Business Process Manager」は「Interstage BPM」と省略します。

・ 「Microsoft® Windows Server® 2003」は「Windows Server® 2003」と省略します。

・ 「Interstage Business Process Manager」は「Interstage BPM」と省略します。

・ 「Microsoft® Windows® 2000 Server」は「Windows® 2000 Server」と省略します。

・ 「Solaris™ Operating System」は「Solaris」と省略します。

・ 「Microsoft® SQL Server 2005 Standard Edition」、「Microsoft® SQL Server 2005 Enterprise Edition」、「Microsoft® SQL Server2008 Standard Edition」、「Microsoft® SQL Server 2008 Enterprise Edition」は、「Microsoft® SQL Server」、「Microsoft SQLServer」、または「SQL Server」と省略します。

・ 「Oracle 10g R2 Standard Edition」、「Oracle 10g R2 Standard Edition One」、「Oracle 10g R2 Enterprise Edition」、「Oracle 11g StandardEdition」、「Oracle 11g Standard Edition One」、「Oracle 11g Enterprise Edition」は、「Oracle」と省略します。

・ 「WebSphere Application Server」は、「WebSphere」と省略します。

輸出管理規制について

当社ドキュメントには、外国為替および外国貿易管理法に基づく特定技術が含まれていることがあります。特定技術が含まれている場

合は、当該ドキュメントを輸出または非居住者に提供するとき、同法に基づく許可が必要となります

発行日 2010年1月

版数 2版

登録商標について Interstage、Symfowareは、富士通株式会社の登録商標です。

ARISはIDS Scheer AGの登録商標です。

Microsoft、Windows、WindowsNT、Windows Serverは、米国MicrosoftCorporationの米国およびその他の国における商標または登録商標です。

UNIXは、米国およびその他の国におけるオープン・グループの登録商標で

す。

JavaおよびすべてのJava関連の登録商標およびSolarisは、米国およびその他

における米国Sun Microsystem,Incの商標または登録商標です。

Linuxは、Linus Torvalds氏の米国およびその他の国における商標または登録

商標です。

Red Hat、the Red Hat "Shadow Man" ロゴ、RPM、Maximum RPM、RPM ロゴ、

Linux Library、 PowerTools、 Linux Undercover、RHmember、RHmemberMore、Rough Cuts、Rawhide、およびRed Hatをベースとしたすべての商標とロ

ゴは、Red Hat, Inc.の米国およびその他の国における登録商標あるいは商標

です。

そのほか、本書に記載されている会社名および製品名は、それぞれ各社の商

標または登録商標です。

Microsoft Corporationのガイドラインに従って画面写真を使用しています。

お願い ・ このマニュアルは、予告なしに変更されることがあります。

・ このマニュアルは無断で他に転用しないようお願いします。

- iii -

Page 5: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

・ このマニュアルに記載されたデータの使用に起因する第三者の特許権お

よびその他の権利の侵害については、当社はその責を負いません。

[高度な安全性が要求される用途への使用について]

本製品は、一般事務用、パーソナル用、家庭用、通常の産業等の一般的用途を想定して開発・設計・製造され

ているものであり、原子力施設における核反応制御、航空機自動飛行制御、航空交通管制、大量輸送システム

における運行制御、生命維持のための医療用機器、兵器システムにおけるミサイル発射制御など、極めて高度

な安全性が要求され、仮に当該安全性が確保されない場合、直接生命・身体に対する重大な危険性を伴う用途

(以下「ハイセイフティ用途」という)に使用されるよう開発・設計・製造されたものではありません。お客さまは本製

品を必要な安全性を確保する措置を施すことなくハイセイフティ用途に使用しないでください。また、お客さまが

ハイセイフティ用途に本製品を使用したことにより発生する、お客様または第三者からのいかなる請求または損

害賠償に対しても富士通株式会社およびその関連会社は一切責任を負いかねます。

Copyright FUJITSU LIMITED 2008-2010

- iv -

Page 6: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

目 次

第1章 概要................................................................................................................................................................................11.1 ワークフローとは..................................................................................................................................................................................11.2 Interstage BPMとは..............................................................................................................................................................................11.3 Interstage BPMの特長........................................................................................................................................................................11.4 アプリケーションの作成.......................................................................................................................................................................1

第2章 Interstage BPMの基本設計.............................................................................................................................................22.1 設定の概要..........................................................................................................................................................................................22.2 システムアーキテクチャ.......................................................................................................................................................................3

2.2.1 Interstage BPMサーバ層..............................................................................................................................................................32.2.2 Interstage BPMのWeb層およびクライアント層............................................................................................................................5

2.3 Interstage Analytics連携.....................................................................................................................................................................52.4 CentraSite連携.....................................................................................................................................................................................62.5 Interstage BPMをサービスとして提供する(SaaSモード)....................................................................................................................7

第3章 Interstage BPMの基礎知識.............................................................................................................................................83.1 プロセス定義とプロセスインスタンス...................................................................................................................................................83.2 プロセス定義........................................................................................................................................................................................8

3.2.1 プロセス定義の状態.....................................................................................................................................................................93.2.2 プロセス定義識別子...................................................................................................................................................................103.2.3 ワークフローエレメント................................................................................................................................................................103.2.4 Java Action.................................................................................................................................................................................113.2.5 ロールユーザグループ...............................................................................................................................................................113.2.6 フォーム......................................................................................................................................................................................113.2.7 タイマー......................................................................................................................................................................................123.2.8 プロセス定義の所有権...............................................................................................................................................................123.2.9 ユーザ定義属性.........................................................................................................................................................................133.2.10 ノードタイプ...............................................................................................................................................................................133.2.11 プロセス定義の変更.................................................................................................................................................................19

3.3 プロセスインスタンス..........................................................................................................................................................................193.3.1 プロセスインスタンスの状態.......................................................................................................................................................213.3.2 ノードインスタンスと矢印インスタンス.........................................................................................................................................213.3.3 プロセスインスタンスの所有権...................................................................................................................................................223.3.4 添付文書....................................................................................................................................................................................22

3.4 ワークアイテム....................................................................................................................................................................................223.4.1 ワークアイテムモード..................................................................................................................................................................223.4.2 ワークアイテムの状態.................................................................................................................................................................233.4.3 矢印............................................................................................................................................................................................243.4.4 将来のワークアイテム.................................................................................................................................................................24

3.5 フィルタ..............................................................................................................................................................................................253.6 構造的プロセス編集の目的..............................................................................................................................................................253.7 サブプロセス機能の目的..................................................................................................................................................................263.8 セキュリティモードと再割当てモード.................................................................................................................................................26

3.8.1 セキュリティモード.......................................................................................................................................................................263.8.2 再割当てモード..........................................................................................................................................................................27

第4章 Model API.....................................................................................................................................................................284.1 システム環境.....................................................................................................................................................................................28

4.1.1 Interstage Application Server(ローカル)の環境設定...............................................................................................................284.1.2 Interstage Application Server (リモート) の環境設定................................................................................................................304.1.3 WebSphere Application Server スタンドアロンアプリケーション配備(ローカル)の環境設定.................................................324.1.4 WebSphere Application Serverクライアント J2EE アプリケーション配備(ローカル)の環境設定............................................324.1.5 WebSphere Application Server スタンドアロンアプリケーション配備(リモート)の環境設定...................................................334.1.6 WebSphere Application Serverクライアント J2EE アプリケーション配備(リモート)の環境設定..............................................344.1.7 WebLogicの環境設定................................................................................................................................................................36

- v -

Page 7: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

4.1.8 JBossの環境設定.......................................................................................................................................................................374.2 Model APIアプリケーションの実行...................................................................................................................................................374.3 プロパティファイルの格納.................................................................................................................................................................374.4 Model APIアーキテクチャー.............................................................................................................................................................384.5 例外処理...........................................................................................................................................................................................38

第5章 プロセス定義のデザイン.................................................................................................................................................395.1 基本的なプロセス定義のデザイン....................................................................................................................................................39

5.1.1 一般ユーザのログインとログアウト.............................................................................................................................................415.1.2 ワークフローアプリケーションを選択する..................................................................................................................................415.1.3 プロセス定義の新規デザイン....................................................................................................................................................42

5.2 応用的なプロセス定義のデザイン....................................................................................................................................................445.2.1 ユーザ定義属性の追加.............................................................................................................................................................465.2.2 Voting Activityノード..................................................................................................................................................................475.2.3 ANDノードとORノードの追加....................................................................................................................................................485.2.4 Conditionalノード........................................................................................................................................................................485.2.5 Subprocessノード.........................................................................................................................................................................495.2.6 Delayノード.................................................................................................................................................................................515.2.7 Chained-Processノード................................................................................................................................................................51

5.3 プロセスインスタンス..........................................................................................................................................................................535.3.1 プロセス定義の 新バージョンの取得......................................................................................................................................545.3.2 プロセスインスタンスの作成と開始............................................................................................................................................545.3.3 ワークアイテムリストの作成.........................................................................................................................................................555.3.4 ワークアイテムの実行.................................................................................................................................................................565.3.5 ワークアイテムの取戻し..............................................................................................................................................................565.3.6 添付文書....................................................................................................................................................................................59

第6章 Interstage BPMの強化..................................................................................................................................................616.1 Interstage BPMと外部アプリケーションの統合.................................................................................................................................616.2 アプリケーション変数を使用する......................................................................................................................................................626.3 Java Action........................................................................................................................................................................................63

6.3.1 Java Actionsのタイプ..................................................................................................................................................................646.3.2 Server Enactment Contextインタフェースを使用するワークフローデータへのアクセス...........................................................656.3.3 開始アクションの割当て.............................................................................................................................................................666.3.4 終了アクションの割当て.............................................................................................................................................................676.3.5 組込みJava Action.....................................................................................................................................................................686.3.6 JavaScript Java Action................................................................................................................................................................686.3.7 アクティビティの作業者と関連...................................................................................................................................................696.3.8 エラーJava Actionの使用...........................................................................................................................................................706.3.9 Java Actionのエラー処理...........................................................................................................................................................716.3.10 エラーの場合のJava Action構造と実行プラン........................................................................................................................746.3.11 中止時、一時停止時、および再開時アクションの使用..........................................................................................................77

6.4 フィルターとソートのAPI....................................................................................................................................................................776.4.1 WFObjectListインタフェース......................................................................................................................................................776.4.2 フィルターとソートのメソッド........................................................................................................................................................796.4.3 メソッドの呼び出し手順..............................................................................................................................................................806.4.4 リストに使用するUDAの識別.....................................................................................................................................................806.4.5 ソートとフィルター.......................................................................................................................................................................806.4.6 バッチ処理の注意点..................................................................................................................................................................806.4.7 リストの更新通知.........................................................................................................................................................................81

6.5 複数オブジェクトの情報の一括取得................................................................................................................................................816.6 プロセスコメントの使い方..................................................................................................................................................................826.7 特別なユーザ定義属性のプロパティ...............................................................................................................................................84

6.7.1 タイプXMLのユーザ定義属性でのワーク................................................................................................................................846.7.2 ワークリストUDA..........................................................................................................................................................................85

6.8 拡張属性の使用................................................................................................................................................................................866.8.1 拡張属性の割当て.....................................................................................................................................................................876.8.2 拡張属性値の取得.....................................................................................................................................................................88

- vi -

Page 8: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

6.8.3 エレメントの全拡張属性の取得.................................................................................................................................................886.8.4 拡張属性の名前.........................................................................................................................................................................896.8.5 拡張属性の名前空間.................................................................................................................................................................91

6.9 トランザクション制御..........................................................................................................................................................................926.10 トリガ.................................................................................................................................................................................................93

6.10.1 トリガの機能..............................................................................................................................................................................946.10.2 トリガの定義..............................................................................................................................................................................94

6.11 Event Activity(Trigger)ノードの使用..............................................................................................................................................966.12 File Listenerファイルリスナ..............................................................................................................................................................97

6.12.1 File Listenerファイルリスナの使用...........................................................................................................................................976.12.2 File Listenerファイルリスナの設定...........................................................................................................................................98

6.13 Emailリスナ......................................................................................................................................................................................996.13.1 トリガ起動のためのEmailリスナの使用....................................................................................................................................99

6.14 JMS リスナ......................................................................................................................................................................................1016.14.1 トリガ起動のためのJMSリスナの使用....................................................................................................................................101

6.15 エージェントの使用.......................................................................................................................................................................1026.15.1 エージェントの概要................................................................................................................................................................1036.15.2 FTPエージェントの構成.........................................................................................................................................................1046.15.3 FTPエージェントの使用.........................................................................................................................................................1066.15.4 HTTPエージェントの設定......................................................................................................................................................1076.15.5 HTTPエージェントの使用......................................................................................................................................................108

6.16 タイマーの使用..............................................................................................................................................................................1096.16.1 タイマーの定義.......................................................................................................................................................................1096.16.2 期限の追加.............................................................................................................................................................................1116.16.3 タイマーの実行を制御する....................................................................................................................................................1116.16.4 タイマーインスタンス履歴.......................................................................................................................................................1126.16.5 ビジネスカレンダーの使用.....................................................................................................................................................1126.16.6 タイマーの時刻コードと日付コード........................................................................................................................................114

6.17 リモートサブプロセスのモデル化..................................................................................................................................................1156.17.1 親とリモートサブプロセス定義を設計....................................................................................................................................1166.17.2 実行中のリモートサブプロセス定義.......................................................................................................................................1196.17.3 リモートサブプロセスのエラー処理........................................................................................................................................119

6.18 Compound Activityノードの使い方..............................................................................................................................................1206.18.1 Compound Activityノードの定義...........................................................................................................................................121

6.19 ダイナミックサブタスクの使い方....................................................................................................................................................1216.20 ダイナミックプロセスの使い方.......................................................................................................................................................1236.21 決定表...........................................................................................................................................................................................124

6.21.1 決定表の概念.........................................................................................................................................................................1246.21.2 プロセス定義内での決定表の使用.......................................................................................................................................1256.21.3 決定表の仕様.........................................................................................................................................................................1266.21.4 決定表の管理.........................................................................................................................................................................127

6.22 Iteratorノード..................................................................................................................................................................................1306.22.1 Iteratedアクティビティノード....................................................................................................................................................1316.22.2 繰り返し作成されたSubprocessノードとChained-Processノード.............................................................................................1326.22.3 Iteratorノードの使い方...........................................................................................................................................................132

第7章 運用管理.....................................................................................................................................................................1387.1 管理者のログインとログアウト(テナント所有者)..............................................................................................................................1387.2 ワークフローアプリケーションを選択する.......................................................................................................................................1397.3 ユーザおよびグループ管理...........................................................................................................................................................139

7.3.1 ローカルユーザの管理............................................................................................................................................................1407.3.2 ローカルグループの管理.........................................................................................................................................................1407.3.3 ログインしたユーザリストの作成...............................................................................................................................................1427.3.4 ユーザのログアウト...................................................................................................................................................................1427.3.5 ユーザとグループキャッシュのリセット.....................................................................................................................................142

7.4 プロセス定義管理............................................................................................................................................................................1437.4.1 プロセス定義リストの作成.........................................................................................................................................................143

- vii -

Page 9: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

7.4.2 プロセス定義の公開.................................................................................................................................................................1447.4.3 プロセス定義のアーカイブ.......................................................................................................................................................1447.4.4 プロセス定義の削除.................................................................................................................................................................1457.4.5 アーカイブ済のプロセス定義の削除.......................................................................................................................................1457.4.6 プロセス定義のインポート........................................................................................................................................................1457.4.7 プロセス定義のエクスポート.....................................................................................................................................................146

7.5 プロセスインスタンス管理................................................................................................................................................................1467.5.1 プロセスインスタンスリストの作成.............................................................................................................................................1477.5.2 プロセスインスタンスの所有権の変更.....................................................................................................................................1477.5.3 プロセスインスタンスのアーカイブ...........................................................................................................................................1487.5.4 プロセスインスタンスの一時停止.............................................................................................................................................1487.5.5 プロセスインスタンスの中止.....................................................................................................................................................1497.5.6 プロセスインスタンスの削除.....................................................................................................................................................1507.5.7 アーカイブ済のプロセスインスタンスの削除...........................................................................................................................150

7.6 ワークアイテム管理..........................................................................................................................................................................1507.6.1 ワークアイテムのユーザに再割当て........................................................................................................................................1507.6.2 ワークアイテムの更新...............................................................................................................................................................151

第8章 履歴情報の取得..........................................................................................................................................................1538.1 Model APIを使用した履歴情報の取得..........................................................................................................................................1538.2 ハッシュテーブルからの履歴情報の取得......................................................................................................................................154

8.2.1 HISTORY_ID...........................................................................................................................................................................1548.2.2 HISTORY_TIME_STAMP......................................................................................................................................................1548.2.3 HISTORY_EVENT_CODE.....................................................................................................................................................1548.2.4 HISTORY_EVENT_TYPE......................................................................................................................................................1558.2.5 HISTORY_EVENTDATA.......................................................................................................................................................1558.2.6 HISTORY_PRODUCER_ID....................................................................................................................................................1558.2.7 HISTORY_PRODUCER_TYPE..............................................................................................................................................1558.2.8 HISTORY_CONSUMER_ID...................................................................................................................................................1568.2.9 HISTORY_CONSUMER_TYPE.............................................................................................................................................1568.2.10 HISTORY_ISHANDLED_CODE.........................................................................................................................................1568.2.11 HISTORY_PROCESSINSTANCE_ID..................................................................................................................................1568.2.12 HISTORY_RESPONSIBLE...................................................................................................................................................1578.2.13 履歴エントリの検索ルール.....................................................................................................................................................157

8.3 履歴テーブル..................................................................................................................................................................................1588.4 SQLステートメントの履歴情報検索................................................................................................................................................159

付録A Interstage BPMのサンプル.........................................................................................................................................161A.1 /client/samples/examples/sources...................................................................................................................................................161

A.1.1 プロセスのモデル化と実行に関連したサンプル....................................................................................................................161A.1.2 System Administration に関連したサンプル..........................................................................................................................162A.1.3 JMS インタフェースに関連したサンプル................................................................................................................................163A.1.4 決定表に関連したサンプル....................................................................................................................................................165

A.2 /client/samples/examples/classes....................................................................................................................................................165A.3 /client/samples/examples/bin..........................................................................................................................................................165

付録B JavaScript関数...........................................................................................................................................................166B.1 JavaScript関数................................................................................................................................................................................166B.2 Java ActionでサポートするJavaScript関数....................................................................................................................................169B.3 トリガでサポートするJavaScript関数...............................................................................................................................................171

付録C トラブルシューティング.................................................................................................................................................172C.1 ログファイルの情報.........................................................................................................................................................................172C.2 特定のエラー状態を解決...............................................................................................................................................................172

C.2.1 Interstage BPMサーバの起動の失敗.....................................................................................................................................172C.2.2 IBPMServer.logのエラー.........................................................................................................................................................173C.2.3 JavaScript実行中の時間切れ.................................................................................................................................................173C.2.4 Oracleデータベースへの書き込み時のエラー.......................................................................................................................173

- viii -

Page 10: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

C.2.5 Interstage Applicationサーバの警告、エラーメッセージ........................................................................................................173C.3 インストール、配備時および構成時に発生するエラー.................................................................................................................174C.4 Interstage BPMサーバの起動時のエラー.....................................................................................................................................176C.5 問題が解決できない場合...............................................................................................................................................................177

用語集...................................................................................................................................................................................179

索引......................................................................................................................................................................................185

- ix -

Page 11: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

第1章 概要

Interstage BPMはワークフローアプリケーション開発用のAPIを備えた、サーバベースのワークフローエンジンです。開発者やシステム

エンジニアは、独自の製品やシステムにワークフローエンジンとしてInterstage BPMを組み込むことができます。 Interstage BPMは、シ

ステム管理者やソフトウェア製品ベンダーの方を対象とした製品です。

1.1 ワークフローとは

ワークフローは、ビジネスプロセスを自動化するための比較的新しい手法です。ビジネスプロセスの自動化は、初期の手法では、作業

フローのロジックは専用アプリケーションに組み込まれていました。このため、作業プロセスの変化に応じて、アプリケーションを更新す

る必要があり、保守に多大な労力を必要としていました。

ワークフロー製品は、プロセスのあらゆる状況をカプセル化することによってこの問題を解決しています。たとえば、ルール、ルーティン

グパス、アクティビティ、データなどのプロセス定義の情報をカプセル化します。さらに、これら情報を自動的に管理します。このように、

ワークフロー対応の製品を使うことで、ワークフロープロセス自体の深い知識がなくても、ワークフローシステムを実装できます。

1.2 Interstage BPMとは

Interstage BPMは、Web対応の分散型ワークフローアプリケーション開発ツールです。ビジネスプロセスにモデル化、自動化、統合、管

理、 適化というライフサイクルを適合し、プロセス改善を遂行するビジネスプロセス管理ソリューションを提供します。

Interstage BPMの主要な機能は以下のとおりです。

・ 多様なプロセスを実行できる、拡張性のある実行基盤。

・ Interstage BPMサーバと連携するユーザアプリケーション開発用APIの提供。

・ プロセスに関連する添付文書の一元管理。

1.3 Interstage BPMの特長

Interstage BPMの背景にあるのは、ワークフローシステムの導入により業務を自動化することができ、日常業務にかかる時間を短縮す

ることで、本来の業務に専念できるようにするという考え方です。たとえば、カスタマーサービスの担当者や営業担当者は、業務を自動

化することにより、注文やクレームなどの処理よりも顧客サービスに集中できるようになります。

エンジニアリング、ビジネス開発、および研究開発業務への適用においては、Interstage BPMの柔軟性を活用して、会社、部署、部

門、チームそれぞれのレベルで業務の進捗状況を監視し、業務の実施を促進することができます。これにより、グループ内の一人一

人の能力を 大限に引き出せます。

Interstage BPMでは、実装時に適用業務に応じた情報を組み込んだり、アプリケーションをカスタマイズして業務に応じた適用を行うこ

とができます。

1.4 アプリケーションの作成

このマニュアルは、お客様がお持ちの製品やシステムへのInterstage BPMの組み込みおよび機能拡張を行う際、ご利用いただくことを

目的としています。これを も効果的かつ実践的に行うには、まず、Interstage BPMサーバのインストールディレクトリにあるclient/samplesサブディレクトリのサンプルをご覧いただき、サンプルのクラスに組み込まれている内容を確認してから、お客様のニーズに合うようアプ

リケーション作成の計画を立案することをお勧めします。

以下は、基本的な開発方法です。

・ Model APIを使用することにより、Interstage BPMサーバにアクセスするWebアプリケーションなどを作成します。Model APIの詳細

は、『API Javadocマニュアル』を参照してください。『API Javadocマニュアル』は、Interstage BPMのインストールディレクトリのjavadocsサブディレクトリにあります。

・ JavaActionを使用すると、データの取り扱いや意思決定の自動化に向けた、システムの機能拡張が可能です。これにより、ビジネ

スプロセスを自動化することができます。

- 1 -

Page 12: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

第2章 Interstage BPMの基本設計

Interstage BPMは、ワークフローアプリケーション開発用のApplication Programming Interfaces(以降、APIと呼びます。)を備えた、サー

バベースのワークフローエンジンです。開発者やシステムエンジニアは、製品やシステムにワークフローエンジンとしてInterstage BPMを組み込むことができます。

Interstage BPMの主な機能は以下のとおりです。

・ Interstage BPMサーバと連携するユーザアプリケーションを開発するためのAPIを提供。

・ 多様なプロセスを実行できる、拡張性のある実行基盤。

・ プロセスに関連する文書の一元管理。

・ Interstage BPM Analytics:Interstage BPMサーバは、業務プロセスの監視データをInterstage Analyticエンジンに提供できます。

Interstage Analyticsを使用して、このデータを評価、処理することができます。詳細は、「2.3 Interstage Analytics連携」を参照してく

ださい。

・ CentraSite連携:CentraSiteと連携することで、プロセス定義をリポジトリに登録したり、UDDIレジストリからWebサービス情報(WSDL)を検索することが可能。詳細については、「2.4 CentraSite連携」を参照してください。

2.1 設定の概要

Interstage BPMは以下の設定で動作します。

図2.1 設定の概要

Interstage BPMサーバは、データベースおよびオプションとしてディレクトリサービスと共に動作します。Interstage BPMサーバへのアク

セスには、Interstage BPMクライアントを使います。

Interstage BPMの完全なインストール環境を構成するコンポーネントを、様々な設定でインストールできます。

・ システムはすべて、同一のコンピュータにインストールします。

・ 以下の1つまたは複数については、別々のコンピュータにインストールします。

- Interstage BPMサーバ

- データベース

- ディレクトリサービス

- Interstage BPMコンソール

- Studio

詳細については、『Interstage Business Process Manager サーバ・コンソール導入ガイド』を参照してください。

- 2 -

Page 13: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

2.2 システムアーキテクチャ

Interstage BPMは、基本的にサーバとModel APIで構成されています。複数の接続オプションにより、サードパーティ製のツールとその

他システムを統合できます。ここでは、Interstage BPMコンポーネントとその連携の概要について説明します。

図2.2 アーキテクチャの概要

2.2.1 Interstage BPMサーバ層

Interstage BPMサーバは、Enterprise Java Bean(EJB)インタフェースを提供しているアプリケーションサーバ内で動作します。サーバ

は、ユーザとその他コンポーネント間の対話を受け持ち、ユーザが開始したプロセスを実行し、ユーザにプロセス内におけるステータ

スの変更を通知します。Interstage BPMは、アプリケーションサーバの標準機能を使って設定できます。Model APIを使って開発したク

ライアント経由でのみ、サーバにアクセスできます。

Interstage BPMは、オペレーティングシステムやデータベースの相違からアプリケーションを隔離する標準アプリケーションサーバへ配

備されます。Interstage BPMは、アプリケーションサーバの機能を利用して、たとえばクラスタリング、ロードバランシング、フェイルオー

バーなどの機能を提供します。

サーバは、アプリケーションサーバ内で動作するEJBの集合体として構成され、アプリケーションサーバの機能を活用します。InterstageBPMのEJBは、コンテナトランザクションに参加し、サーバや任意のクライアントアプリケーションが同じトランザクションに参加できるよう

にします。コンテナベースのトランザクションによって、サーバの一貫性が保たれます。

以下のセクションでは、EJBについてさらに詳しく説明します。

ユーザエージェント(ファサード)

ユーザエージェントEJB(UA bean)によって、クライアントはInterstage BPMシステムにログインでき、クライアントとInterstage BPMとの認

証、対話を行います。まず、クライアントがUA beanの作成を要求します。次に、サーバがUA beanを作成して、UA beanへのハンドルを

クライアントに返します。そして、クライアントがサーバログインに必要なユーザ名、パスワード、サーバ名を提供します。この情報は、

Interstage BPMのローカルユーザ管理機能、または接続しているディレクトリサービスの機能を使って認証されます。

ユーザエージェントインスタンスは、サーバへのログインセッションを表し、特定のログインセッションの情報を保持します。ユーザエー

ジェントは、クライアントのエージェントとしてクライアントに代わり、他のInterstage BPMコンポーネントに対して、bean要求やメソッド呼び

出しを行います。つまり、モデルはプロセス定義、プロセスインスタンス、ワークアイテム、ディレクトリ、その他オブジェクトにアクセスす

るゲートウェイとして機能します。こうしたことから、UA beanは、サーバとモデルの間のインタフェースを表すファサードとも呼ばれます。

UA beanには、プロセス定義、プロセスインスタンス、ワークアイテムオブジェクトに対する様々なフィルタを解釈するという機能もありま

す。クライアントがログアウトを選択すると、ユーザエージェントは、関連するクライアントに代わり保持するリソースに必要な、クリーンアッ

プを行います。さらに、UA beanはセッションの同期を実装しています。

- 3 -

Page 14: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

サーバは、Interstage BPMにログインする各クライアントに対して、UA beanの固有のインスタンスを要求します。サーバは、アプリケー

ションサーバを構成するEJBコンテナに対して、これらのインスタンスを要求します。サーバbeanは、UA beanのインスタンスを「作成」す

る、いわゆるファクトリ(工場)のようなものです。

実行エンジン - プロセス定義インタプリタ

プロセス定義インタプリタは、Interstage BPMサーバのコアです。Interstage BPMで定義したプロセスの実行を受け持ちます。サーバ

は、データベースアダプタと通信し、プロセスステートデータ、プロセスインスタンス、アクティビティ関連データ、プロセス履歴情報を維

持管理します。サーバは、データベース要求キューを管理します。

エンティティbeanには2種類あり、プロセス定義とインスタンスの情報を保持するデータオブジェクトを表しています。プロセスを実行す

ると、プロセス定義EJBが作成され、次にプロセスインスタンスbeanが作成されます。どちらのbeanも、bean管理永続性およびコンテナト

ランザクションという、アプリケーションサーバの機能を実装しています。

これらのbeanモデルには公開されません。モデルに対するすべての要求はUA beanを経由して行われます。

現在の状況に関する情報といったプロセスデータは、データベースに格納され、要求に応じてデータベースから読み出されます。サー

バは、データベースと通信し、プロセスステートデータ、プロセスおよびアクティビティ関連データを維持管理します。

メッセージング

Message Driven bean(MDB)とJavaクラスライブラリの組み合わせによって、Interstage BPMのタイプシステム(Metaモデル)が実装され

ます。プロセス実行イベントは、MDBが処理するJMSメッセージ内にカプセル化されます。Interstage BPMは、デフォルトのアプリケー

ションサーバ機能を利用します。

Interstage BPMでは、Message Driven bean(MDB)は、非同期メッセージを用いてサーバコンポーネント間に情報のフローを作ります。

たとえば以下のようなMDBがあります。

・ EnactmentMessage Bean:プロセスインスタンスが作成されると、このbeanはメッセージを生成してクライアントに通知します。

・ Email Dispatcher bean:クライアントへのEmailメッセージを扱います。

・ Action Agent bean:アクションエージェントを扱います。

カスタムEJB

任意のアプリケーションに、Interstage BPMサーバと同じアプリケーションサーバインストール環境上で動作するEJBを実装できます。

カスタムEJBはModel APIを使い、Interstage BPMのEJBはJava Actionを使ってカスタムEJBを呼び出せます。

ユーザおよびグループ管理

Interstage BPMで作業するすべてのユーザにユーザアカウントが必要です。また各ユーザは、1つ以上のグループに割り当てられてい

る必要があります。グループを使って、プロセスのタスクを実行する担当者を決定します。

Interstage BPMには、独自のユーザ管理とグループ管理の機能があります。また、Interstage BPMからディレクトリサービスに接続する

ことも可能です。Interstage BPMのローカルユーザストアとディレクトリサービスのどちらでユーザを管理するかは、サーバの配備時に

選択できます。グループは、Interstage BPMのローカルグループストア、ディレクトリサービス、または両方のシステムで管理できます。

接続性

Interstage BPMのアーキテクチャは、サードパーティ製品との統合を考慮に入れています。サーバは、「アダプタクラス」を介して他のコ

ンポーネントと通信できます。アダプタは、サーバを共通のインタフェースと通信させるコンバータとして動作します。Interstage BPMで

は、以下への接続が可能です。

・ JDBC規格を用いたデータベース(DB)アダプタ。サーバは、データベースサーバとの間の通信手段を提供します。データベース

は、すべてのプロセス情報を一貫して格納し、維持管理します。DBアダプタは、サーバ内オブジェクトを一貫性のある多様な形式

に変換させます。Interstage BPMには、JDBCおよび複数のストアドプロシージャを用いて、関連するデータベース内の構造を持続

させるアダプタがあります。Oracle、Microsoft SQL Server、Symfowareサーバを使用できるように設定する、初期化スクリプトが利

用可能です。

・ Interstage BPMの特定のインタフェースを実装して、ユーザグループを個人の一覧に拡張するディレクトリサービス(Dir & DD)ア

ダプタ。実行エンジンは、これを実行時に使ってワークアイテムを渡す相手を決定します。ディレクトリサービスアダプタは、LDAP規格を使っています。現時点では、Microsoft® Active DirectoryおよびSun Java System Directory Serverをサポートしています。

ユーザエージェントが、DD Framework Adapterを使ってログイン時にユーザを認証します。

- 4 -

Page 15: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

・ Interstage BPMシステムと、標準的コピーおよび転送プロトコルを使う外部のファイルシステムをインタフェースで接続するために使

われるDMSアダプタ。フォーム、添付文書、プロセス定義などは、ファイルシステムに格納できます。こうしたドキュメントのロケータ

は、プロセスインスタンスの添付文書の属性に格納されています。Interstage BPMは、WebDAVプロトコルを介してアクセスできる

ファイルシステムやファイルストアに格納されたドキュメントにアクセスしたDMSアダプタを備えています。他のドキュメント管理シス

テムにアクセスするには、カスタムDMSアダプタが必要です。

・ SMTP規格を使ったメッセージ。Interstage BPMイベントへのレスポンスとして、サーバからSMTPメールサーバへEmailを送信でき

ます。

・ 外部システム。

- Java ActionとJavaScript:CRMやERPシステムのような任意の外部システムへの接続のために、Java Actionを実装できます。

Java Actionはワークフローエンジンの拡張機能です。

Java Actionは、Interstage BPMサーバに実行中に特定のJavaメソッドを呼び出す方法を提供するプロセス定義のデータ構造

です。これらのメソッドの呼び出しは、プロセスの実行をカスタマイズし、Interstage BPMサーバの機能範囲外でのJavaビジネス

メソッドの実行を可能にします。Java Actionによって、アプリケーションの統合が容易になり、外部アプリケーションやアダプタ

の呼び出しが速くなります。

- エージェント:Interstage BPMのエージェントが設定され、自動的かつユーザの代わりに非同期に動作します。エージェントを

使って、会社のファイアウォール内外を問わず、レガシーシステムやWebサービスなどの外部システムにアクセスできます。エー

ジェントを使って、これらの外部サービスをInterstage BPMのプロセスインスタンスに組み込めます。このJava統合方式は、複数

の再試行が必要な場合に特に便利です。

2.2.2 Interstage BPMのWeb層およびクライアント層

Model APIは、サーバのアブストラクト層で、単独の統合APIをサーバに提供します。Model APIは、クライアントプロセスで動作し、サー

バへの通信すべてを処理します。

Interstage BPMは、StudioやBPMコンソールのような複数のクライアントアプリケーションを備えています。

Studioを除いて、クライアントはservletエンジンで動作し、Webブラウザを使ってアクセスします。クライアントは、Javaユーザインタフェー

スクラスの組み合わせによって構成されています。そのようなクライアントコンポーネントは、2層で構成されています。1つはモデル層

(Model APIを使用)、もう1つはユーザインタフェース層(Javaユーザインタフェースクラスを使用)です。モデル層は、クライアントオブ

ジェクトのステートをカプセル化し、サーバと対話します。Model APIを使って、クライアントアプリケーションおよびユーザアプリケーショ

ンを開発できます。

Studioは、別途インストール可能なスタンドアロン型のプロセスデザインツールです。Studioは、アプリケーションサーバの機能からは独

立しています。Studioは、Web層を通してInterstage BPM サーバと相互に作用します。

Webサービス機能はweb層にあります。この機能によって、多数の定義済みSOAP(Simple Object Access Protocol)要求を受け取り、XML形式の結果を使って応答できます。このポートを経由して、ほとんどのInterstage BPMの共通操作にアクセスできます。

Interstage BPMは、非同期Web Serviceインタフェースとして知られる、もう1種類のWebサービスインタフェースをサポートしています。

これは、プロセスインスタンスや他の長時間動作プログラムにアクセスする標準的な方法を実装したものです。この規格は、AsynchronousService Access Protocol(ASAP)として知られています。

Interstage BPM Webサービスの詳細については、『Interstage Business Process Manager サーバ・コンソール導入ガイド』を参照してくだ

さい。

2.3 Interstage Analytics連携

Interstage Analyticsは、Interstage BPMサーバのプロセスデータの分析と評価に使います。Interstage BPM 配備ツールによって、

Interstage Analyticsが評価するイベントをInterstage BPMのデータベースへ書き込むかどうかを設定できます。

以下の図は、関連するアプリケーションの相互作用を表しています。

- 5 -

Page 16: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

図2.3 Interstage Analytics連携

Interstage BPMサーバ、Interstage Analyticsセンサ、Interstage Analyticsサーバは、同一の装置または同一ネットワーク上の異なる装

置にインストールできます。

配備中のイベント送信の設定方法については、『Interstage Business Process Manager サーバ・コンソール導入ガイド』を参照してくださ

い。

センサの設定とInterstage Analyticsの使用方法については、Interstage Analyticsのマニュアルを参照してください。

2.4 CentraSite連携

CentraSiteは、連携ソフトウェアで生成されたメタデータ、Webサービスの説明、およびアプリケーション固有のデータを管理するほか、

ネイティブXML形式および非XML形式の文書を一元的に格納する場所として機能します。

CentraSiteが提供する以下の機能をInterstage BPMから使用できます。

・ UDDIレジストリ

・ WebDAVリポジトリ

UDDIは業界標準の仕様であり、Webサービスを使用するための公開、検索、およびステージングのようなレジストリ公開機能を提供し

ます。Interstage BPMが提供するWebサービス機能の公開、検索、および取得は標準のUDDIインタフェースに基づいているため、

Interstage BPMからCentraSiteをUDDIレジストリ実装として使用できます。

WebDAVもまた業界標準の仕様であり、XPDLなどの標準フォーマットで保存されている開発成果物の保存と取得に使用できます。

Interstage BPMにはメタデータをWebDAVで公開する機能が用意されているため、Interstage BPMからCentraSiteをWebDAVリポジトリ

実装として使用できます。

- 6 -

Page 17: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

2.5 Interstage BPMをサービスとして提供する(SaaSモード)Interstage BPMには、SaaS (Software as a Service)モードがあります。SaaSモードでInterstage BPMを使用すると、複数のテナントを作

成して、ユーザへそれらをリースできます。ユーザは、それらをサービスとして使用できます。なお、以下に注意してください。

・ Interstage BPMをインストールする際に、SaaSモードでInterstage BPMを使用するかどうかを決めることができます。

・ Interstage BPMをサービスとしてリースする組織をサービスプロバイダと呼びます。

・ サービスプロバイダが、サービスとして提供するInterstage BPMをテナントと呼びます。

・ サービスプロバイダが、テナントを管理するためのユーザをスーパーユーザと呼びます。スーパーユーザの権限は、テナント管理

に制限されます。テナント管理のために、Interstage BPM テナント管理コンソールを使用できます。

- Interstage BPM テナント管理コンソールのインストール方法については、『Interstage Business Process Manager サーバ・コン

ソール導入ガイド』を参照してください。

- Interstage BPM テナント管理コンソールの利用方法については、Interstage BPM テナント管理 コンソールのオンラインヘルプ

を参照してください。

- Interstage BPMの管理については、『Interstage BPM サーバ管理者ガイド』を参照してください。

・ スーパーユーザは、Interstage BPM ワークフロー機能の管理および利用ができません。

・ サービスプロバイダは、自身がInterstage BPMを使用するために、Interstage BPMをインストールする際に、デフォルトテナントを作

成する必要があります。このとき、デフォルトテナントに、システムアプリケーションが作成されます。

・ 非SaaSモードで、Interstage BPMを使用する場合、以下に注意してください。

- インストールの際に、スーパーユーザを設定する必要があります。スーパーユーザの権限は、Interstage BPMサーバの管理だ

けに制限されます。

- インストールの際に、デフォルトテナントを設定する必要があります。デフォルトテナントを通して、Interstage BPMサーバの機

能を使用します。デフォルトテナント以外のテナントは、作成できません。

・ Interstage BPMを使用する場合、SaaSモードまたは非SaaSモードに関わらず、すべてのワークフローの要素の操作は、アプリケー

ションに含まれます。このため、プロセス定義かプロセスインスタンスを作成する前に、アプリケーションを選択する必要があります。

SaaSモードでは、必ずアプリケーションを選択しなければなりません。非SaaSモードでは、アプリケーションの選択を省略できます。

- 7 -

Page 18: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

第3章 Interstage BPMの基礎知識

ワークフローアプリケーションの開発者およびユーザは、ワークフローアプリケーションの開始から終了までの間に以下の操作の一部、

またはすべてを行います。

・ Interstage BPMサーバへの接続

・ プロセス定義の構築

・ 新しいプロセスインスタンスの開始

・ プロセスインスタンスの変更

・ Java Actionでの変数の変更

・ プロセスインスタンスへの添付文書の関連付け

・ アクティビティの矢印オプションの実行

・ プロセス定義リスト、プロセスインスタンスリスト、およびワークアイテムリストの取得

・ プロセスインスタンスとアクティビティの状態の取得

これらの操作の働きは、この章で詳しく解説します。

3.1 プロセス定義とプロセスインスタンス

ワークフローは、複雑なプロジェクトにおける共同作業や、作業調整の中心となります。この共同作業の基礎となるのがプロセス定義で

す。プロセス定義は、業務で扱う情報と、作業手順および作業判断の条件を提供します。

プロセスインスタンスは、プロセス定義に基づいて実際の作業状態を表したものです。プロセスインスタンスはプロジェクト内の作業を

進めるために、必要となる情報を提供します。すべての業務担当者が適切な時間に適切な作業情報を取得していること、およびすべ

ての人が定められた手順に従って作業情報を使用していることを保証します。ビジネスにおいては、「作業情報」は一般的に文書や

データで構成されています。

プロセスインスタンスはプロセス定義内にデザインされている構造や機能を反映するので、プロセス定義に従属するオブジェクトとプロ

セスインスタンスは、密にやりとりを行います。ここでは、まずプロセス定義に関連するクラスに焦点をあてて、システム全体を理解する

ための基礎的な知識について説明します。

3.2 プロセス定義

プロセス定義は、デザイン時に設定されるプロセスインスタンスのすべての状況をカプセル化します。状況には、定義済属性、プロセ

スインスタンスが実行されたときに行われる操作、実行時に設定される変数データの定義、およびプロセス定義の状態が含まれます。

プロセス定義の属性

プロセス定義の属性には以下のものが含まれます(ただし、以下のものに限定はされません)。

・ プロセス定義の状態

・ プロセス定義識別子

- ID

- バージョン

- 所有者

- 名前

- タイトル(省略可)

- 説明(省略可)

・ フローコントロール

- ノード

- 8 -

Page 19: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

- 矢印

・ プロセス定義の所有権(ロール)

・ 変数データ

- ユーザ定義属性(以降、UDAと呼びます。)

・ Java Action

- 初期化アクション

- 完了アクション

- エラーアクション、一時停止時アクション、再開時アクション、中止時アクション

・ タイマーアクションを含むタイマー

注意

これらの属性はデザイン時にプロセス定義に追加されます。ただし、そのほとんどは、プロセス定義がプロセスインスタンスを作成し、プ

ロセスインスタンスが実行されるまで特別な意味はありません。

3.2.1 プロセス定義の状態

プロセス定義は、以下の状態のいずれかになっています。

・ ドラフト

・ 公開済

・ プライベート

・ 廃止

・ 削除済

ドラフト状態のプロセス定義は、デザイン中のプロセス定義です。ドラフトプロセス定義の所有者だけが、そのプロセス定義からプロセ

スインスタンスを作成することができます(テスト用として)。管理者 (テナント所有者)がドラフトプロセス定義を公開すると、一般ユーザが

プロセス定義からプロセスインスタンスを開始できるようになります。ユーザが実行中のプロセスインスタンスを変更すると、そのプロセ

スインスタンス専用にプライベートプロセス定義が作成されます。

公開済みのプロセス定義を編集することはできませんが、ドラフト状態にあるプロセス定義の新しいコピーを作成することが可能です。

プロセス定義の新しいコピーは、公開済みになるまでは編集可能です。

図3.1 プロセス定義の状態

- 9 -

Page 20: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

公開済みプロセス定義を回収したい場合、管理者はプロセス定義の状態を公開済から廃止に変更することができます。プロセス定義

を削除したい場合、管理者はその状態を削除済に変更することができます。ドラフトとプライベートのプロセス定義を削除すると、シス

テムから物理的に削除されます。公開済または廃止のプロセス定義を削除すると、システムからは物理的に削除されませんが、状態

の変更はできなくなります。新しいバージョンをドラフト、プライベート、公開済、および廃止状態のプロセス定義から作成できますが、

削除済のプロセス定義からは作成できません。

注意

プライベートプロセス定義を現在使用されているプロセス定義と将来入れ替えたいと考えている場合は、単純にプライベートプロセス

定義の新しいバージョンを作成してください。新しいプロセス定義には、同じ名前でバージョン番号が上がり、ドラフト状態となります。管理者

(テナント所有者)だけがドラフトプロセス定義の状態を公開済に変更できます。ドラフト状態のプロセス定義を公開すると、自動的に、

元のプロセス定義の状態が公開済から廃止に変更されます。

各プロセス定義ファミリ(つまり、同じ名前で別のバージョン番号のプロセス定義)は、公開済のプロセス定義を1つだけもつことができま

す。

3.2.2 プロセス定義識別子

プロセス定義は次の属性で識別されます。

・ ID

・ バージョン

・ 所有者

・ 名前

・ タイトル(省略可)

・ 説明(省略可)

IDはLong型の変数で、プロセス定義を一意に取り扱うために、Interstage BPMサーバから自動的に割り当てられます。バージョン番号

は自動的に割り当てられます。所有者はプロセス定義の作成者です。

そのほかの3つの識別子は省略可能です。アプリケーションをデザインする場合、必要であれば、Model APIのPlanインタフェースから

名前、タイトル、説明にアクセスすることができます。

プロセス定義の版数管理

新しいプロセス定義には、バージョン番号1.0が割り当てられます。たとえば、Purchase Order v1.0などです。プロセス定義の新しいバー

ジョンは、名前を変更せずに作成することができます。プロセス定義をコピーした場合、プロセス定義の新しいバージョンは、次のバー

ジョン番号になります。たとえば、Purchase Order v2.0などです。

注意

アプリケーションが異なれば、プロセス定義は同じ名前のプロセス定義を作成することができます。

3.2.3 ワークフローエレメント

ワークフロープロセスは、矢印によって接続されたノードのネットワークです。ノードと矢印はワークフローエレメントと呼ばれます。

ノードはプロセス内の手順を表します。手順は、プロセスの関係者に特定のタスクを割り当てるアクティビティを表す場合も、プロセスフ

ローに関する決定が行われる場所を表す場合もあります。後者の場合、ユーザによるアクションは不要です。

ワークフローエレメントには、少なくともID、名前、タイトル、および説明という属性があります。IDは、すべてのワークフローエレメントが

必ず持っていなければならない属性です。Interstage BPMサーバは、ワークフロープロセス内の各エレメントを識別するために、自動

的に固有のIDを割り当てます。

すべてのノードがもつ属性に加えて、特定のノードでは、そのノード固有のプロパティがあります。これらのプロパティは、そのノードタ

イプが目的とする動作をするために必要となります。

- 10 -

Page 21: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

矢印は、プロセスインスタンスの1つのノードから別のノードへのフローをつなぐ接続子です。イベントのフローは、単純に1つのノードか

ら次のノードへ、フロー上の矢印を通っていきます。矢印には、つなぎ先ノードの状態を変えること以外の機能はほとんどありません。

矢印には、ID、名前、および説明という、簡単な識別子があります。IDのデータ型は「long」で、プロセス定義に一意のハンドルを提供

するために、Interstage BPMサーバから自動的に割り当てられます。

説明は省略可能です。アプリケーションをデザインする場合、必要であれば、Model APIのPlanインタフェースからID、名前、説明の

フィールドにアクセスすることができます。

3.2.4 Java Actionプロセスインスタンスは、それらを実行するInterstage BPMサーバ上に存在しており、どのようなクライアントであってもプロセスインスタ

ンスを通じてユーザとやりとりできます。Java Actionは、プロセスインスタンスが外部と通信できるメカニズムを提供します。根本的に、

Java Actionは、Interstage BPMがプロセス実行の一部として呼び出すことができるよう構成されている、静的なJavaメソッドにすぎませ

ん。

Interstage BPMは、さまざまなタイプのJava Actionを提供します。主にJava Actionはノードで定義されています。たとえば、プロセス定

義全体で定義されているもの、他のJava Actionで定義されているものなどがあります。

・ 開始アクション:開始アクションは、ノードがタスクを実行する前に評価されます。したがって、このJava Actionは、ノードがタスクを実

行する前にそのノードに関連付けられている値を設定または初期化するために使用されます。

・ 終了アクション:終了アクションは、ノードがタスクを終了した後、プロセスインスタンスが別のノードに移動する前に実行されます。

したがって、このJava Actionは、目的の作業が終了した後、ノードに関連付けられた値を事後処理するまたは分析するために使用

されます。

・ ロールアクション:ロールアクションは、タスクの担当者の決定後に評価されます。したがって、このJava Actionは割り当てられたグ

ループと連動したタスクの担当者リストを動的に出力するために使用されます。

・ プロセス実行時の特定のエラー状況に対処するのに使用します。エラーアクションは、プロセス定義全体、各ノード、そして、他の

Java Actionで、定義することができます。すなわち、他のJava Actionの実行中に起きたエラーに対処する場合です。

・ Interstage BPMの外部システムにアクセスする他のJava Actionで定義することができます。たとえば、データベースです。データ

ベース内で新しく追加した列を削除する場合など、トランザクションの除去や、ロールバックのトランザクションで関連するすべての

システムの一貫した状況を確保するのに役立ちます。

詳細については、「6.3.1 Java Actionsのタイプ」を参照してください。

3.2.5 ロールユーザグループ

ユーザグループと担当者の割当ては、ワークローシステムの基本的な機能です。ユーザグループは、一組織に対して与えられる名前

で、一般的にはユーザのグループです。システムの設定により、Interstage BPMのローカルグループストア内、Directory Service内、も

しくは、両方のシステムで、ユーザグループは定義されています。ディレクトリサービスの機能を利用すると、ユーザグループはコン

ピュータ、ソフトウェアプログラム、パラメータ化された関数呼び出し、他の組織に対してもマッピングすることができます。

通常、ユーザグループはビジネスや組織のニーズに合わせてグループ化したユーザのグループに与えられる名前です。一般的には、

組織内の一人以上で行われる作業の担当グループにロールを割り当てます。そのほか、権限、職責、スキルまたは専門分野などに

よってユーザをグループ化することができます。ワークフローエンジンは、ロールを文字列の変数として識別しますが、ロールに割り当

てられたグループのメンバーが何かということは識別しません。

ユーザが関与するアクティビティノードの場合はユーザグループを割り当てることが可能です。現在のInterstage BPMでは、Activityノードと

Voting Activityノードだけがこのプロパティをサポートしています。

3.2.6 フォーム

多くのビジネスプロセスには、業務の情報に基づいた決定とアクションが伴います。ユーザは、フォームを持つアプリケーションを作成

し、そのフォームから業務の情報にアクセスします。フォームはプロセスのデザイン時にプロセス定義に追加され、添付文書は実行中

のプロセスインスタンスに追加されます。

フォームはユーザ定義属性に保存されたデータや外部データソースからのデータを表示したり、レポートしたりするために使用します。

また、ユーザがプロセスインスタンスや外部データソースのデータの追加・変更などを行う場合にも使用します。フォームで変数データ

を使用する方法については、「3.2.9 ユーザ定義属性」を参照してください。

- 11 -

Page 22: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

フォームはWebサーバ上に保存されるアプリケーションですが、Interstage BPMはプロセス定義にフォーム属性として、アプリケーショ

ンで使用するフォームのURLを登録することができます。フォーム属性は、Startノード、Activityノード、およびVoting Activityノードと

関連付けることができます。

プロセスインスタンスを開始するか、ワークアイテムを表示する時に、ユーザアプリケーション(Model API)を使ってフォーム属性の情報

を取得できます。

3.2.7 タイマー

ほとんどのビジネスプロセスは、納期によって存続が決定します。納期には、締切日や支払い利息、マイルストーン、遅延、プロジェク

ト管理、休暇予定、個人的な集まりなどがあります。

Interstage BPMでは、納期が満了時に特定のアクションをトリガするタイマーを作成できます。タイマーには、Activityノードが活性化さ

れた場合に実行が開始されるActivityノードレベルタイマー、またはタイマーを含むプロセス定義から新しいプロセスインスタンスが作

成されるたびに実行が開始されるプロセスレベルタイマーがあります。

タイマーは、UDAで与えられる 時間およびアクションのパラメータで制御されます。タイマーは、Java Actionから設定します。タイマー

の納期満了や発行時刻は、時刻を指定する絶対指定や(アクティビティやプロセスの開始のような)他イベントからの相対指定です。タ

イマーでは、定期的にトリガアクションを指定することも可能です。また、タイマーは、エスカレーション(追加のユーザリストにアクティビ

ティを割り当てる)やメールの送信を含む、さまざまなアクションを実行できます。

以下のタイマー種別が利用可能です。

・ 相対時刻タイマー:相対時刻タイマーは、期限切れ をアクティビティやプロセスの活性化された時間に基づいて計算します。相対

時刻タイマーは一度だけ活性化されます。

・ 絶対時刻タイマー:絶対時刻タイマーは、期限切れを絶対時刻で設定します。設定値は1970年1月1日、00:00:00以降で、ミリ秒単

位に指定します。

・ 定期タイマー:定期タイマーは、繰り返し動作する相対時刻タイマーです。初回のタイマー起動時刻は、アクティビティやプロセス

の活性化された時刻との比較で決定されます。次回以降のタイマー起動時刻は、 後にタイマーが起動した時刻との比較で決定

されます。

・ ビジネス定期タイマー:ビジネス定期タイマーは、繰り返し動作するビジネス相対時刻タイマーです。初回のタイマー起動時刻は、

アクティビティやプロセスの活性化された時刻との比較で決定されます。次回以降のタイマー起動時刻は、 後にタイマーが起動

した時刻との比較で決定されます。

・ ビジネス相対時刻タイマー:ビジネス相対時刻タイマーは、期限切れをアクティビティやプロセスの活性化された時間に基ついて計

算します。また、記述に[ビジネスカレンダー]を使用します。ビジネス相対時刻タイマーは一度だけ活性化されます。

ビジネス定期タイマーとビジネス相対時刻タイマーはビジネスカレンダーを使用します。Model APIを使用してタイマーを定義する詳細

については、「6.16 タイマーの使用」を参照してください。ビジネスカレンダーを構成する方法の詳細は、『Interstage BPMサーバ 管理

者ガイド』を参照してください。

3.2.8 プロセス定義の所有権

プロセス所有権の属性は、各個人およびグループに対してプロセス定義、および、プロセスインスタンス内の許可レベルの設定を可能

にします。プロセス所有権の目的は、編集権限を与えられたユーザを構造的に識別することです。

プロセス定義の所有者は、そのプロセス定義の作成者です。プロセス定義からプロセスインスタンスが作成される場合、デフォルトで

は、プロセス定義の所有者はプロセスインスタンスの所有者にもなります。ただし、プロセス定義とプロセスインスタンスの所有権は、2つの異なる属性です。

プロセス定義をデザインしている間、プロセスの所有権はユーザグループの担当者に直接割り当てられるか、ロールアクションの使用

によりプログラムで割り当てられます。ロールアクションは、以下の表に示すように相互作用します。

ユーザグループ ロールアクション プロセスインスタンスの所有者

未設定 未設定 プロセス定義の所有者

設定 未設定 ユーザグループで設定されたユーザ

未設定 設定 ロールアクションで設定されるユーザ

設定 設定 ・ ユーザグループとロールアクションで同じユーザを所有者に設定した場合、設

定したユーザがプロセスインスタンスの所有者となります。

- 12 -

Page 23: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

ユーザグループ ロールアクション プロセスインスタンスの所有者

・ ユーザグループとロールアクションで異なるユーザを所有者に設定した場合、

または、明示的に設定しなかった場合、プロセス定義の所有者がプロセスイン

スタンスの所有者となります。

Interstage BPMサーバがディレクトリサービスにアクセスして、ユーザを認証し、ユーザに割り当てられたグループや、ユーザがプロセ

スインスタンス、アクティビティ、およびユーザ属性にアクセスしたり操作したりする範囲を識別します。グループを使用すると、人事異

動があった場合にすべてのプロセス定義を変更する必要がありません。Interstage BPMのローカルグループストア、もしくは、ディレクト

リサービスよりグループのメンバーを更新してください。

3.2.9 ユーザ定義属性

プロセス定義には、ユーザ定義属性として、UDAを割り当てることが可能です。UDAの定義は、プロセス定義から作成されたプロセス

インスタンスと関連付けられているデータアイテムを示します。したがって、プロセスインスタンス固有の値はこの定義に保存することが

できます。値は、プロセスインスタンスの実行開始時、または実行中に割り当てられます。変数データは、関連付けられているすべての

プロセスインスタンスに対してグローバルです。すべてのユーザが変数データにアクセスして変更することができます。

デザイナーは、プロセス定義のデザイン時に、プロセスインスタンスで使用するデータ型を決定し、データを変数に割り当てる方針を

作成します。

データはJava Actionを使用して変更することも可能です。Java Actionの使用に関しては、「6.1 Interstage BPMと外部アプリケーション

の統合」を参照してください。

3.2.10 ノードタイプ

Interstage BPMは、様々なノードタイプをサポートしています。以下の表に、サポートしているノードタイプと属性の概要を示します。す

べてのノードタイプに共通する属性は含まれていません。

ノードタイプ 担当者 ロールア

クション

開始アク

ション

終了アク

ション

中止時アク

ション、

一時停止時

アクション、

再開時アク

ション

エラーア

クション

タイマー トリガ フォーム

Startノード - - - - - - - - 対応

Exitノード - - - - - - - - -

Activityノード 対応 対応 対応 対応 対応 - 対応 対応 対応

VotingActivityノード

対応 対応 対応 対応 対応 - 対応 - 対応

Delayノード - - 対応 対応 対応 - 対応 - -

Triggerノード - - 対応 対応 対応 - 対応 対応 -

ANDノード - - - 対応 対応 - - - -

ORノード - - - 対応 対応 - - - -

Conditionalノード - - 対応 - 対応 - - - -

Subprocessノード - - 対応 対応 対応 - - - -

RemoteSubprocessノード

- - 対応 対応 対応 対応 - - -

Chained-Processノード

- - 対応 対応 対応 - - - -

Compound Activityノード

対応 対応 対応 対応 対応 - - - 対応

- 13 -

Page 24: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

次に、それぞれのノードタイプの詳細について説明します。

Startノード

Startノードは、プロセスの開始を示すノードです。1つのプロセスは1つのStartノードしかもつことができません。

サポートしていない機能: このノードタイプは、ロールアクション、タイマー、トリガをサポートしていません。

留意事項:

・ Startノードが動作するためにはプロセス定義からプロセスが生成(Create)されている必要があります。

・ プロセスインスタンスの実行はStartノードから開始されます。プロセスインスタンスが開始されると、Startノードにイベントが送られま

す。

・ Startノードは直ちにすべての外向き矢印にイベントを送ります。

Exitノード

Exitノードは、プロセスの終了を示すノードです。

1つのプロセスは1つ以上のExitノードをもつことができます。プロセス定義には、別のプロセスの完了モードをモデル化した複数のExitノードが存在する場合があります。プロセス定義が多数ある場合は、複数のExitノードを単純化した図形で示すことができます。

一般的なプロセス定義では、Exitノードには1つ以上の内向き矢印があり、外向き矢印はありません。

サポートしていない機能: Exitノードは、全種類のロールアクション、タイマー、トリガをサポートしていません。

留意事項: プロセスインスタンスの実行はExitノードで停止します。プロセスインスタンスに複数のExitノードがある場合は、プロセスイン

スタンスの実行がExitノードの1つに到達すると、そのプロセスインスタンスは完了したと見なされます。

Activityノード

Activityノードは、人が業務を実行することで作業が完了する対話型ノードです。このノードが実行されると、プロセスインスタンス内で

イベントのスレッドが一時停止します。このスレッドは人が介入するまで再開されません。

Activityノードは、外部エージェント(ほかのデバイスなど)が実行するアクティビティを代行することもできます。

プロセスインスタンスには、任意の数のActivityノードを指定できます。1つのActivityノードには、1つ以上の内向き矢印と、1つ以上の

外向き矢印があります。

サポートしている機能: このノードは、開始アクション、終了アクション、ロールアクション、タイマー、およびnode-levelトリガをサポートし

ています。さらに、管理者がこのノードが含まれるプロセスインスタンスの破棄、一時停止、もしくは、再開する場合に有効となるJava Actionセットを定義することができます。

留意事項:

・ 割り当てられたグループと担当者の関係は下表のようになります。

グループ JavaActionで指定されたユーザ 担当者

設定 未設定 ユーザグループまたはユーザグループに含まれる

個々のメンバー

設定 設定(グループに含まれるユーザを指定) グループとロールアクションで設定されたメンバー

設定 設定(グループに含まれないユーザを指定) プロセスの所有者

未設定 設定 ロールアクションで指定されたメンバー

・ このノードについて定義されたすべてのタイマーは活性化されます。

・ すべての担当者のワークアイテムが作成されます。

・ 1人の担当者(すべての担当者ではありません)がActivityノードに関連付けられたタスクを完了すると、その担当者はタスクが完了

したことを知らせることで(たとえば、ボタンをクリックするなど)プロセスインスタンスを再び始動させます。これはワークアイテムのコ

ミットと呼ばれます。

・ このノードのそれぞれの外向き矢印は、このノードからどのプロセスインスタンスに進むかを表しています。担当者は、ビジネスプロ

セスに応じて方向を表す矢印を選択することにより、プロセスインスタンスを特定の方向に進めることができます。

- 14 -

Page 25: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

・ ワークアイテムがコミットされると、終了アクションが評価され、活性中のプロセスタイマーはすべてキャンセルされます。また、イベ

ントは選択された矢印に送られます。

Voting Activityノード

Voting Activityノードでは、投票ルールを使用して1位の矢印(アクティビティの外向き矢印)を決定します。すべてのVoting Activityノードについて、投票ルールが指定されている必要があります。

プロセスインスタンスには、任意の数のVoting Activityノードを指定できます。1つのVoting Activityノードには、1つ以上の内向き矢印

と、1つ以上の外向き矢印があります。

サポートしている機能: このノードでは、開始アクション、終了アクション、ロールアクション、およびタイマーをサポートしています。さら

に、管理者がこのノードが含まれるプロセスインスタンスの破棄、一時停止、もしくは、再開する場合に有効となるJava Actionセットを定

義することができます。

留意事項:

・ 内向き矢印からイベントを受け取ると、Voting Activityノードは実行状態になります。実行状態の間、内向き矢印から受け取ったイ

ベントは無視されます。ノードに一覧表示されているユーザグループを評価できない場合、ノードとそのプロセスインスタンスはエ

ラー状態になります。

・ 実行状態になるとVoting Activityノードは開始アクションを評価します。

・ ユーザグループと担当者の関係は下表のようになります。

ユーザグ

ループ

JavaActionで指定されたユーザ 担当者

設定 未設定 ユーザグループに設定されたメンバー

設定 設定(ユーザグループに含まれるユーザを

指定)ユーザグループとロールアクションで設定されたメン

バー

設定 設定(ユーザグループに含まれないユーザ

を指定)プロセスの所有者

未設定 設定 ロールアクションで指定されたメンバー

・ このノードについて定義されたすべてのタイマーは活性化されます。

・ すべての担当者のワークアイテムが作成されます。

・ 1人の担当者(すべての担当者ではありません)がVoting Activityノードに関連付けられたタスクを完了すると、その担当者はタスク

が完了したことを知らせることで(たとえば、ボタンをクリックするなど)プロセスインスタンスを再び始動させます。これはワークアイテ

ムのコミットと呼ばれます。

・ このアクティビティのそれぞれの外向き矢印は、このノードからどのプロセスインスタンスに進むかを表しています。担当者は、ビジ

ネスプロセスに応じて方向を表す矢印を選択することにより、プロセスインスタンスを特定の方向に進めることができます。

・ ワークアイテムがコミットされると、終了アクションが評価され、活性中のプロセスタイマーはすべてキャンセルされます。また、イベ

ントは選択された矢印に送られます。

注意

Interstage BPM Studioで使用できるカスタムノードがあります。APIレベルでは、Complex ConditionalノードはConditionalノードに相当

します。同様に、EmailノードとWeb ServiceノードはORノードに相当します。

Delayノード

Delayノードは、プロセスインスタンスの実行(またはプロセスインスタンス内の特定の実行スレッド)が指定された期間一時停止する、

ワークフロープロセス内のステップを表しています。

プロセスインスタンスには、任意の数のDelayノードを指定できます。1つのDelayノードには、1つ以上の内向き矢印と、1つ以上の外向

き矢印があります。

- 15 -

Page 26: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

サポートしている機能: 開始アクション、終了アクション、およびタイマーを必要に応じて使用することができます。複数のタイマーをこの

ノードに指定できますが、有効になるのは1つだけです。さらに、管理者がこのノードが含まれるプロセスインスタンスの破棄、一時停

止、もしくは、再開する場合に有効となるJava Actionセットを定義することができます。このノードでは、ロールアクションをサポートして

いません。

留意事項:

・ Delayノードが内向き矢印からイベントを受け取ると、すべての開始アクションを評価し、指定されたすべてのタイマーを活性化し

て、待機します。待機中に内向き矢印から受け取った追加のイベントは無視されます。

・ 活性中のタイマーが期限切れになると、ノードはほかのすべての活性中のタイマーをキャンセルし、すべての終了アクションを評

価して、すべての外向き矢印にイベントを送ります。

Triggerノード

Triggerノードは、外部イベントによって動作する一つのステップを表します。各Triggerノードには、データ(通常はXMLファイル)が外

部システムから届いた際実行する動作が定義されます。

一度データが届くと、トリガは定義に基づいてデータをUDA(ユーザ定義属性)にコピーします。

それから、矢印が選択されプロセスは次のノードに遷移します。

この種類のノードには人の操作は不要です。そのため、この種類のノードが活性化すると、ワークアイテムは1つも生成されません。ノー

ドで定義されたトリガによってのみ完了できます。

プロセス定義はいくつでもTriggerノードを所有できます。Triggerノードは1つ以上の内向き矢印を所有できますが、外向き矢印は1つのみです。

サポートしている機能:Triggerノードには1つ以上の定義済みのノードレベルのトリガ(選択トリガ)が必要です。必要に応じて開始アク

ション、終了アクション、およびタイマーが使用できます。さらに、管理者がこのノードが属するプロセスインスタンスを中止、一時停止、

または再開するときに、Java Action Setが活性化するように定義できます。この種類のノードはユーザ、ロール、またはエージェントに割

り当てられません。また、この種類のノードはロールアクションやフォームに対応していません。

留意事項:

・ Triggerノードを内向き矢印からイベントを受け取ると、すべての開始アクションも評価し、すべてのアクティブトリガを活性化し、待

機します。待機中は、内向き矢印からの追加イベントは無視されます。

・ 1つのアクティブトリガが実行されるとすぐに、ノードはすべての終了アクションを評価し、外向き矢印にイベントを送ります。

ANDノード

ANDノードは、プロセスインスタンスが複数の実行スレッドの完了を同期するための待ち合わせ処理を表しています。

プロセスインスタンスには、任意の数のANDノードを指定できます。1つのANDノードには、1つ以上の内向き矢印と、1つ以上の外向

き矢印があります。

サポートしている機能: 終了アクションを必要に応じて使用することができます。ANDノードは、開始アクション、ロールアクション、また

はタイマーをサポートしていません。

留意事項:

・ ANDノードは、少なくとも1つのイベントを各内向き矢印から受け取るまで待機します。それぞれの矢印からのイベントを待機してい

る間、同じ内向き矢印から送られる追加のイベントは無視されます。

・ それぞれの内向き矢印がイベントを受け取ると、内向き矢印で表されるすべての実行スレッドは同期されます。すべての終了アク

ションは評価され、イベントがすべての外向き矢印に送られます。

ORノード

ORノードは、ワークフローを複数の並行する分枝に分割する処理を表しています。プロセスインスタンスには、任意の数のORノードを

指定できます。

1つのORノードには、1つ以上の内向き矢印と、1つ以上の外向き矢印があります。

サポートしている機能: 終了アクションを必要に応じて使用することができます。ORノードタイプは、開始アクション、ロールアクション、

またはタイマーをサポートしていません。

- 16 -

Page 27: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

留意事項: このノードタイプでは、1つの内向き矢印からイベントを受け取るたびに終了アクションを評価し、すべての外向き矢印にイ

ベントを送ります。

Conditionalノード

Conditionalノードは、特定のUDAの値に応じて、プロセスの遷移先ノードを、複数の選択可能な方向から1つの進む方向を決定しま

す。このノードのすべての外向き矢印は、プロセスインスタンスが進むことのできるさまざまな方向を表しています。

プロセスインスタンスには、任意の数のConditionalノードを指定できます。1つのConditionalノードには、1つ以上の内向き矢印と、1つ以上の外向き矢印があります。

サポートしている機能: 開始アクションを必要に応じて使用することができます。さらに、管理者がこのノードが含まれるプロセスインスタ

ンスの破棄、一時停止、もしくは、再開する場合に有効となるJava Actionセットを定義することができます。このノードでは、ロールアク

ション、またはタイマーをサポートしていません。

留意事項:

・ どの方向に進むかは、指定されたUDAの値によって異なります。Conditionalノードでは、UDAの値と、それぞれの外向き矢印の

条件に関連付けられている定数の値を比較します。

・ Conditionalノードが内向き矢印からイベントを受け取ると、まず開始アクションを評価し、次に指定された順序で外向き矢印の条件

を評価します。

・ プロセスインスタンスは、指定されたUDAの値が条件を満たす 初の1つの外向き矢印にそって進みます。UDAの値がどの条件

も満たさない場合、プロセスインスタンスはデフォルトの外向き矢印にそって進みます。

Subprocessノード

Subprocessノードは、タスクがデータを外部プロセスへ渡し終え、そこでワークフロープロセスを呼び出して、 終的に結果を受け取る

ワークフロープロセス内のステップを表しています。

Subprocessノードは、既存のプロセス定義の再利用を支援します。1つのSubprocessノードは、デザイン済のプロセス定義のすべての

ノード、矢印、およびそのほかの特性にアクセスして、そのプロセス定義全体を表すことができます。

Subprocessノードを使用すると、ユーザは複雑なプロセスを、詳細を非表示にして重要な項目だけを表示したサブプロセスの単純な階

層ネットワークに整理することができます。プロセスとサブプロセスは独立しているため、同時にデザインすることができます。

Subprocessノードは、ほかの人に作業を委任する場合に使用することもできます。

プロセスインスタンスには、任意の数のSubprocessノードを指定できます。1つのSubprocessノードには、1つ以上の内向き矢印と、1つ以上の外向き矢印があります。

サポートしている機能:

・ 開始アクションと終了アクションを必要に応じて使用することができます。さらに、管理者がこのノードが含まれるプロセスインスタン

スの破棄、一時停止、もしくは、再開する場合に有効となるJava Actionセットを定義することができます。このノードでは、ロールア

クション、またはタイマーをサポートしていません。

・ このノードタイプに固有の属性には、サブプロセスインスタンスの作成、および親プロセスインスタンスとサブプロセスインスタンスの

間で移動するデータを定義するデータマッピング参照の作成に使用するプロセス定義のIDが含まれます。

・ 入力データマッピングでは、サブプロセスの実行前に、サブプロセスのUDAを親プロセスのUDAの値で初期化します。

・ 出力データマッピングでは、サブプロセスの完了後に、サブプロセスのUDAの値を親プロセスのUDAにコピーします。

・ サブプロセスとの間でコピーするデータがない場合、データマッピングを指定する必要はありません。

留意事項:

・ 内向き矢印からイベントを受け取ると、Subprocessノードは開始アクションを評価し、次に指定されたIDのプロセス定義を使用して

プロセスインスタンスを作成します。入力データマッピングが指定されている場合は、サブプロセスのUDAを初期化します。

・ 初期化が完了し、サブプロセスが開始されると、Subprocessノードはプロセスの完了まで待機します。待機中に内向き矢印からノー

ドが受け取ったイベントは、すべて無視されます。

・ サブプロセスが完了すると、出力データマッピングが指定されている場合は、サブプロセスから親プロセスにデータがコピーされ、

終了アクションが評価されます。次に、それぞれの外向き矢印にイベントが送られます。これで、それぞれの外向き矢印が実行さ

れます。

- 17 -

Page 28: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

Remote Subprocessノード

Remote Subprocessノードは、リモートコンピュータのワークフローサーバで実行中のワークフロープロセスに実行を渡してタスクが完了

する、ワークフロープロセス内のステップを表しています。リモートコンピュータのワークフローサーバは、たとえば、ほかのInterstage BPMサーバなどです。Subprocessノードと同様に、Remote Subprocessノードは、既存のプロセス定義を新しいプロセス定義内で再利用した

り、複雑なビジネスプロセスを単純化したり、作業をほかの人に委任したりするために使用できます。

プロセスには、任意の数のRemote Subprocessノードを指定できます。1つのRemote Subprocessノードには、1つ以上の内向き矢印と、1つ以上の外向き矢印があります。ただし、外向き矢印の名前は、リモートサブプロセスのExitノードの名前と一致している必要がありま

す。

サポートしている機能:

・ 開始アクションと終了アクションを必要に応じて使用することができます。さらに、管理者がこのノードが含まれるプロセスインスタン

スの破棄、一時停止、もしくは、再開する場合に有効となるJava Actionセットを定義することができます。Remote Subprocessの起動

に失敗した場合に、エラーJava Actionの割り当てもサポートします。このノードでは、ロールアクション、またはタイマーをサポートし

ていません。

・ このノードタイプに固有の属性には、リモートサブプロセスインスタンスの作成、および親プロセスインスタンスとリモートサブプロセ

スインスタンスの間で移動するデータを定義するデータマッピング参照の作成に使用するプロセス定義のURIが含まれます。

・ 入力データマッピングでは、リモートサブプロセスの実行前に、リモートサブプロセスのUDAを親プロセスのUDAの値で初期化し

ます。

・ 出力データマッピングでは、リモートサブプロセスの完了後に、リモートサブプロセスのUDAの値を親プロセスのUDAにコピーしま

す。

・ リモートサブプロセスとの間でコピーするデータがない場合、データマッピングを指定する必要はありません。

留意事項:

・ 内向き矢印からイベントを受け取ると、Remote Subprocessノードは開始アクションを評価し、次に指定されたURIのプロセス定義を

使用してプロセスインスタンスを作成します。入力データマッピングが指定されている場合は、リモートサブプロセスのUDAを初期

化します。

・ 初期化が完了すると、リモートサブプロセスが開始され、Remote Subprocessノードはプロセスの完了まで待機します。待機中に内

向き矢印からノードが受け取ったイベントは、すべて無視されます。

・ リモートサブプロセスが完了すると、出力データマッピングが指定されている場合は、リモートサブプロセスから親プロセスにデータ

がコピーされ、終了アクションが評価されます。次に、それぞれの外向き矢印にイベントが送られます。

Chained-Processノード

Chained-Processノードは、親プロセスインスタンスから独立した新しいワークフロープロセスがタスクを完了するために作成される、ワー

クフロープロセス内のステップを表しています。このノードでは、その独立したワークフロープロセスを、親ワークフロープロセスの実行

の一部として実行します。

プロセスインスタンスには、任意の数のChained-Processノードを指定できます。1つのChained-Processノードには、1つ以上の内向き矢

印と、1つ以上の外向き矢印があります。

サポートしている機能:

・ 開始アクションと終了アクションを必要に応じて使用することができます。さらに、管理者がこのノードが含まれるプロセスインスタン

スの破棄、一時停止、もしくは、再開する場合に有効となるJava Actionセットを定義することができます。このノードでは、ロールア

クション、またはタイマーをサポートしていません。

・ このノードに固有の属性には、新しいプロセスのインスタンスの作成、および新しいプロセスインスタンスにコピーするデータを定義

するデータマッピングの作成に使用するプロセス定義のIDが含まれます。

・ 入力データマッピングでは、新しいプロセスインスタンスのUDAを親プロセスインスタンスのUDAの値で初期化します。Chained-Processノードでは、実行のフローが親プロセスインスタンスに戻ることはないので、入力データマッピングだけを使用します。新しいプロセ

スインスタンスにコピーするデータがない場合、データマッピングを指定する必要はありません。

留意事項: 内向き矢印からイベントを受け取ると、Chained-Processノードは開始アクションを評価し、次に指定されたIDのプロセス定義

を使用してプロセスインスタンスを作成します。入力データマッピングが指定されている場合は、チェインプロセスのUDAを初期化しま

す。チェインプロセスは親プロセスインスタンスから独立しています。

- 18 -

Page 29: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

Compound Activityノード

Compound Activityノードはプロセスとフェイズの終わりを意味するマイルストーンを含みます。

Compound Activityの中にはノードと矢印を、入れ子にすることができます。 したがって、各Compound Activityはフェイズを表します。

サポートしている機能:

Compound Activityノード:

・ グループ

・ ワークアイテムモード

・ 開始アクション、終了アクション、中止時アクション、一時停止時アクション、再開時アクション

・ タイマー

・ 期限

・ フォーム

・ 優先順位

Compound Activityノードからワークアイテムを作成:

・ 選択

・ 再割当て

・ 優先順位

留意事項:

あるプロセスがCompound Activityノードに達すると、子のStartノードは活性中、Compound Activityノードはサブプロセスで待機中とな

ります。子ノードが完了し、子のExitノードに達すると、Compound Activityノードは閉じられ、子のExitノードと同じ名前のCompoundActivityノードから出ている矢印は活性となります。

Compound Activityノードに期限タイマーを付加することによって、マイルストーンの日付を定義できます。このため、フェイズは強制的

に完了される必要があります。また、担当者はCompound Activityノードのワークアイテムを選択し、以降のプロセスを続行させることが

でき、活性中の子ノードを強制的に中止することができます。

Compound Activityノードの作成と使用方法については、「6.18 Compound Activityノードの使い方」を参照してください。

3.2.11 プロセス定義の変更

プロセス定義の操作はプロセス定義をどのように変更することができるかに関連します。プロセス定義を変更するには、以下の必須条

件を満たす必要があります。

プロセス定義はドラフト状態で、編集モードである必要があります。

・ プロセス定義のインスタンスがあってはいけません。

・ 操作を行うのはプロセス定義の所有者または管理者でなければなりません。

・ Interstage BPMサーバでプロセス定義をロックする必要があります。

プロセス定義の変更点は、すべてコミットするか、すべて破棄するかのいずれかとなります。編集をキャンセルまたはロールバックする

場合は、何も変更されません。

3.3 プロセスインスタンス

プロセス定義は、ワークフローエレメントを使用してビジネスプロセスを表現した、一般的なモデルです。プロセスインスタンスは、この

プロセス定義に基づく実行状態の1つを表しています。実行中のプロセスインスタンスは、ビジネスプロセス内のイベントの流れを、プロ

セス定義に基づき開始から完了まで実行します。

プロセスインスタンスが作成されると、Interstage BPMサーバ(ワークフローエンジンとも呼ばれます)はプロセスインスタンスをプロセス定

義のデザインに従って実行します。Interstage BPMサーバによるプロセスインスタンスの実行を確立と呼びます。

- 19 -

Page 30: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

プロセスインスタンスは、イベントモデルメカニズムを使用してInterstage BPMサーバで生成されます。イベントとは、Interstage BPMサー

バが生成したプロセスインスタンス内のワークフローエレメントに送られるメッセージのようなものです。このイベントはワークフローエレ

メントに作用します。ノードと矢印はこれらのイベントに反応して、そのタイプや定義に応じてタスクを実行します。

注意

現在のモデルでは、矢印はワークフローの進行役としてだけ使用されます。矢印が始点のノードからイベントを受け取ると、終点のノー

ドにイベントを送ります。説明を簡略化するために、以下では矢印イベントの参照を省略してあります。

プロセスインスタンスには、一般的に1つのStartノードと1つ以上のExitノードがあります。プロセスインスタンスの実行はStartノードがイ

ベントを受け取ったときに開始されます。ノードは、そのタイプや定義に応じて、イベントに対して異なった反応をします。

プロセスインスタンスには、StartノードからExitノードまでのパスの数に応じて、コントロールフローの1つ以上の分岐があります。ただし、

プロセスインスタンスは1つのExitノードがイベントを受け取ったときに完了します。その場合、すべての活性中のスレッドがキャンセル

されます。

プロセスインスタンス属性

プロセスインスタンスの構造は、そのインスタンスの基となるプロセス定義の構造とまったく同じです。プロセスインスタンス内のオブジェ

クトと属性は、プロセスインスタンスの生成基となるプロセス定義より反映されます。さらに、プロセスインスタンスには、プロセス定義か

ら直接マッピングされない「プロセス関連データ」と呼ばれる属性があります。

プロセスインスタンスは、その発生元のプロセス定義と同じ属性をもつことができますが、特定の例外があります。たとえば、プロセス定義の

IDと、そのプロセス定義から作られたプロセスインスタンスのIDには何の関係もありません。また、プロセスインスタンスは、ベースになっ

ているプロセス定義と同じ名前、タイトル、および説明をもつことも、独自の識別子をもつこともできます。

さらに、プロセスインスタンスにはプロセス定義と共有しない(またはプロセス定義から反映されない)多くの追加属性があります。これに

は、添付文書やUDAのほか、実行前には意味のない属性(プロセスの優先順位など)があります。

プロセスインスタンスの属性は、永続的なデータエレメントか、文書のような外部情報ソースへのリンクです。プロセスインスタンスの属

性には以下のものが含まれます(ただし、以下のものに限定はされません)。

・ プロセスインスタンスの状態

・ プロセスインスタンスの識別子

・ プロセスID

- プロセスインスタンス名

- プロセスインスタンスの説明

- プロセスインスタンスのタイトル

・ フローコントロール

- ノードインスタンス

- 矢印インスタンス

- Java Actionセット

・ プロセスインスタンスの所有権

- ロール(プロセス所有者)

- プロセス起案者

・ 変数データ

- データアイテム定義

- 作成時刻

- 優先度

- 添付文書参照一式

- 20 -

Page 31: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

・ Java Actionセットを含むタイマー

3.3.1 プロセスインスタンスの状態

プロセスインスタンスは、Interstage BPMサーバに保存されている以下の状態のいずれかになっています。初期、実行中、一時停止、

または完了。プロセスインスタンスが作成されると、開始されるまでは初期状態となっています。プロセスインスタンスがExitノードに到

達すると、完了状態になります。

図3.2 プロセスインスタンスの状態

プロセスインスタンスを作成して開始を行わないことも可能ですが、実際の処理では、ほとんどのプロセスインスタンスは作成と開始が

同時に行われます。ただし、プロセスインスタンスの作成と開始は、2つの別々のアクションです。

プロセスインスタンスを一時停止すると、実行中の状態から一時的にプロセスインスタンスを削除します。この一時的な非活性状態を

一時停止状態と呼びます。プロセスインスタンスにワークアイテム、または実行中のサブプロセスがある場合は、それらも一時停止状態

になります。また、一時停止中のプロセスインスタンスは変更することができません。

ただし、一時停止中のプロセスインスタンスは、完了状態の中には存在しません。一時停止中のプロセスインスタンスを作成したプロセ

ス定義を変更することや、一時停止中のプロセスインスタンスを再割当てすることはできません。一時停止中のプロセスインスタンスを

再開すると、プロセスインスタンスは、そのプロセスインスタンスが保持していたワークアイテムやサブプロセスと共に活性化されます(実行中の状態に戻ります)。

プロセスインスタンスの一時停止や再開は、Model APIを使用して行うことができます。APIの一時停止、または再開のメソッドを使用す

るには、管理者である必要があります。suspend()メソッドおよびresume()メソッドの使用方法については、「7.5.4 プロセスインスタンスの

一時停止」を参照してください。

永続性と状態

Interstage BPMサーバはプロセスインスタンスの状態の永続性を保障しない場合があります。たとえば、プロセスインスタンスがロック状

態の場合にInterstage BPMサーバが停止した場合、ロック状態は失われてしまいます。

Interstage BPMはワークフロープロセストランザクションのACID特性(原子性、一貫性、分離性、持続性)をサポートしていますが、Model APIを使用したアプリケーション側の処理は含まれません。アプリケーションからワークフロー処理を分離し、アクティビティと同期を取ること

を推奨します。同期を取るには、ワークフロー処理が何らかの異常でロールバックした場合、アプリケーション側の処理も同じポイントで

ロールバックする必要があります。

3.3.2 ノードインスタンスと矢印インスタンス

ノードインスタンスと矢印インスタンスは、プロセス定義ノードおよび矢印と一対一で対応しています。ノードインスタンスは基本的に特

定のノードの状態を保持するものです。ノードインスタンスと矢印インスタンスは、作成済、実行中、完了、およびエラーのいずれかの

状態となります。

ノードタイプについての詳細は、「3.2.10 ノードタイプ」を参照してください。

- 21 -

Page 32: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

3.3.3 プロセスインスタンスの所有権

プロセスインスタンスは、そのプロセスインスタンスを開始した人(プロセス起案者)が所有しています。プロセス所有者がプロセスインス

タンスの作成に関わる必要はありませんが、プロセス所有者が自分に属するプロセスインスタンスを誰が作成したかを知っておくと便利

です。

3.3.4 添付文書

添付文書とは、ほかのソフトウェアで作成されたり、アクセスされたりした文書の参照です。参照先は、画像、スプレッドシート、ワードプ

ロセッサファイルのほか、ビジネスプロセスを完了するためにアクセスまたは修正する必要があるファイルなどです。

添付文書はその文書のパスとファイル名の参照だけで構成されています。

添付文書は、ワークアイテムよりアクセスすることができ、追加、削除することができます。ただし、添付文書は、ワークフローで枝分か

れしたほかのActivityノードを含む、プロセスインスタンス全体に属します。

デフォルトでは、ワークアイテムでユーザがほかのファイルタイプを開くために使用するプログラムを指定することができます。

3.4 ワークアイテム

Activityノードは、割り当てられたタスクの評価を終えると、割り当てられたそれぞれのユーザまたはグループに対して、ワークアイテム

を生成します。ワークアイテムは、プロセスインスタンス上のユーザとの接点です。つまり、ワークアイテムは、ユーザがプロセスインスタ

ンスのすべての属性にアクセスすることができるメカニズムです。

ワークアイテムの属性

・ 識別子

- プロセスインスタンスID

- プロセスインスタンス名

- プロセスインスタンスの説明

- プロセスインスタンスのタイトル

- ワークアイテム名

- ワークアイテムのタイトル

- ワークアイテムの説明

- 矢印一式

・ 担当者

・ 変数データ

- 添付文書参照一式

- フォーム情報

- データアイテム

3.4.1 ワークアイテムモード

Activityノードが活性化されると、関連する担当者とロールアクションによってワークアイテムが生成されます。

生成されるワークアイテム数は、Activityノードが個人またはグループのどちらで生成されたかによって決まります。

グループワークアイテムモード

このモードでは、Activityノードに割り当てられたユーザグループ全体に対して1つのワークアイテムが生成されます。グループワーク

アイテムは、グループのメンバーが頻繁に変わる場合やグループの 新のメンバーが、グループの変更前に作成されたワークアイテ

ムにもアクセスできるようにしたい場合に、(パフォーマンス面で)有益です。

- 22 -

Page 33: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

注意

ワークアイテムがVoting Activityノードに関連づけられている場合やロールアクションが使用されている場合は、このモードは適用され

ません。

Voting Activityノードまたはロールアクションを使用する場合は、グループのワークアイテムは生成されません。代わりに、グループ内

のそれぞれのユーザのワークアイテムが生成されます。

個別ワークアイテムモード

このモードでは、Activityノードに割り当てられたグループ内のユーザごとに1つのワークアイテムが生成されます。それぞれのユーザ

は、自分のワークアイテムについて作業します。

タスクを変更したユーザやほかの人に割り当てる事のできるワークアイテムを調べたい場合に、個々のワークアイテムが必要となりま

す。

ワークアイテムモードの変更

Activityノードで生成されるワークアイテムのタイプは、Activity_node.markForExpandGroupsパラメータによって制御されます。trueは個々のワークアイテムが作成されたことを、falseはグループレベルのワークアイテムが作成されたことを示します。

デフォルトでは、個別ワークアイテムが生成されます。さらに、Interstage BPMサーバには、動作が設定されていないプロセス定義を生

成させるSupportGroupWorkItemパラメータがあります。これは、プロセス定義が製品の古いバージョンによって作成された場合にだ

け、使用することができます。

プロセス定義がサーバにインストールされた際、ActivityノードでmarkForExpandGroupsパラメータを指定していない場合は、サーバは

これらのパラメータに動作のための逆のフラグを設定します。とくに、古いプロセス定義がシステムにインポートされた場合、

SupportGroupWorkItemパラメータがtrueであれば、逆にmarkForExpandGroupsパラメータにはfalseが設定されます。

例については、「5.1.3 プロセス定義の新規デザイン」を参照してください。

3.4.2 ワークアイテムの状態

Activityノードが活性化されると、Interstage BPMで1つ以上のワークアイテムが作成され、定義されたロールのユーザグループまたは

ロールの1人以上のメンバーに割り当てられます。デフォルトでは、個別ワークアイテムがユーザグループの各メンバーに割り当てられ

ます。ただし、各Activityノードで割り当てられたグループ全体に対して1つのグループワークアイテムを作成するように変更することが

できます。デフォルトでは、ユーザはタスクを受理したり、予約したりすることで、複数のユーザ間で互いの作業が重複しないようにする

ことができます。

ワークアイテムの状態は、活性、読取り、受理、拒否、非活性(個別ワークアイテムのみ)、一時停止、または完了です。

・ 活性: Activityノードが活性化されると、担当者の割り当てがロールアクションによって変更されないかぎり、Interstage BPMはActivityノードで割り当てられたユーザグループに対して1つの活性ワークアイテムを作成するか、またはロールの各メンバーに対して複数

の活性ワークアイテムを作成します。活性ワークアイテムは、すべての担当者または割り当てられたロールのメンバーが閲覧、受

理、一時停止、再割当て、または拒否できます。

・ 読取り: 担当者や割り当てられたロールのメンバーがワークアイテムを閲覧すると、そのワークアイテムは「読取り」状態となります。

すべての担当者またはグループメンバーが同一のワークアイテムを閲覧できます。「活性」状態のワークアイテムと同様、この状態

のワークアイテムを後で、受理、一時停止、再割当て、または拒否できます。

・ 受理:担当者または割り当てられたユーザグループのメンバーがワークアイテムを受理すると、そのワークアイテムは「受理」状態に

なります。このアクティビティに関連付けられた他の個別ワークアイテムは、「非活性」状態となります。これにより、業務の重複を防

ぐことができます。

ワークアイテムを受理したユーザは、後で拒否することもできます。この場合、そのワークアイテムは再び活性化されます。さらに、

標準再割当てモードでは、ワークアイテムを受理していた人が、それを他の人に割り当てることができます。

可能なモードについての詳細は、「3.8.2 再割当てモード」を参照してください。

- 23 -

Page 34: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

・ 拒否: 「拒否」状態のワークアイテムとは、ユーザが拒否したワークアイテムです。拒否されたワークアイテムは、ユーザの活性ワー

クアイテムのリストには表示されず、非活性のワークアイテムのリストに表示されます。ユーザは拒否したあとでもそのワークアイテム

を閲覧または受理することができます。

すべての担当者またはロールの全メンバーが個別ワークアイテムを拒否した場合、活性ワークアイテムが各プロセスインスタンス所

有者に1つずつ作成されます。ただし、すべての所有者がワークアイテムを拒否することはできません。すべてのプロセスインスタ

ンス所有者が個別ワークアイテムを拒否した場合、そのワークアイテムは再び所有者全員に対して活性化されます。

全員がグループワークアイテムを拒否した場合、どのプロセスインスタンス所有者にもワークアイテムは作成されません。グループ

メンバーは、受理後、そのグループワークアイテムについて作業を行うことができます。そのグループに追加された新メンバーも直

接そのワークアイテムについて作業を行うことができます。

ユーザは以前拒否したワークアイテムを、他の人が受理していないかぎり、受理することができます。

・ 非活性: 他の人が受理したワークアイテムは、非活性になります。

非活性のワークアイテムは拒否または受理できませんが、後で活性化された場合は、再び受理または拒否できるようになります。

・ 完了: ユーザがワークアイテム上で適切な選択を行うと、ワークアイテムは完了状態になり、同じアクティビティに該当する他のワー

クアイテムは、すべてシステムから削除されます。つまり、ワークアイテムのリストから消えます。

3.4.3 矢印

ユーザは、ワークアイテムに指定されたタスクを完了すると、アクティビティを完了するために1つ以上のコミットオプションを選択し、プ

ロセスインスタンス内の次のノードを活性化することができます。

3.4.4 将来のワークアイテム

将来のワークアイテムは、ユーザが将来割り当てられるかも知れないワークアイテムです。将来のワークアイテムは、あとで割り当てら

れるかもしれないワークアイテムを意識することで、ユーザがあらかじめ自分の作業を計画するのを支援します。

将来のワークアイテムはプロセスの実行中に変化するので、発生した作業は正確ではないかも知れません。

注意

将来のワークアイテムは、ステータスがWorkItem.STATE_FUTUREである、通常のワークアイテムとして作成されます。これらは、特定

のユーザのリストに表示されます。読取り専用リストとして表示されるため、ユーザは実際に可決したり否決したりといったアクションをこ

れらに対して行うことはできません。

以下は、将来のワークアイテムのプロパティです。

・ 将来のワークアイテムはNode.markForFutureWorkItemsにtrueをセットしたアクティビティノード上にだけ作成されます。デフォルト

値は、falseです。

注意

将来のワークアイテムは、Compoundノード内部のActivityに対しても生成することができます。

・ 将来のワークアイテムは、プロセスインスタンスの非活性(初期状態)のアクティビティノードインスタンスにだけ作成されます。

・ 将来のワークアイテムは、少なくとも1つのノードインスタンスが活性化されているときにだけ、プロセスインスタンス内に作成されま

す。

・ アクティビティノードインスタンスが活性化されると、現在のノードに対するワークアイテムが作成され、将来のワークアイテムは削除

されます。そして、ほかのアクティビティノードインスタンスに対する将来のワークアイテムが初期状態で作成されます。

・ 将来のワークアイテムは、担当者とロールアクションを使って作成されます。

- 24 -

Page 35: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

注意

将来のワークアイテムの担当者を判定している間に、ロールアクションで行われたプロセスの更新処理が実行されます。将来のワー

クアイテムは、プロセスインスタンス内のほかのアクティビティノードインスタンスが活性化されるときに、常に作成されます。したがっ

て、これらのロールアクションは、複数回実行されます。また、ロールアクションは、通常のワークアイテムを作成する間にも実行さ

れます。これらのアクションが複数回実行されることによって、予期せぬ結果をもたらさないことを確実にしておく必要があります。

・ ロールアクションまたはロールスクリプトがアクティビティノードにセットされているとき、ロールアクションまたはロールスクリプトによっ

て、将来のワークアイテムは、指定されたロールや担当者の置換えが行われます。通常のワークアイテムは、置き換える値がない

場合、プロセスインスタンスの所有者にワークアイテムが割当てられますが、将来のワークアイテムが割当てられることはありませ

ん。

・ 将来のワークアイテムはプロセスが存在する間、作成されたり削除されたりします。つまり、アクティビティノードインスタンスAが活

性化状態で、ユーザによる矢印の選択を待っているとき、初期状態のほかのアクティビティノードインスタンスBで将来のワークアイ

テムフラグをtrueにセットした場合、BはAの矢印の選択が行われるまで将来のワークアイテムは作成されません。

・ エージェントが定義されているアクティビティノードに対して、将来のワークアイテムは作成できません。

・ Iteratorノードとして扱われているアクティビティノードに対して、将来のワークアイテムは作成できません。

・ Voting Activityノードに対して、将来のワークアイテムを設定することはできません。

・ グループレベルのワークアイテムを持つアクティビティノードに対して、将来のワークアイテムを設定することはできません。

・ 初期化状態のアクティビティノードに設定した将来のワークアイテムは、アクティビティノードがいったん活性化されると削除されま

す。

・ 将来のワークアイテムを作成している途中に失敗した場合、通常のワークアイテム作成の失敗と同じように処理されます。トランザ

クションはロールバックされ、ユーザに例外を返すか、フォアグラウンド/バックグラウンドの処理によって、エラー状態になります。ま

た、補償およびエラーアクションは、通常どおり実行されます。

3.5 フィルタ

Interstage BPMのフィルタは、SQLのSELECTステートメント同じように機能します。特定の抽出条件に従って、データベース内のテー

ブルの列にアクセスすることができます。言い換えると、プロセス定義、プロセスインスタンス、またはワークアイテムのテーブルからリス

トを作成し、そのリストを担当者、起案者、または所有者でフィルタしたり、優先順位でのフィルタ、状態でのフィルタ、または識別子で

のフィルタを行うことができます。

注意

詳細なフィルタとソートの機能は、Model APIを使用して行うことができます。これらの高度な機能の使用方法については、「6.4 フィル

ターとソートのAPI」を参照してください。

3.6 構造的プロセス編集の目的

プロセス編集は、柔軟にワークフローのルートを変更するために必要な機能です。

ワークフローユーザは、以下の場合に構造的プロセス編集を必要とします。

・ デザインエラー: プロセスインスタンスが一定期間実行された後、それが誤った前提または論理に基づいていることに気づくことが

あります。

・ メンテナンス: 長い間実行されているプロセスインスタンスは、プロセスインスタンスを 新状態に保ち、滞りなく実行するために、定

期的な微調整が必要となります。

・ プロセスの発見: 現実の世界では、多くのビジネスプロセスは、プロセスプランが完全に固まる前に開始しています。構造的プロセ

ス編集では、プロジェクトチームがそれぞれの経験に基づいて、プロジェクトチームが受け取ったフィードバックに基づいてプロセ

ス定義を変更したり、プロセスインスタンスを後で複製できるように記録したりすることができます。

・ 実験結果を取得する: 構造的プロセス編集では、途中で新しい手順を試すことができ、正確に記録されている複数の手法を使っ

た結果を後で分析することができます。

- 25 -

Page 36: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

・ 新しい要求に適応する: 構造的プロセス編集では、新しい政府規制や市場情勢の変化などに応じて、プロセス定義を変更するこ

とができます。

・ やり直す: プロセスが計画に従って進んでいても結果が思わしくない場合、構造的プロセス編集では変更を行ってもう一度やり直

すことができます。

3.7 サブプロセス機能の目的

サブプロセスは、以下の理由から、重要な要素といえます。

・ サブプロセスは、プロジェクトやプロセスを扱いやすい作業単位に分解します。言い換えれば、複雑なプロセス定義は膨大な数の

ノードによって構成されていて、プロセス定義が読めない状態になっている可能性があります。このプロセスインスタンスを単純な

サブプロセスの階層に再構築すると、それぞれのレベルのプロセス定義を、プロセス定義全体に簡単に適合する個別のタスクとし

てデザインすることができます。

・ サブプロセスを使用することによって、別々のプロセスを扱う別々の部署が、これらのプロセスを簡単に、適切にリンクすることがで

きるようになります。たとえば、購買部、経理部、および新製品開発部がそれぞれの内部要求に応えるため、完全に個別のプロセ

ス定義が必要だったとします。Interstage BPMのサブプロセスでは、この3つの部署間の情報交換や連携作業の調整を緊密に行う

ために、各部署のプロセス定義を作成することができます。

・ サブプロセスを使用すると、個人、部署、または企業が、モジュラコンポーネントのライブラリ、プロセス定義、タスクを後になってか

らさまざまな方法で貼り合わせることができるようになります。

ユーザは2つの方法でサブプロセスを作成できます。正式な方法としてはデザイン時に作成しますが、実行時に作成することもできま

す。これら2つの実装方法では、API内の構造が若干違っています。

・ デザイン時にサブプロセスを実装する場合、たとえば、この目的のために特別に作成されたノードタイプであるSubprocessノードを

使用する必要があります。このノードは、ユーザがデザイン時に親プロセスのインスタンスと子プロセスのインスタンスとの間でやり

取りされるデータをマッピングするためのプロパティを設定するインタフェースを提供します。このSubprocessノードは、ほかのノード

が特定のプロセス定義のメンバーであるのと同様に、プロセス定義のメンバーとなります。

活性中のプロセスインスタンスのフローがSubprocessノードに到達すると、ノードはすぐにサブプロセスをインスタンス化し、実行を

開始します。サブプロセスが完了するまで待機している間、Subprocessノードは一時停止状態になります。

・ 実行時にサブプロセスを実装する場合、Activityノードクラスのメソッドを使用します。他のユーザにタスクを委任する必要がある人

に、タスクが割り当てられた場合、その人は実行時サブプロセスをActivityノードから呼び出すことができます。委任する人は、新し

いプロセス定義を作成するか、または既存のプロセス定義を使用して、デザイン時と同じ方法で元のプロセスインスタンスのデータ

をサブプロセスにマップすることができます。親プロセスのワークアイテムは、サブプロセスが呼び出されるとは一時停止状態となり

ます。サブプロセスが完了し、ワークフローがワークアイテムに戻されると、呼び出し元のノードは完了状態に変更されます。

サブプロセスの実装を実行時に行う場合と、デザイン時に行う場合の違いは、実行時のサブプロセス実装がその場かぎりであることで

す。元のプロセス定義は元の状態のままとなります。プロセス定義が次にプロセスの作成に使用されるときは、元のActivityノードはActivityノードのままです。

3.8 セキュリティモードと再割当てモード

セキュリティモードおよび再割当てモードは、ワークアイテムの状態とは少し違った問題に対応します。ただし、これらのモードや状態

はワークアイテムのアクセスを制御するため、すべて一緒に対応する必要があります。デフォルトでは、システムはOpen Securityモード

および標準再割当てモードでインストールされます。

3.8.1 セキュリティモード

セキュリティモードは、Interstage BPMサーバのSecuritySwitchパラメータを設定して変更できます。Interstage BPMサーバの設定の変

更方法の詳細については、『Interstage BPMサーバ 管理者ガイド』を参照してください。

Open SecurityモードとSecureモードの も大きな違いは、Open SecurityモードではすべてのInterstage BPMユーザがワークアイテムを

表示できる(読取り専用)という点です。Secureモードでは、ワークアイテムの担当者とプロセス所有者だけがそのワークアイテムを表示

できます。両方のセキュリティレベルとも、プロセスの詳細を変更したり、ワークアイテムを選択したりする前に、ワークアイテムを承認す

る必要があります。

- 26 -

Page 37: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

3.8.2 再割当てモード

再割当てモードは、Interstage BPM サーバのServerReassignModeパラメータを設定して変更できます。Interstage BPMサーバの設定

の変更方法の詳細については、『Interstage BPMサーバ 管理者ガイド』を参照してください。

再割当てでは、ユーザグループで 初に指定された人とは違う人にアクティビティを割り当てることができます。再割当てに対して設定

されているアクセス制御は、ワークアイテムの状態によって実装されたアクセス制御とは異なります。再割当てはアクティビティに対して

行われ、ワークアイテムに対しては行われません。

ワークアイテムを再割り当てすると、アクティビティに関連付けられた、活性、非活性のすべてのワークアイテムが削除されます。その

後、サーバは、再割り当てで指定されたメンバーに対して、新しい活性ワークアイテムを生成します。

アクティビティは個人に対して再割当てされる必要があり、グループに対して行うことはできません。割当ては、主に、一定期間内で再

利用されるプロセス定義に適しています。そのため、再割当てで指定された人が有効なユーザかどうかは検証されません。

Interstage BPMには、3つの再割当てモードがあります。標準モード、プロセス所有者限定モード、または再割当て禁止モードです。こ

れらは、ServerReassignModeパラメータをregular、owner、またはnoneに設定することで設定されます。

・ 標準モード(regular): このモードでは、現在アクティビティの担当者となっている人またはプロセス所有者が、アクティビティを新しい

ユーザ群に再割当てできます。

・ プロセス所有者限定モード(owner): このモードでは、プロセス所有者だけがアクティビティを別のユーザ群に再割当てできます。

ワークアイテムを別のユーザに再割当てするために、プロセス所有者がそのワークアイテムの担当者である必要はありません。

・ 再割当て禁止モード(none): このモードでは、再割当ては完全に不可となっています。アクティビティの再割当てができるユーザは

いません。

- 27 -

Page 38: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

第4章 Model APIここでは、Model APIアプリケーション開発のシステム環境について説明し、基本的なModel APIのアーキテクチャーを紹介します。

4.1 システム環境

Model APIを使用したアプリケーションの開発と配置は、Interstage BPM Flowがサポートするすべてのオペレーティングシステムで行

えます。サポート対象のオペレーティングシステムについては、『ソフトウェア説明書』を参照してください。

Model APIを使用してアプリケーションを開発するシステムは、以下の要件を満たしている必要があります。

・ Interstage Application ServerのJDK5.0(推奨)またはJ2SE Development Kit (JDK) 5.0 update10以上が正しくインストールされてい

ること。

・ iFlow_api.jarおよびjs.jarが使用可能であること。このJARファイルがModel APIを構成します。JARファイルのパスをCLASSPATH環境変数に追加してください。標準のインストールでは、次の場所にファイルがインストールされます。

Windowsの場合

C:\Fujitsu\InterstageBPM\client\lib\iFlow.jar

SolarisまたはLinuxの場合

/opt/FJSVibpm/client/lib/iFlow.jar

注意

iFlow.jarファイルは、Interstage BPMが内部で使用するメソッドが含まれています。これらのメソッドは、アプリケーション開発ではサ

ポートされておらず、Javadocに記述されていません。このため、開発目的で、内部で使用されているメソッドを含まない、代わりのjar fileであるiFlow_api.jarが、提供されています。アプリケーションが内部メソッドを使用しないようにするため、iFlow_api.jarライブラリで

そのアプリケーションをコンパイルすることを推奨します。

iFlow_api.jarをのぞく、C:\Fujitsu\InterstageBPM\client\libディレクトリや、/opt/FJSVibpm/client/libディレクトリに含まれている他

すべてのライブラリは、Model APIの実装により使用されているため、CLASSPATHに追加する必要があります。

現在、ランタイムで必要とされるclient/libディレクトリには、以下2つのライブラリがあります。

- js.jar

- log4j-1.2.15.jar

・ 要求されるアプリケーションサーバ規定のjarファイルのパスをCLASSPATHに追加、定義してください。

4.1.1 Interstage Application Server(ローカル)の環境設定

必須条件:「4.1 システム環境」の説明に従い、システム環境を設定します。

Interstage Application ServerのModel APIを使用してアプリケーションを開発する場合、以下の設定を行います。

1. 以下のJARファイルをCLASSPATH 環境変数に追加します。

Windowsの場合

<Interstage Application Serverのインストールディレクトリ>\J2EE\var\deployment\ijserver\<Interstage BPM サーバのワークユ

ニット名>\distribute\fujitsu-ibpm-engine.ear\fujitsu-ibpm-engine-ejb.jar\fujitsu- ibpm-engine-ejb_jar_client.jar

UNIXまたはLinuxの場合

<Interstage Application Serverのインストールディレクトリ>/FJSVj2ee/var/deployment/ijserver/<Interstage BPM サーバのワークユ

ニット名>/distribute/fujitsu-ibpm-engine.ear/fujitsu-ibpm-engine- ejb.jar/fujitsu-ibpm-engine-ejb_jar_client.jar

2. 以下のJARファイルをCLASSPATH 環境変数に追加します。

Windowsの場合

- 28 -

Page 39: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

C:\Interstage\J2EE\lib\isj2ee.jar

C:\Interstage\ODWin\etc\class\ODjava4.jar

C:\Interstage\jms\lib\fjmsprovider.jar

C:\Interstage\EJB\lib\fjcontainer94.jar

C:\Interstage\eswin\lib\esnotifyjava4.jar

Solarisの場合

/opt/FJSVj2ee/lib/isj2ee.jar

/opt/FSUNod/etc/class/ODjava4.jar

/opt/FJSVjms/lib/fjmsprovider.jar

/opt/FJSVes/lib/esnotifyjava4.jar

/opt/FJSVejb/lib/fjcontainer94.jar

Linuxの場合

/opt/FJSVj2ee/lib/isj2ee.jar

/opt/FJSVod/etc/class/ODjava4.jar

/opt/FJSVejb/lib/fjcontainer94.jar

/opt/FJSVes/lib/esnotifyjava4.jar

/opt/FJSVjms/lib/fjmsprovider.jar

3. 以下のディレクトリをPATH環境変数に追加します。

Windowsの場合

C:\Interstage\bin

UNIXまたはLinuxの場合

/opt/FJSVj2ee/bin

/opt/FJSVjms/bin

4. 以下のディレクトリをLD_LIBRARY_PATH環境変数に追加します。

Solarisの場合

/opt/FSUNod/lib

/opt/FJSVjms/lib

Linuxの場合

/opt/FJSVod/lib

/opt/FJSVjms/lib

5. <JDKのインストールディレクトリ>/jre/libディレクトリに移動し、orb.propertiesファイルを開いて、以下の値を追加します。

org.omg.CORBA.ORBClass=com.fujitsu.ObjectDirector.CORBA.ORB

org.omg.CORBA.ORBSingletonClass=com.fujitsu.ObjectDirector.CORBA.SingletonORB

javax.rmi.CORBA.StubClass=com.fujitsu.ObjectDirector.rmi.CORBA.StubDelegateImpl

- 29 -

Page 40: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

javax.rmi.CORBA.UtilClass=com.fujitsu.ObjectDirector.rmi.CORBA.UtilDelegateImpl

javax.rmi.CORBA.PortableRemoteObjectClass= com.fujitsu.ObjectDirector.rmi.CORBA.PortableRemoteObjectDelegateImpl

4.1.2 Interstage Application Server (リモート) の環境設定

必須条件:「4.1 システム環境」の説明に従い、システム環境を設定します。リモートコンピュータ(Interstage Application Serverのホスト

コンピュータと異なるコンピュータ)でModel APIが使用できます。

リモートコンピュータでModel APIを使用するには、以下の手順に従います。

1. お使いのリモートコンピュータでInterstage Application Server Client Packageをインストールします。

詳細については『Interstage Application Server インストールガイド』を参照してください。

2. ホストコンピュータの以下のJARファイルをリモートコンピュータにコピーして、CLASSPATH 環境変数に追加します。

Windowsの場合

<Interstage Application Serverのインストールディレクトリ>\J2EE\var\deployment\ijserver\<Interstage BPM サーバのワークユ

ニット名>\distribute\fujitsu-ibpm-engine.ear\fujitsu-ibpm-engine-ejb.jar\fujitsu- ibpm-engine-ejb_jar_client.jar

UNIXまたはLinuxの場合

<Interstage Application Serverのインストールディレクトリ>/FJSVj2ee/var/deployment/ijserver/<Interstage BPM サーバのワークユ

ニット名>/distribute/fujitsu-ibpm-engine.ear/fujitsu-ibpm-engine- ejb.jar/fujitsu-ibpm-engine-ejb_jar_client.jar

3. 以下のJARファイルをCLASSPATH環境変数に追加します。

Windowsの場合

C:\Interstage\J2EE\lib\isj2ee.jar

C:\Interstage\ODWIN\etc\class\ODjava4.jar

C:\Interstage\jms\lib\fjmsprovider.jar

C:\Interstage\ODWIN\etc\class\esnotifyjava4.jar

C:\Interstage\EJBCL\lib\fjcontainer94.jar

Solarisの場合

/opt/FJSVj2ee/lib/isj2ee.jar

/opt/FSUNod/etc/class/ODjava4.jar

/opt/FJSVjms/lib/fjmsprovider.jar

/opt/FJSVes/lib/esnotifyjava4.jar

opt/FJSVejb/lib/fjcontainer94.jar

Linuxの場合

/opt/FJSVj2ee/lib/isj2ee.jar

/opt/FJSVod/etc/class/ODjava4.jar

/opt/FJSVejb/lib/fjcontainer94.jar

/opt/FJSVes/lib/esnotifyjava4.jar

/opt/FJSVjms/lib/fjmsprovider.jar

4. 以下のディレクトリをPATH環境変数に追加します。

Windowsの場合

- 30 -

Page 41: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

C:\Interstage\bin

UNIXまたはLinuxの場合

/opt/FJSVj2ee/bin

/opt/FJSVjms/bin

5. 以下のディレクトリをLD_LIBRARY_PATH環境変数に追加します。

Solarisの場合

/opt/FSUNod/lib

/opt/FJSVjms/lib

Linuxの場合

/opt/FJSVod/lib

/opt/FJSVjms/lib

6. <JDKのインストールディレクトリ>/jre/libディレクトリに移動して、orb.propertiesファイルを開き、以下の値を追加します。

org.omg.CORBA.ORBClass=com.fujitsu.ObjectDirector.CORBA.ORB

org.omg.CORBA.ORBSingletonClass=com.fujitsu.ObjectDirector.CORBA.SingletonORB

javax.rmi.CORBA.StubClass=com.fujitsu.ObjectDirector.rmi.CORBA.StubDelegateImpl

javax.rmi.CORBA.UtilClass=com.fujitsu.ObjectDirector.rmi.CORBA.UtilDelegateImpl

javax.rmi.CORBA.PortableRemoteObjectClass= com.fujitsu.ObjectDirector.rmi.CORBA.PortableRemoteObjectDelegateImpl

7. 以下のコマンドを実行して、Interstage Application Serverで作動するCORBA servicesのためのサーバホストを設定します。

odsethost -a -h MyServer -p 8002

注意

複数のサーバホストを本コマンドで登録する場合、Model APIは、 初に登録されているサーバに接続しようとします。もし、他の

サーバに接続する場合は -a または -dオプションでサーバホストを指定して、odsethostコマンドを実行してください。

8. 以下のコマンドを実行して、JMS connection factoryの定義を登録します。

jmsmkfact -t -i IflowClient TopicConnectionFactory

注意

jmsinfofactコマンドを実行すると、connection factory定義のリストを表示できます。

9. 以下のコマンドを実行して、JMS destinationsの定義を登録します。

jmsmkdst -t -g IflowECG2 -c IflowECNotify NotificationTopic

jmsmkdst -t -g IflowECG2 -c IflowSQNotify SQNotificationTopic

注意

jmsinfofactコマンドを実行すると、JMS destination定義のリストを表示できます。

- 31 -

Page 42: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

10. Interstage BPMのJMSインタフェースを使用する場合は、以下のコマンドを実行して、JMS destinationsの定義を登録します。

jmsmkdst -t -g IflowECG2 -c IflowECCommand CommandTopic

jmsmkdst -t -g IflowECG2 -c IflowECResponse ResponseTopic

JMSインタフェースの詳細は、「A.3 /client/samples/examples/bin」を参照してください。

4.1.3 WebSphere Application Server スタンドアロンアプリケーション配備(ローカル)の環境設定

必須条件:「4.1 システム環境」の説明に従い、システム環境を設定します。

WebSphere Application ServerのModel APIを使用してスタンドアロンアプリケーションを開発する場合、以下のJARファイルを

CLASSPATH環境変数に追加します。

注意

以下のJARファイルがある<WAS インストールディレクトリ>\IBM\WebSphere\AppServerを<WAS AppServer ホームディレクトリ>と記述します。

・ <WAS AppServer ホームディレクトリ>\plugins\com.ibm.ws.runtime_6.1.0.jar

・ <WAS AppServer ホームディレクトリ>\plugins\com.ibm.ws.sib.server_2.0.0.jar

・ <WAS AppServer ホームディレクトリ>\plugins\com.ibm.ws.sib.utils_2.0.0.jar

・ <WAS AppServer ホームディレクトリ>\runtimes\com.ibm.ws.webservices.thinclient_6.1.0.jar

・ <WAS AppServer ホームディレクトリ>\deploytool\itp\plugins\com.ibm.websphere.v61_6.1.200\ws_runtime.jar

・ オペレーションシステムにより:

- Windowsの場合

<IBPMServer_インストールディレクトリ>\server\deployment\InterstageBPMServer.ear\fujitsu-ibpm-engine-ejb.jar

- UNIXまたはLinuxの場合

<IBPMServer_インストールディレクトリ>/server/deployment/InterstageBPMServer.ear/fujitsu-ibpm-engine-ejb.jar

4.1.4 WebSphere Application Serverクライアント J2EE アプリケーション配備(ローカル)の環境設定

必須条件:マシンにシステム要件に記載されているバージョンのWebSphere Application Serverをインストールして、正しく動作するよう

設定します。

Interstage BPM Serverおよび、Interstage BPM Enterprise EditionのインストールでインストールしたWebSphere Application Serverと同一のマシンにユーザのアプリケーションを配備します。

WAS クライアント J2EEアプリケーションの配備:

1. ユーザのWebアプリケーションおよび、fujitsu-ibpm-engine-model-ejb.jarを含むJ2EEアプリケーション(EAR)を以下のように作成

します。

a. コンピュータに新しいフォルダ(例:My Application)を作成し、以下のファイルやフォルダをコピーします。

- ユーザのアプリケーションのWARファイル(例:myapp.war)

- IBPMサーバインストールディレクトリ(<IBPMServer_インストールディレクトリ>\client\lib\)にあるfujitsu-ibpm-engine-model-ejb.jar

- ユーザのJ2EEアプリケーションのデプロイメント・ディスクリプタが含まれるMETA-INFフォルダ

- 32 -

Page 43: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

b. ユーザのJ2EEアプリケーションのデプロイメント・ディスクリプタ(application.xml)のモジュールにfujitsu-ibpm-engine-model-ejb.jarを記述します。

例:

<module id=" module id="EjbModule_1187608318108">

<ejb>fujitsu-ibpm-engine-model-ejb.jar</ejb>

</module>

注意

EjbModule_1187608318108をカスタマイズします。

サンプルのデプロイメント・ディスクリプタは、Interstage BPM CDイメージのconsole\ibpmconsole-ear\を参照してください。

c. My Applicationから以下のコマンドを実行します:<java_home>¥jar.exe cvfm myapp.ear META-INF\MANIFEST.MF .

2. 単一クラスローダーオプションにより、WebSphere Application Serverで前ステップで作成した、J2EEアプリケーション(EAR)を配

備します。

a. WASコンソールでアプリケーション>エンタープライズ・アプリケーションを選択します。

エンタープライズ・アプリケーションのリストが表示されます。

b. ユーザのアプリケーションのリンクをクリックします。

アプリケーションの設定ページが表示されます。

c. 「クラス・ロードおよび更新の検出」リンクを選択します。

クラス・ローダーの詳細画面が表示されます。

d. WAR クラス・ローダー・ポリシーセクションの「アプリケーションの単一クラス・ローダー」を選択します。

[適用]をクリックして変更を保存します。

3. fujitsu-ibpm-engine-ejb.jar を <IBPM_ インストールディレクト リ > \ server \ deployment \ InterstageBPMServer.ear \から

<J2EE_APP_HOME>\WEB-INF\libにコピーします。

4. iFlow.jarおよびjs.jarを<IBPM_インストールディレクトリ>\client\lib\から<J2EE_APP_HOME>\WEB-INF\libにコピーします。

5. J2EEアプリケーションを起動します。

注意

<WAS_APPSERVER_HOME> \ profiles \ AppSrv01 \ installedApps<cell Name> \ <application_ name>.ear\<web_application_name>.war\.を<J2EE_APP_HOME>と記述します。

4.1.5 WebSphere Application Server スタンドアロンアプリケーション配備(リモート)の環境設定

必須条件:「4.1 システム環境」の説明に従い、システム環境を設定します。

リモートコンピュータ(WebSphere Application Serverのホストコンピュータと異なるコンピュータ)でModel APIが使用できます。

1. リモートコンピュータにWebSphere Application Clientをインストールします。

a. インストール時のセットアップ・タイプは、「カスタム-J2EEおよびシン・クライアント」を選択してください。

b. Web サービス・シン・クライアントフィーチャーを選択してください。

2. iFlow.jarおよび、fujitsu-ibpm-engine-ejb.jarをリモートコンピュータにコピーして、CLASSPATH環境変数に追加します。

3. 以下のWebSphere Application ClientのJARファイルをCLASSPATH環境変数に追加します。

- 33 -

Page 44: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

注意

<WAS AppServer ホームディレクトリ> は、<WAS インストールディレクトリ>\IBM\WebSphere\AppServerを表し、以下のJARファ

イルがあります。

<WAS AppClient ホームディレクトリ>\plugins\com.ibm.ws.runtime_6.1.0.jar

<WAS AppClient ホームディレクトリ>\plugins\com.ibm.ws.emf_2.1.0.jar

<WAS AppClient ホームディレクトリ>\plugins\com.ibm.ws.wccm_6.1.0.jar

<WAS AppClient ホームディレクトリ>\plugins\com.ibm.ws.sib.client_2.0.0.ja

<WAS AppClient ホームディレクトリ>\plugins\com.ibm.ws.sib.utils_2.0.0.jar

<WAS AppClient ホームディレクトリ>\runtimes\com.ibm.ws.webservices.thinclient_6.1.0.jar

4. WebSphere Application ClientのJDKを使い、クライアントプログラムを実行します。

4.1.6 WebSphere Application Serverクライアント J2EE アプリケーション配備(リモート)の環境設定

必須条件:例として、2台のマシン(マシンA、マシンB)があり、マシンAにInterstage BPMとWebSphere Deployment managerを、マシンBにWebSphere Application Serverをインストールします。両方のマシンのWebSphere Application Serverがシステム要件に記載されてい

るバージョンでであることを確認します。

WAS クライアント J2EEアプリケーションの配備:

1. マシンBで、ユーザのWebアプリケーションおよび、fujitsu-ibpm-engine-model-ejb.jarを含むJ2EEアプリケーション(EAR)を以下

のように作成します。

a. コンピュータに新しいフォルダ(例:My Application)を作成し、以下のファイルやフォルダをコピーします。

- ユーザのアプリケーションのWARファイル(例:myapp.war)

- IBPMサーバインストールディレクトリ(<IBPMServer_インストールディレクトリ>\client\lib\)にあるfujitsu-ibpm-engine-model-ejb.jar

- ユーザのJ2EEアプリケーションのデプロイメント・ディスクリプタが含まれるMETA-INFフォルダ

b. ユーザのJ2EEアプリケーションのデプロイメント・ディスクリプタ(application.xml)のモジュールにfujitsu-ibpm-engine-model-ejb.jarを記述します。

例:

<module id=" module id="EjbModule_1187608318108">

<ejb>fujitsu-ibpm-engine-model-ejb.jar</ejb>

</module>

注意

EjbModule_1187608318108をカスタマイズします。

サンプルのデプロイメント・ディスクリプタは、Interstage BPM CDイメージのconsole\ibpmconsole-ear\を参照してください。

c. My Applicationから以下のコマンドを実行します:<java_home>¥jar.exe cvfm myapp.ear META-INF\MANIFEST.MF .

2. 単一クラスローダーオプションにより、マシンBのWebSphere Application Serverで前ステップで作成した、J2EEアプリケーション

(EAR)を配備します。

a. WASコンソールでアプリケーション>エンタープライズ・アプリケーションを選択します。

エンタープライズ・アプリケーションのリストが表示されます。

- 34 -

Page 45: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

b. ユーザのアプリケーションのリンクをクリックします。

アプリケーションの設定ページが表示されます。

c. 「クラス・ロードおよび更新の検出」リンクを選択します。

クラス・ローダーの詳細画面が表示されます。

d. WAR クラス・ローダー・ポリシーセクションの「アプリケーションの単一クラス・ローダー」を選択します。

[適用]をクリックして変更を保存します。

3. マシンAのDeployment ManagerのJMS 関連の設定で以下のように設定します。

a. マシンAとマシンBの管理ノードをDeployment Managerに追加します。詳細はInterstage BPM Server and Console InstallationGuide(WebSphere Application Server)の「Adding Managed Nodes」を参照してください。

b. マシンAにIBPMをインストールすると、SIバスmachineANode01IBPMBussが作成されます。このSIバスのメンバーとして

サーバBを追加します。

注意

マシンAのSIバスにサーバAはすでに存在しています。

1. バスページでmachineANode01IBPMBussの名前をクリックします。

2. 構成タブの[バス・メンバー]をクリックします。

3. [追加]をクリックします。

4. ドロップダウンリストから、machineANode01:server1を選択して[次へ]をクリックします。

5. メッセージスト・アのタイプの選択でファイル・ストアがとして選択されているとをを確認して[次へ]をクリックします。

6. メッセージ・ストア項目をデフォルト値にして[次へ]をクリックします。

7. [終了]をクリックします。

8. ページの先頭に表示されるメッセージの[検討]をクリックします。ノードの同期を選択し、[保管]をクリックして設定を

保存します。

c. ユーザのJ2EEアプリケーション(EAR)のため、SQNotificationTopicおよび、NotificationTopicを以下のように追加します。

1. リソース>JMSタブに移動し、[トピック]を選択します。

2. 有効範囲に「ノード=machineBNode01,サーバ=server1」を選択します。

3. [新規作成]をクリックして、デフォルトが選択されているままで[OK]をクリックします。

4. SQNotificationTopicのフィールドの詳細を以下のように設定します。

名前を「iFLowSQNotificationTopic」にします。

JNDI 名を「iFlow/jms/sq/SQNotificationTopic」にします。

トピック名を「SQNotification_MDB_TOPIC」にします。

バス名に「machineANode01IBPMBuss」を選択します。

トピック・スペースに「SQNotification.Topic.Space」を選択します。

JMS デリバリー・モードに「非・パーシスタント」を選択します。

ほかの項目はそのままにします。

5. 「適用」を選択し、設定を確認、保管します。

6. NotificationTopic の設定を行うため、1.から5.を繰り返します。フィールドの詳細を以下のように設定します。

名前を「iFLowNotificationTopic」にします。

JNDI 名を「iFlow/jms/NotificationTopic」にします。

トピック名を「JmsNotification_MDB_TOPIC」にします。

- 35 -

Page 46: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

バス名に「machineANode01IBPMBuss」を選択します。

トピック・スペースに「JmsNotification.Topic.Spac」を選択します。

JMS デリバリー・モードに「非・パーシスタント」を選択します。

ほかの項目はそのままにします。

d. SQNotificationTopicおよび、NotificationTopicに以下のようにアクティベーション・スペック追加します。

1. リソース>JMSタブに移動し、[アクティベーション・スペック]を選択します。

2. 有効範囲に「ノード=machineBNode01,サーバ=server1」を選択します。

3. [新規作成]をクリックして、デフォルトが選択されているままで[OK]をクリックします。

4. SQNotificationTopicのフィールドの詳細を以下のように設定します。

名前を「SQNotificationTopic」にします。

JNDI 名を「eis/SQNotificationTopic」にします。

宛先タイプに「トピック」を選択します。

宛先 JNDI名を「iFlow/jms/sq/SQNotificationTopic」にします。

バス名に「machineANode01IBPMBuss」を選択します。

ほかの項目はそのままにします。

5. 「適用」を選択し、設定を確認、保管します。

6. NotificationTopic の設定を行うため、1.から5.を繰り返します。フィールドの詳細を以下のように設定します。

名前を「NotificationTopic」にします。

JNDI 名を「eis/NotificationTopic」にします。

宛先タイプに「トピック」を選択します。

宛先 JNDI名を「iFlow/jms/NotificationTopic」にします。

バス名に「machineANode01IBPMBuss」を選択します。

ほかの項目はそのままにします。

4. fujitsu-ibpm-engine-ejb.jar を <IBPM_ インストールディレクト リ > \ server \ deployment \ InterstageBPMServer.ear \から

<J2EE_APP_HOME>\WEB-INF\libにコピーします。

5. iFlow.jarおよび、js.jarを<IBPM_インストールディレクトリ>\client\lib\から<J2EE_APP_HOME>\WEB-INF\libにコピーします。

6. サーバA、サーバBそれぞれ再起動します。

注意

<WAS_APPSERVER_HOME> \ profiles \ AppSrv01 \ installedApps<cell Name> \ <application_ name>.ear\<web_application_name>.war\.を<J2EE_APP_HOME>と記述します。

4.1.7 WebLogicの環境設定

必須条件:「4.1 システム環境」の説明に従い、システム環境を設定します。

1. WebLogic Application ServerのModel APIを使用してアプリケーションを開発する場合、以下のJARファイルをCLASSPATH環

境変数に追加します。

<BEA WebLogicのインストールディレクトリ>/weblogic92/server/lib/wlclient.jar

<BEA WebLogicのインストールディレクトリ>/weblogic92/server/lib/wljmsclient.jar

- 36 -

Page 47: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

4.1.8 JBossの環境設定

必須条件:「4.1 システム環境」の説明に従い、システム環境を設定します。

1. JBoss Application ServerのModel APIを使用してアプリケーションを開発する場合、必要なJARファイルを含む以下のディレクトリを

CLASSPATH環境変数に追加します。

<JBossのインストールディレクトリ>/client

/opt/jboss-4.0.5.GA/client/jbossall-client.jar

4.2 Model APIアプリケーションの実行

前提条件:

・ Interstage BPMがインストールされたサーバへのRMIアクセスが可能であること。

・ Interstage BPMサーバが起動していること。

以下で、Interstage BPM Flowが提供するサンプルのModel APIアプリケーションを実行する方法について説明します。

・ Interstage BPMサーバのインストールディレクトリにある、サンプルプログラム開始用のスクリプトを実行します。標準のインストール

では、次の場所にファイルがインストールされます。

Windowsの場合:C:\Fujitsu\InterstageBPM\client\samples\examples\bin\StartSamples.bat

SolarisまたはLinuxの場合: /opt/FJSVibpm/client/samples/examples/bin/StartSamples.sh

・ クライアントアプリケーションを実行する前に、毎回必ずこのスクリプトの"Start the Sample"で指定されたコマンドを実行しなければ

なりません。このスクリプトはアプリケーションのJaveクラス名の入力を必要とします。サンプルの使用手順については▽付録 A Usingthe Interstage Business Process Manager Samples△を参照してください。

4.3 プロパティファイルの格納

Model APIアプリケーション内からプロパティファイルにアクセスできます。次の部分的なコードは、iFlowClientの読み込み方法の例で

す。

Properties iflowProps = new Properties();

try {

FileInputStream fin = new FileInputStream("iFlowClient. properties");

iflowProps. load(fin);

}

finally {

fin. close();

}

デフォルトでは、プロパティファイルは実行時のカレントディレクトリから読み込まれます。プロパティファイルがディレクトリに格納されて

いることを確認してください。サンプルのiFlowClient.propertiesファイルは以下のディレクトリに位置しています。

<Interstage BPM Server Installation Directory>/client

プロパティファイルを異なるディレクトリに格納したい場合、そのファイルの絶対パスまたは実行時のカレントディレクトリからの相対パス

で指定する必要があります。以下に例を示します。

Properties iflowProps = new Properties();

try {

FileInputStream fin = new

FileInputStream("C:\\Fujitsu\\InterstageBPM\\iFlowClient.properties");

iflowProps.load(fin);

}

finally {

fin.close();

}

- 37 -

Page 48: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

注意

Interstage Application Serverでは、iflow. propertiesに記載されている以下のプロパティは利用できません。

・ NamingProviderURL

・ JMSNamingProviderURL

4.4 Model APIアーキテクチャー

Model APIを使用すると、Interstage BPM Flowとその管理機能にアクセスし、操作することができます。さらに、独自のアプリケーション

を作成して、独自のグラフィカルユーザインタフェースに組み込むことができます。

Model APIには、以下のパッケージが含まれます。詳細については、『API Javadocマニュアル』を参照してください。

・ com.fujitsu.iflow.model.event:プロセス定義やプロセスインスタンスの変更が通知されるEventを受け取るためのインスタンスとクラ

スが含まれています。

・ com.fujitsu.iflow.model.util: 他のクラスやインタ-フェースで一般的に使用される、低レベルのユーティリティクラスが含まれていま

す。ModelクラスによるExceptionsも含まれています。

・ com.fujitsu.iflow.model.wfadapter: 文書管理システム(DMS)を管理するインタフェースが含まれています。DMS内のフォルダや添

付文書に関する情報の取得および更新、DMSに対するオブジェクトのチェックイン/チェックアウトを行うクラスが含まれます。

・ com.fujitsu.iflow.model.workflow: プロセス定義やプロセスインスタンスで必要な情報を管理するインタフェースが含まれていま

す。また、ノード、矢印、添付文書、ワークアイテム、および許可レベルを表すオブジェクトも含みます。このマニュアルで説明する

プログラミングの例は、以下のインタフェースが使用されます。

- Arrowインタフェース: 矢印を作成し、操作するために使用されます。

- ArrowInstanceインタフェース: プロセスインスタンス内で矢印の属性にアクセスするために使用されます。

- AttachmentRefインタフェース: DMS内のプロセスインスタンスの添付文書にアクセスするために使用されます。プロセスインス

タンスに関連付ける添付文書の数に制限はありません。また、追加できる添付文書のタイプにも制限はありません。

- DataItemRefインタフェース: プロセス定義で定義されるUDAの名前、タイプ、および初期値を格納するために使用されます。

- JavaActionSetインタフェース: プロセス定義内でJava Actionを使用するためのメソッドを提供します。

- Nodeインタフェース: プロセス定義に含まれるノードに関する情報を取得するために使用されます。

- Planインタフェース: プロセス定義を作成し、操作するために使用されます。

- ProcessInstanceインタフェース: プロセスインスタンスを作成し、開始するためのオペレーションを提供します。

- WFAdminSessionインタフェース: 管理者が使用するメソッドを提供します。 WFSessionインタフェースを拡張します。

- WFDetailsListインタフェース:一度に複数のオブジェクトの情報を回収できます。

- WFObjectListインタフェース:プロセス定義、プロセスインスタンス、またはワークアイテムを詳細ソートおよびフィルターできま

す。

- WFSessionインタフェース: Interstage BPM Flowサーバにユーザがログインしている間、このサーバへのアクセスを確立し、維

持するためのメソッドを提供します。

- WorkItemインタフェース: ワークアイテム、つまり特定のユーザに割当てられたアクティビティのあらゆる状態へのアクセスを提

供します。

・ com.fujitsu.iflow.server.intf: ワークフローデータへのアクセスを提供するインタフェースが含まれています。このインタフェースを

ServerEnactmentContextと呼びます。このインタフェースには、アクションエージェントを実装するクラスが含まれています。

4.5 例外処理

Model APIが返す例外は、スーパークラスであるModelExceptionクラスとそのサブクラス群があります。いくつかのサブクラスがあります

が、将来互換性の問題が発生する可能性があるため、ModelExceptionを使用してください。

- 38 -

Page 49: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

第5章 プロセス定義のデザイン

ここでは、プロセス定義のデザインおよびプロセスインスタンスを開始するための、Model APIを使用したプログラミングの例を示しま

す。

プログラミングの例には以下のものがあります。

・ 一般ユーザのログインとログアウト

・ Startノード、Activityノード、およびExitノードのあるプロセス定義を作成する

・ プロセスインスタンスを開始する

・ ワークアイテムを実行する

プロセス定義が作成済みの場合、「5.1.1 一般ユーザのログインとログアウト」、「5.3 プロセスインスタンス」をお読みください。

5.1 基本的なプロセス定義のデザイン

はじめに、Model APIを使用して、Startノード、Activityノード、およびExitノードがある基本的なプロセス定義を構築します。

この節で紹介するプログラミング例のすべてのコードは、SimplePlan.javaサンプルファイル内にあります。

プロセス定義を作成する前に、ユーザはログインし、ワークフローアプリケーションを選択する必要があります。

その後、Startノードが1つだけあり、Activityノードおよび少なくとも1つのExitノードがある、基本的なプロセス定義を作成します。ユー

ザがログインするには、セッション、つまりWFSessionオブジェクトを作成する必要があります。このセッションは、ユーザがログアウトする

と終了します。

以下の図は、Model APIを使用してプロセス定義をデザインするために必要な手順を示しています。

- 39 -

Page 50: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

図5.1 Model APIを使用したプロセス定義のデザイン

- 40 -

Page 51: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

5.1.1 一般ユーザのログインとログアウト

プロセス定義を作成する前に、テナントユーザはInterstage BPMサーバにログインする必要があります。また、プロセス定義での作業が

終了したら、再びログアウトする必要があります。

テナントユーザのログイン/ログアウトする方法について説明します。

1. WFSessionオブジェクトのlogIn()を使用して、サーバにログインします。

WFSession session;

session = WFObjectFactory.getWFSession();

ワークフローオブジェクトを割り当てるには、WFObjectFactoryクラスを使用します。次に、getWFSession()でWFSessionオブジェ

クトを作成します。

2. 適切な環境設定ファイルを使用して、セッションを初期化します。

<Interstage BPMサーバインストールディレクトリ>/clientにあるデフォルトのiFlowClient.propertiesファイルを使用することができま

す。このファイルを使用するか、もしくは、カレントディレクトリに位置する必要のある新しいファイルに、設定パラメータを設定しま

す。

使 用 す る プ ロ パ テ ィ フ ァ イ ル に 、 ロ グ イ ン す る テ ナ ン ト 名 を 指 定 し て く だ さ い 。 テ ナ ン ト 名 は 、

WFObjectFactory.TENANT_NAME( テナント名 ) の値として指定します。 Default テナントへログインする場合は、

TenantName=Defaultを指定します。

iFlowClient.properties ファイルの中でバックスラッシュ"¥"またはコロン":"を使用する場合は、バックスラッシュでエスケープする

必要があります。たとえば、サーバのアドレスは以下のように指定します。

ibpmhost\:49950

java.util.Propertiesを使い、iFlowClient.propertiesファイルをロードするとき、load() メソッドは、エスケープ文字を自動的に考慮さ

れます。他の方法でプロパティをロードする場合は、エスケープ文字を正しく扱うようにしてください。iFlowClient.propertiesファイ

ルで使用するエスケープシーケンスの詳細については、java.util.Properties.store()メソッドのJAVAドキュメントを参照してくださ

い。

カレントディレクトリの位置については、「4.3 プロパティファイルの格納」を参照してください。

そのセッションの設定ファイルiFlowClient.propertiesを読み込みます。

Properties sessionProps = new Properties();

sessionProps.load(new

FileInputStream("./classes/iFlowClient.properties"));

以下のとおり、セッションを初期化します。

session.initForApplication(null, sessionProps);

3. WFSessionオブジェクトのlogIn()を使用して、サーバにログインします。

String server = sessionProps.getProperty("HostName") + "Flow";

session.logIn(server, userName, password);

接続サーバ名には、"Flow"という文字列を追加してください。

4. すべての作業が終了したら、ユーザはWFSessionのlogOutを使用して、サーバからログアウトします。

if (session != null ) {

session.logOut();

}

5.1.2 ワークフローアプリケーションを選択する

ログインしたあと、WFSession.chooseApplication()を使って、操作するワークフローアプリケーションを選択します。

session.chooseApplication(myApplicationID);

- 41 -

Page 52: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

注意

ApplicationModeSecurityパラメータにRelaxが設定されている場合は、ワークフローアプリケーションの選択を省略できます。選択を省

略した場合の動作については、『Interstage BPMサーバ 管理者ガイド』の「4.4 ApplicationSecurityMode」を参照してください。

5.1.3 プロセス定義の新規デザイン

ユーザはログイン後に新しいプロセス定義をデザインすることができます。基本的なプロセス定義は、1つのStartノード、1つ以上のActivityノード、および1つ以上のExitノードで構成されます。

注意

プロセス定義を作成する前に、選択したアプリケーションを確認してください。

Startノードは、プロセスの開始を示すノードです。1つのプロセス定義はStartノードを1つしか持つことができません。Activityノードは、

ユーザによるアクションや意志決定のタスクを表しています。プロセス定義には、任意の数のActivityノードを指定できます。Exitノード

は、プロセスの終了を示すノードです。1つのプロセス定義には1つ以上のExitノードが必要です。

各ノードは矢印で連結することができます。矢印の基本的な目的は、プロセス内のフローを制御することです。ノードが完了すると、プ

ロセスインスタンスは矢印の起点から終点に向かって移動します。ノードが出入りする矢印の数には制限がありません(ただし、Startノードは出力矢印、Exitノードは入力矢印のみ設定可能です)。

プロセス定義をデザインする方法について説明します。

1. WFObjectFactory.getPlan()を使用して、空のプロセス定義オブジェクトを作成します。

Plan plan = null;

plan = WFObjectFactory.getPlan();

plan.setWFSession(session);

2. ノードや矢印をプロセス定義に追加する前に、PlanインタフェースのstartEdit()を使用して、プロセス定義のモードを編集モード

に変更します。

plan.startEdit();

3. PlanインタフェースのsetName()、setTitle()、およびsetDesc()を使用して、いくつかの一般的な情報をプロセス定義に追加するこ

とができます。

plan.setName("プラン");

plan.setTitle("プラン1");

plan.setDesc("サンプルのプロセス定義の作成");

4. Startノード、Activityノード、およびExitノードをプロセス定義オブジェクトに追加します。

ノードを追加するには、PlanインタフェースのaddNode(name, nodeType)を使用します。定数nodeTypeは、追加するノードタイプ

を定義します。この定数に使用可能な値は、Nodeインタフェースで定義されています。

NodeインタフェースのsetPosition()は、ノードの位置を定義します。各ノードには、グラフィカル表示するために、キャンバス上の

位置を示すX座標とY座標の情報があります。位置情報は、各ノードの位置により異なります。ノードの正しい位置を確認のうえ、

パラメータを設定してください。

a. Startノードを追加します。

Node startNode = plan.addNode("Start", Node.TYPE_START);

startNode.setPosition(new Point(100, 150));

b. Activityノードには、NodeインタフェースのsetRole()を使用してユーザグループを割り当てることができます。さらに、Activityノードが活性化された際にグループワークアイテムを生成するか、または、Activityノードに割り当てられたグループのメン

バーごとに個別ワークアイテムを生成するかを定義できます。この設定は、SupportGroupWorkItem パラメータの値にも依

存します。 デフォルトでは、このInterstage BPMサーバのパラメータはfalseに設定されています。デフォルトで、このパラメータは

- 42 -

Page 53: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

falseに設定されています。SupportGroupWorkItemの詳細については、『Interstage BPMサーバ 管理者ガイド』を参照して

ください。Activityノードを追加する手順は以下のとおりです。

Node activityNode = plan.addNode("Activity",Node.TYPE_ACTIVITY);

activityNode.setPosition(new Point(200, 250));

activityNode.setRole("SampleGroup");

activityNode.markForExpandGroups(false);

グループの割り当てをサポートしているのは、ActivityノードとVoting Activityノードだけです。

c. Exitノードを追加します。

Node exitNode = plan.addNode("Exit", Node.TYPE_EXIT);

exitNode.setPosition(new Point(300, 350));

5. NodeインタフェースのaddArrow()を使用して、ノードを矢印で連結します。矢印を追加する場合は、その矢印の名前、始点、お

よび終点を指定します。

Arrow goArrow = plan.addArrow("go", startNode, activityNode);

Arrow stopArrow = plan.addArrow("stop", activityNode, exitNode);

6. ノードと矢印をプロセス定義オブジェクトに追加したら、PlanインタフェースのvalidatePlan()を使用して検証する必要があります。

plan. validatePlan();

7. PlanインタフェースのcreateProcessDef()を使用して、プロセス定義を作成します。

plan = plan.createProcessDef();

注意

・ プロセス定義は、createProcessDef()を使用するまで、Interstage BPMサーバには作成されません。プロセス定義オブジェクトが

Interstage BPMサーバに登録されると、Interstage BPMサーバはプロセス定義IDをそのオブジェクトに割り当てます。

・ SaaSモードの場合、プロセス定義を作成する前に、アプリケーションを選択する必要があります。非SaaSモードの場合は、プロセス

定義を作成する前に、アプリケーションを選択していなくてもかまいません(作成中のプロセス定義は除きます)。

下の図は、作成されるプロセス定義を示しています。

- 43 -

Page 54: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

図5.2 Startノード、Activityノード、およびExitノードのある基本的なプロセス定義

5.2 応用的なプロセス定義のデザイン

ここでは、ほぼすべてのコンポーネントを含んだ応用的なプロセス定義を作成するための、プログラミングの手順を説明します。この節

で紹介しているプログラミング例のすべてのコードは、ComplexPlan.javaサンプルファイル内にあります。 以下の図は、サンプルファイ

ルで定義しているワークフローエレメントがどのように作用しあうかを示しています。

- 44 -

Page 55: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

図5.3 様々なノードタイプのある応用的なプロセス定義

前の節で、Startノード、Exitノード、Activityノードなどの基本的なワークフローエレメントを追加する方法を説明しました。以降の各節で

は、UDAを追加する方法や、Voting Activityノード、ANDノード、ORノードなど、そのほかのノードの追加方法を説明します。

応用的なプロセス定義をデザインする方法について説明します。

1. サーバにログインします。

ユーザのログインおよびログアウトする方法については、「5.1.1 一般ユーザのログインとログアウト」を参照してください。

2. PlanインタフェースのstartEdit()を使用して、プロセス定義を編集モードに設定します。

編集モードになると、Interstage BPMサーバはそのプロセス定義をロックするので、編集中は、ほかのユーザがそのプロセス定義

を変更することはできません。編集できるのは、ドラフト状態またはプライベートのプロセス定義だけです。ドラフト状態のプロセス

定義は、それに属するプロセスインスタンスがすでに完了している場合だけ編集可能です。

3. Startノード、1つ以上のExitノード、および必要なActivityノードを追加します。

これらのノードの追加方法については、「5.1.3 プロセス定義の新規デザイン」を参照してください。

4. UDAをプロセス定義に追加します。Voting Activityノード、ANDノードなど、ほかのノードタイプを追加します。

詳細については、以下の節を参照してください。

5. ノードに矢印を接続します。

詳細については、「5.1.3 プロセス定義の新規デザイン」を参照してください。

- 45 -

Page 56: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

6. プロセス定義を検証して、作成します。

詳細については、「5.1.3 プロセス定義の新規デザイン」を参照してください。

7. ビジネスプロセスをエンハンスするため、Java Action、Extended attribute、エージェント、タイマー、エラー処理とった拡張を使用

するかどうか、確認してください。

詳細については、「第6章 Interstage BPMの強化」を参照してください。

5.2.1 ユーザ定義属性の追加

DataItemRefインタフェースは、プロセス定義で定義されたUDAの識別子、名前、タイプ、および初期値を保持します。

UDAはプロセスインスタンスに対してグローバルな変数なので、プロセスインスタンス内のすべてのノードは、すべてのUDAにアクセス

することができます。UDAは、ノードの動作や、プロセス実行用のデータを保存します。

UDAは以下のデータタイプ、BIGDECIMAL、BOOLEAN、DATE、FLOAT、INTEGER、LONG、STRING、XMLのうち、1つを保有し

ています。

注意

UDAには、名前と識別子がついています。

UDAの名前

・ UDAの名前は、ユーザ定義です。

・ UDAの名前は、 高64文字の文字列を含む場合があります。

・ UDAの名前は、システムにより作成、維持されるUDAのプレフィックスとして使用されるため、2つのアンダースコア(__)から始める

ことはできません。

UDAの識別子

・ UDAの識別子は、ユーザ定義、もしくは、システムにより作成されます。UDAの作成時に識別子を指定しなかった場合には、識別

子は自動的に以下のように生成されます。入力として名前が作成されます。特殊文字はすべて排除されます。その「サニタイズさ

れた名前」(識別子)が32文字を超える場合、空の場合、もしくは、固有のものでない場合には、識別子は、プレフィックス'uda<数字

>'として構成され、、たとえば、'uda1'のようになります。

・ 高32文字の文字列から構成される場合があります。

・ プロセス定義全体で、固有のものでなければなりません。

・ 各ユーザの相互作用で、UDAの名前は使用されます。必要時には、UDAの名前は、その識別子にマッピングされます。いったん

作成されると、UDAの識別子は、変更することはできませんが、UDAの名前は、いつでも変更することができます。

プロセス定義にUDAを追加する方法について説明します。

1. プロセス定義の現在のモードが編集モードであることを確認してください。プロセス定義のモードを変更するには、Planインタ

フェースのstartEdit()を使用します。

2. UDAを追加するには、PlanインタフェースのaddDataItemRef()、もしくは、addDataItemRefWithId()を使用します。1つ目のメソッ

ドを使用するとUDAの識別子は生成されます。2つ目のメソッドを使用すると、独自の識別子を定義することができます。

protected final static String WLUDA_PRICE = "Price";

protected final static String WLUDA_QTY = "Qty";

protected final static String WLUDA_TOTAL = "Total";

DataItemRef udaPrice = plan.addDataItemRef(WLUDA_PRICE,

DataItemRef.TYPE_FLOAT, "0.0");

DataItemRef udaQty = plan.addDataItemRef(WLUDA_QTY,

DataItemRef.TYPE_INTEGER, "0");

DataItemRef udaTotal = plan.addDataItemRef(WLUDA_TOTAL,

- 46 -

Page 57: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

DataItemRef.TYPE_FLOAT, "0.0");

DataItemRef udaJavaActionTest = plan.addDataItemRefWithId(

"JavaActionTest", "My JA Test", DataItemRef.TYPE_STRING, "0");

DataItemRef udaMapping = plan.addDataItemRefWithId(

("MapUDAParent", "Mapping UDA Parent",

DataItemRef.TYPE_STRING,

"This value is from parent process");

DataItemRef udaCondition = plan.addDataItemRef("Condition",

DataItemRef.TYPE_STRING, "");

DataItemRef udaSec = plan.addDataItemRef("SEC",

DataItemRef.TYPE_STRING, "sec");

注意

ユーザ定義された識別子が、プロセス定義全体で、固有のものであるかを確認する場合は、PlanインタフェースのisIdentifierUnique(StringID)メソッドを使用してください。

5.2.2 Voting Activityノード

Voting Activityノードは、投票ルールを使用して、投票の結果勝ちとなった矢印(アクティビティの外向き矢印)を選択します。すべての

Voting Activityノードについて、投票のルールを設定します。

Voting Activityノードを追加する方法について説明します。

1. addNode()を使用してノードを作成します。定数nodeTypeにTYPE_VOTING_ACTIVITYを設定します。

Node directorApproveNode = plan.addNode("Approve", Node.TYPE_VOTING_ACTIVITY);

directorApproveNode.setRole(userGroup);

directorApproveNode.setPosition(new Point(290, 350));

2. NodeインタフェースのsetVotingRule()を使用して、Voting Activityノードのルールおよび閾値を定義します。投票ルールの詳細

については、『API Javadocマニュアル』を参照してください。

ルールのタイプを以下の中から選択します。

- NUMBER

- PERCENTAGE

- MAJORITY

閾値は、投票が成立する値を定義します。

directorApproveNode.setVotingRule("Reject", VotingRule.TYPE_NUMBER, 1);

directorApproveNode.setVotingRule("Approve", VotingRule.TYPE_NUMBER, 1);

サンプルコードでは、NUMBERタイプの投票ルールで、両方の外向き矢印の閾値に1を指定しています。つまり、1人のユーザ

が矢印の選択を行うと、その矢印に関連付けられているアクションが実行されます。

3. setEvaluateRulesMode()を使用して、投票をチェックする時期を指定します。以下のいずれかを選択できます。

- Node.ON_EVERY_VOTE: 状況は、投票されるごとにチェックされます。

- Node.WHEN_ALL_VOTES_ARE_CAST: 状況は、割り当てられたグループのすべてのユーザが投票した後にチェックされ

ます。

directorApproveNode.setEvaluateRulesMode(Node.ON_EVERY_VOTE);

4. setDefaultChoice()を使用して、 投票ルールのデフォルトの選択を定義します。

directorApproveNode.setDefaultChoice("Reject");

- 47 -

Page 58: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

5.2.3 ANDノードとORノードの追加

ANDノードは、複数のアクティビティに分岐しているプロセスを、同期するためのステップを表しています。プロセス定義は、任意の数の

ANDノードを指定できます。

ORノードは、プロセス内で複数のアクティビティに分岐するステップを表しています。プロセス定義は、任意の数のORノードを指定で

きます。

・ ANDノードを追加する方法について説明します。

addNode()を使用して、定数nodeTypeをTYPE_ANDに設定します。

Node andNode = plan.addNode("And Node", Node.TYPE_AND); andNode.setPosition(new Point(440, 460));

・ ORノードを追加する方法について説明します。

addNode()を使用して、定数nodeTypeをTYPE_ORに設定します。

Node orNode = plan.addNode("Or Node", Node.TYPE_OR); orNode.setPosition(new Point(430, 230));

5.2.4 Conditionalノード

Conditionalノードは開始アクションを使用するActivityノードです。Conditionalノードをプロセス定義に追加した後、まず開始アクション

を定義し、次にそのノードの分岐条件を定義します。

Conditionalノードを追加する方法について説明します。

1. addNode()を使用して、定数nodeTypeをTYPE_CONDITIONに設定します。

Node CondNode = plan.addNode("Conditional Node",

Node.TYPE_CONDITION);

CondNode.setPosition(new Point(430, 140));

2. 開始アクションを定義します。詳細については、「第6章 Interstage BPMの強化」を参照してください。

3. NodeインタフェースのgetConditionSpec()、およびsetCondBranchSpecInfo()を使用して、Conditionalノードの分岐条件を定義し

ます。

以下の例では、Conditionalノードの外向き矢印に3つの分岐条件を定義しています。UDA Totalの値は、与えられた予算の上限を示

しています。

・ PRの変更(Modify PR): Total <= 0.0 (規定値)

・ 上司の承認が必要( Manager Approval Required): Total > 0.0かつTotal < 1000.0

・ 複数の承認が必要( Multiple Approvals Required): Total > 1000.0

UDA Totalは2つの分岐条件を含みますが、分岐毎に1つの分岐条件しか定義できないので、UDA Totalを使用してどの分岐を使用

するかを決定することはできません。そこで、UDA Conditionの値を追加します。UDA Totalの値に依存して、UDA Conditionに3つの

固有の値のうち、1つが設定されます。これらの値は、どの矢印を使用するかを制御するために必要となります。Conditionalノードは、

SampleJavaActionsという名前のサンプルで示すように、現在の値であるUDA TotalとUDA Conditionの比較のような条件判定ロジック

を提供しています。

判定ロジックの内容は以下のとおりです。

if (Total <= 0.0) {

Condition = Modify PR;

} else if (Total > 0.0 && Total <= 1000.0) {

Condition = "Manager Approval Required";

} else if (Total > 1000.0) {

Condition = "Multiple Approvals Required";

} else {

Condition = "Modify PR";

- 48 -

Page 59: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

Conditionalノード用に定義されたNodeインタフェースのgetConditionSpec()は、このUDAを使用して、選択する矢印の情報を取得しま

す。ConditionSpecインタフェースのsetCondBranchSpecInfo()を使用して、新しい分岐をConditionSpecオブジェクトに追加することがで

きます。

ConditionSpec conditionSpec = condNode.getConditionSpec();

conditionSpec.setConditionAttribute("Condition");

conditionSpec.setCondBranchSpecInfo("Modify PR",

BranchSpec.EQUAL_OP, "Modify PR", true );

conditionSpec.setCondBranchSpecInfo("Multiple Approvals Required",

BranchSpec.EQUAL_OP,

"Multiple Approvals Required", false );

conditionSpec.setCondBranchSpecInfo("Manager Approval Required",

BranchSpec.EQUAL_OP, "Manager Approval Required", false );

condNode.setConditionSpec(conditionSpec);

setConditionSpec(conditionSpec)について、説明します。

Interstage BPM Model APIは、XML要素の値setConditionAttribute(String udaName, String xPath)にアクセスするためのメソッドです。

また、getConditionAttributeXPath()メソッドを呼出して、xPathの値を検索します。

詳細については、『API Javadocマニュアル』を参照してください。

5.2.5 Subprocessノード

Subprocessノードは、ほかのプロセス定義を呼出してタスクを完了し、その結果が返ってくるのを待ち合わせるノードです。このノードは

様々な目的に使用されますが、特に、既存のプロセス定義を新しいプロセス定義内で再利用するために使用されます。

Subprocessノードは、デザイン済みのプロセス定義の持つ、ノード、矢印、その他すべての情報にアクセスして、そのプロセス定義全体

を表すことができます。Subprocessノードは、既存のプロセス定義をその名前で呼び出すことができます。

ComplexPlan.javaサンプルファイル内では、Subprocessノードがプロセス定義をCxPD_Approvalという名前で呼び出す方法を示してい

ます。以下の図は、このプロセス定義を示しています。

- 49 -

Page 60: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

図5.4 Subprocessノードから呼び出された様々なノードタイプのあるプロセス定義

Subprocessノードを使用する方法について説明します。

1. Subprocessノードをプロセス定義に追加します。そのためには、addNode()を使用して、定数nodeTypeをTYPE_SUB_PROCESSに設定します。

Node subProcessNode = plan.addNode("Multiple Approvals",

Node.TYPE_SUB_PROCESS);

subProcessNode.setPosition( new Point(406, 237));

2. Subprocessノードが呼び出されたときに、生成されるプロセスインスタンスが使用する既存のプロセス定義の名前を指定します。

そのためには、NodeインタフェースのsetSubPlanName()を使用します。

subProcessNode.setSubPlanName(subPlan.getName());

このサブプロセス定義の 新バージョンから、新しいプロセスインスタンスが自動的に生成されます。

- 50 -

Page 61: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

注意

親プロセス定義と同じバージョンのサブプロセス定義を使用する必要がある場合、com.fujitsu.iflow.model.workflow.Planのイン

タフェースにあるsetSameSubPlanVersion(boolean)メソッドを使用してください。例えば、バージョン2の親プロセス定義'A'には、す

べてのサブプロセスのバージョン2( 新版ではない)だけを設定するために、前記のメソッドを使用できます。親プロセス定義に

このような機能を設定するサンプルコードは、以下のとおりです。

plan.startEdit();

plan.setSameSubPlanVersion(true);

plan.commitEdit();

これを親プロセスに設定する場合、親プロセス定義のバージョンと、同じバージョンを持つサブプロセス定義が存在することを確

認してください。親プロセスのインスタンスが、存在しないバージョン番号のサブプロセス定義を呼び出そうとすると、エラーとなり

ます。

WFSession.updateApplication()メソッドを使用してアプリケーションをアップデートする際、サブプロセス定義の同じバージョンを

使用したい場合は、子プロセス定義と同様に、親プロセス定義もアップデートする必要があります。

3. addDataMappingElement()を使用して、親プロセス定義のUDAと、サブプロセス定義のUDAの間での情報をマッピングします。

DataItemMappingElementは、「入力データマッピングエレメント」と呼ばれ、サブプロセス定義のUDAにマッピングされる親プロ

セス定義のUDAを含みます。

subProcessNode.addDataMappingElement("MappingUDAParent",

"MappingUDAChild", DataItemMappingElement.INOUT);

注意

再帰的なサブプロセスがあるプロセス定義をデザインする場合は、注意が必要です。関連するプロセス定義をすべてチェックし、無限

ループが起きないことを確認してください。

5.2.6 Delayノード

Delayノードは、一定の時間、プロセスの実行を停止することができるステップを表しています。

Delayノードを使用する方法について説明します。

1. Delayノードをプロセス定義に追加します。そのためには、addNode()を使用して、定数nodeTypeをTYPE_DELAYに設定します。

Node delayNode = plan.addNode("Delay Node", Node.TYPE_DELAY);

delayNode.setPosition(new Point(434, 500));

2. Delayノードにタイマーを追加して、プロセスの実行をどのくらい一時停止するかを指定します。

この例については、「6.16.1 タイマーの定義」を参照してください。

5.2.7 Chained-Processノード

Chained-Processノードは、親プロセスインスタンスから独立した新しいプロセスインスタンスの呼び出しを表します。このノードでは、独

立したプロセスインスタンスを親プロセスインスタンスの一部として実行します。Chained-Processノードは、既存のプロセス定義をその名

前でだけ呼び出すことができます。

ComplexPlan.javaサンプルファイル内では、Chained-Processノードがプロセス定義をCxPD_Sendという名前で呼び出す方法を示して

います。以下の図は、このプロセス定義を示しています。

- 51 -

Page 62: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

図5.5 Chained-Processノードから呼び出されたプロセス定義

Chained-Processノードを使用する方法について説明します。

1. Chained-Process ノードをプロセス定義に追加します。そのためには、 addNode() を使用して、定数 nodeType をTYPE_CHAINED_PROCESSに設定します。

Node chainedProcessNode = plan.addNode("Send Purchase Order", Node.TYPE_CHAINED_PROCESS);

chainedProcessNode.setPosition( new Point(212, 391));

2. Chained-Processノードが呼び出されたときに、生成されるプロセスインスタンスが使用する既存のプロセス定義の名前を指定し

ます。そのためには、NodeインタフェースのsetChainedPlanName()を使用します。

chainedProcessNode.setChainedPlanName(chainedPlan.getName());

このChained-Process定義の 新バージョンから、新しいプロセスインスタンスが自動的に生成されます。

注意

親プロセス定義と同じバージョンのChained-Process定義を使用する必要がある場合、com.fujitsu.iflow.model.workflow.PlanのインタフェースにあるsetSameSubPlanVersion(boolean)メソッドを使用してください。例えば、バージョン2の親プロセス定義'A'には、すべてのChained-Processのバージョン2( 新版ではない)だけを設定するために、前記のメソッドを使用できます。親プロセ

ス定義にこのような機能を設定するサンプルコードは、以下のとおりです。

plan.startEdit();

plan.setSameSubPlanVersion(true);

plan.commitEdit();

これを親プロセスに設定する場合、親プロセス定義のバージョンと、同じバージョンを持つサブプロセス定義が存在することを確

認してください。親プロセスのインスタンスが、存在しないバージョン番号のChained-Process定義を呼び出そうとすると、エラーと

なります。

WFSession.updateApplication()メソッドを使用してアプリケーションをアップデートする際、Chained-Process定義の同じバージョン

を使用したい場合は、子プロセス定義と同様に、親プロセス定義もアップデートする必要があります。

3. addDataMappingElement()を使用して、親プロセス定義のUDAと、チェインプロセス定義のUDAの間での情報のフローをマッピ

ングします。

DataItemMappingElementは、「入力データマッピングエレメント」と呼ばれ、チェインプロセス定義のUDAにマッピングされる親プ

ロセス定義のUDAを含みます。

- 52 -

Page 63: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

chainedProcessNode.addDataMappingElement("MappingUDAParent",

"MappingUDAChild", DataItemMappingElement.INOUT);

5.3 プロセスインスタンス

ここでは、プロセス定義を取得し、そのプロセス定義からプロセスインスタンスを開始する手順について説明します。さらに、プロセスイ

ンスタンス内で生成されるワークアイテムの実行についても解説しています。これらの節で紹介しているプログラミング例のすべての

コードは、ProcessExecution.javaサンプルファイル内にあります。

プロセスインスタンスやワークアイテム上で何か作業をする前に、ユーザはログインする必要があります。ユーザのログインおよびログ

アウトの方法に関する情報は、「5.1.1 一般ユーザのログインとログアウト」を参照してください。

SaaSモードの場合、プロセスインスタンスを開始する前に、アプリケーションを選択する必要があります。

以下の図は、プロセスインスタンスを操作する場合に必要な手順を示しています。

図5.6 Model APIを使用したプロセスインスタンスの操作

- 53 -

Page 64: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

5.3.1 プロセス定義の最新バージョンの取得

プロセス定義の 新バージョンを取得する方法について説明します。

1. Interstage BPMサーバで使用可能なすべてのプロセス定義のリストを表示します。そのためには、com.fujitsu.iflow.model.workflowパッケージのWFObjectListインタフェースを使用して、Interstage BPMサーバから既存のWFObjectsオブジェクトのリストを取得し

ます。

WFObjectFactoryクラスは、ワークフローオブジェクトへの定型的なアクセス手段を提供します。

Plan plan = null;

WFObjectList wfObjectList =

WFObjectFactory.getWFObjectList(session);

Object[] planList = null;

2. プロセス定義を、プロセス定義の名前でフィルタリングします。そのためには、WFObjectsListインタフェースのaddFilter()を使用

して、取得するプロセス定義リストのフィルタ条件を追加します。

wfObjectList.addFilter(WFObjectList.LISTFIELD_PLAN_NAME,

WFObjectList.SQLOP_EQUALTO, "\'" + planName + "\'");

注意

プロセス定義の名前は、生成されるデータベースクエリにそのまま含まれるので、二重引用符(") で囲みます。

3. プロセス定義を、目的の条件でソートします。addSortOrder()を使用して、取得するプロセス定義のリストにフィールドベースのソー

ト順を追加します。

wfObjectList.addSortOrder(WFObjectList.LISTFIELD_PLAN_ID,

WFObjectList.SORTORDER_DESCENDING);

wfObjectList.openBatchedList(Filter.AllPlans);

planList = wfObjectList.getNextBatch(1);

サンプルコードでは、プロセス定義をIDでソートしています。 openBatchedList()は、Interstage BPMサーバから取得したフィルタ

条件に一致するプロセス定義のリストを返します。 ここでは 新バージョンのプロセス定義だけを検索しているので、getNextBatch(1)は、 初のエントリだけ取得します。

4. 新バージョンのプロセス定義を使用します。

if (planList != null && planList.length > 0) { plan = (Plan) planList[0]; } return plan;

返却されたリストで 初のエントリが、検索したプロセス定義の 新バージョンです。

5.3.2 プロセスインスタンスの作成と開始

プロセス定義を取得した後、その定義からプロセスインスタンスを作成し、開始することができます。

新しいプロセスインスタンスを作成して開始する方法について説明します。

1. PlanインタフェースのcreateProcessInstance()を使用して、プロセスインスタンスを作成します。

processInst = WFObjectFactory.createProcessInstance(plan.getId(),session);

createProcessInstance()は、プロセス定義の構造と属性を実行中のプロセスインスタンスにコピーすることで、新しいプロセスイン

スタンスを作成します。

プロセス定義が新しいプロセスインスタンスにコピーされると、プロセス定義のコンポーネントも新しいプロセスインスタンスのコン

ポーネントとしてコピーされます。たとえば、プロセス定義のStartNodeオブジェクトは、新しいプロセスインスタンスのStartNodeInstanceオブジェクトにコピーされます。

2. startEdit()を使用してプロセスインスタンスを編集モードに設定すると、プロセスインスタンスのパラメータを編集することができま

す。

- 54 -

Page 65: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

3. 編集が終了したら、commitEdit()を使用して、編集モードを終了します。

編集モードを終了しない場合、プロセスインスタンスは以降の操作からロックされます。

4. プロセスインスタンスを開始します。

processInst.start();

5.3.3 ワークアイテムリストの作成

ワークアイテムリストを作成するには、com.fujitsu.iflow.model.workflowパッケージのWFObjectsListインタフェースを使用します。この

インタフェースは、Interstage BPMサーバから既存のWFObjectsのリストを取得します。

ワークアイテムリストを作成する方法について説明します。

1. Filterクラスを使用して、フィルタを作成します。

ワークアイテムのフィルタには以下の条件を使用することができます。

- AllWorkItems: すべてのワークアイテムを取得します。

- MyAcceptedWorkItems: ログイン中のユーザに属する、すべての承認済のワークアイテムを取得します。

- MyActiveWorkItems: ログイン中のユーザに属する、すべての活性中のワークアイテムを取得します。

- MyCompletedWorkItems: ログイン中のユーザに属する、すべての完了したワークアイテムを取得します。

- MyDeclinedWorkItems: ログイン中のユーザが拒否したすべてのワークアイテムを取得します。

- MyWorkItems: ログイン中のユーザに属する、すべてのワークアイテムを取得します。

2. openBatchedList()を使用します。

3. getNextBatch()を呼び出します。

getNextBatch()は、openBatchedList()で設定したフィルタ条件に一致するワークフローオブジェクトの配列を返します。

WorkItem[] workItemList = null;

if (filter == Filter.AllWorkItems

|| filter == Filter.MyAcceptedWorkItems

|| filter == Filter.MyActiveWorkItems

|| filter == Filter.MyCompletedWorkItems

|| filter == Filter.MyDeclinedWorkItems

|| filter == Filter.MyWorkItems) {

WFObjectList wfObjectList =

WFObjectFactory.getWFObjectList(session);

wfObjectList.openBatchedList(filter);

int batchSize = 50;

Object[] elements = wfObjectList.getNextBatch(batchSize);

}

グループワークアイテムは、Filter.MyActiveWorkItemsフィルタをサポートしません。Interstage BPMサーバのSupportGroupWorkItemパラメータが、 trueに設定されている場合、このフィルタを使用してワークアイテムを取得することはできません。その代わり、

Filter.AllWorkItemsフィルタを使用してワークアイテムを取得します。グループワークアイテムが属するグループの名前による詳細な

フィルタを使用するには、LISTFIELD_WORKITEM_ASSIGNEEをSQL演算子と共に使用します。SupportGroupWorkItemパラメータ

の詳細については、『Interstage BPMサーバ 管理者ガイド』を参照してください。

グループワークアイテムのフィルタリングの例

UserXが2グループ(GroupAとGroupB)のメンバーの場合:

シナリオ1: UserXがGroupAに割り当てられたすべてのグループワークアイテムを取得したい場合:

...

wfObjectList.addFilter (WFObjectList.LISTFIELD_WORKITEM_ASSIGNEE, WFObjectList.SQLOP_EQUALTO, "GroupA");

- 55 -

Page 66: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

wfObjectList.openBatchedList(Filter.AllWorkItems);

...

シナリオ2: UserXが、GroupAとGroupBの両方のグループに割り当てられたすべてのグループワークアイテムを取得したい場合:

...

wfObjectList.addFilter (WFObjectList.LISTFIELD_WORKITEM_ASSIGNEE, WFObjectList.SQLOP_IN, "GroupA,GroupB");

wfObjectList.openBatchedList(Filter.AllWorkItems);

...

シナリオ3: UserXが、GroupAとGroupBの両方のグループに割り当てられたすべてのグループワークアイテムと、自分に割り当てられた

すべての個別ワークアイテムを取得したい場合:

...

wfObjectList.addFilter (WFObjectList.LISTFIELD_WORKITEM_ASSIGNEE, WFObjectList.SQLOP_EQUALTO, "GroupA,GroupB,UserX");

wfObjectList.openBatchedList(Filter.AllWorkItems);

...

5.3.4 ワークアイテムの実行

活性中のワークアイテムだけ、実行することができます。

ワークアイテムを実行する方法について説明します。

・ 活性中のワークアイテムのリストを作成します。

wfObjectList.addFilter(WFObjectList.LISTFIELD_WORKITEM_ASSIGNEE,

WFObjectList.SQLOP_IN, "User,Group");

WorkItem[] workItemList = listWorkItems(Filter.MyActiveWorkItems);

・ WorkItemインタフェースのgetChoices()を使用して、ワークアイテムの選択肢を取得します。

choices = workItem.getChoices();

この戻り値choicesは、ワークアイテムを表すActivityノードに接続された外向き矢印の名前です。

・ WorkItemインタフェースのaccept()を使用して、ワークアイテムを承認します。

if (choices != null ) { workItem.accept(); int choiceIdx = 0; ... }

accept() は、ワークアイテムの状態をSTATE_ACCEPTEDに変更し、このアクティビティに関連付けられているその他すべてのワー

クアイテムをSTATE_DEACTIVEに変更します。

・ ワークアイテムを実行します。つまり、WorkItemインタフェースのmakeChoice()を使用して選択を行います。

workItem.makeChoice(choices[choiceIdx]);

makeChoice()は、このワークアイテムで指定した選択肢をパラメータから取得します。makeChoice()は、ワークアイテムを完了しま

す。

5.3.5 ワークアイテムの取戻し

取戻しを実行できるのは、完了状態のワークアイテムのみです。

取戻し対象のアクティビティを、取戻しターゲットと呼びます。取戻しを行う前に活性化していたアクティビティは、取戻しソースと呼びま

す。

取戻しが実行されたあとのアクティビティは、以下のような状態になります。

・ ワークアイテムを取り戻すことで、ターゲットアクティビティは非活性され、終了状態になります。

・ 取戻しソースは活性状態になります。

- 56 -

Page 67: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

注意

取戻しができるのは、1つ前のアクティビティの完了状態のワークアイテムのみです。取戻しソースと取戻しターゲットの間に複数のアク

ティビティが存在する場合、取戻しはできません。

以下の図は、ワークアイテムが成功した場合、取戻しの実行前と実行後の状態を示しています。

図5.7 取戻し前のアクティビティの状態

図5.8 取戻し後のアクティビティの状態

並列に並んでいるアクティビティから、ANDやORノードにつながっていたり、共通のアクティビティに両方のアクティビティが接続され

ている場合、並列なそれぞれのアクティビティからワークアイテムを同時に取り戻すことはできません。ワークアイテムの取戻しは、一度に

1つのアクティビティでだけ可能です。取り戻されたアクティビティのワークアイテムはコミットされなければなりません。その後、2番目の

アクティビティを取り戻すことができるようになります。

以下の図では、Activity2はすでに取り戻されています。Activity1は、Action 4がコミットされるまで、Activity2のワークアイテムを取り戻

すことができません。

図5.9 並列なアクティビティからANDノードに接続されている場合

- 57 -

Page 68: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

図5.10 並列なアクティビティが共通のアクティビティに接続されている場合

ワークアイテムが取り戻されたとき、取戻しが実行される前に実行されたJavaActionをロールバックするために、補償JavaActionが実行

されます。

ワークアイテムの取戻しのための条件

ワークアイテムを取り戻すためには、取戻しをサポートしているノード種別である必要があります。また、ターゲットアクティビティが条件

を満たしている必要があります。

以下の表は、取戻しをサポートしているノード種別を示しています。ターゲットノードとして取戻し機能がサポートされる条件について説

明しています。

ノードタイプ 取戻しソース 取戻しターゲット 条件

Activityノード 対応 対応 ・ エージェントアクティビティでないこと

・ アクティビティが受理されていないこと

・ 活性状態であり、エラーや終了の状態ではないこと

・ プロセスインスタンスが一時停止や中止の状態ではないこ

Votingノード 非対応 対応 ・ 1つも投票が行われていないこと

・ プロセスインスタンスが一時停止や中止の状態ではないこ

Routeノード (ANDノード、ORノード、

Conditionalノード、

ComplexConditionalノード、

Emailノード、DBノード、WebServiceノード、カスタムノード)

非対応 非対応 -

Subprocessノード、

Chained-processノード、

RemoteSubprocessノード

非対応 非対応 -

Delay ノード 非対応 対応 ・ 活性状態であり、エラーや終了の状態ではないこと

- 58 -

Page 69: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

ノードタイプ 取戻しソース 取戻しターゲット 条件

・ プロセスインスタンスが一時停止や中止の状態ではないこ

Triggerノード 非対応 対応 ・ 活性状態で、エラーまたは終了状態ではないこと

・ プロセスインスタンスが一時停止または中止の状態ではな

いこと

Exitノード 非対応 非対応 -

Startノード 非対応 非対応 -

Iteratorノード 対応 対応 ・ 繰り返しノードに含まれているのが、アクティビティノードだ

けの場合

つまり、サブプロセスやエージェントノードが含まれていない

場合

・ 繰り返しノードに含まれているすべてのアクティビティノード

インスタンスが活性状態である場合

・ 繰り返しノードに含まれているアクティビティノードが受理さ

れていない場合

・ プロセスインスタンスが一時停止や中止の状態ではないこ

注意

ルートノードであるANDノード、ORノード、Conditionalノード、 Complex Conditionalノード、Emailノード、DBノード、WebServiceノード、

およびカスタムノードは、取戻しターゲットにはなりません。しかし、取戻しソースと取戻しターゲットの間に存在する場合は、これらでも

取り戻すことができます。

アクティビティで取戻しをサポートするかしないかを示す取戻しフラグを使用することができます。取戻しフラグがfaleの場合、取戻し可

能です。取戻しフラグがtrueの場合、取戻しはできません。取戻しフラグの状態を判定するためには、isRecallDisabled()メソッドを使い

ます。デフォルト値はfalseです。値をセットするには、setRecallDisabled(boolean)メソッドを使います。

ワークアイテムを取り戻すには

1. 完了したワークアイテムのリストを取得します。

wfObjList.openBatchedList(Filter.MyCompletedWorkItems);

2. 取り戻したいワークアイテムを選択します。

Object[] elements = wfObjectList.getNextBatch(100);

workItem =(WorkItem)elements[n];

3. ソースワークアイテムから取戻しを実行します。

workItem.recall();

選択したワークアイテムが取り戻されます。

5.3.6 添付文書

プロセスインスタンスが保持する情報から、AttachmentRefインタフェースを使用して、指定した文書管理システム(DMS)の添付文書に

アクセスすることができます。

- 59 -

Page 70: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

注意

DMSは、Interstage BPMの設定で指定したDMSディレクトリにする必要があります。

添付文書は、名前とパスという、2つの属性によって参照されます。名前の属性は、識別子として使用する簡潔な名前です。パスの属

性は、添付文書への完全修飾パスです。

プロセスインスタンスに関連付ける添付文書の数に制限はありません。また、追加できる添付文書のタイプにも制限はありません。

添付文書は、プロセスインスタンスに対してグローバルです。プロセスインスタンス内のすべてのアクティビティは、添付文書にアクセス

できます。

・ 添付文書を追加する方法について説明します。

プロセスインスタンスが、実行編集モード、または構造的編集モードであることを確認します。次に、ProcessInstance.addAttachmentを使用して、新しいAttachmentRefオブジェクトを構築します。

procInst.startEdit();

procInst.addAttachment(ATTACHMENT_NAMES[attachIdx],

ATTACHMENT_FILES[attachIdx]);

procInst.commitEdit();

・ すべての添付文書を取得します。

ProcessInstance.getProcessAttachmentsを使用します。

currentAttachments = procInst.getProcessAttachments();

getProcessAttachments()は、プロセスインスタンスに関連付けられているすべての添付文書への参照を返します。添付文書は、プ

ロセスインスタンスが実行されている間であれば、追加できます。

・ 特定の添付文書を取得する方法について説明します。

ProcessInstance.getAttachmentを使用します。

newAttachment = procInst.getAttachment(ATTACHMENT_NAMES[attachIdx]);

getAttachmentは、プロセスインスタンスに関連付けられている添付文書のAttachmentRefオブジェクトを返します。

ProcessExecution.javaサンプルには、添付文書を取り扱う例が含まれています。詳細は、サンプルのソースコード、および『API Javadocマニュアル』を参照してください。

- 60 -

Page 71: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

第6章 Interstage BPMの強化

この章では、Interstage BPMの機能を十分に引き出せるよう、機能強化、拡張方法について解説します。

詳細は、以下を参照してください。

・ 6.1 Interstage BPMと外部アプリケーションの統合

・ 6.3 Java Action

・ 6.4 フィルターとソートのAPI

・ 6.7 特別なユーザ定義属性のプロパティ

・ 6.8 拡張属性の使用

・ 6.9 トランザクション制御

・ 6.10 トリガ

・ 6.12 File Listenerファイルリスナ

・ 6.15 エージェントの使用

・ 6.16 タイマーの使用

・ 6.17 リモートサブプロセスのモデル化

・ 6.21 決定表

6.1 Interstage BPMと外部アプリケーションの統合

Interstage BPMは、ほかのアプリケーションとの統合を考えて設計されています。Java Action、エージェント、またはJavaScriptを使用し

て、Interstage BPMサーバ外のクラスのメソッドを呼び出すことができます。ただし、これを行うには、いくつかの簡単な統合の手順を行

う必要があります。

注意

アクション、エージェント、JavaScriptは、ServerEnactmentContextインタフェースを呼び出す必要があります。Model APIでのインタフェー

スでは、アクション、エージェント、JavaScriptにアクセスすることはできません。

Interstage BPMを外部アプリケーションと統合する方法について説明します。

1. Interstage BPMで外部のライブラリを利用できるようにするには、外部クラスまたはJARを、以下のディレクトリにコピーします。

- テナント同士でファイルを使用できるようにする

- クラスを個別に使用する場合は、<Interstage BPMサーバインストールディレクトリ>/server/instance/default/classesに、クラ

スファイルをコピーしてください。

- カスタムライブラリを使用する場合は、Interstage BPM ライブラリ拡張ディレクトリ<Interstage BPMサーバインストールディ

レクトリ>/server/instance/default/lib/extに、JARファイルをコピーします。

- 特定のテナントでファイルを使用できるようにする

- クラスを個別に使用する場合は、/<Interstage BPMサーバインストールディレクトリ>/server/instance/default/tenants/<テナ

ント名>クラスに、クラスファイルをコピーしてください。

- カスタムライブラリを使用する場合は、<Interstage BPMサーバインストールディレクトリ>/server/instance/default/tenants/<テナント名>/lib/extに、JARファイルをコピーしてください。

- 特定のアプリケーションでファイルを使用できるようにする

- クラスを個別に使用する場合は、<DMSRoot>/apps/<application ID>/engine_classesに、クラスファイルをコピーしてくだ

さい。

- 61 -

Page 72: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

- カスタムライブラリを使用する場合は、<DMSRoot>/apps/<application ID>/engine_libに、JARファイルをコピーしてくださ

い。

- JavaScriptファイルを使用する場合は <DMSRoot>/apps/<application ID>/engine_jsに、JavaScriptファイルをコピーして

ください。

2. JavaScriptの独自のカスタムクラスを使用する場合には、そのカスタムクラスをJARファイルに追加し、そのJARファイルを手順1で述べたディレクトリにコピーします。それから、Packageからクラスを指定します。

JavaScriptのカスタムクラスを使用する場合

特別な目的のカスタムJavaクラスであるtest.classを使用するとします。test.classを、test.jarと呼ばれるJARファイルに追加し、そのJARファ

イルを<Interstage BPMサーバインストールディレクトリ>/server/instance/default/lib/extにコピーします。それから、ご使用のJavaScriptに、test.classを以下のように例示化します。

var test = new Packages.test();

クラスSalaryCommissionは、以下のどちらかのパスに設定します。

・ グローバルクラスパス(<ServerRoot>/classes、またはライブラリの<ServerRoot>/lib/ext)

・ テナントクラスパス(<ServerSharedRoot>/tenants/<テナント名>/classes、またはライブラリの<ServerSharedRoot>/tenants/<テナント名

>/lib/ext)

・ アプリケーションクラスパス(<DMSRoot>/apps/<アプリケーションID>/engine_lib、またはライブラリの<DMSRoot>/apps/<アプリケー

ションID>/engine_lib)

しかし、Javascriptでは、そのクラスローダーが実行されているServerEnactmentContextインスタンスのクラスローダーを使用します。この

インスタンスは、アクションクラスパスの認識なく作成されます。

JavaScriptUtilは、このクラスローダーを使用して、そのグローバルと、必要時には、そのアプリケーションクラスパスを追加します。

そのテストを修正して、SalaryCommissionをロードしたクラスパスのうちの1つに追加してください。

6.2 アプリケーション変数を使用する

アプリケーション変数は、ワークフローアプリケーションのすべてのユーザに、ワークフローアプリケーションのプロセスインスタンス間で

データを共有させます。この機能により、プロセスインスタンスで、よりダイナミックな振る舞いとそれに関連している様々な操作が可能

になります。例えば、Webサービス Javaアクションは、Webサービスの場所を指定するのにアプリケーション変数を使用できます。これ

により、プロセス定義のJavaアクションを変えずに、ユーザはダイナミックにWebサービスの場所を変えることができます。

これらの変数は、アプリケーション開発の間、Interstage BPM Studioでワークフローアプリケーションの一部として定義され、ワークフロー

アプリケーションと共に利用可能です。Appvariable.xmlに、すべてアプリケーション変数が定義されます。Appvariable.xmlは、アプリ

ケーションに含まれるapplicationフォルダの直下に格納されます。Appvariable.xmlは、変数名と値を含んでいます。

以下に例を示します。

<properties>

<entry key="VariableName1">Value1</entry>

<entry key="VariableName2">Value2</entry>

</properties>

アプリケーション変数は、Interstage BPM Studioでのみ定義できます。アプリケーション変数の変更は、Interstage BPM コンソールでで

きます。しかし、アプリケーション変数の値を変更できるのは、そのワークフローアプリケーションの管理者だけです。

アプリケーション変数は、ワークフローアプリケーション内のすべてのプロセスインスタンスで、共通の値を使用する場合に、特に有効

です。アプリケーション変数は、ユーザ定義属性(UDA)と同じような方法で使うことができます。UDAとの唯一の違いは、UDAが特定

プロセスインスタンスにおけるデータを共有するのに制限されるということです。

Model API

アプリケーション変数を操作するため、以下のメソッドが、WFSessionクラスにあります。

- 62 -

Page 73: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

public java.util.Properties getApplicationVariables (String appId) throws ModelException;

このメソッドは、アプリケーション変数の名前と値を対にしたPropertiesオブジェクトを返します。

public void setApplicationVariables(String appId, java.util.Properties properties) throws ModelException;

このメソッドは、アプリケーション変数を更新します。

注意

アプリケーション変数を更新できるのは、管理者ユーザまたはワークフローアプリケーションの管理者だけです。

6.3 Java ActionJava Actionは、ワークフローエンジンの拡張機能です。根本的に、Java Actionは、Interstage BPMがプロセス実行の一部として呼び出

すことができるよう構成されている、静的なJavaメソッドにすぎません。

一般的に、これらのJava Actionは、外部のプログラムやサービスと接続して情報をやり取りするために使用されます。データを外部プ

ログラムやサービスからInterstage BPMに移動したり、その逆を行うことができます。Java Actionは、外部のプログラムやサービスにアク

セスするときに標準のプロトコルを活用するためにも使われます。

さらに、特定のエラー状況の処置、または、たとえば、Interstage BPM管理者により、プロセスインスタンスが破棄や一時停止された場

合などの対処に、Java Actionを使用することができます。

com.fujitsu.iflow.model.workflow のJavaActionSetインタフェースは、JavaActionsのコンテナです。設計時に、Java Action、すなわち、

1つ以上のJavaメソッドのセットを、プロセス定義に追加します。

Java Action、すなわち、1つ以上のJavaメソッドのセットを、デザイン時にプロセス定義自体、ノード、およびタイマーに追加することがで

きます。また、Error Java Action、もしくは、Compensate Java Actionを他のJava Actionに追加することもできます。

Java Actionは、プロセス実行の以下のポイントで呼び出すことができます。

・ プロセスの初期化時(初期化アクションおよびプロセスインスタンス所有者アクション)

・ プロセスの完了時(完了アクション)

・ アクティビティの開始前(開始アクションおよび役割アクション)

・ アクティビティの完了時(終了アクション)

・ タイマーの有効期限が切れるとき(タイマーアクション)

・ プロセスインスタンスが、破棄、一時停止、もしくは再開された場合(中止時アクション、一時停止時アクション、もしくは、再開時ア

クション)

・ プロセス実行に、エラーが発生した場合(エラーアクション)

・ Java Actionの実行時にエラーが発生した場合(エラーアクション、補償アクション)

・ リモートサブプロセスの起動に失敗した場合(Remote Subprocessノードのエラーアクション)

詳細については、「6.3.1 Java Actionsのタイプ」を参照してください。

Java Actionは、プロセスインスタンスが保持する情報内で実行されます。つまり、Java Actionは、UDAおよび特定のプロセスインスタン

スのそのほかの埋込み属性を読み込んだり、更新することができます。

注意

Java Actionでプロセスフローを操作するのであれば、Java Actionはプロセスインスタンスが保持する情報にServer Enactment Context APIからアクセスする必要があります。Model APIのインタフェースにはアクセスできません

例えば、以下の操作が可能です。

- 63 -

Page 74: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

・ Interstage BPMが保持する情報の読取りだけの機能(値を比較するためなど)を拡張する。

この場合、Server Enactment Context APIを使用せずに、独自のJavaクラスを実装し、そのメソッドをJava Actionとして追加します。

この例は、「6.3.3 開始アクションの割当て」を参照してください。

・ 外部プログラム、または外部サービスからプロセスフローを操作する。

この場合、Server Enactment Context APIを使用して、独自のJavaクラスを実装し、そのメソッドをJava Actionとして追加します。

「6.3.2 Server Enactment Contextインタフェースを使用するワークフローデータへのアクセス」に、この例があります。

・ 既存のInterstage BPMの機能(built-in Java Action)からプロセスフローを操作する。

この場合、いずれかの組込みJava Actionを使用でき、新しいJavaクラスを実装する必要はありません。詳細については、「6.3.5 組込み

Java Action」を参照してください。

・ Java Actionの実行中にエラーが発生した場合の特定のエラー処理を定義する。詳細については、「6.3.9 Java Actionのエラー処

理」を参照してください。

・ リモートサブプロセスが起動しない場合の特定のエラーアクションを定義する。詳細については、「6.3.8 エラーJava Actionの使用」

を参照してください。

・ プロセスインスタンスが、破棄、一時停止、もしくは、再開された場合の処置をする。この例は、「6.3.5 組込みJava Action」を参照し

てください。

6.3.1 Java Actionsのタイプ

Java Actionインタフェースではプロセス定義におけるJavaメソッドを統合できます。統合されたJavaメソッドは、プロセスの実行中に実行

されます。Java Actionをプロセス定義の設計時に、プロセス定義に追加することができます。Java Actionは、初期化、所有者、完了、

中止時、再開時、一時停止時またはエラーアクションといったプロセス定義レベル、またはロール、開始、終了、中止時、再開時、一時

停止時、エラーまたはタイマーアクションといったノードレベルにおいて追加できます。さらに、補償アクションとエラーアクションは、JavaActionレベルで追加できます。

Interstage BPMは、以下のJava Actionタイプを提供します。

・ 初期化アクションと所有者アクションは、プロセスの初期化時に実行されます。これらのJava Actionは、 初のアクティビティが実行

される前にユーザ定義属性データを初期化します。

・ 完了アクションは、プロセスの完了時に実行されます。これらのアクションを使用して、プロセスインスタンス全体のデータをクリーン

アップまたは分析できます。

・ 開始アクション。開始アクションは、アクティビティが開始される前に評価されます。したがって、このJava Actionを使用すると、特定

のノードが実行される前に、そのノードに関連付けられている値を設定または初期化できます。

・ 終了アクション。終了アクションは、ノードでの作業が終了し、プロセスインスタンスが別のノードに移動する前に実行されます。し

たがって、このJava Actionを使用すると、目的の作業が終了した後で、そのノードに関連付けられている値をクリーンアップまたは

分析できます。

・ ロールアクション。ロールアクションは、担当者が解決された後、タスクが割り当てられる前に評価されます。したがって、このJava Actionを使用すると、ユーザグループに関連付けられているタスクの担当者のリストを動的に計算できます。

・ タイマーアクションは、タイマーの日時や期限に到達したときに実行されます。

・ エラーアクション。エラーアクションを使用すると、プロセスの実行中に特定のエラー状態を処理できます。エラーアクションは、プ

ロセス定義全体、個別のノード、および他のJava Action(別のJava Actionの実行中に発生したエラーに対応する場合)に対して定

義できます。

・ 補償アクション。補償アクションは、Interstage BPM以外のシステム(外部データベースなど)にアクセスする別のJava Actionに対し

て定義できます。補償アクションは、トランザクションのクリーンアップおよびロールバック(外部データベースに新しく追加された行

を削除する場合など)を行い、トランザクションに参加している全システムを一貫した状態に保つために役立ちます。

・ 管理者がプロセスインスタンスの処理を中止、一時停止、または再開するコマンドを発行したときに、特別なタイプのアクションを直

ちに活性化することができます。このようなアクションは、以下のいずれかのアクションセットに属します。

- 一時停止時アクション

- 再開時アクション

- 64 -

Page 75: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

- 中止時アクション

*時アクションは、プロセスインスタンスの状態が変更される前に実行されます。これらのアクションは、プロセス定義内の個別ノードまた

はプロセス定義全体に対する個別のアクティビティについて定義できます。

注意

Java Actionプログラムの際、プロセス定義、ノードまたは他のJava Actionを設定するときのみ、タイプを指定します。Java Actionインタ

フェースから使えるメソッドはどのタイプのJava Actionにも使うことができますが、Java Actionのタイプはランタイムにどのメソッドが実行

されるかを決定することを覚えておく必要があります。

6.3.2 Server Enactment Contextインタフェースを使用するワークフローデータへのアクセス

Java Actionを使用してプロセスフローの処理ができます。その場合、Java ActionからServer Enactment Contextインタフェースを通じて

プロセスインスタンスコンテクストにアクセスする必要があります。

Server Enactment Contextインタフェースはワークフローデータへのアクセスを可能にし、サーバインタフェースとして実行されます

(com.fujitsu.iflow.server.intf.ServerEnactmentContext)。例として、以下のメソッドがあります。

・ addAttachment()

・ getAttachment()

・ getProcessOwners()

・ setProcessDescription()

有効なクラスやメソッドについての詳細は『API Javadocマニュアル』を参照してください。

Server Enactment Contextを使用するワークフローデータにアクセスするためには、以下の手順に従います。

1. お使いのJavaクラスを起案する場合は、以下の操作を行います。

a. ServerEnactmentContextインタフェースをインポートします。

b. Java Actionから呼び出したいメソッドのパラメータがServerEnactmentContextのタイプであることを確認します。

2. Java Actionを定義する場合は、お使いのメソッドに渡す値を指定します。ServerEnactmentContextパラメータの値としてsec ICを使用します。

ランタイム時、Interstage BPMはこのインタフェースを含むオブジェクトをお使いのメソッドに渡します。

これはワークフローデータにアクセスする必要性を書き込む可能性のあるJavaメソッドの例です。太字はServer Enactment Contextイン

タフェースをインポートし使用する方法を示しています。

import com.fujitsu.iflow.server.intf.ServerEnactmentContext;

public class MyClass {

public void reassignIfTooExpensive(ServerEnactmentContext sec,

int amount) {

String[] employee = {"Employee1", "Employee2"};

String[] managers = {"Manager1", "Manager2"};

if (amount <= 5000)

sec.setActivityAssignees(employee);

else

sec.setActivityAssignees(managers);

}

}

これはJava Actionの定義方法です。太字は、コンテクストデータをお使いのメソッドに渡す方法を示しています。

JavaAction[] myAction = MyActionSet.createJavaActions(1);

myAction[0].setActionDescription("Decide on purchase requisition");

- 65 -

Page 76: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

myAction[0].setActionName("RoutePurchaseRequisition");

myAction[0].setClassName("MyPackage.MyClass");

myAction[0].setMethodName("reassignIfTooExpensive(ServerEnactmentContext,

int)");

String[] args = new String[2];

args[0] = "sec";

args[1] = "uda.amount";

String params = Utils.combineParametersToXML(args);

myAction[0].setArgumentsUDANames(params);

MyActionSet.setJavaActions(myAction);

6.3.3 開始アクションの割当て

ここでは、開始アクションをActivityノードに割当てる方法の例を挙げます。使用するJava Actionは、サンプルクラスComplexPlanの一

部です。JavaActionインタフェースのsetClassPath()を使用して、サンプルクラスComplexPlanを参照します。

この例では、SampleJavaActionsが、UDA QtyとPriceの初期値を返す、開始アクションが定義されています。

これは、独自のJavaクラスを実装し、Server Enactment Context APIを使用せずに、Java Actionとしてのそのメソッドを追加します。

注意

Java Actionをプログラミングする場合、プロセス定義、ノード、もしくは、その他のJava Actionにタイプを設定する場合にのみ、タイプを

指定します。

JavaActionインタフェースで有効なメソッドはどのタイプのJavaActionにも使用することができますが、JavaActionのアクションは、ランタ

イム時に、どのメソッドを実行するかを決定するものであることに注意してください。

詳細については、『API Javadocマニュアル』を参照してください。

開始アクションをActivityノードに割当てる方法について説明します。

1. Activityノードを追加します。プロセス定義での1つ目のアクティビティ名は、protected final static String NODE_FILL_OUT_PR= "Fill out Purchase Request"です。

protected final static String NODE_FILL_OUT_PR =

"Fill out Purchase Request";

Node fillOutNode = plan.addNode(NODE_FILL_OUT_PR,

Node.TYPE_ACTIVITY);

fillOutNode.setRole(SampleGroup);

fillOutNode.setPosition(new Point(450, 40));

2. WFObjectFactoryクラスのgetJavaActionSet()を使用して、新しいJavaActionSetオブジェクトを作成します。

JavaActionSet foPJavaActionSet =

WFObjectFactory.getJavaActionSet();

3. JavaActionSetに必要な数のJava Actionを生成します。

以下の例は、3つのJava Actionが生成されます。

JavaAction[] foPJavaActions =

foPJavaActionSet.createJavaActions(3);

4. Java Actionを定義します。

ここで定義するJava Actionは、初期量と金額を設定するJava Actionになります。

foPJavaActions[0].setActionDescription("Qtyの初期値を設定");

foPJavaActions[0].setActionName("load initial qty");

foPJavaActions[0].setMethodName("getInitialQty");

foPJavaActions[0].setClassName(CLASS_NAME_JAVA_ACTION);

- 66 -

Page 77: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

foPJavaActions[0].setReturnValueUDAName("Qty");

...

foPJavaActions[1].setActionDescription("Priceの初期値を設定"

);

foPJavaActions[1].setActionName("load initial price");

foPJavaActions[1].setMethodName("getInitialPrice");

foPJavaActions[1].setClassName(CLASS_NAME_JAVA_ACTION);

foPJavaActions[1].setReturnValueUDAName("Price");

...

foPJavaActionSet.setActionSetDescription("UDA QtyとPriceの初期値を"

+ "設定する操作");

foPJavaActionSet.setActionSetName("Qty and Price Setter");

この例では、添付文書を作成するために、他の開始アクションが定義されています。発生する可能性のあるエラーの処置のた

め、エラーアクションはそのJava Actionで定義されています。詳細については、「6.3.9 Java Actionのエラー処理」を参照してくだ

さい。

5. JavaActionSetをActivityノードの開始アクションに割当てます。

foPJavaActionSet.setJavaActions(foPJavaActions);

fillOutNode. .setJavaActionSet(foPJavaActionSet,JavaActionSet.NODE_PROLOGUE);

Java Actionセットの内部コピーが作成され、Activityノードに保存されます。この先、Java Actionセットを変更しても、Activityノードに割

当てられたJava Actionには何の影響もありません。Activityノードを変更する場合は、Java Actionセットを修正し、再びActivityノードに

割当てる必要があります。

6.3.4 終了アクションの割当て

前提条件: 「6.3.3 開始アクションの割当て」に解説されているとおりにActivityノードが定義されている。

この例では、ComplexPlanが、UDA QtyとPriceから計算したTotalの金額を返す、終了アクションを定義します。終了アクションは、Activityノードに追加されます。

注意

Java Actionをプログラミングする場合、プロセス定義、ノード、他のJava Actionに設定するときのみJava Actionのタイプを指定します。

Java Actionのインタフェースで利用できるメソッドは、どのタイプのJava Actionでも使用できますが、Java Actionのタイプによって実行

中に実行されるメソッドは異なります。詳細については『API Javadocマニュアル』を参照してください。

終了アクションをActivityノードに追加する方法について説明します。

1. WFObjectFactoryクラスのgetJavaActionset()を使用して、新しい JavaActionSetオブジェクトを作成します。

JavaActionSet foEJavaActionSet =

WFObjectFactory.getJavaActionSet();

2. JavaActionSetに必要な数のJava Actionを生成します。

以下の例では、1つのJava Actionが生成されます。

JavaAction[] foEJavaActions =

foEJavaActionSet.createJavaActions(1);

3. Java Actionを定義します。CLASS_NAME_JAVA_ACTIONとCLASS_PATH_JAVA_ACTIONは、サンプルで定義している定

数です。

foEJavaActions[0].setActionDescription("Sets calculated total amount to UDA 'Total'");

foEJavaActions[0].setActionName("calculate Total");

foEJavaActions[0].setClassName(CLASS_NAME_JAVA_ACTION);

foEJavaActions[0].setClassPath(CLASS_PATH_JAVA_ACTION);

foEJavaActions[0].setMethodName("getTotal(float,int)");

foEJavaActions[0].setArgumentsUDANames("<E>uda.Price</E><E>uda.Qty</E>");

foEJavaActions[0].setReturnValueUDAName("Total");

- 67 -

Page 78: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

foEJavaActionSet.setActionSetDescription("Operation to calculate total");

foEJavaActionSet.setActionSetName("Total Setter");

4. JavaActionSetをActivityノードのエピローグ部分に割当てます。

foEJavaActionSet.setJavaActions(foEJavaActions);

fillOutNode.setJavaActionSet(foEJavaActionSet,JavaActionSet.NODE_EPILOGUE);

6.3.5 組込みJava ActionInterstage BPMは、プロセスフローを操作するために、様々なJavaメソッドを提供しています。これらのメソッドは、実装する必要はなく、

Java Actionから直接呼び出すことができます。これらのメソッドは、組込みJava Actionと呼ばれています。

例えば、以下のような事前定義済Java Actionがあります。

・ JavaScriptを評価できるJava Action具体例については、「6.3.6 JavaScript Java Action」を参照してください。

・ 外部データベースのデータを取得、更新するJava Action

・ Webサービスから情報を呼び出し、取得するJava Action

組込みJava Actionは、IflowActionsクラス(com.fujitsu.iflow.actions.IflowActions)で使用できます。

このクラスには、たとえば以下のメソッドがあります。

・ escalateActivity()

・ makeChoiceAction()

・ sendEmail()

使用可能なメソッドの詳細については、『API Javadocマニュアル』を参照してください。

Java ActionのIflowActionsは、適切なクラス名を指定して使用します。クラスパスは必要ありません。

太字のテキストは、IflowActionsクラスのメソッドを指定する方法を示しています。

JavaAction[] myAction = MyActionSet.createJavaActions(1);

myAction[0].setActionDescription("Decide on purchase requisition");

myAction[0].setActionName("MakeChoice");

myAction[0].setClassName("com.fujitsu.iflow.actions.IflowActions");

myAction[0].setMethodName("makeChoiceAction(String, long, ServerEnactmentContext)");

String[] args = new String[3];

...

Java Actionの定義の詳細については、「6.3.2 Server Enactment Contextインタフェースを使用するワークフローデータへのアクセス」を

参照してください。

6.3.6 JavaScript Java ActionJavaActionは、Javaができることであれば、何をするのも許可してくれる柔軟性がありますが、プロセスエンジンにアクセスするクラスは、

Javaプログラムをコンパイルする必要があるという難点があります。このため、JavaScriptを評価できる、特別なJavaScript JavaActionを使用できます。JavaScriptでは、Javaでできることがすべて可能です。ただし、JavaScriptは実行するまでコンパイルされません。JavaScriptはプロセス定義内のソースフォームに保存されるので、外部に保存されている関連付けられたクラスファイルはありません。

JavaScriptは、Javaと非常に類似した構文を使用しますが、いくつかの違いがあります。たとえば、スクリプト環境では意味のある動的に

型付けされている変数などです。JavaScriptは、実際は、ソフトウェアに同梱されている“ECMA-262.PDF”(印刷可能ファイル)で説明さ

れている、ECMA標準です。同じServer Enactment Context APIをJavaScriptで使用できます。

さらに、特定の状況で繰り返し使用するスクリプト様式を実行する、カスタムJavaScriptExtentionを作成することもできます。

- 68 -

Page 79: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

注意

メソッドがJavaScriptに使用したサイズは、Java Virtual Machine (JVM)によって制限される場合があります。現在、メソッドバイトコードサ

イズは65535バイト(64KBytes)に制限されています。より大きいサイズのメソッドを使用するとJVMはエラーを示し、再びJavaScriptを実

行する前にメソッドのサイズを減らす必要があります。

JavaメソッドをJavaScript内で呼び出す

標準のJavaScriptは、任意のJavaメソッドを呼び出すことができます。また、必要であれば、Javaオブジェクトを作成して、そのオブジェク

トでメソッドを呼び出し、ほかのJavaオブジェクトをパラメータとして渡すこともできます。

静的メソッドの呼び出しの例は、ScriptPlugIn.classにあります。

Packages.ScriptPlugIn.createFile(“C:¥¥temp¥¥test.txt”);

メンバーメソッドの呼出しの例は、JDBCPlugIn.classにあります。

x = new Packages.JDBCPlugIn();

var customer = uda.Customer;

var finish = x.findCustomer(customer);

6.3.7 アクティビティの作業者と関連

アクティビティの作業者

アクティビティがロールに割当てられたあと、ロールに含まれる人はそのアクティビティを操作することができるようになります。インスタ

ンスに対し、アクティビティがマネージャーロールに割当てられた場合、マネージャーグループのすべてのメンバーが、そのアクティビ

ティを操作することができます。しかし、実際には、一人のマネージャーだけがそのアクティビティを実行することになります。マネー

ジャーは、そのアクティビティの作業者と呼ぶことができます。

アクティビティが実行されたあと、作業フローによっては、誰がアクティビティで作業するかを決定したい場合があるかも知れません。そ

して、その情報に基づいた対応をとりたいと考えるでしょう。

例えば、“カスタマーサポートの幹部社員”ロールに割当てられた“カスタマー案件の記録”というアクティビティを考えます。まず、ど

の“カスタマーサポートの幹部社員”が、“カスタマー案件の記録”というアクティビティを実際に行ったかを確認する必要があります。次

に、プロセスインスタンス中の“案件のエスカレート”という次のアクティビティに、同じ作業者を割当てることが求められるでしょう。

アクティビティの作業者の決定

com.fujitsu.iflow.server.intfパッケージのServerEnactmentContextインタフェースには、アクティビティの作業者を決定するために使用する

getActivityActor()というメソッドが含まれています。

getActivityActor()メソッドは、パラメータとしてアクティビティノードの名前を与えることで、完了したアクティビティノードの作業者を取得

することができます。Voting Activityノードは、このメソッドをサポートしていません。

注意

プロセスインスタンスの中のすべてのアクティビティノードに一意な名前を設定することをお勧めします。通過したノードに同じ名前のも

のが存在する場合、このメソッドは例外を返します。

次のサンプルは、Activity A の作業者を取得し、現在のアクティビティにその作業者を割当てています。

public void assignActivityActor(ServerEnactmentContext sec){

String[] actor = new String[1];

actor[0] = sec.getActivityActor("Activity A");

sec.setActivityAssignees(actor);

}

- 69 -

Page 80: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

注意

JavaScriptの一部として定義されたJavaActionで、このメソッドを呼ぶ必要があります。(「6.3.2 Server Enactment Contextインタフェース

を使用するワークフローデータへのアクセス」を参照してください。)。このメソッドの詳細は、『API Javadocマニュアル』を参照してくださ

い。

関連

ある作業フローでは、アクティビティの作業者に対する階層関係やUDAの値を参照して、作業を割当てることがあります。例えば、“会

社名”というUDAに、“富士通”という値が設定されている場合、富士通というキーの“経営者”であることを確かめて、経営者だけを、特

定のアクティビティに割当てることができます。また、あるアクティビティに、Jimと呼ばれる作業者が割当てられているとき、Jimのマネー

ジャーが誰か探し出し、特定のアクティビティにそのマネージャーを割当てることができます。

関連の決定

com.fujitsu.iflow.server.intfパッケージに含まれるServerEnactmentContextのresolveRelationship()メソッドを使用して、関係を決定しま

す。

resolveRelationship()メソッドは、パラメータとして基になる値と関連を使うことによって目標の値を返します。このメソッドは、ソースの値、

関連、ターゲットの値をあらかじめ定義しておくことで、機能します。これにより、このメソッドは適切な値を返すことができます。

ソースの値 関連 ターゲットの値

Jim manager Robert

Jim assistant Arthur

Fujitsu executive Bob

例えば、resolveRelationship("assistant", "Jim")はArthurを返します。

ソースの値 - 関連 - ターゲットの値のマッピングは、ディレクトリサービスまたはローカルユーザストアのユーザプロファイルとして格納し

なければなりません。ここで、ソースの値はユーザID、関連はユーザ属性の名、ターゲットの値はユーザ属性の値となります。ユーザプ

ロファイルを作成するためには、『API Javadocマニュアル』のcom.fujitsu.iflow.model.workflowパッケージに含まれるDirectoryServicesインタフェースを参照してください。

ソースの値には、人および人以外のもの(会社名やグループ名)を設定することができます。人以外のオブジェクトのユーザプロファイ

ルをディレクトリサーバやローカルユーザストアに追加する場合は、ログインする目的で使用されないことに注意してください。

次のサンプルでは、"Activity A"の作業者とその作業者のManagerを取得して、現在のアクティビティにそのManagerを割当てます。

public void assignManagerOfActivityActor(ServerEnactmentContext sec){

String[] managers =

sec.resolveRelationship("Manager",sec.getActivityActor("Activity A"));

sec.setActivityAssignees(managers);

}

注意

JavaScriptの一部として定義されたJavaActionで、このメソッドを呼ぶ必要があります。(「6.3.2 Server Enactment Contextインタフェース

を使用するワークフローデータへのアクセス」を参照してください。)このメソッドの詳細は、『API Javadocマニュアル』を参照してくださ

い。

6.3.8 エラーJava Actionの使用

エラーJava Actionはエラーが起こったときにプロセスインスタンスの動作の決定や特定のエラーを処理するのに使われます。エラー処

理の定義をしないと、プロセスインスタンスはどこで発生したかに関わらず、例外が起こるとすぐにエラー状態になります。例:リモートサ

ブプロセスの開始が失敗した場合、メール送信ができない場合など。

エラーJava Actionはいろいろなレベルで定義されます。

- 70 -

Page 81: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

・ プロセス定義レベル:これらのエラーJava Actionセットはいかなるエラーの場合でもエラーの度合いやエラーが発生するアクティビ

ティにかかわらず実行されます。プロセス定義レベルで定義されたエラーJava Actionセットはプロセスインスタンスがエラー状態に

入る直前に実行されます。そのようなエラーアクションはプロセスインスタンスの動作に影響できないことに注意してください。プロ

セス定義レベルのエラーアクションは、例えば通知メールの送信やログファイルに追加情報を書くのに使用される可能性がありま

す。

・ ノードレベル(Remote Subprocessノード):リモートサブプロセスが開始に失敗すると、このレベルのエラーJava Actionセットは活性

化されます。例:「6.17.3 リモートサブプロセスのエラー処理」を参照してください。

・ Java Actionレベル:このレベルのエラーJava Actionセットは関連する「通常」のJava Actionで例外が起こると実行されます。エラー

Java ActionはすべてのJava Actionsのタイプに定義できます。(例:Java Actionの開始、終了、タイマー、中止)ただし、エラーまた

は補償アクション自体を除きます。Java Actionsへのエラーアクションの割当てについては、「6.3.9 Java Actionのエラー処理」を参

照してください。

以下は、プロセス定義にエラーJava Actionを割り当てる例です。使用されているJava Actionsは、ComplexPlanクラスの一部です。

以下は、プロセス定義に中止時アクションの割り当てる例です。使用されているJava Actionは、例のクラスComplexPlanの一部です。

プロセス定義レベルでエラーJava Actionセットを定義するためには、以下の手順に従います。

1. WFObjectFactoryクラスからgetJavaActionSet()を使い、新しいJavaActionSetオブジェクトを作成します。

JavaActionSet plErrorJavaActionSet =

WFObjectFactory.getJavaActionSet();

2. Java ActionセットのJava Actionsの必要数を生成します。

以下の例では1つのJava Actionが生成されています。

JavaAction[] plErrorJavaAction =

plErrorJavaActionSet.createJavaActions(1);

3. Java Actionを定義します。

plErrorJavaAction[0]

.setActionName("WriteLogEntryWithException");

plErrorJavaAction[0]

.setActionDescription("Writes a log entry with exception");

plErrorJavaAction[0]

.setMethodName("writeLogEntryWithException(String,ServerEnactmentContext)");

plErrorJavaAction[0]

.setClassName(CLASS_NAME_JAVA_ACTION);

plErrorJavaAction[0]

.setClassPath(CLASS_PATH_JAVA_ACTION);

plErrorJavaAction[0]

.setArgumentsUDANames("<E>uda.ProcessLevelErrorLogEntry</E><E>sec</E>");

plErrorJavaActionSet.setJavaActions(plErrorJavaAction);

4. プロセス定義にJava Actionセットを割り当てます。

plan.setJavaActionSet(plErrorJavaActionSet,

JavaActionSet.PLAN_ERROR);

6.3.9 Java Actionのエラー処理

Java Actionの実行中にエラーが発生した場合は、例外がスローされます。Interstage BPMでは、Java Actionのエラーに対して独自の

エラー処理を定義できます。これにより、例外がスローされたときにプロセスインスタンスがエラー状態になることを防止できます。

また、トランザクションがロールバックされてプロセスインスタンスがエラー状態に設定される前に「クリーンアップ」を実行するJava Actionを定義することもできます。これには、Java Actionセット内のすべてのJava Actionのロールバックが含まれます。プロセスインスタンスが

エラー状態に設定される前に、エラー発生時の通知メールの送信などの一般的なアクションを実行したり、何らかの特別なアクション

を実行することができます。

Interstage BPMには、Java Actionのエラーを処理する以下のオプションが用意されています。

- 71 -

Page 82: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

・ 補償アクション:補償アクションは、システムをクリーンアップし、トランザクションに関連するすべてのシステム(外部データベースや

メールサーバなど)を一貫した状態に保ちます。補償アクションは、外部システムが関係する場合に特に役立ちます。

Java Actionに対してエラー処理を定義しない場合、このJava Actionで例外がスローされたときは、トランザクションがロールバックさ

れます。ただし、ロールバックは、Interstage BPMアプリケーションサーバのコンテキストでの変更に対してのみ実行されます。外部

システムでのすべてのトランザクション(外部データベースに行が追加されるなど)は、ロールバックされません。このため、場合に

よっては、トランザクションで使用されたすべてのシステムを一貫した状態に保つために、外部システムを手動でクリーンアップす

る必要があります。必要な場合は、補償アクションセットを使用できます。

アクションセット内の任意のJava Actionに対して補償アクションを指定できます。補償アクションは、たとえば新しくデータベースに

追加された行を削除したり、追加のメールを送信するような場合に役立ちます。通常のJava Actionセットで例外が発生した場合

は、例外がスローされる前に、正常に実行されたすべてのJava Actionに対して定義されているすべての補償アクションが逆の順序

で呼び出されます。

注意

補償アクションを別の補償アクションに埋め込むことはできません。補償アクションが例外をスローした場合、プロセスインスタンス

は直ちにエラー状態になり、残りの補償アクションの実行は中止されます。

詳細については、以下のサンプルを参照してください。

・ エラーアクション:Java Actionレベルで、関係する通常のJava Actionから例外がスローされると、エラーアクションセットが活性化し

ます。エラーアクションは、他のすべてのアクションセットと同様に、アクションセット内にまとめられています。エラーアクションは、ア

クションセット内の任意のアクションに対して指定できます。ただし、エラーアクションで発生した例外を処理するためのエラーアク

ションは定義できません。

詳細について「6.3.8 エラーJava Actionの使用」と以下のサンプルを参照してください。

続行設定

エラーアクションはエラーが見つかると、プロセス実行を続けるかどうかの決定をします。この動作は続行設定「対象とする

Exception」によって定義されます。

正しく設定されると例外は見つかり、定義されたエラーアクションが実行された後にプロセスインスタンスの実行を続行します。

誤って設定されると、定義されたすべての補償アクションが実行され、その後プロセスインスタンスはエラー状態になります。

異なった「catchException」を設定された複数のエラーアクションがあった場合、falseがtrueを上書きし、一つのエラーアクションが

「catchException」をfalseに設定されると即座にプロセスインスタンスがエラー状態になります。

例外クラス

続行設定に加えて、ActivityノードレベルとJava Actionレベルでのエラーアクションは、どの例外にエラーアクションが反応するか

を決定します。具体的な例外クラスを特定することができます(デフォルトは、java.lang.Exception。起こった例外がこの特定の例外

クラスのインスタンスかサブクラスであるときにだけ、エラーアクションが実行されます。

注意

エラーアクションが例外をスローした場合、トランザクションは直ちにロールバックされ、プロセスインスタンスはエラー状態になりま

す。このような場合に対するエラーアクションを定義することはできません。

いかなるJava Actionセットも複数のJava Actionsを含むことができます。それぞれのJava Actionに関しては、エラーアクションおよび補

償アクションを定義できます。詳細については「6.3.10 エラーの場合のJava Action構造と実行プラン」を参照してください。

補償アクションのJava Actionへの定義および割当て

以下のサンプルは別のJava Actionの実行が失敗した場合に実行される補償Java Actionを定義します。管理者にはメールで初期量の

取得が失敗した場合に通知されます。この取得はFillOutActivityノードのための開始アクションとして実行される別のJava Actionで定

義されます。ComplexPlan.javaサンプルの中にこのサンプルの全体コードがあります。メール送信で初期量を取得するメソッドは

SampleJavaActionsのサンプルで定義します。

補償Java Actionセットを定義、割り当てるには、以下の操作を行います。

- 72 -

Page 83: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

1. WFObjectFactoryクラスからgetJavaActionSet()を使用し、新しいJavaActionSetオブジェクトを作成します。

JavaActionSet compensateJavaActionSet =

WFObjectFactory.getJavaActionSet();

2. JavaActionSetにJava Actionsの必要な数を生成します。以下の例では、一つのJava Actionが生成されています。

JavaAction[] compensateJavaAction =

compensateJavaActionSet.createJavaActions(1);

3. Java Actionを定義します。sendEmail()メソッドがSampleJavaActionsのサンプルで定義されることに注意します。

compensateJavaAction[0].setActionName("Send a notification mail");

compensateJavaAction[0]

.setActionDescription("Send notification mail to administrator");

compensateJavaAction[0].setMethodName

("sendEmail(String, String, String, String, String, String,

ServerEnactmentContext)");

compensateJavaAction[0].setClassName(CLASS_NAME_JAVA_ACTION);

compensateJavaAction[0].setArgumentsUDANames

("<E>uda.MailTo</E><E>uda.MailFrom</E>

<E>uda.MailCc</E><E>uda.MailBcc</E><E>uda.MailSubject</E>

<E>uda.MailBody</E><E>sec</E>");

4. 初期量を取得するJava Actionに補償JavaActionを追加します。このJava ActionはFillOutActivityノードの開始Java Actionセット

の一部です。ComplexPlan.javaのサンプル内にすべての定義があります。

....

JavaActionSet foPJavaActionSet = WFObjectFactory.getJavaActionSet();

JavaAction[] foPJavaActions = foPJavaActionSet.createJavaActions(3);

foPJavaActions[0]

.setActionDescription("Sets initial value for Qty");

foPJavaActions[0].setActionName("load initial qty");

foPJavaActions[0].setMethodName("getInitialQty");

foPJavaActions[0].setClassName(CLASS_NAME_JAVA_ACTION);

foPJavaActions[0].setReturnValueUDAName("Qty");

foPJavaActions[0].setJavaActionSet(compensateJavaActionSet,

JavaActionSet.ACTION_COMPENSATE);

....

Defining and Assigning Error Actions to a Java Action

以下のサンプルは関連するJava Actionの実行が失敗した場合に実行されるエラーアクションセットを定義します。 エントリはログファイ

ルに書き込まれ、プロセスインスタンスの処理は添付を追加できない場合に続行されます。添付追加のメソッドはSampleJavaActionsサンプルで定義されます。このJava ActionはFillOutActivityノードの開始アクションとして実行されます。ComplexPlan.javaサンプル内に

このサンプルの全体コードがあります。

エラーJava Actionセットを定義、割り当てするには、以下の操作を行います。

1. WFObjectFactoryのクラスからgetJavaActionSet()を使用して、新しいJavaActionSetオブジェクトを作成します。

JavaActionSet errorJavaActionSet =

WFObjectFactory.getJavaActionSet();

2. JavaActionSetのJava Actionsの必要数を生成します。以下の例では、二つのJava Actionsが生成しています。

JavaAction[] errorJavaActions =

errorJavaActionSet.createJavaActions(2);

3. Java Actionを定義します。addAttachment()メソッドがSampleJavaActionsのサンプルで定義されることに注意します。

errorJavaActions[0]

.setActionDescription("Writes a log entry with exception");

errorJavaActions[0]

- 73 -

Page 84: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

.setMethodName("writeLogEntryWithException(String,ServerEnactmentContext)");

errorJavaActions[0].setClassName(CLASS_NAME_JAVA_ACTION);

errorJavaActions[0]

.setArgumentsUDANames("<E>uda.ProcessLevelErrorLogEntry</E><E>sec</E>");

errorJavaActions[0].setCatchException(true);

errorJavaActions[1].setActionName("Continue process");

errorJavaActions[1].setActionDescription("Catches FileNotFoundExceptions

and continues the execution of the process");

errorJavaActions[1].setMethodName("noop()");

errorJavaActions[1]

.setClassName("com.fujitsu.iflow.actions.IflowActions");

errorJavaActions[1]

.setEditorClassName("com.fujitsu.iflow.actions.IflowActions");

errorJavaActions[1]

.setCatchException(true);

4. 添付を追加するJava Actionに上のエラーJava Actionセットを追加します。このJava ActionはFillOutActivityノードの開始Java Actionセットの一部です。ComplexPlan.javaのサンプル内の全体の定義があります。

....

foPJavaActions[2].setJavaActionSet(errorJavaActionSet,

JavaActionSet.ACTION_ERROR);

...

6.3.10 エラーの場合のJava Action構造と実行プラン

ここでは補償アクションセット、エラーアクションセットを含むJava Actionセットで可能な構造について説明します。さらに、Java Actionに発生するどんなエラーにどのアクションがどのオーダーで実行されるかを示します。

「通常」のJava Actionセットは複数のJava Actionsから成り立っています。さらに、Java Actionセット (例:開始Java Actionセット)で「通常」

のJava Actionによって起きた例外処理にエラーJava Actionを定義できます。「通常」のJava Actionセットの実行が例外を起こし、外部

のシステムのロールバックが必要な場合にアクティブになる「通常」のJava Actionセットの補償アクションセットを定義できます。

- 74 -

Page 85: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

図6.1 Java Actionセットの構造

通常のJava Actionセットの例

2つのJava Actions(JA_1とJA_2)を包括する開始Java Actionセットを定義したと仮定します。

・ JA_1: 一つのエラーJava ActionとエラーJava Actionセット (EJA_JA_1)と二つの補償Java Actionsと補償Java Actionセット

(CJA_1_JA_1とCJA_2_JA_2)が定義されています。

- 75 -

Page 86: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

・ JA_2: 二つのエラーJava Action(EJA_1_JA_2とEJA_2_JA_2)とエラーJava Actionセットは定義されていますが、補償Java Actionセットも利用可能ではありません。

図6.2 通常のJava Actionセット

エラーの場合の実行プラン

以下の表は複数のエラー状態のリストです。エラーの場合にどのJava Actionsが実行されるかを説明しています。

状態 結果

JA_1が、FileNotFoundExceptionをスロー。 この状態ではエラーアクションが定義されていないため、プロセスインスタンス

はエラー状態に入ります。

JA_1が、NullPointerExceptionをスロー。 例外が見つかり、EJA_JA_1が実行されます。プロセスインスタンスが続行し、

すなわち、JA_2が実行されます、その後、トランザクションがコミットされます。

JA_1が、正しく実行。

JA_2が、NullPointerExceptionをスロー。

NullPointerExceptionがjava.lang.Exceptionのサブクラスなので、EJA_1_JA_2は実行されます。例外が見つかりトランザクションはコミットされプロセスインス

タンスは続行されます。

JA_1が、正しく実行。

JA_2が、NullPointerExceptionをスロー。

FileNotFoundExceptionがjava.lang.Exceptionとjava.io.IOException

のサブクラスなので、EJA_1_JA_2とEJA_2_JA_2は実行されます。 しかし、

EJA_2_JA_2でエラー状態へ遷移するを設定しています。 この設定は

EJA_1_JA_2の設定をオーバーライドします。

よって、二つのエラーアクションの実行後、プロセスインスタンスがエラー状態

になる前に補償アクションCJA_1_JA_1とCJA_2_JA_1が実行されます。

JA_1とJA_2が正しく実行。 エラーも補償アクションも実行されません。プロセスインスタンスは通常状態の

ままです。

- 76 -

Page 87: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

詳細は、「6.3.9 Java Actionのエラー処理」および「6.3.8 エラーJava Actionの使用」を参照してください。

6.3.11 中止時、一時停止時、および再開時アクションの使用

Interstage BPM管理者が一時停止、再開、中止コマンドを呼び出し、プロセスインスタンスの状態が変わる前に一時停止時、再開時、

および中止時アクションは特定のアクション実行に使用します。

他のJava Actionセット同様、中止時、再開時、および一時停止時アクションセットは複数のJava Actionを含むことができます。それぞ

れのセットはノードレベル上およびプロセス定義レベル上で定義できます。中止、一時停止、再開コマンドが出たときに、それぞれのア

クティビティが活性化している場合のみ、 初にノードレベルアクションセットがいつも実行されます。プロセス定義レベルアクションセッ

トはコマンドが出されるときに活性化したアクティビティに関わらず実行されます。

以下は、プロセス定義に中止時アクションの割り当てる例です。使用されているJava Actionは、ComplexPlanクラスの一部です。例のクラス

ComplexPlanを参照するにはJavaActionインタフェースからsetClassName()を使用します。

中止Java Actionセットをプロセス定義レベルに設計して、割り当てるには、以下の手順に従います。

1. WFObjectFactoryクラスからgetJavaActionSet()を使用し、新しいJavaActionSetオブジェクトを作成します。

onAbortJavaActionSet = WFObjectFactory.getJavaActionSet()

2. JavaActionSetのJava Action必要数を生成します。

以下の例では、一つのJava Actionが発生しています。

JavaAction[] onAbortJavaAction =

onAbortJavaActionSet.createJavaActions(1);

3. Java Action Setを定義します。

onAbortJavaAction[0].setActionName("WriteLogEntry");

onAbortJavaAction[0].setActionDescription("Writes a log entry if process is aborted");

onAbortJavaAction[0].setMethodName("writeLogEntry(String)");

onAbortJavaAction[0].setClassName(CLASS_NAME_JAVA_ACTION);

onAbortJavaAction[0] .setArgumentsUDANames("<E>uda.OnAbortLogEntry</E>");

onAbortJavaActionSet.setJavaActions(onAbortJavaAction);

4. プロセス定義にJavaActionSetを割当てます。

plan.setJavaActionSet(onAbortJavaActionSet,

JavaActionSet.PLAN_ABORT);

6.4 フィルターとソートのAPIプロセス定義、プロセスインスタンス、およびワークアイテムのリストを、プロセス定義名、プロセスの起案者、ワークアイテム名、および

そのほかの様々なフィールドでフィルターすることができます。この機能を使用して、特定のフィルター条件に一致するリストを取得す

ることができます。たとえば、起案者が「ユーザX」のすべてのプロセスインスタンスを取得する、または「注文」というタイトルのプロセス

インスタンスから作成されたすべてのワークアイテムを取得する、といったフィルター条件を設定できます。複数のフィールドでフィル

ターすることもできます。フィールドのテーブルおよび有効なリストについては、次の節で解説します。

6.4.1 WFObjectListインタフェース

このインタフェースは、有効なフィルターを使用してリストをフィルターおよびソートするために使用することができるフィールドを識別す

る定数を提供します。以下にその例を示します。

フィルター リストのフィールド 説明

Filter.AllPlansFilter.MyPlans

LISTFIELD_APPLICATION_IDENTIFIERLISTFIELD_PLAN_IDLISTFIELD_PLAN_NAMELISTFIELD_PLAN_OWNER

アプリケーションIDプロセス定義IDプロセス定義名

プロセス定義の所有者

- 77 -

Page 88: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

フィルター リストのフィールド 説明

LISTFIELD_PLAN_STATELISTFIELD_PLAN_IDENTIFIER

プロセス定義の状態

プロセス定義の識別子

Filter.AllProcessesFilter.AllActiveProcessesFilter.MyProcessesFilter.MyActiveProcessesFilter.MyInactiveProcessesFilter.AllInactiveProcessesFilter.AllProcessesInErrorState

LISTFIELD_APPLICATION_IDENTIFIERLISTFIELD_PLAN_IDLISTFIELD_PLAN_NAMELISTFIELD_PLAN_IDENTIFIERLISTFIELD_PROCESSINSTANCE_IDLISTFIELD_PROCESSINSTANCE_STATELISTFIELD_PROCESSINSTANCE_INITIATORLISTFIELD_PROCESSINSTANCE_PRIORITYLISTFIELD_PROCESSINSTANCE_NAMELISTFIELD_PROCESSINSTANCE_TITLELISTFIELD_PROCESSINSTANCE_PARENTIDLISTFIELD_PROCESSINSTANCE_CREATEDTIMELISTFIELD_PROCESSINSTANCE_CLOSEDTIMELISTFIELD_PROCESSINSTANCE_OWNER

アプリケーションIDプロセス定義IDプロセス定義名

プロセス定義IDプロセスインスタンスIDプロセスインスタンスの状態

プロセスインスタンスの開始

プロセスインスタンスの優先度

プロセスインスタンス名

プロセスインスタンスタイトル

プロセスインスタンスの親プロセスIDプロセスインスタンスの作成日

プロセスインスタンスの終了日

プロセスインスタンスの所有者

Filter.AllWorkItemsFilter.AllInactiveWorkItemsFilter.MyWorkItemsFilter.MyAcceptedWorkItemsFilter.MyActiveWorkItemsFilter.MyDeclinedWorkItems

LISTFIELD_APPLICATION_IDENTIFIERLISTFIELD_PLAN_IDLISTFIELD_PLAN_NAMELISTFIELD_PLAN_IDENTIFIERLISTFIELD_PROCESSINSTANCE_IDLISTFIELD_PROCESSINSTANCE_STATELISTFIELD_PROCESSINSTANCE_NAMELISTFIELD_PROCESSINSTANCE_TITLELISTFIELD_PROCESSINSTANCE_INITIATORLISTFIELD_PROCESSINSTANCE_PRIORITYLISTFIELD_PROCESSINSTANCE_CREATEDTIMELISTFIELD_WORKITEM_IDLISTFIELD_WORKITEM_ASSIGNEELISTFIELD_WORKITEM_STATELISTFIELD_WORKITEM_CREATEDTIMELISTFIELD_WORKITEM_DUEDATELISTFIELD_WORKITEM_PRIORITYLISTFIELD_WORKITEM_NAMELISTFIELD_WORKITEM_ACTIVITYINSTANCEID

アプリケーションIDプロセス定義IDプロセス定義名

プロセス定義識別子

プロセスインスタンスIDプロセスインスタンス状態

プロセスインスタンス名

プロセスインスタンスタイトル

プロセスインスタンスの開始

プロセスインスタンスの優先度

プロセスインスタンスの作成日

ワークアイテムIDワークアイテムの割当て

ワークアイテムの状態

ワークアイテムの作成日

ワークアイテムの期限

ワークアイテムの優先度

ワークアイテム名

ワークアイテムアクティビティインスタ

ンスID

Filter.AllArchivedPlans LISTFIELD_PLAN_IDLISTFIELD_PLAN_NAME

プロセス定義IDプロセス定義名

Filter.AllArchivedProcesses LISTFIELD_PLAN_IDLISTFIELD_PROCESSINSTANCE_IDLISTFIELD_PROCESSINSTANCE_NAME

プロセス定義IDプロセスインスタンスIDプロセスインスタンス名

Filter.MyFutureWorkItemsFilter.AllFutureWorkItems

LISTFIELD_APPLICATION_IDENTIFIERLISTFIELD_PLAN_IDLISTFIELD_PLAN_NAMELISTFIELD_PLAN_IDENTIFIER

アプリケーションIDプロセス定義IDプロセス定義名

プロセス定義識別子

- 78 -

Page 89: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

フィルター リストのフィールド 説明

LISTFIELD_PROCESSINSTANCE_IDLISTFIELD_PROCESSINSTANCE_STATELISTFIELD_PROCESSINSTANCE_NAMELISTFIELD_PROCESSINSTANCE_TITLELISTFIELD_PROCESSINSTANCE_INITIATORLISTFIELD_PROCESSINSTANCE_PRIORITYLISTFIELD_PROCESSINSTANCE_CREATEDTIMELISTFIELD_WORKITEM_IDLISTFIELD_WORKITEM_ASSIGNEELISTFIELD_WORKITEM_PRIORITYLISTFIELD_WORKITEM_NAMELISTFIELD_WORKITEM_ACTIVITYINSTANCEID

プロセスインスタンスIDプロセスインスタンス状態

プロセスインスタンス名

プロセスインスタンスタイトル

プロセスインスタンスの開始

プロセスインスタンスの優先度

プロセスインスタンスの作成日

ワークアイテムIDワークアイテムの割当て

ワークアイテムの優先度

ワークアイテム名

ワークアイテムアクティビティインスタ

ンスID

以下の定数は、ソート順を示します。

・ SORTORDER_ASCENDING(昇順)

・ SORTORDER_DESCENDING(降順)

以下の定数は、SQLの演算子を示します。

・ SQLOP_EQUALTO (一致する)

・ SQLOP_GREATERTHAN(以上)

・ SQLOP_LESSTHAN(以下)

・ SQLOP_GREATERTHANOREQUALTO(より大きい)

・ SQLOP_LESSTHANOREQUALTO(より小さい)

・ SQLOP_NOTEQUALTO(一致しない)

・ SQLOP_LIKE(部分一致)

・ SQLOP_NOTLIKE(部分一致しない)

・ SQLOP_IN(含む)

フィルターを使用した例は、「5.3.3 ワークアイテムリストの作成」、「7.4.1 プロセス定義リストの作成」、および「7.5.1 プロセスインスタンス

リストの作成」を参照してください。

6.4.2 フィルターとソートのメソッド

フィルターおよびソートを行うには、以下のメソッドを利用します。これらのメソッドの利用方法を次節で示しています。

・ addFilter(): 取得するリストに対するフィールドを識別する定数のフィルター条件を追加します。パラメータに渡される値は、“where <リストのフィールドの列名> <SQL演算子> <指定する値>”という書式で記述します。

・ addFilter(): 取得するリストに対するUDAによるフィルター条件を追加します。パラメータに渡される値は、“where <UDA> <SQL演算子

> <指定する値>”という書式で記述します。

・ addSortOrder(): 取得するリストに対するフィールドを識別する定数のソート順を追加します。

・ addSortOrder(): 取得するリストに対するUDAによるソート順を追加します。

・ getNextBatch(): openBatchedList()で取得したオブジェクトのリストを引数batchSizeの数だけ返します。 後に取得するリストの数

は、引数batchSizeより小さい可能性があります。リスト内に返すエレメントが無い場合、nullが返されます。

詳細については、『API Javadocマニュアル』を参照してください。

- 79 -

Page 90: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

6.4.3 メソッドの呼び出し手順

以下のサンプルは、メソッドの呼び出し順序を示しています。

wfol = WFObjectFactory.getWfObjectList()

wfol.addFilter(…)

wfol.addSortOrder(…)

Object[] listElements = null;

int batchSize = 10;

wfol.openBatchedList(…)

while ((listElements = wfol.getNextBatch(batchSize)) != null) {

// process elements in listElements array

}

openBatchedList()の呼出しは、addFilter()、addSortOrder()のいずれかを呼出した後かつ、getNextBatch()を呼出す前であることを確認

します。メソッドがほかの順序で呼び出された場合、WFObjectListの動作は保証されません。

6.4.4 リストに使用するUDAの識別

プロセス定義、プロセスインスタンス、およびワークアイテムのリストをUDAの値でフィルターすることができます。ユーザはUDAの値に

基づいたフィルター条件に一致するリストを取得することができます。たとえば、「UDAの変数の値が指定の値より大きいワークアイテ

ムをすべて取得 > 5000.*」などの条件です。それには、UDAにWorkListUDAフラグが設定されていることを確認してください。プロセ

ス定義をデザインするときに、DataItemRefインタフェースのmarkAsWorkListUDA()を使用して、このフラグを設定できます。詳細につ

いては、「6.7.2 ワークリストUDA」を参照してください。

上記のように識別されていないUDAを使用してリストのフィルターやソートを行った場合、リストの動作は保証されません。

6.4.5 ソートとフィルター

リストは、フィールドを組み合わせてソートしたり、フィルターしたりすることができますが、以下の制限があります。

フィールドを識別する定数のソートと、UDAによるソートは同時に指定することができません。

以下の表は、フィールドまたはUDAフィルタ、およびソート順の有効な組み合わせを示しています。

1つのUDAフィルター 1つのUDAソート順 1つ以上のフィールドフィ

ルター

1つ以上のフィールドソー

ト順

1つのUDAフィルター -

1つのUDAソート順 同一(注)* -

1つ以上のフィールド

フィルター

有効 有効 -

1つ以上のフィールド

ソート順

有効 無効 有効 -

注: ソートとフィルターの両方が同一のUDA上で行われる必要があります。

6.4.6 バッチ処理の注意点

バッチでリストを取得することができます。データベース内のレコード数が多い場合、数件のレコードが必要な場合でも、リストを開くに

は時間がかかります。openBatchedListおよびgetNextBatch(int howMany)を使用して、リストをバッチで取得することができます。バッチ

処理は、フィルターとソートが影響します。すなわち、Interstage BPMは、フィルターおよびソートしたリストのバッチを取得します。目的

の結果を取得するには、「6.4.3 メソッドの呼び出し手順」の手順に従ってください。

注意

フィルターやソートを使用した場合、バッチの取得スピードとリスト全体の取得スピードは、フィルターやソートに使用したフィールドまたは

UDAの値の分散によって異なります。値の分散が高いほど、バッチを使用することによって効率性が高まります。

- 80 -

Page 91: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

たとえば、プロセスインスタンスのリストがプロセス名でソートされていて、すべてのプロセスインスタンスが同じプロセス名の場合は、内

部的にバッチを取得すると、リスト全体を取得するよりも効率性が低くなります。それに対して、ほとんどのプロセスインスタンスが違うプ

ロセス名だった場合は、バッチを使用することによって効率性が高まります。

6.4.7 リストの更新通知

リストの更新通知は、ワークリストなどの更新をユーザに通知する機能です。バッチ、フィルター、ソート順などを使用していないリストに

対してサポートしています。以下のメソッドは、リストの更新通知機能を使用している場合にModelExceptionを送出します。

・ addFilter()

・ addSortOrder()

・ getNextBatch()

6.5 複数オブジェクトの情報の一括取得

WFDetailsListインタフェースを使用すると、複数のオブジェクトに関する情報を効率的に一括して取得できます。この機能は、一括処

理とも呼ばれます。

現在、インタフェースには、次の処理を行うメソッドがあります。

・ 複数のプロセスインスタンスのユーザ定義属性(UDA)の一括取得

・ 複数のワークアイテムの外向き矢印の一括取得

ここでは、このインタフェースの使用方法の一般的な手順を説明します。複数のプロセスインスタンスのUDAを取得するプログラムの例

を挙げます。完全なプログラムコードはサンプルファイルBatchDetailsRetrieval.javaにあります。このサンプルファイルには、複数のワー

クアイテムの外向き矢印を取得する方法の例も含まれています。

複数のプロセスインスタンスのUDAを一括取得するには、以下の手順に従います。

1. UDAを取得したいプロセスインスタンスのIDのリストを用意します。そのためには、WFObjectListインタフェースが提供するプロ

セスインスタンスフィルターの1つを使用します。

以下のプログラム例では、一括処理機能の準備段階として、ログインユーザの活性プロセスインスタンスを取得しています。

WFObjectList list = WFObjectFactory.getWFObjectList(session); list.openBatchedList(Filter.MyActiveProcesses);

Object[] batch = list.getNextBatch(10);

フィルターの詳細については、「6.4 フィルターとソートのAPI」を参照してください。

2. プロセスインスタンスが見つかったら、それぞれのIDを配列に格納します。

if (batch == null) {

< ... >

return;

}

long[] idValues = new long[batch.length];

for (int i = 0; i < batch.length; i++) {

idValues[i] = ((ProcessInstance) batch[i]).getId();

}

3. その後の処理で必要でない場合、プロセスインスタンスのリストはクローズします。

list.closeList();

4. 前の手順で取得したすべてのプロセスインスタンスのUDAを取得します。そのためには、WFDetailsListのインスタンスを生成し、

getUDAsForProcessInstances()を呼びます。

WFDetailsList detailsList = WFObjectFactory.getWFDetailsList(session);

ProcessInstancesUDASet udaInfo = detailsList

.getUDAsForProcessInstances(idValues);

- 81 -

Page 92: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

udaInfoオブジェクトがプロセスインスタンスのUDAをJava Mapに格納します。プロセスインスタンスのIDはキーとして使用され、

そのプロセスインスタンスのUDAを表すもう1つのJava Mapが値として使用されます。

次の例では、特定のプロセスインスタンスのUDAを取得します。

5. 特定のプロセスインスタンスのUDAを取得するには、ProcessInstancesUDASetクラスのgetUDAsForProcessInstance()を使用しま

す。

for (int i = 0; i < idValues.length; i++) {

Map udaData = udaInfo.getUDAsForProcessInstance(idValues[i]);

< ... >

}

この例では、プロセスインスタンスのUDAがudaDataという名前のJava Mapに格納されます。このMapは、UDAの名前をキーとし、

UDAData型のオブジェクトを値とします。UDADataオブジェクトは、個々のUDAの名前、データ型、値を格納します。

6. プロセスインスタンスの個々のUDAを処理するには、Java Iteratorを使用してプロセスインスタンスのUDAを反復処理します。

UDADataクラスのgetUdaName()、getUdaType()、getUdaValue()を使用すると、UDAの名前、データ型、値を取得できます。

以下の例では、Map udaDataの各要素で反復するのに必要なJava Iteratorを生成します。iterator.next()が返すオブジェクトはそ

れぞれUDADataオブジェクトにキャストされます。 終的に、UDAの名前、データ型、値を、その後の処理のために取得します。

Iterator iterator = udaData.keySet().iterator();

while (iterator.hasNext()) {

UDAData data = (UDAData) udaData.get(iterator.next());

System.out.println("\tUDA name: '" + data.getUdaName() + "'");

System.out.println("\tUDA type: '" + data.getUdaType() + "'");

System.out.println("\tUDA value: '" + data.getUdaValue() + "'\n");

}

6.6 プロセスコメントの使い方

ユーザ間の柔軟なコミュニケーションを容易にするために、Interstage BPMはユーザにノードインスタンスやプロセスインスタンスにコメ

ントを追加することができます。

com.fujitsu.iflow.model.workflowパッケージに含まれるプロセスインスタンスとノードインスタンス インタフェースの以下のAPIを使用し

て、コメントの追加、取得、および、削除ができます。

注意

以下のAPIは、プロセスインスタンスおよびノードインスタンスの両方で使用することができます。

・ コメントを取得するには、-getComments()メソッドを使います。このAPIは、プロセスインスタンスやノードインスタンスのコメントの配

列を返します。すべてのユーザがコメントを取得することができます。

例)

- Activityノードのノードインスタンスオブジェクトであるactivityから、activity.getComments();を実行します。

- Process Instanceのオブジェクトであるpiから、pi.getComments() を実行します。

com.fujitsu.iflow.model.workflowパッケージに含まれるCommentインタフェースを使って、コメントの詳細を取得することができま

す。

例)

- getMessage():コメントのメッセージを返します。

- getId():コメントのコメントIDを返します。

- getUserId():コメントを追加したユーザのユーザIDを返します。

- getTimeStamp()ミリ秒で、コメントが追加された時間のタイムスタンプを返します。

利用可能なクラスとメソッドに関する詳細については、『API Javadocマニュアル』を参照してください。

- 82 -

Page 93: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

以下のサンプルコードはProcess Instanceオブジェクトpiから個々のコメント情報を取得する例を示しています。

Comment [] comments = pi.getComments();

for(int count=0;count<comments.length;count++){

System.out.println("CommentId: "+comments[count].getId());

Date date = new Date(comment[count].getTimeStamp());

System.out.println("Timestamp: "+ date);

System.out.println("UserId: "+comments[count].getUserId());

System.out.println("CommentMsg: "+comments[count].getMessage());

System.out.println("Deleted flag: "+comments[count].isDeleted());

}

また、ProcessInstance.getAllComments()APIを使って、ユーザはプロセスインスタンスのコメントと、関連しているノードインスタンス

のすべてのコメントを、取得できます。

次のサンプルコードは、プロセスインスタンスオブジェクトpiとノードインスタンスのプロセスインスタンス オブジェクトpiから、すべて

のコメントを取得するコードです。

Comment [] comments = pi.getAllComments();

注意

プロセスインスタンスまたはノードインスタンスにコメントがない場合、空のComment配列が返ります。

・ コメントを追加するには、-addComments()メソッドを使います。このAPIは、ユーザが入れたコメントをプロセスインスタンスやノードイ

ンスタンスに追加します。管理者、プロセスインスタンスの所有者、プロセスインタンスの作成者、およびワークアイテムの担当者

が、プロセスインスタンスのコメントを追加することができます。また、管理者、プロセスインスタンスの所有者、プロセスインタンスの

作成者、およびワークアイテムの担当者が、ノードインスタンスのコメントを追加することができます。

注意

- コメントはActivityノード、Votingノード、Compoundノード、およびDynamicActivityノードのインスタンスに追加することができま

す。

- プロセスインスタンスがほかのユーザにロックされていない場合にだけ、ノードインスタンスとプロセスインスタンスにコメントを追

加することができます。

以下のサンプルコードは、Activityノードのノードインスタンスオブジェクトであるactivityに、コメントを追加する例を示しています。

String comment = "This is a comment on the node instance";

activity.addComment(comment);

以下のサンプルコードは、プロセスインスタンスのオブジェクトであるpiに、コメントを追加する例を示しています。

String comment = "This is a comment on the process instance";

pi.addComment(comment);

・ コメントを削除するには、-deleteComment()メソッドを使います。このAPIは、コメントをユーザが削除したことを表すフラグを設定しま

す。コメントを削除できるのは、コメントを追加した人および管理者です。

注意

コメントは、プロセスインスタンスがほかのユーザからロックされていないときにだけ、削除することができます。

次のサンプルコードは、Activityノードのノードインスタンスオブジェクトであるactivityから、コメントを削除する例です。

Comment comments = activity.getComments();

long commentId = comments[0].getId();

activity.deleteComment(commentId);

- 83 -

Page 94: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

注意

削除したいコメントのコメントIdが、コメントを削除したいノードインスタンスまたはプロセスインスタンスのものであることを確認してく

ださい。プロセスインスタンスに属するコメントのコメントIdを使ってノードインスタンスからコメントを削除しようとすると、エラーが発生

します。プロセスインスタンスに対しても同様です。

次のサンプルコードは、プロセスインスタンスのオブジェクトであるpiから、コメントを削除する例です。

Comment comments = pi.getComments();

long commentId = comments[0].getId();

pi.deleteComment(commentId);

6.7 特別なユーザ定義属性のプロパティ

6.7.1 タイプXMLのユーザ定義属性でのワーク

プロセスで使用されるデータをモデル化するとき、XML形式に構造化されたデータを処理する場合があります。例えば、プロセス実行

の間に、外部システムを経由する場合などです。

Interstage BPMはXMLデータの特別なデータタイプを提供します。XML形式のユーザ定義属性(UDAs)にアクセスし、要素やシング

ルエレメント、属性と同様に全体のXML構造を操作します。XPath評価は、さらなる処理のためのXMLデータからコンポーネントを選

択するのに使用します。

XML形式のUDAデータを保存する前に、Interstage BPMサーバはデータが正しいフォームかをチェックします。正しいフォームのXMLデータのみ保存されます。任意に各UDAにXMLスキーマを指定して、そのスキーマに対してXMLデータを有効にできます。

他のUDAのようにXML形式のUDAsの作成、アップデート、読み込み、削除が可能です。XML形式のUDAsに以下の追加メソッドが

あります。

・ XSDスキーマの設定および取得

・ ファイルとしてUDA値を設定および取得

・ XPath式を使用してのUDA値を設定および取得。全体のXML構造、要素、およびシングルエレメントの値の設定および取得が可

能。

・ UDAのXMLコンテンツの有効化

XML形式のUDAマッピング時、ワークアイテムインタフェースのDataItemMappingElementクラスで

・ すべてのXML構造をすべてのXML構造にマッピング

・ XML形式の別のUDAにシングルエレメントをマッピング

・ 別のXML要素にXML要素をマッピング

・ すべてのXML構造にXML要素をマッピング

以下にXML形式のUDAsの利用例があります。サンプルコードの全体については、ComplexPlan.javaサンプルファイルを参照してくだ

さい。

XML形式UDAsを利用するには、以下の手順に従います。

1. UDAs追加する場合は、データタイプにTYPE_XMLを指定します。

DataItemRef dataRefOrder = procDef.addDataItemRef(XMLUDA_BOOKSTORE,

DataItemRef.TYPE_XML, XMLVAL_BOOKSTORE);

XMLUDA_BOOKSTORE定数はUDAの名で定義します。

private final static String XMLUDA_BOOKSTORE = "XMLBookstore";

XMLVAL_BOOKSTORE定数は以下のXML構造のUDA値を定義します。

- 84 -

Page 95: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

private final static String XMLVAL_BOOKSTORE =

"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>"

+ "<bookstore>"

+ "<book category=\"COOKING\">"

+ "<title lang=\"en\">Everyday Italian</title>"

+ "<author>Giada De Laurentiis</author>"

+ "<year>2005</year>"

+ "<price>30.00</price>"

+ "</book>"

+ "<book category=\"CHILDREN\">"

+ "<title lang=\"en\">Harry Potter</title>"

+ "<author>J K. Rowling</author>"

+ "<year>2005</year>"

+ "<price>29.99</price>"

+ "</book>"

+ "<book category=\"WEB\">"

+ "<title lang=\"en\">XQuery Kick Start</title>"

+ "<author>James McGovern</author>"

+ "<author>Per Bothner</author>"

+ "<author>Kurt Cagle</author>"

+ "<author>James Linn</author>"

+ "<author>Vaidyanathan Nagarajan</author>"

+ "<year>2003</year>"

+ "<price>49.99</price>"

+ "</book>"

+ "<book category=\"WEB\">"

+ "<title lang=\"en\">Learning XML</title>"

+ "<author>Erik T. Ray</author>"

+ "<year>2003</year>"

+ "<price>39.95</price>" + "</book>" + "</bookstore>";

2. XML構造のシングルエレメントを読みこむには、XPath式を使用してエレメントを指定します。ここでは 初の本の価格です。

DataItem di = pi.getDataItem(XMLUDA_BOOKSTORE);

// retrieve the price for the first book

String price = di.getElementValue("/bookstore/book[1]/price/text()");

logger.log(Logger.DEBUG, "Price is: " + price);

3. 要素でのXMLノードの名前を読み込みます。ここでは2番目の本を定義するXMLノードの名前です。

org.w3c.dom.Node subNode = di.getSubTreeValue("/bookstore/book[2]");

logger.log(Logger.DEBUG, "Node name is: " +

subNode.getNodeName());

Interstage BPMがNodeインタフェースを提供するので、XMLノードの処理には必ずorg.w3c.dom.Nodeインタフェースを使用して

ください。

4. XMLエレメントの値を比較します。

String xPath = "/bookstore/book[3]/author/text()";

String expAuthor = "Erik T. Ray";

logger.log(Logger.DEBUG, "Author: " + di.getElementValue(xPath));

if (di.getElementValue(xPath).equals(expAuthor)) {

logger.log(Logger.DEBUG, "Expected author found");

6.7.2 ワークリストUDA多くのアプリケーションでは、作業者が次に行う作業のリストを表示する必要がありますが、その際、特定のUDAの値を表示するワーク

リストを表示することができます。一般のアクセスでは、ワークリストからUDAの値へのアクセスは遅くなることがあります。ワークリストUDAは、より高速なアクセス方法を提供しています。さらに、UDAをワークリストUDAとすることで、そのUDAのワークリストエレメントのリスト

をソートしたり、フィルターしたりすることができます。

- 85 -

Page 96: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

ワークリストUDAは、ワークリストオブジェクトにオブジェクトとして含まれます。ワークリストオブジェクトが生成されると、アクティビティに

関係することなく同じ内容のUDA値が含まれます。これらの値は、ワークアイテムオブジェクトと共に含まれており、すぐに読み込むこと

ができます(プロセスインスタンス全体をモデルに読み込む必要はありません)。

Model APIを使用して特定のワークアイテムのUDA情報を取得するには、2つのメソッドを使用することができます。まず、ワークアイテ

ムオブジェクトを取得します。次に、getDataItems()を使用して、そのワークアイテムのすべてのUDA(DataItem)を取得するか、または

getWorklistDataItems()メソッドを使用して、ワークアイテムのDataItemで構成されているサブセットを取得します。

WorkItemインタフェースのgetWorklistDataItems()メソッドを使用するには、特定のDataItemをワークリストUDAとして、マークする必要

があります。プロセス定義をデザインするときに、DataItemRefインタフェースのmarkAsWorkListUDA()を使用して、このマークを設定

できます。

ワークリストUDA特有のメソッドには、以下のものがあります。

・ markAsWorkListUDA(): UDAをワークリストUDAとしてマークします。

・ boolean isWorkListUDA(): UDAがワークリストUDAかどうかを確認します。

以下のサンプルコードでは、プロセス定義作成時に、UDAを定義し、それらをワークリストUDAとしてマークする方法を示しています。

プロセス定義への処理は、ComplexPlan.javaのサンプルファイルを参照してください。

protected final static String WLUDA_PRICE = "Price";

protected final static String WLUDA_QTY = "Qty";

protected final static String WLUDA_TOTAL = "Total";

//*** Definition of UDAs ***

DataItemRef udaPrice = plan.addDataItemRef(WLUDA_PRICE,

DataItemRef.TYPE_FLOAT, "0.0");

DataItemRef udaQty = plan.addDataItemRef(WLUDA_QTY,

DataItemRef.TYPE_INTEGER, "0");

DataItemRef udaTotal = plan.addDataItemRef(WLUDA_TOTAL,

DataItemRef.TYPE_FLOAT, "0.0");

//Mark the UDAs as Worklist UDAs.

udaPrice.markAsWorkListUDA(true);

udaQty.markAsWorkListUDA(true);

udaTotal.markAsWorkListUDA(true);

たとえば、これらのワークリストUDAを使用して、UDAの値をもとにしたフィルター条件に一致するプロセスインスタンスを取得すること

ができます。プログラミングサンプルは、ComplexPlan.javaサンプルファイルのlistProcsByUDA()メソッドを参照してください。

6.8 拡張属性の使用

Interstage BPMで拡張属性が定義できます。拡張属性はInterstage BPM用ではないその他の情報を保存します。定義、ノードおよび

矢印の処理に拡張属性を割り当てることができます。

拡張属性はXMLドキュメントとして指定されます。拡張属性値は常にString型です。以下のXMLスキーマは拡張属性の定型を定義し

ます。

<xsd:element name="ExtendedAttributes">

<xsd:complexType>

<xsd:sequence>

<xsd:element ref="xpdl:ExtendedAttribute" minOccurs="0"

maxOccurs="unbounded"/>

</xsd:sequence>

</xsd:complexType>

</xsd:element>

<xsd:element name="ExtendedAttribute">

<xsd:complexType mixed="true">

<xsd:choice minOccurs="0" maxOccurs="unbounded">

<xsd:any minOccurs="0" maxOccurs="unbounded"/>

</xsd:choice>

<xsd:attribute name="Name" type="xsd:NMTOKEN" use="required"/>

<xsd:attribute name="Value" type="xsd:string"/>

</xsd:complexType>

</xsd:element>

- 86 -

Page 97: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

拡張属性を使用すると、XMLドキュメントはXMLスキーマを確実に満たします。以下のサンプルは有効なインスタンスです。

<ExtendedAttributes>

<ExtendedAttribute Name="SomeAttributeName" Value="Some value"/>

<ExtendedAttribute Name="AnotherAttributeName" Value="200"/>

</ExtendedAttributes>

プラン、ノード、および矢印インタフェースは拡張属性に関連する以下のメソッドを提供します。

・ setExtendedAttributes(org.w3c. dom.Document attrs): 拡張属性をプロセス定義、ノードまたは矢印に割り当てます。attrsは、割当

てられる拡張属性を含むXMLドキュメントです。

・ getExtendedAttributes(): プロセス定義、ノードまたは矢印のすべての拡張属性を含むXMLドキュメントに戻ります。

ComplexPlan.javaは、拡張属性がどのように働くかを示すサンプルを含みます。サンプルプロセス定義CxPD_PurchaseOrderは、各国

で使用できるように作成されます。したがって、プロセス定義名やノード名といった特定のストリングは、各国語で利用できる必要があり

ます。拡張属性は言語特定名の保存に使用されます。

以降、拡張属性の割当て、取得について説明します。

6.8.1 拡張属性の割当て

プロセス定義、ノードまたは矢印に拡張属性を割り当てるには、以下の手順に従います。

1. エレメントに割り当てたい拡張属性を含むXMLドキュメントを作成します。

サンプルプログラムComplexPlan.javaは2つのXMLドキュメントを作成します。CxPD_PurchaseOrderプロセス定義の言語種名の

ためのものとActivityノードの言語種名のためのものです。以下のサンプルコードはプロセス定義の言語種名のために作成される

XMLドキュメントを示しています。

StringBuffer sb_xmlProcDef = new StringBuffer();

sb_xmlProcDef.append("<ExtendedAttributes>");

sb_xmlProcDef.append("<ExtendedAttribute Name=\"DE\" Value=\"Kaufauftrag\"/>");

sb_xmlProcDef.append("<ExtendedAttribute Name=\"EN\" Value=\"Purchase Order\"/>");

sb_xmlProcDef.append("<ExtendedAttribute Name=\"FR\" Value=\"Contrat d'achat\"/>");

sb_xmlProcDef.append("</ExtendedAttributes>");

InputStream in_xmlProcDef = new

ByteArrayInputStream(sb_xmlProcDef.toString().getBytes("UTF-8"));

これはActivityノードの言語特定名に作成されるXMLドキュメントです。

StringBuffer sb_xmlProcDef = new StringBuffer();

sb_xmlProcDef.append("<ExtendedAttributes>");

sb_xmlProcDef.append("<ExtendedAttribute Name=\"DE\" Value=\"Bestellformular ausfuellen\"/>");

sb_xmlProcDef.append("<ExtendedAttribute Name=\"EN\" Value=\"Fill out Purchase Requisition\"/>");

sb_xmlProcDef.append("<ExtendedAttribute Name=\"FR\" Value=\"Remplir le formulaire de commande\"/>");

sb_xmlProcDef.append("</ExtendedAttributes>");

InputStream in_xmlActivity = new

ByteArrayInputStream(sb_xmlProcDef.toString().getBytes("UTF-8"));

拡張属性に使用できる名前にはいくつかの制限があります。詳しくは、「6.8.4 拡張属性の名前」を参照してください。

2. 拡張属性を含むXMLドキュメントを読み込みます。

DocumentBuilderFactory dbf =

DocumentBuilderFactory.newInstance();

DocumentBuilder builder = dbf.newDocumentBuilder();

Document extAttPlan = builder.parse(in_xmlProcDef);

Document extAttNode = builder.parse(in_xmlActivity);

3. 拡張属性をエレメントに割り当てます。

4. 以下のサンプルコードは、プロセス定義とノードに拡張属性を割り当てる方法を示しています。

procDef.startEdit();

procDef.setExtendedAttributes(extAttPlan);

- 87 -

Page 98: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

nodePR.setExtendedAttributes(extAttNode);

procDef.commitEdit();

いったん拡張属性をエレメントに割当てると、さらなる処理のためのそれらの取得にgetExtendedAttributes()を使用できます。

6.8.2 拡張属性値の取得

前提条件:「6.8.1 拡張属性の割当て」を参照して、拡張属性を要素に割り当てます。

特定の拡張属性値を取得するには、以下の手順に従います。

1. 要素に割当てられた拡張属性を読み込みます。

以下のサンプルはプロセス定義に割当てられた拡張属性を読む方法を示しています。

Document resExtAttPlan = procDef.getExtendedAttributes();

また、アクテビティ定義に割り当てられた拡張属性を読み込むため、カスタムJava Actionを使用することができます。カスタムJavaActionの作成は、「6.3.2 Server Enactment Contextインタフェースを使用するワークフローデータへのアクセス」を参照してくださ

い。カスタムJava ActionにはServerEnactmentContext.getActivityExtendedAttributes()APIを必ず使用してください。

2. XMLドキュメントの拡張属性の位置を特定するXPath式を構築します。以下のサンプルでは、exAttNameは取得される拡張属性

の名前を保存します。

String xpath = "/ExtendedAttributes/ExtendedAttribute[@Name=\""

+ exAttName + "\"]";

exAttNameに値ENがあれば、結果としてXPath式は以下のようになります。

"/ExtendedAttributes/ExtendedAttribute[@Name=\"EN\"]"

3. 拡張属性に対応するXMLノードを選択します。

org.w3c.dom.Node ndLang =

XPathAPI.selectSingleNode(resExtAttPlan, xpath);

XMLノードの結果例:

<ExtendedAttribute Name="EN" Value="Purchase Order"/>

4. 拡張属性値にアクセスするには、以下の設定をします。

String strRes =

ndLang.getAttributes().getNamedItem("Value").getNodeValue();

エレメントで拡張属性を割り当てない場合、getExtendedAttributes()かselectSingleNode()は、null値になります。

6.8.3 エレメントの全拡張属性の取得

前提条件:「6.8.1 拡張属性の割当て」を参照して、拡張属性をエレメントに割当てます。

特定のエレメントの全拡張属性を取得するには、以下の手順に従います。

1. XMLドキュメントの拡張属性の位置を特定するXPath式を構築します。

String xpath = "/ExtendedAttributes/ExtendedAttribute";

2. エレメントに割り当てられた拡張属性を読み込みます。以下のサンプルはプロセス定義のすべてのノードを取得して、拡張属性

がノードに割り当てられているかをチェックします。ノードに拡張属性がある場合、XMLノードのリストに割り当てられます。

Node[] nodes = procDef.getNodes();

for (int iNodeCnt=0; iNodeCnt<nodes.length; iNodeCnt++) {

Node tmpNode = nodes[iNodeCnt];

Document resExtAttNode = tmpNode.getExtendedAttributes();

if (resExtAttNode != null) {

NodeList nodelistNode =

- 88 -

Page 99: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

XPathAPI.selectNodeList(resExtAttNode, xpath);

. . . }

}

また、アクテビティ定義に割り当てられた拡張属性を読み込むため、カスタムJava Actionを使用することができます。カスタムJavaActionの作成は、「6.3.2 Server Enactment Contextインタフェースを使用するワークフローデータへのアクセス」を参照してくださ

い。カスタムJava ActionにはServerEnactmentContext.getActivityExtendedAttributes()APIを必ず使用してください。

3. XMLノードのリストにある特定の拡張属性にアクセスします。

for (int iNListCnt=0; iNListCnt<nodelistNode.getLength();

iNListCnt++) {

org.w3c.dom.Node exAttNode = nodelistNode.item(iNListCnt);

. . . }

nodelistNodeが以下のXMLノードを含むと仮定します。

<ExtendedAttribute Name="DE"

Value="Bestellformular ausfuellen"/>

<ExtendedAttribute Name="EN"

Value="Fill out Purchase Requisition"/>

<ExtendedAttribute Name="FR"

Value="Remplir le formulaire de commande"/>

この場合、nodelistNode.item(1)は以下のXMLノードを戻します。

<ExtendedAttribute Name="EN"

Value="Fill out Purchase Requisition"/>

6.8.4 拡張属性の名前

拡張属性を定義するときは、それらの名前が確実にInterstage BPMかXPDL規格で使用される名前を妨げないようにします。

Interstage BPMへのネイティブ拡張属性

プロセス定義をXPDLに変換するとき、Interstage BPMは拡張属性にInterstage BPMにネイティブな情報をコード化します。以下はその

ネイティブ拡張属性にInterstage BPMで使用されたリストがあります。

注意

拡張属性値としてこれらの名前を使用しないでください。

プロセス定義がXPDLに変換されるとき、これらの属性値を持っているXMLノードは削除されます。Interstage BPMは内部のデータを

マッピングするのにこれらのノードを使用します。getExtendedAttributesメソッドを使用して、それらは拡張属性から抽出されます。

Associations

Artifacts

ChildPlan

ChildPlanId

CommitJavaActionSet

Coordinates

CustomNodeType

DataMapping

DataMappings

Description

EnableFutureWorkItems

- 89 -

Page 100: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

EndPoint

EpilogueJavaActionSet

ExposedField

FormList

FormsList

InitJavaActionSet

InTransaction

IsWorkItemUDA

IteratorCountUDA

NodeType

Organization

ParentVersion

PrivateData

ProcessDefinitionId

ProcessOwnerRole

ProcessOwnerRoleJavaActionSet

ProcessTypeId

PrologueJavaActionSet

RoleJavaActionSet

SameSubPlanVersion

StartPoint

State

subProcessDefinitionURI

SWIM_LANES

TemplateIdentifier

TimerDefSet

Title

TriggerDefSet

VersionComment

ViewerScript

例: 以下のXMLフラグメントは二つの拡張属性、StartPoint、およびStartPoint1を定義します。この名前がInterstage BPMによってネイ

ティブ拡張属性の一つに使用されるので、StartPointの定義は不完全です。

<ExtendedAttributes xmlns:x="http://example.com">

<ExtendedAttribute Name="StartPoint">

<x:StartPoint>

PointA

</x:StartPoint>

</ExtendedAttribute>

<ExtendedAttribute Name="StartPoint1">

<x:StartPoint1>

PointB

</x:StartPoint1>

</ExtendedAttribute>

</ExtendedAttributes>

- 90 -

Page 101: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

プロセス定義がXPDLに変換されるとき、StartPoint XMLノードは削除されます。結果としてXPDLフラグメントは以下のようになります。

<ExtendedAttributes xmlns:x="http://example.com">

<ExtendedAttribute Name="StartPoint1">

<x:StartPoint1>

PointB

</x:StartPoint1>

</ExtendedAttribute>

</ExtendedAttributes>

6.8.5 拡張属性の名前空間

Interstage BPMはXPDL2.0規格に完全準拠の名前空間を意識したXPDLを生成します。

注意

拡張属性を使用しているなら、その名前を有効な名前空間のプレフィクスにすることをお薦めします。これで確実にInterstage BPMに

よって生成されたXPDLがXPDL規格に完全に準拠していることになります。

拡張属性を定義するときに名前空間を使用していないと、XPDL2.0規格に完全準拠の名前空間を意識したXPDLを生成するよう、

Interstage BPMはデフォルトibpm名前空間を加えます。

例1

以下のサンプルは名前空間xとyでプレフィクス拡張属性を定義します。:

<?xml version="1.0" encoding="UTF-8"?>

<ExtendedAttributes xmlns:x="http://example.com"

xmlns:y="http://example.net">

<ExtendedAttribute Name="myAttribute">

<x:myTag1>

myData1

</x:myTag1>

<y:myTag2>

<myTag3>

myData2

</myTag3>

</y:myTag2>

</ExtendedAttribute>

</ExtendedAttributes>

そのようなプロセス定義をインポートした後に、getExtendedAttributes()は以下のXMLドキュメントを戻します。

<?xml version="1.0" encoding="UTF-8"?>

<ExtendedAttributes xmlns="http://www.wfmc.org/2004/XPDL2.0alpha"

xmlns:xpdl="http://www.wfmc.org/2004/XPDL2.0alpha"

xmlns:ibpm="http://fujitsu.com/ibpm1" xmlns:x="http://example.com"

xmlns:y="http://example.net">

<ExtendedAttribute Name="myAttribute">

<x:myTag1>

myData1

</x:myTag1>

<y:myTag2>

<myTag3>

myData2

</myTag3>

</y:myTag2>

</ExtendedAttribute>

</ExtendedAttributes>

- 91 -

Page 102: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

追加名前空間属性(ibpm名前空間とXPDL、2.0の標準の名前空間)がルートエレメントに追加されていることに注意してください。適切

な名前空間がオリジナルのXMLドキュメントに既に存在していたので、ExtendedAttributeエレメントの直系のエレメントはibpmでプレ

フィクスになっていません。

例2

このXMLフラグメントは名前空間なしで拡張属性を定義します。XPDL規格のコンテキストでは、ExtendedAttributeエレメントの子エレ

メントには前に置かれた名前空間がないのでこのXMLは無効です。

<!-- INVALID -->

<ExtendedAttributes>

<ExtendedAttribute Name="myAttribute">

<myTag1>

myData1

</myTag1>

<myTag2>

<myTag3>

myData2

</myTag3>

</myTag2>

</ExtendedAttribute>

</ExtendedAttributes>

プロセス定義をインポートした後に、getExtendedAttributes()は以下のXMLドキュメントを戻します。

<?xml version="1.0" encoding="UTF-8"?>

<ExtendedAttributes xmlns="http://www.wfmc.org/2004/XPDL2.0alpha"

xmlns:xpdl="http://www.wfmc.org/2004/XPDL2.0alpha"

xmlns:ibpm="http://fujitsu.com/ibpm1">

<ExtendedAttribute Name="myAttribute">

<ibpm:myTag1>

myData1

</ibpm:myTag1>

<ibpm:myTag2>

<myTag3>

myData2

</myTag3>

</ibpm:myTag2>

</ExtendedAttribute>

</ExtendedAttributes>

戻ったXMLドキュメントは、以下2点で変化しています。

・ ibpm名前空間とXPDL2.0標準名前空間属性がルートエレメントに追加されました。

・ ibpmプレフィクスがExtendedAttributeエレメントの直系のエレメントに追加されました。

6.9 トランザクション制御

Interstage BPMのトランザクション制御メカニズムは、プロセス実行中の特定ポイントへのロールバックトランザクションを設定できます。

このメカニズムで、システム全体のパフォーマンスも向上します。

プロセスは多くの場合、ノードの連続で構成されます。ノードの完了後、トランザクションを開いたままにしておくかどうかを決めることが

できます。トランザクションが開いたままの場合、そのプロセスの次のノードが同じトランザクション内で処理されることになります。

以下の点を考慮します。

・ パフォーマンス: トランザクションをコミットすると、すべてのデータがデータベースに保存され、後続のトランザクションを開始するた

めに、データベースから再度すべてのデータを読み取ります。簡単な演算を行うノードが長く連なっている(たとえば、多くの選択

肢から方向を選択する枝分かれしたノードが連なっているなど)場合、データベースに毎回保存すると負荷が大きくなります。

・ エラー時のロールバック: プロセスの処理中に低レベルのエラーが発生した場合、現在のトランザクションは 後にコミットされたポ

イントにロールバックします。同一トランザクション内に4つのノードが存在した場合、エラーが起きると、4つのノードすべてがロール

- 92 -

Page 103: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

バックし、再スタート時には4つすべてが再度実行されます。トランザクションを途中でコミットすると、そのポイントまでしかロールバッ

クされないということになります。

Model APIを使用してトランザクションを制御する

com.fujitsu.iflow.model.workflow.Nodeインタフェースには、トランザクションを制御する機能をサポートする2つのメソッドがあります。そ

れらは、以下のとおりです。

・ setNodeInTxn(): ノードにトランザクションフラグを設定します。トランザクションフラグは、ノードが完了したとき、トランザクションをコ

ミットすべきかどうかを決定するために使用します。

・ getNodeTxnStatus(): ノードのトランザクションの状態を取得します。同じトランザクション内で、そのノードが完了に設定されたかど

うかによって決まります。

これらのメソッド、または一般的なModel APIの詳細については、『API Javadocマニュアル』を参照します。

次のコミット操作で自動的にトランザクションをコミットするノードは、次のようにsetNodeInTxn()をtrueに設定します。

fillOutNode.setNodeInTxn(true);

ノードのトランザクション状態を確認するには、getNodeTxnStatus()を次のように使用します。

logger.log(Logger.INFO, "");

logger.log(Logger.INFO, "Get status of node transaction");

boolean nodeTxnStatus =

workItem.getNodeInstance().getNodeTxnStatus();

logger.log(Logger.INFO, "Status: " + nodeTxnStatus);

完了ノードの定義については、ComplexPlan.javaおよびProcessExecution.javaのサンプルを参照してください。

外部システムのロールバックトランザクション

トランザクションがロールバックされてプロセスインスタンスがエラー状態に設定される前に「クリーンアップ」を実行するJava Actionを定

義することもできます。これには、Java Actionセット内のすべてのJava Actionのロールバックが含まれます。プロセスインスタンスがエ

ラー状態に設定される前に、エラー発生時の通知メールの送信などの一般的なアクションを実行したり、何らかの特別なアクションを実

行することができます。

Java Actionに対してエラー処理を定義しない場合、このJava Actionで例外がスローされると、トランザクションがロールバックされます。

ただし、ロールバックは、Interstage BPMアプリケーションサーバのコンテキストでの変更に対してのみ実行可能です。外部システムの

トランザクション(データベースへの行の追加など)は、ロールバックできません。このため、場合によっては、トランザクションで使用され

たすべてのシステムを一貫した状態に保つために、外部システムを手動でクリーンアップする必要があります。必要な場合は、補償ア

クションセットを使用できます。

詳細については、「6.3.9 Java Actionのエラー処理」を参照してください。

6.10 トリガトリガの目的は、データを移動することです。これは、一般的に、外部システムのデータソースから送られてきたXMLデータファイルを

Interstage BPMのプロセスインスタンスに移動することを指します。これらのプロセスインスタンスは、受信したXMLデータファイルによっ

て開始されるか、または制御され、そのプロセスインスタンスはソースデータのデータを使用する機能を実行します。このXMLデータ

ファイルを、Eventデータファイルと呼びます。

トリガは、イベントデータファイルを認識するように設定することができます。それによって、データがInterstage BPMのプロセスインスタンスの

UDAにマップされるか、またはトリガがイベントデータファイルを直接使用して、データを定義されたUDAに書き込みます。

トリガは用途が広く、プロセス定義、Event Activity(Trigger)ノード、またはActivityノードに関連付けることができます。それぞれのトリガ

には、別々の動作範囲があります。

・ プロセス定義レベルで定義した場合、トリガは新しいプロセスインスタンスを生成し、開始します。

・ ノードレベルで定義した場合、トリガは選択をして、プロセスの実行を次のノードに進めます。

トリガは2つのコンポーネントを含んでいます。1つはトリガを起動するEvent、もう1つはトリガが実行されたときにとるアクションです。

- 93 -

Page 104: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

6.10.1 トリガの機能

イベントデータファイル(XMLファイル)は、外部データソースからInterstage BPMのFile Listenerの設定内容に従って指定したディレク

トリに送られます。トリガハンドラは、Interstage BPMで構成されているすべてのトリガを確認し、受信したXMLファイルについてFile Listenerがトリガハンドラに通知した場合にそのトリガを活性化します。トリガは、以下に示すように、その定義に従って動作します。

・ プロセス定義レベルのトリガの場合は、トリガが定義されているプロセス定義からプロセスインスタンスを開始し、トリガ定義に指定さ

れたデータマッピングに従って、XMLデータをプロセスのUDAに移動します。

・ Activityノードレベルのトリガの場合は、トリガが定義されているプロセスのアクティビティを選択し、トリガ定義に指定されたデータ

マッピングに従って、XMLデータをプロセスインスタンスのUDAに移動します。

ト リ ガ は File Listener だ け で は 開 始 さ れ ま せ ん 。 com.fujitsu.iflow.model.workflow パ ッ ケ ー ジ 内 の Model API のWFObjectFactory.processTriggerEventメソッドを明示的に使用する必要があります。このメソッドは、XML形式で提供された、活性中の

全トリガ定義のイベントデータを処理します。

トリガの状態

トリガの状態は、デフォルト、活性中、非活性のどれかになります。トリガの状態は、定義レベルでのプロパティです。つまり、

ProcessInstance.getTriggers()を呼び出すなどの方法で、インスタンスレベルで取得したトリガを変更すると、同じプロセス定義に属する

すべてのプロセスインスタンスのトリガが影響を受けます。プロセス定義またはプロセスインスタンスの状態が変化しても、それに含まれ

るトリガの状態は影響を受けません。

制御条件

トリガは、プロセス定義ではなくプロセスインスタンスで動作するようにデザインされている場合があります。その場合は、制御条件を設

定して、トリガが開始されるときに動作対象の適切なプロセスインスタンスを特定することができます。制御条件を設定しないと、指定さ

れたディレクトリ内でFile Listenerが新しいXMLファイルを検出するたびにトリガが開始されます。

たとえば、プロセス定義レベルのトリガの場合は、次のようになります。複数のプロセス定義にトリガを定義した場合は、File ListenerがXMLファイルを検出するたびに、それぞれのプロセス定義用のプロセスインスタンスが作成されます。つまり、XMLファイルは、プロセス定

義の数だけプロセスインスタンスを生成することを意味します。制御条件を指定することで、このような動作を回避し、XMLファイルの内

容に応じてプロセスインスタンスを作成することができます。XMLファイルの内容が制御条件に一致した場合にだけトリガが開始(プロ

セスインスタンスが作成)されます。

制御条件はUDAで操作します。使用する各属性について、XPath式で送られてくるイベントデータのエレメントを指定します。トリガが

開始されると、指定した属性の値が受信したEventの対応するエレメントの値と一致するプロセスだけが選択されます。

アクションの詳細

アクションの詳細には、トリガが実行する操作を定義します。各トリガは1つの種類の操作を扱うように定義されます。つまり、アクティビ

ティで選択を行うように定義されているトリガが、プロセスを開始することはできません。

Activityノードレベルのトリガ(選択トリガ)では、addAction(String, String)メソッドを使用して、実行可能なアクションを指定する必要があ

ります。 初のパラメータには、2番目のパラメータに指定された条件がtrueの場合に実行される外向き矢印の名前を指定します。

トリガをイベントアクティビティノードで定義する場合、このノードは外向き矢印を1つだけしか持てないため、1つのアクションを定義する

必要があります。

トリガをアクティビティノードで定義する場合、定義可能なアクションの数は、Activityノードに定義された外向き矢印の数によって異な

ります。メソッドの2番目のパラメータに指定されている条件を評価する順序は、アクションの順序によって決まります。index [0]のアク

ションの条件が 初に評価されます。この条件がtrueの場合、そのほかのアクションの条件は評価されません。プロセスインスタンスは、

条件がtrueであったアクションに定義された矢印を使用して続行します。

6.10.2 トリガの定義

ここでは、トリガをプロセス定義レベルで定義する方法を説明します。ここで紹介されているプログラミング例のすべてのコードは、

TriggerTimerSample.javaサンプルファイル内にあります。

- 94 -

Page 105: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

注意

TriggerTimerSample.javaは、トリガをActivityノードに追加する別の例を含みます。Event Activity(Trigger)ノードで定義するトリガの詳

細については、「6.11 Event Activity(Trigger)ノードの使用」を参照してください。

トリガを定義する方法について説明します。

1. File Listenerを設定することにより、受信したイベントデータファイルが保存されるディレクトリ内を調査して、トリガが開始されま

す。File Listenerの設定とテストの方法に関しては、「6.12 File Listenerファイルリスナ」を参照してください。

2. プロセス定義に関連するUDAを作成します。

サンプルファイル内では、以下のUDAが作成されます。

plan.addDataItemRef("OrderID",

DataItemRef.TYPE_STRING, "Initial Value");

plan.addDataItemRef("OrderPerson",

DataItemRef.TYPE_STRING,"Initial Value");

plan.addDataItemRef("Name",

DataItemRef.TYPE_STRING, "Initial Value");

plan.addDataItemRef("Address",

DataItemRef.TYPE_STRING, "Initial Value");

plan.addDataItemRef("City",

DataItemRef.TYPE_STRING, "Initial Value");

plan.addDataItemRef("State",

DataItemRef.TYPE_STRING, "Initial Value");

plan.addDataItemRef("ZIP",

DataItemRef.TYPE_STRING, "Initial Value");

plan.addDataItemRef("Title",

DataItemRef.TYPE_STRING, "Initial Value");

plan.addDataItemRef("Note",

DataItemRef.TYPE_STRING, "Initial Value");

plan.addDataItemRef("Quantity",

DataItemRef.TYPE_INTEGER, "1");

plan.addDataItemRef("Price",

DataItemRef.TYPE_BIGDECIMAL, "0.00");

3. プロセス定義にトリガを追加します。たとえば、プロセス定義レベルのトリガを追加して、制御条件を定義し、その状態を活性中に

します。

以下のサンプルでは、2つの制御条件が定義されます。 初の制御条件は商品の価格の値が10より大きいこと、2番目の制御条

件は受取人名が“Pete Gagnet”であることが記載されています。

TriggerDef myTrigger = plan.addTrigger("myTrigger",

TriggerDef.TYPE_START_PROCESS);

myTrigger.setDescription("プロセスインスタンスを開始します。");

// 制御条件を追加します。

String[] conditions = new String[2];

conditions[0] = "toFloat(eventData.getXMLData

( \"/shiporder/item/price/text()\" )) > 10";

conditions[1] = "eventData.getXMLData

( \"/shiporder/shipto/name/text()\" ) == \"Pete Gagnet\"";

myTrigger.setControlConditions(conditions);

// トリガを活性化します。

myTrigger.setState(TriggerDef.STATE_ACTIVE);

4. トリガを起動し、XMLファイルからイベントエレメントの値を抽出してUDAに値を格納するためのマッピングを指定します。以下の

例を参照してください。

myTrigger.addDataMap("OrderID","shiporder/@orderid");

myTrigger.addDataMap("OrderPerson","shiporder/orderperson/text()");

myTrigger.addDataMap("Name","shiporder/shipto/name/text()");

myTrigger.addDataMap("Address","shiporder/shipto/address/text()");

- 95 -

Page 106: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

myTrigger.addDataMap("City","shiporder/shipto/city/text()");

myTrigger.addDataMap("State","shiporder/shipto/state/text()");

myTrigger.addDataMap("ZIP","shiporder/shipto/zip/text()");

myTrigger.addDataMap("Title","shiporder/item/title/text()");

myTrigger.addDataMap("Note","shiporder/item/note/text()");

myTrigger.addDataMap("Quantity","shiporder/item/quantity/text()");

myTrigger.addDataMap("Price","shiporder/item/price/text()");

5. トリガがプロセス定義のインスタンスを開始するために使用するXMLファイルを作成し、そのファイルに値を入力します。既存のXMLファイルを使用するか、またはAPIを使用して次のように作成します。

// Create XML file in the folder specified by the FILELISTENER_PATH File xml = new File(FILELISTENER_PATH +

"shiporder.xml");

// XMLデータをファイルに書き込みます。

FileWriter fw = new FileWriter(xml);

BufferedWriter bw = new BufferedWriter(fw);

bw.write("<?xml version=\"1.0\" encoding=\

"ISO-8859-1\"?>"); bw.newLine();

bw.write("<shiporder orderid=\"889923\">"); bw.newLine();

bw.write("<orderperson>Joan Smith</orderperson>");

bw.newLine();

bw.write("<shipto>");bw.newLine();

bw.write("<name>Pete Gagnet</name>"); bw.newLine();

bw.write(" <address>325 Eastwood Ave</address>");

bw.newLine();

bw.write("<city>" + CITY_OF_ORDER + "</city>"); bw.newLine();

bw.write("<state>OH</state>"); bw.newLine();

bw.write("<zip>20131-1234</zip>"); bw.newLine();

bw.write("</shipto>");bw.newLine();

bw.write("<item>");bw.newLine(); String titleStr = "<title>" + ITEM_TITLE + "</title>";

bw.write("(titleStr);bw.newLine();

bw.write("<note>Special Edition</note>");bw.newLine();titleStr = "<quantity>" + QUANTITY_ORDER + "</quantity>";

bw.write("(titleStr);bw.newLine();

bw.write("<price>39.99</price>");bw.newLine();

bw.write("</item>");bw.newLine();

bw.write("</shiporder>");bw.newLine();

bw.close();

注意

XMLファイルにデータを指定する場合、Interstage BPMサーバに一致するデータフォーマットを使用します。

6.11 Event Activity(Trigger)ノードの使用

Event Activity(Trigger)ノードは、プロセス内の、外部イベントドリブンのステップを表します。各Event Activity(Trigger)ノードは、外部

システムからデータ(XMLファイルなど)が送られてきた際に実行すべき定義済みトリガを含みます。データを受信すると、トリガはその

定義に従って、データをユーザ定義属性(UDA)に移動します。そして、トリガがアクティビティを選択し、プロセスの実行は次のノード

に進みます。人の操作は不要です。

ここでは、Event Activity(Trigger)ノードの使用方法の一般的な手順を説明します。ここで示す例の完全なプログラムコードは、サンプ

ルファイルEventActivityNodeSample.javaにあります。

トリガとその動作の全般については、「6.10 トリガ」を参照してください。

Event Activity(Trigger)ノードを使用するには、以下の手順に従います。

1. addNode()を使用して、Event Activity(Trigger)ノードを生成します。定数nodeTypeをTYPE_EVENT_ACTIVITYに設定します。

Node activity = plan.addNode("EventActivity",

Node.TYPE_EVENT_ACTIVITY);

- 96 -

Page 107: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

2. 以下のように、Event Activity(Trigger)ノードに外向き矢印を1つだけ追加します。

plan.addArrow("Exit", activity, exit);

3. 前の手順で作成したEvent Activity(Trigger)ノードの選択トリガを定義します。

TriggerDef trigger = activity.addTrigger("ChoiceTrigger",

TriggerDef.TYPE_MAKE_CHOICE);

4. 必要な場合は、制御条件と相関マップを追加します。

制御条件は、受け取ったXMLデータの内容がトリガにとって有効かどうかをチェックします。相関マップは、トリガが動作するプロ

セスインスタンスを選択するのに使用します。

次の例は、外部システムから受け取ったXMLデータの<doMakeChoice>要素の値がtrueの場合にトリガを作動させるための定義

です。トリガは、特定のUDAが受け取ったXMLデータの<newValue>要素の値と同じ場合のみ、プロセスインスタンスに対して作

動します。

trigger.addControlCondition("eventData.getXMLData"

+ "('/root/doMakeChoice/text()[1]') == 'true'");

trigger.addCorrelationMap(UDA_NAME, "/root/currentValue/text()[1]");

5. メソッドaddAction(String, String)を使用して、トリガが選択する外向き矢印を指定します。

初のパラメータは、第2のパラメータに指定された条件がtrueの場合に選択すべき外向き矢印の名前を指定します。

このプログラム例では、特定のUDAの値が10未満の場合、トリガが外向き矢印を選択します。

trigger.addAction(exit.getName(), "uda." + UDA_NAME + " < 10");

6. 受け取ったXMLデータの情報のうち、さらに処理が必要なものをUDAにマッピングします。

このプログラム例では、<newValue>要素の値からUDAへのマッピングという、1つのデータマッピングだけを定義しています。

trigger.addDataMap(UDA_NAME, "/root/newValue/text()[1]"

7. トリガの状態をアクティブにします。

trigger.setState(TriggerDef.STATE_ACTIVE);

Event ActivityTriggerノードの定義は、これで完了です。実行時にトリガを作動させるには、受け取ったXMLデータの一部をトリ

ガに送る必要があります。このデータはサンプルプログラムが生成し、WFObjectFactory.processTriggerEvent()を使用してトリガ

に送ります。

StringBuffer bw = new StringBuffer();

bw.append("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>");

bw.append("<root>");

bw.append("<currentValue>5</currentValue>");

bw.append("<doMakeChoice>true</doMakeChoice>");

bw.append("<newValue>7</newValue>");

bw.append("</root>");

WFObjectFactory.processTriggerEvent(bw.toString(), adminSession);

6.12 File Listenerファイルリスナ

ファイルリスナは、指定されたディレクトリ内のファイルを監視します。ファイルハンドラは、新しいファイルや、新しく変更されたファイル

を検出すると、Interstage BPMのファイルハンドラに通知し、Interstage BPMプロセスインスタンスを開始したり、アクティビティの選択を

行ったりする自動機能を実行できるようにします。ファイルリスナは、一般的に、Interstage BPMをほかのエンタープライズアプリケーショ

ンと統合するために使用します。

6.12.1 File Listenerファイルリスナの使用

ファイルリスナを使用する方法について説明します。

- 97 -

Page 108: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

1. ファイルリスナの設定ファイルfileListenerConf.xmlは、Interstage BPM Studioで作成してインポートしたワークフロー アプリケーション

プロジェクトの一部です。このファイルは、<DMSRoot>/apps/<アプリケーションID>に格納します。

2. ファイルリスナ環境設定ファイルを変更した場合は、ワークフローアプリケーションを再起動します。

3. プロセス定義を作成し、ファイルリスナにプロセスインスタンスを開始させるトリガを追加します。手順については、「6.10 トリガ」を

参照してください。

4. トリガとなるイベントデータファイル(XMLファイル)を作成し、filelistenerディレクトリに保存します。手順については、「6.10 トリガ」

を参照してください。

トリガが作動中の場合、イベントデータファイルは消え、トリガを含むプロセス定義からプロセスインスタンスが開始されます。トリ

ガが作動中ではない場合、イベントデータファイルはfilelistener¥errorディレクトリに移動します。

6.12.2 File Listenerファイルリスナの設定

ファイルリスナの環境設定ファイル、fileListenerConf.xmlは、<DMSRoot>/apps/<application ID>に格納されています。

以下は、fileListenerConf.xml環境設定ファイルの例です。

<FileListener>

<Directory>

<ScanInterval>60000</ScanInterval>

<StabilizationPeriod>2000</StabilizationPeriod>

<PostProcessing>

<onSuccess>

<Delete></Delete>

</onSuccess>

<onError>

<Move>

</Move>

</onError>

</PostProcessing>

</Directory>

</FileListener>

以下の表は、fileListenerConf.xmlで使用されているXMLタグを説明しています。

タグ 説明

<Directory> 新しいファイル、または新しく変更されたファイルを監視するディレクトリの環境設定パ

ラメータが含まれます。

<Path> 監視するディレクトリのパスです。

SaaSモード、または非SaaSモードでパスが指定されていない場合、

<ServerSharedRoot>/tenants/<テナント名>/apps/<アプリケーションID>/filelistenerとなります。

<ScanInterval> ディレクトリ内に新しいファイルがあるかどうかをスキャンする間隔を指定します。(単位

はミリ秒)

<StabilizationPeriod> ファイルが処理される前に、ファイルのサイズを監視し、変更の有無を確認するための

設定です。(単位はミリ秒)

<PostProcessing><onSuccess> ファイルの処理に成功した場合にとるアクションです。アクションとして設定できるの

は、<Delete>または<Move>です。

<PostProcessing><onError> ファイルの処理に成功しなかった場合にとるアクションです。アクションとして設定でき

るのは、<Delete>または<Move>です。

<Delete> ファイルを削除します。

<Move> 指定されたディレクトリにファイルを移動します。

On success:

・ 非SaaSモードの場合、ファイルを指定した場所に移動します。

- 98 -

Page 109: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

タグ 説明

・ SaaS モード、または非 SaaS モードでパスが指定されていない場合、

<ServerSharedRoot>/tenants/<テナント名>/apps/<アプリケーションID>/filelistener/successにファイルを移動します。

On error:

・ 非SaaSモードの場合、ファイルを指定した場所に移動します。

・ SaaS モード、または非 SaaS モードでパスが指定されていない場合、

<ServerSharedRoot>/tenants/<テナント名>/apps/<アプリケーションID>/filelistener/errorにファイルを移動します。

6.13 Emailリスナ

Emailリスナは、Interstage BPMに渡すデータのファイルを含んだEmailを監視します。

Emailリスナがこれらのファイルを検出すると、EmailリスナはInterstage BPMのトリガハンドラーに通知し、トリガハンドラーはInterstage BPMのプロセスインスタンスを開始したり、アクティビティ上で矢印を選択したりするなどの処理を自動的に行います。一般的に、Emailリスナは

Interstage BPMとほかのアプリケーションを連携するために使用されます。

6.13.1 トリガ起動のためのEmailリスナの使用

Emailリスナを使うには、以下の操作が必要です。

・ Emailリスナの設定をする

注意

Emailリスナの設定は、テナントの管理者(Tenant Administrator)が実施してください。

EmailリスナがEmailを監視するようにするためには、以下のパラメータを設定する必要があります。

- EmailListenerAutoReplyEnabled

- EmailListenerDeleteInvalidMessages

- EmailListenerEmailAddress

- EmailListenerEnabled

- EmailListenerPassword

- EmailListenerPollingInterval

- EmailListenerPOPPort

- EmailListenerPropertiesFile

- EmailListenerServerHost

- EmailListenerUserName

- EmailStyleSheetFile

これらの設定パラメータについては、『Interstage BPMサーバ 管理者ガイド』を参照してください。

・ プロセス開始トリガまたは矢印の選択トリガ(アクティビティレベルのトリガ)を持った単純なプロセス定義を用意し、トリガを有効にし

てください。データマッピングは、未定義でも構いません。

Emailリスナは、1つの例外を除いて、ファイルリスナと同様に機能します。ファイルリスナは、ファイルリスナ用のディレクトリにコピーされた

XMLデータファイルをトリガハンドラに送信し、処理を行います。Emailリスナは、特別な形式のEmailのメッセージに含まれるXMLデー

タファイルをトリガハンドラに送信し、処理を行います。データファイルは、一般的には、トリガハンドラがInterstage BPMのイベントを引

き起こすために使われます。Emailリスナを利用する際、特殊なフォーマットのアプリケーションアクセスキーが必要になります。

- 99 -

Page 110: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

注意

以下の手順では、Systemアプリケーションとデフォルトテナントを使用しています。

1. 作成したプロセス定義が存在するアプリケーションのアプリケーションアクセスキーを、取得します。

注意

テナントの管理者またはアプリケーションの所有者だけが、以下の手順でアプリケーションアクセスキーを入手することができま

す。どちらにも該当しない場合は、テナントの管理者またはアプリケーションの所有者から、アプリケーションアクセスキーを入手

してください。

a. [システム管理]タブの配下の[アプリケーションの設定]を開き、作成したプロセス定義が存在するアプリケーションを選択し

ます。

以下の例では、Systemアプリケーションを選択しています。

b. [アクセスキー]をクリックします。

アプリケーションアクセスキーが表示されます。

c. ネットワーク上の安全な場所へ、アプリケーションアクセスキーを編集しないでコピーします。

アプリケーションアクセスキーは、Emailリスナを起動するのに使われるEmailのメッセージ本体に、編集しないで追加する

必要があります。管理者以外の人が、Emailリスナを起動するEmailを作成する場合は、管理者がアプリケーションアクセス

キーを配布する必要があります。

2. 新しいEmailメッセージを作成するために、Emailクライアントのソフトウェアを起動します。

3. テナントのプロパティ[EmailListenerEmailAddress]の値を、Emailの送信先に設定します。送信先がわからない場合は、手順1で述べたアプリケーションの管理者に聞いてください。

4. Emailメッセージに、イベントデータファイルを添付します。イベントデータファイルは、トリガを活性化し、プロセスインスタンスに

データを渡します。イベントデータファイルはXML形式で、トリガ定義時に指定したXMLスキーマに適合している必要がありま

す。

イベントデータファイルは、ファイルリスナで使う場合と同じフォーマットである必要があります。

Emailに添付できるファイルは、1つだけです。2つ以上のファイルが添付されている場合、 初の添付ファイルが使われます。

まとめると、Emailリスナを活性化させるEmailには、以下が必要です。

- アプリケーションアクセスキー (手順1を参照)

- Emailの送信先 (手順3を参照)

- XML形式のイベントデータファイル (手順4の先頭を参照)

5. Emailを送ります。

Interstage BPMはメッセージを処理し、返信のEmailを送ります。

返信のEmailには、Emailリスナでの処理の成功・失敗の状態が記述されています。

6. Emailリスナへメッセージを送った結果を、返信のEmailで確認します。

この結果は、メッセージによって活性化されたトリガの種類や、トリガの活性化の成功・失敗によって変わります。

メッセージがプロセス開始トリガを活性化させた場合は、トリガが定義されているプロセス定義から新しいプロセスインスタンスが

開始されます。Interstage BPMは、処理が成功した旨の返信のEmailを送ります。

メッセージが矢印の選択トリガを活性化させた場合は、トリガが定義されているアクティビティが完了し、イベントデータファイルに

指定された矢印を選択します。Interstage BPMは、処理が成功した旨の返信のEmailを送ります。

トリガでデータマッピングが定義されている場合、トリガの定義内容に従ってデータがプロセスインスタンスに追加されます。

- 100 -

Page 111: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

メッセージが、イベントデータファイルで指定されたトリガを活性化させることに失敗した場合、Interstage BPMは処理が失敗した

旨の返信のEmailを送ります。

期限切れまたは不正な内容のアプリケーションアクセスキーを含んだEmailを送信した場合、Interstage BPMはメッセージを破棄

し、不正な内容のアプリケーションアクセスキーを使っていることを示す返信のEmailを送ります。

6.14 JMS リスナ

JMSリスナは、Interstage BPMに渡すデータを含んだJMSメッセージを監視します。

JMSリスナがこれらのデータを含んだメッセージを検出すると、JMSリスナはInterstage BPMのトリガハンドラーに通知し、トリガハンドラーは

Interstage BPMのプロセスインスタンスを開始したり、アクティビティ上で矢印の選択したりといった処理を自動的に行います。一般的

に、JMSリスナはInterstage BPMとほかのアプリケーションを連携するために使用されます。

6.14.1 トリガ起動のためのJMSリスナの使用

JMSリスナを使用するためには、以下が必要です。

・ 簡単なJMSクライアントアプリケーションを作成する知識

・ プロセス開始トリガまたは矢印の選択トリガ(アクティビティレベルのトリガ)を持ち、トリガが有効になっている単純なプロセス定義

データマッピングは未定義でも構いません。

JMSリスナは、1つの例外を除いてファイルリスナと同様に機能します。ファイルリスナは、ファイルリスナ用のディレクトリにコピーされたXMLデータファイルをトリガハンドラーに送信し、処理を行います。JMSリスナは、JMSメッセージから取り出したXMLデータをトリガハンド

ラーに送信し、処理を行います。XMLデータは、一般的にはトリガハンドラーがInterstage BPMのイベントを引き起こすために使われま

す。JMSメッセージには、以下で説明するように、アプリケーションアクセスキーが含まれている必要があります。

注意

以下の説明の手順1では、Systemアプリケーションとデフォルトテナントを使用しています。

1. 作成したプロセス定義が存在するアプリケーションのアプリケーションアクセスキーを取得します。

注意

テナントの管理者またはアプリケーションの所有者だけが、以下の手順でアプリケーションアクセスキーを入手することができま

す。どちらにも該当しない場合は、テナントの管理者またはアプリケーションの所有者から、アプリケーションアクセスキーを入手

してください。

a. [システム管理]タブの配下の[アプリケーションの設定]を開き、作成したプロセス定義が存在するアプリケーションを選択し

ます。

以下の例では、Systemアプリケーションを選択しています。

b. [アクセスキー]をクリックします。

アプリケーションアクセスキーが表示されます。

c. ネットワーク上の安全な場所へ、アプリケーションアクセスキーを編集しないで、コピーします。

JMSリスナを活性化するためには、アプリケーションアクセスキーを編集しないで、JMSメッセージに追加する必要がありま

す。管理者以外の人がJMSメッセージを作成する場合は、管理者がアプリケーションアクセスキーを配布する必要がありま

す。

2. トリガを起動し、プロセスインスタンスにデータを転送するイベントデータの文字列を作成します。文字列はXML形式で、トリガ定

義時に指定したXMLスキーマに適合している必要があります。

3. JMSメッセージを送信する対象のInterstage BPMサーバ名を特定します。

4. Interstage BPMサーバの配備時に、CommandTopicおよびResponseTopicという名前のJMSのトピックが作成されます。InterstageBPMサーバは、CommandTopicを監視し、到着したメッセージを処理します。また、処理が完了すると、Interstage BPMサーバは

- 101 -

Page 112: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

ResponseTopicに返信メッセージを送信します。ユーザが作成するアプリケーションは、ResponseTopicを監視することにより、

Interstage BPMサーバからの返信を取得できます。

CommandTopicにテキストメッセージを送信する簡単なJMSクライアントアプリケーションを、作成してください。変数xmlStringに、

XMLのイベントデータの文字列を設定してください。また、APPLICATION_ACCESSKEYプロパティにアプリケーションアクセス

キーの文字列(手順1を参照)を、SERVER_IDプロパティにJMSメッセージを送信する対象のInterstage BPMサーバ名(手順3を参照)を設定してください。以下は、これらのプロパティをJMSメッセージに設定する方法の例です。

...

TextMessage msg = pubSession.createTextMessage();

String xmlString = [XML Data Event STRING];

String serverName = [name of Interstage BPM Server STRING];

String applicationAccessKey = [the Application Access Key STRING];

msg.setText(xmlString);

msg.setStringProperty("SERVER_ID", serverName);

msg.setStringProperty("APPLICATION_ACCESSKEY", applicationAccessKey);

...

5. JMSメッセージを送信します。

Interstage BPMサーバはJMSメッセージを処理し、JMSリスナの成功・失敗の状態を示す返信メッセージをResponseTopicに送信

します。

返信は、TextMessage型またはObjectMessage型です。アプリケーションへのアクセス時に例外が発生した場合は、失敗の説明

をするTextMessageが送信されます。XMLイベントデータが正常に処理された場合は、com.fujitsu.mode.workflow.TriggerResultオブジェクトがObjectMessage型の形式で送信されます。

6. JMSメッセージの送信結果を確認します。

この結果は、メッセージによって活性化されたトリガの種類や、トリガの活性化の成功・失敗によって変わります。

メッセージがプロセス開始トリガを活性化させた場合は、トリガが定義されているプロセス定義から新しいプロセスインスタンスが

開始されます。Interstage BPMは、処理が成功した旨の返信メッセージを送ります。

メッセージが矢印の選択トリガを活性化させた場合は、トリガが定義されているアクティビティが完了し、イベントデータに指定さ

れた矢印を選択します。Interstage BPMは、処理が成功した旨の返信メッセージを送ります。

トリガでデータマッピングが定義されている場合、トリガの定義内容に従って、データがプロセスインスタンスに追加されます。

メッセージがイベントデータで指定されたトリガを活性化させることに失敗した場合、Interstage BPMは処理が失敗した旨の返信

メッセージを送ります。

期限切れまたは不正な内容のアプリケーションアクセスキーを含んだJMSメッセージを送信した場合、Interstage BPMはメッセー

ジを破棄し、不正な内容のアプリケーションアクセスキーを使っていることを示す返信メッセージを送ります。

6.15 エージェントの使用

Interstage BPMのエージェントは、自動的に実行され、ユーザの代わりとして振る舞います。エージェントを使用して、Interstage BPMの

外のシステムにアクセスすることができます。接続する外部システムは、レガシーシステムの場合も、Webサービスの場合もあります。

エージェントを使用して、これらの外部サービスをInterstage BPMプロセスインスタンスに組み入れることができます。

注意

Interstage BPMエージェントが使用できるように外部のライブラリを含めるには、外部クラスかJARを、「6.1 Interstage BPMと外部アプリ

ケーションの統合」で指定したディレクトリへコピーします。

クラスタインストール環境でエージェントを使用する場合は、各クラスタノードにエージェントを設定します。エージェントの設定はすべ

てのクラスタノードで完全に一致しなければなりません。

- 102 -

Page 113: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

6.15.1 エージェントの概要

エージェントは、アプリケーション特有で、agentsConfig.xmlというXMLファイルを使用して構成されます。このファイルは、InterstageBPM Studioからインポートしたワークフロー アプリケーション プロジェクトの一部であり、<DMSRoot>/apps/<アプリケーションID>にあり

ます。

エージェントがagentsConfig.xmlに追加され、Interstage BPMで構成されると、エージェントをActivityノードに割当てることで、InterstageBPMのプロセスインスタンス内でアクティビティとして実行することができます。これにより、エージェントはアクティビティの代わりに実行

されます。実際は、ワークアイテムが、そのエージェントと同じ名前のシステムユーザに割当てられます。

agentsConfig.xml環境設定ファイル

agentsConfig.xmlのサンプルコードを以下に示します。

<ActionAgentList>

<ActionAgent>

<Name>@TestFrameAgent</Name>

<Description>テスト用です。最初の矢印を返します。</Description>

<RetryInterval>20</RetryInterval>

<EscalationInterval>1</EscalationInterval>

<ClassName>com.fujitsu.iflowqa.testframe.TestFrameAgent

</ClassName>

<ClassPath>IBPMROOT/classes</ClassPath>

<ConfigFile></ConfigFile>

</ActionAgent>

</ActionAgentList>

以下の表は、agentsConfig.xmlで使用されているXMLタグを説明しています。

タグ 説明

<ActionAgentList> エージェントの一覧が記述されます。

<ActionAgent> 単一のエージェント定義が記述されます。エージェントごとに独自の定義をこのタグ内に記述

する必要があります。

<Name> エージェントの名前です。名前の先頭は必ず「@」にする必要があります。これは、エージェン

トであることを指定します。この名前はActivityノードの担当者として指定し、そのアクティビティを

「エージェント」アクティビティにする必要があります。つまり、これは通常のInterstage BPMアク

ティビティではなく、エージェントとして機能します。

<Description> エージェントの簡単な説明です。通常は、機能について説明します。

<RetryInterval> エージェントは、外部サービスの呼出しに失敗した場合、指定された間隔をおいてその呼出

しを再試行します。RetryIntervalには、その試行間隔を秒単位で指定します。

<EscalationInterval> システム管理者にメールで通知する場合に、失敗回数のしきい値を指定します。

メールは、次のエスカレーションに進むたびに送られます。たとえば、値が1の場合は、エー

ジェントが失敗するたびにシステム管理者に通知されます。

メールは、Interstage BPMサーバのServerEmailAddressパラメータに指定されたアドレスに送

られます。

<ClassName> エージェントに関連付けられているJavaクラスの名前です。このクラスは、エージェントの機能

部分です。

<ClassPath> エージェントに関連付けられているJavaクラスのクラスパスです。

SaaSモードでは、この値は無視されます。

<ConfigFile> エージェントが使用する環境設定ファイル名です。

エージェントクラス

agentsConfig.xmlの<ClassName>タグに指定されたクラスは、エージェントが外部サービスにアクセスする手段です。以降は、エージェ

ントクラスと呼びます。エージェントクラスは、次のインタフェースを実装する必要があります。

- 103 -

Page 114: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

package com.fujitsu.iflow.server.intf;

public interface ActionAgentInvoke

{

public String invokeService(ServerEnactmentContext sec, String configFile) throws Exception;

}

エージェントクラスは、invokeService()を使用して外部サービスを呼び出し、そのサービスからデータを受け取ります。次に、サービス

のアクションを指示するInterstage BPMに、STRING型のデータを返します。

エージェントクラスの実行結果は3つあります。それらは、以下のとおりです。

・ NULL STRING型、または空のSTRING型のデータが返された場合: エージェントはサービスの実行を繰り返し試行します。再試

行の間隔は、<RetryInterval>タグに指定されます。エージェントは、<EscalationInterval>タグに指定された回数だけ実行を試み、

そのたびにInterstage BPMサーバのServerEmailAddressパラメータに指定されたアドレスにメールを送ります。

・ そのほかのSTRING型のデータが返された場合: エージェントは、そのデータがエージェントアクティビティを起点とした外向き矢印

の名前の1つと一致するかどうかを確認します。一致する場合、プロセスインスタンスはその一致する矢印に従って続行します。STRING型の戻り値が矢印に一致しない場合、エージェントはcannot-find-arrow例外を送出し、プロセスインスタンスはエラー状態になりま

す。

・ エージェントクラスが例外を送出した場合: エージェントはInterstage BPMにその例外を送り、プロセスインスタンスはエラー状態に

なります。

6.15.2 FTPエージェントの構成

FTPエージェントは、そのエージェントが含まれるプロセスインスタンスに添付されたファイルを自動的に転送します。すべてのエージェ

ントと同様に、FTPエージェントもInterstage BPMのアクティビティを代行します。FTPエージェントのアクティビティが含まれるプロセス定

義から開始されたプロセスインスタンスは、添付されているファイルを自動的に転送します。添付ファイルは、Interstage BPMサーバか

ら接続可能な、どのコンピュータのFTPサーバにも転送されます。

FTPエージェントは、すべてのエージェントと同様に、agentsConfig.xmlで構成されます。この環境設定ファイルの<ActionAgent>セク

ションには、FTPエージェントのデフォルトの設定が含まれています。通常、このファイルのFTPエージェントの設定を変更する必要は

ありません。

FTPエージェントは、Interstage BPMのServiceAgentクラスを使用します。また、ftp.xmlという特別なFTPエージェントの環境設定ファイ

ルも使用します。この環境設定ファイルは、FTPホストのアドレスなど、FTPの設定を定義します。この環境設定ファイルを確認して、使

用する環境に合わせてください。

ftp.xml環境設定ファイル

FTPエージェントの環境設定ファイルであるftp.xmlは、Interstage BPMサーバインストール環境内のエージェントディレクトリ<DMSRoot>/apps/<アプリケーションID>にあります。

FTPエージェントを構成するftp.xmlファイルのサンプルを以下に示します。

<Services>

<Service>

<ServiceType>FTP</ServiceType>

<ServiceStatusUDA>AgentServiceStatus</ServiceStatusUDA>

<ServiceResultUDA>AgentServiceResult</ServiceResultUDA>

<ServiceSpecificInfo>

<FTPHost><HOSTNAME or IP Address></FTPHost>

<FTPPort></FTPPort>

<FTPUser>anonymous</FTPUser>

<FTPPassword></FTPPassword>

<FTPType>ASCII</FTPType>

<FTPAppend>FALSE</FTPAppend>

<FTPDirectory>%%REMOTE_FTP_DIRECTORY%%

</FTPDirectory>

<FTPFileNames>%%REMOTE_FTP_FILES%%</FTPFileNames>

<Documents>%%OUTGOING_FILES%%</Documents>

</ServiceSpecificInfo>

- 104 -

Page 115: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

</Service>

</Services>

このファイル内の一部のタグは、ServiceAgentクラスを使用するすべてのエージェントが利用します。一部のタグはFTPエージェント固

有のものです。

以下の表は、ftp.xmlで使用されているXMLタグを説明しています。

タグ 説明

<ServiceType> FTPエージェントのサービスタイプは、常にFTPです。サービスタイプが指定されてい

ない場合や、サービスタイプが無効な場合、プロセスインスタンスはエラー状態にな

ります。

このタグは、ServiceAgentクラスを使用するすべてのエージェントが利用します。

<ServiceStatusUDA> FTPエージェントのアクティビティの状態を保存するUDAの名前です。設定可能な値

は、DoneまたはFailedです。このタグを削除してもFTPエージェントには何も影響があ

りませんが、ユーザはFTPエージェントのアクティビティの状態を確認できなくなりま

す。

<ServiceResultUDA> FTPエージェントが例外を送出した場合に使用する、エラーメッセージを保存するUDAの名前です。このタグを削除してもFTPエージェントには何も影響がありませんが、FTPエージェントが失敗しても、ユーザはエラーが発生したことを確認できなくなります。

<FTPHost> 転送されたファイルを受信するローカルコンピュータのサーバ名またはIPアドレスで

す。デフォルト値は127.0.0.1 (ローカルコンピュータ)です。FTPホストが指定されてい

ない場合や、FTPホストが無効な場合、ファイルは、FTPサーバが使用できる場合は、

そこに転送されます。

このタグはFTPエージェント固有のものです。

<FTPPort> FTPサーバが使用するポートです。ポートが指定されていない場合は、デフォルトの

FTPポートである21が使用されます。

このタグはFTPエージェント固有のものです。

<FTPUser> ファイルを転送するFTPユーザのユーザ名です。ユーザ名が無効な場合、ファイル

の転送は失敗し、プロセスインスタンスはエラー状態になります。

このタグはFTPエージェント固有のものです。

<FTPPassword> ファイルを転送するFTPユーザのパスワードです。

このタグはFTPエージェント固有のものです。

<FTPType> 転送されるファイルのタイプです。設定可能な値は、ASCIIまたはBINARYです。デ

フォルト値はBINARYです。

テキストファイルを転送する場合は、ASCIIを使用します。バイナリファイルを転送す

る場合は、BINARYを使用します。ASCIIまたはBINARY以外の値を指定すると、FTPエージェントは例外を送出します。

このタグはFTPエージェント固有のものです。

<FTPAppend> 転送されるファイルをリモートファイルに追加するかどうかを指定します。設定可能な

値は、TRUEまたはFALSEです。デフォルト値はFALSEです。

既存のリモートファイルにローカルファイルのコンテンツを追加する場合は、TRUEを使用します。既存のリモートファイルを上書きする場合は、FALSEを使用します。TRUEまたはFALSE以外の値を指定すると、FTPエージェントは例外を送出します。

このタグはFTPエージェント固有のものです。

<FTPDirectory> ファイルの転送先のディレクトリを指定するUDAの名前です。FTPサーバからの相対

パスが指定されます。

たとえば、/iflowがREMOTE_FTP_DIRECTORY UDAの値で、ユーザがWindowsシステムで作業している場合、ファイルはC:\Inetpub\ftproot\iflowに転送されます。無

効なディレクトリが指定された場合、プロセスインスタンスはエラー状態になります。

このタグはFTPエージェント固有のものです。

<FTPFileNames> リモートファイルに使用するファイル名を指定するUDAの名前です。このパラメータ

は、ファイルの名前を転送中に変更するために使用します。

たとえば、プロセスインスタンスにLocalFile.txtというファイルが添付されていて、

- 105 -

Page 116: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

タグ 説明

REMOTE_FTP_FILESの値にRemoteFile.txtが設定されている場合、LocalFile.txtはFTPディレクトリに転送され、RemoteFile.txtというファイル名に変更されます。

REMOTE_FTP_FILESには、複数のファイル名をセミコロン(;)で区切って指定できま

す。REMOTE_FTP_FILESにファイル名が含まれていない場合は、元のファイル名

が使用されます。

<Documents> FTPディレクトリに転送されるファイルを指定するUDAの名前です。

OUTGOING_FILESには、複数のファイル名をセミコロン(;)で区切って指定できま

す。OUTGOING_FILESにファイル名が含まれていない場合は、プロセスインスタン

スに添付されているすべてのファイルが転送されます。

注意

ファイル名にセミコロン(;)が含まれるファイルは、FTPディレクトリに転送できません。セミコロンはファイル名の区切り文字と見なされる

ので、転送するファイルの名前に含めることはできません。

6.15.3 FTPエージェントの使用

プロセス定義のFTPエージェントを使用する方法について説明します。

1. FTPエージェントを表すActivityノードを作成します。

2. “@FTP”をActivityノードに割当てます。

3. FTPエージェントの環境設定ファイル、ftp.xmlのパラメータに対応する、すべてのUDAをプロセス定義に追加します。

以下は、追加する可能性のあるUDAです。

- AgentServiceStatus

- AgentServiceResult

- REMOTE_FTP_DIRECTORY

- REMOTE_FTP_FILES

- OUTGOING_FILES

REMOTE_FTP_FILESまたはOUTGOING_FILESを追加しない場合は、該当するタグのコンテンツをftp.xmlファイルから削除し

ます。たとえば、転送されるファイルの名前を変更しないと仮定します。この場合REMOTE_FTP_FILESUDAをプロセス定義に

追加する必要はありません。さらに、<FTPFileNames>タグの次のコンテンツをftp.xmlファイルから削除する必要があります。

<FTPFileNames></FTPFileNames>

該当するパラメータがftp.xmlファイルに指定されているにも関わらず、REMOTE_FTP_FILESまたはOUTGOING_FILESを追加

しなかった場合、FTPエージェントアクティビティが活性化されると、プロセスインスタンスはエラー状態となります。

ftp.xml環境設定ファイルの詳細については、「6.15.2 FTPエージェントの構成」を参照してください。

4. FTPエージェントアクティビティを起点として次のアクティビティを活性化する、Done矢印を追加します。

FTPエージェントは、以下のとおり、Doneまたはnullを返します。

- Doneを返した場合、プロセスインスタンスはDone矢印に従って続行します。

- nullを返した場合、プロセスインスタンスはエラー状態となります。AgentServiceStatusUDAはエラー状態を示し、

AgentServiceResultUDAには発行されたエラーメッセージが保存されます。

- 次のケースでは、プロセスインスタンスがエラー状態となりますが、AgentServiceStatusUDAおよびAgentServiceResultUDAは、エラー情報が更新されません。

- FTPエージェントアクティビティに、外向きのDone矢印が設定されていません。

- agentsConfig.xml内のいずれかのデータが正しくないか、または設定されていません。

エラーの理由を確認するには、プロセスインスタンスの履歴を確認する必要があります。

- 106 -

Page 117: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

6.15.4 HTTPエージェントの設定

HTTPエージェントは、環境設定ファイルに指定されているURLにデータを送り、そのURLからレスポンスデータを受信します。

<HTTPRequestUDA>タグに指定されているUDAの値を、<HTTPBaseURL>タグに指定されているURLに送り、返されたデータを

<HTTPResponseUDA>タグに指定されているUDAの値として割当てます。

HTTPエージェントは、すべてのエージェントと同様、agentsConfig.xmlで構成されます。この環境設定ファイルの<ActionAgent>セク

ションには、HTTPエージェントのデフォルトの設定が含まれています。通常、このファイルのHTTPエージェントの設定を変更する必要

はありません。

Interstage BPM内にHTTPエージェントを設定する方法について説明します。

HTTPエージェントの環境設定ファイルを作成し、Interstage BPMのエージェントディレクトリ、<DMSRoot>/apps/<アプリケーションID>に保存します。

環境設定ファイルHTTPagent.xml

以下は、HTTPエージェントの環境設定ファイルのサンプルです。

<HTTPAgent>

<HTTPBaseURL method="POST"

followRedirects="true">{{Field HTTP_URL}}</HTTPBaseURL>

<HTTPHeaderParams name="Content-Type">text/xml;

charset=UTF-8</HTTPHeaderParams>

<HTTPHeaderParams name="User-Agent">I-BPM HTTP Agent

</HTTPHeaderParams>

<HTTPHeaderParams name="accept-charset">UTF-8

</HTTPHeaderParams>

<QueryParams name= "ParamName"> Param value</QueryParams>

<HTTPRequestUDA>HTTP_REQUEST</HTTPRequestUDA>

<HTTPResponseUDA>HTTP_RESPONSE</HTTPResponseUDA>

<HTTPAgentStatusUDA>HTTP_STATUS</HTTPAgentStatusUDA>

</HTTPAgent>

以下の表は、HTTPagent.xmlで使用されているXMLタグを説明しています。

タグ 説明

<HTTPBaseURL> URLエンドポイントです。<HTTPBaseURL>タグの値は、HTTPエージェントによって呼び

出される、サーブレットなどの外部サービスを指定します。

属性:

method="POST"または"GET"を指定します。HTTPリクエストで使用するリクエストメソッド

を定義します。method属性が指定されていない場合、プロセスインスタンスはエラー状態

になります。"POST"または"GET"以外の属性値を設定した場合は、HTTPエージェントは

失敗します。

followRedirects="true"を指定します。

followRedirectsのデフォルト値はfalseなので、この属性を指定する必要があります。

<HTTPHeaderParams> エンコードスタイルやコンテンツタイプなどのHTTPヘッダのプロパティを設定します。HTTPヘッダは、たとえば、現在のHTTPセッションのリクエスト、レスポンスオブジェクトのプロパ

ティなど、様々なWebオブジェクトプロパティを定義するために使用します。

属性:

name="Content-type"または"User-Agent"を指定します。

"Content-type"は、リクエストされたコンテンツの種類を定義します。以下の値が使用でき

ます。value="text/xml"、およびcharset=UTF-8。

"User-Agent"は、リクエストを送ったクライアント(ユーザエージェント)についての情報を含

みます。

- 107 -

Page 118: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

タグ 説明

<HTTPHeaderParams>タグのname属性で指定される値には、現在制限が設けられていな

いことに注意してください。この属性に有効な値はすべて、HTTPヘッダに有効となります。

<QueryParams> このタグは、HTTPエージェントが"GET"メソッドを使用した場合、必要となります。このタグ

の値は、クエリ文字列として外部サービスに渡されます。<HTTPRequestUDA>タグに指定

されたUDAの値は、"GET"メソッドを使用した場合は使用されないことに注意してくださ

い。

このタグの正しい使用法は以下のとおりです。

<QueryParams name= "ParamName"> Param value</QueryParams>

これは、HTTPエージェントが実行中の以下のようなURL指定となります。

URL?ParamName= Param value

<QueryParams>タグの名前属性には、有効な文字列であれば、すべて指定できます。

<HTTPRequestUDA> タグ内で指定されたUDAの値は、HTTPリクエストのクエリ文字列の一部となります。

<HTTPAgentStatusUDA> HTTPサービスのステータスが保存されるUDAです。

<HTTPResponseUDA> HTTPレスポンスが保存されるUDAです。

6.15.5 HTTPエージェントの使用

プロセス定義のHTTPエージェントを使用する方法について説明します。

1. HTTPエージェントを表すActivityノードを作成します。

2. “@HTTPAgent”をActivityノードに割当てます。

3. HTTPAgent.xmlのパラメータに対応する、すべてのUDAをプロセス定義に追加します。

以下は、追加する可能性のあるUDAです。

- HTTP_URL

- HTTP_REQUEST

- HTTP_RESPONSE

- HTTP_STATUS

4. HTTPエージェントのアクティビティを起点として次のノードを活性化する、Done矢印およびFailed矢印を追加します。

HTTPエージェントは、以下のとおり、DoneまたはFailedを返します。

- Doneを返した場合、プロセスインスタンスはDone矢印に従って続行します。

- Failedを返した場合、プロセスインスタンスはFailed矢印に従って続行します。

HTTPエージェントサンプル

あらかじめ設定されているHTTPのサンプルが、Windowsの場合<Interstage BPMサーバのインストールディレクトリ>/client/samples/examples/sources/HTTPAgentExample、SolarisまたはLinuxの場合<Interstage BPMサーバのインストールディレクトリ>/client/samples/examples/sources/HTTPAgentExampleディレクトリに保存されています。このサンプルでは、簡単に実装できるHTTPエージェントが提

供されています。このサンプルのエージェントは、HTTPエージェントの完全な機能を示しています。

この例には、Interstage BPMサーバがインストールされているアプリケーションサーバ上に展開する.warファイルが含まれています。

HTTPAgentExampleディレクトリにあるHTTPAgentExampleInstructions.txtファイルの説明のとおり、HTTPエージェントの実装に進んで

ください。

以下は、追加説明です。

・ 環境設定ファイルのagentsConfig.xmlおよびHTTPAgent.xmlには、この例で使用するHTTPエージェントの設定も含まれています。

HTTPエージェントの設定は、HTTPAgent.xmlファイルに含まれています。agentsConfig.xmlは、HTTPAgent.xmlファイルをエー

ジェントとして指定します。

- 108 -

Page 119: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

・ 新しく設定したHTTPエージェントを使用するために、Interstage BPMサービスを再開する必要があります。

・ インポートしたテンプレートのHTTP Agent Example V1.xpdlには、HTTPエージェントが含まれています。エージェントは、ユーザグ

ループがActivityノードに割当てられるのと同じ方法で、Activityノードに割当てられます。ただし、エージェントの名前には、特別

な指定として@記号が付いています。この場合、エージェントの名前は、@HTTPAgentになります。

6.16 タイマーの使用

タイマーの期限が切れると、特定のアクションがトリガされます。タイマーには、Activityノードが活性化された場合に実行が開始される

Activityノードレベルタイマー、またはタイマーを含むプロセス定義から新しいプロセスインスタンスが作成されるたびに実行が開始さ

れるプロセスレベルタイマーがあります。

タイマーはUDAとJavascriptで指定され、Java Actionで設定される時刻とアクションのパラメータで制御されます。タイマーの有効期限

と開始時刻は、絶対時刻を使用した時間指定をすることも、ほかのイベント(アクティビティまたはプロセスインスタンスの開始など)に対

して相対的な時間を指定することも可能です。タイマーに、定期的なトリガアクションを指定することも可能です。また、タイマーは、エ

スカレーション(追加のユーザリストにアクティビティを割当てる)やメールの送信を含む、さまざまなアクションを実行することができます。

タイマーの実行と終了は、キャンセルや再スケジュール、アクティブタイマーの終了またはリセットといったアクションで制御されます。

詳細は、「6.16.3 タイマーの実行を制御する」および「6.16.1 タイマーの定義」を参照してください。

タイマーは、次のノードに設定することができます。

・ Activityノード

・ Delayノード

・ Voting Activityノード

・ Event Activity(Trigger)ノード

・ Compound Activity ノード

使用可能なタイマーの種類の概要は、「3.2.7 タイマー」を参照してください。

6.16.1 タイマーの定義

以下の例では、2000ミリ秒待機してメールを送信するDelayノードにタイマーが追加されます。

ノードにタイマーを追加する方法について説明します。

1. TimerActionオブジェクトのJava Action、およびUDAを定義します。

JavaActionSet timerJASet = WFObjectFactory.getJavaActionSet();

timerJASet.setActionSetDescription("タイマーで実行を制御する"

+ "アクション");

timerJASet.setActionSetName("TimerActions");

JavaAction[] timerJA = timerJASet.createJavaActions(1);

timerJA[0].setActionDescription("メールを送信");

timerJA[0].setActionName("EmailSend");

timerJA[0].setClassName(CLASS_NAME_JAVA_ACTION);

timerJA[0].setMethodName("sendEmail(String,String,String,String,"

+ "String,String,ServerEnactmentContext)");

timerJA[0].setArgumentsUDANames("<E>uda.to</E><E>uda.from</E>"

+ "<E>uda.cc</E><E>uda.bcc</E><E>uda.subject</E>"

+ "<E>uda.body</E><E>sec</E>");

timerJASet.setJavaActions(timerJA);

plan.addDataItemRef("Timer_JavaActionSet",

DataItemRef.TYPE_STRING,

timerJASet.toString());

- 109 -

Page 120: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

2. TimerActionオブジェクトを定義します。WFObjectFactoryクラスのgetTimerDef()を使用して、指定された種類のタイマーを作成

します。

TimerAction timerAction = WFObjectFactory.getTimerAction();

timerAction.setJavaActionSet("Timer_JavaActionSet");

3. この段階で、setType(timerType)を使用して、使用するタイマーの種類も定義します。timerType定数に設定可能な値は、TimerDefインタフェースで取得できます。以下の値があります。

- RELATIVE: 相対時刻タイマーを定義します。

- ABSOLUTE: 絶対時刻タイマーを定義します。

- PERIODIC: 周期タイマーを定義します。

- BUSINESSPERIODIC: ビジネス周期タイマーを定義します。

- BUSINESSRELATIVE: ビジネス相対時刻タイマーを定義します。

TimerDef timer = WFObjectFactory.getTimerDef();

timer.setName("Send mail timer");

timer.setDescription("このタイマーは、2000ミリ秒待機後、"

+ "メールを送信します。");

timer.setType(TimerDef.RELATIVE);

timer.setTime("TimeOfExpiration");

timer.setTimerTimeExpression("DateAdd(Packages.java.util.Date(), 4,\"hh\").getTime();");

timer.addTimerAction(timerAction);

plan.addDataItemRef("TimeOfExpiration",

DataItemRef.TYPE_LONG, "2000");

4. TimerDefオブジェクトを定義します。つまり、TimerDefオブジェクトにTimerActionオブジェクトを付加します。

5. 完了時間を含むUDAの名前を設定します。

6. タイマの有効期限日を計算するJavascriptを設定することもできます。

注意

Javascriptを設定できるのは、絶対時刻タイマー、相対時刻タイマー、および周期タイマーだけです。

- 絶対時刻タイマーの場合、スクリプト評価(script evaluation)の結果は期限となります。しかし、スクリプト評価(script evaluation)がLongフォーマットの日付時間でない場合は、UDA値が完了時間となります。つまり、完了時間は、スクリプト評価結果(scriptevaluation)またはUDA値となります。

- 相対時刻タイマーの場合、スクリプト評価(script evaluation)の結果は参照時間(reference time)となります。UDA値で指定さ

れた時間は、参照時間からの相対的な時間となります。つまり、完了時間は、スクリプト評価(script evaluation)の結果 + UDA値となります。

この例では、完了時間として、スクリプトが実行されたときから4時間後を設定しています。

timerDef.setTimerTimeExpression("DateAdd(Packages.java.util.Date(), 4,\"hh\").getTime();");

この例では、完了時間として、XML UDAでRequestDateから2日後を設定しています。

timerDef.setTimerTimeExpression("sec.getProcessXMLAttributeElementValue(\"xmlUda\",

"//Request/RequestDate/text()\");");

timerDef.setTime("timerUda"); // timerUda holds the value for 2 days

in long format

TimerActionオブジェクトとTimerDefオブジェクトは、それぞれ異なっています。これらは、どちらを先に作成してもかまいません。

ただし、TimerActionオブジェクトを使用するには、TimerDef.addTimerAction(TimerActionアクション)を使用して、TimerDefオブ

ジェクトに関連付ける必要があります。

- 110 -

Page 121: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

7. TimerDefオブジェクトをノードに追加します。

delayNode.addTimer(timer);

6.16.2 期限の追加

プロセス定義またはノードレベルに期限タイマーを付加することで、プロセスインスタンスまたはノードが完了すべき期限を設定するこ

とができます。

以下のサンプルコードは、プロセス定義に期日タイマーを追加する例です。

// 期日タイマーを定義する

plan.startEdit();

TimerDef timerDef = WFObjectFactory.getTimerDef();

timerDef.setName("DueDateTimer");

timerDef.setType(TimerDef.RELATIVE);

plan.addDataItemRef("DueDateExpTime",DataItemRef.TYPE_STRING, "300000");

timerDef.setTime("DueDateExpTime");

// プロセス定義に、期限タイマーを追加する

plan.setDueDateDef(timerDef);

plan.commitEdit();

// プロセス定義から、期限タイマーを取得する

TimerDef dueDateDef = plan.getDueDateDef(timerDef);

ProcessInstance pi = plan.createProcessInstance();

// プロセスインスタンスから、期限を取得する

Date dueDate = pi.getDueDate();

6.16.3 タイマーの実行を制御する

Interstage BPMでは、活性化されたタイマーの実行を制御できます。活性化されたタイマーを取り消すこと、再スケジュールすること、タ

イマーの期限を再計算するためにリセットすること、またはすぐに実行させることができます。タイマーの実行を制御することによって、

タイマーの実際の期限を変える、または実行を停止させることができます。

注意

タイマーの実行を制御できるのは、プロセスインスタンスの所有者と管理者ユーザだけです。

活性化されたタイマーの実行を制御する方法には、以下があります。

・ タイマーを取り消す: 活性化されたタイマーを取り消すことができます。取り消されたタイマーは、期限が来ても実行されません。し

かし、再スケジュールするか、またはリセットすることによって、再活性化できます。

注意

取り消されたタイマーは、再スケジュールとリセットすることができます。

・ タイマーを再スケジュールする: 活性化されたタイマー、または取り消されたタイマーの期限に、絶対時刻を指定することで、再ス

ケジュールできます。

注意

タイマーを再スケジュールするには、期限に絶対時刻を指定する必要があります。

以下のサンプルコードは、再スケジュールをする例です。

- 111 -

Page 122: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

Calendar cal = Calendar.getInstance();

cal.clear();

cal.set(2009, 2, 3, 13, 30, 00);

timerInstance.reschedule( cal.getTimeInMillis() );

Assignee of an activity can also re-schedule a DueDate timer along with process owners and the administrators.

注意

アクティビティの担当者、プロセスインスタンスの所有者、または管理者ユーザは、期限タイマーを再スケジュールできます。

・ タイマーをリセットする: 活性化されたタイマー、または取り消されたタイマーをリセットすると、システムは、再びUDAからタイマー値

を取得するか、スクリプトを再評価します。リセットされると、タイマーは新たに定義された完了時刻に終了されます。

・ タイマーの満了: 活性化されたタイマーは指定された期限に関係なく、特定のアクションがトリガされます。

注意

- 期限タイマーは、特定のアクションがトリガされません。

- タイマーが、再スケジュール、リセット、または満了した場合、そのタイマーインスタンスは取り消されます。そして、新しいタイ

マーインスタンスが作成されます。

6.16.4 タイマーインスタンス履歴

タイマーインスタンスの履歴情報は、監査のために保存されます。タイマーインスタンスが変化するたびに、その変化を保存し、あとで

それを見ることができます。以下のサンプルコードは、タイマーインスタンス履歴を取得する例です。

TimerInstance[] tInsts = processInstance.getTimerInstances(timerDefId);

for (int i = 0; i < tInsts.length; i++) {

TimerInstance tInstance = tInsts[i];

System.out.println(tInstance.getId() + "\t"

+ tInstance.getName() + "\t"

+ tInstance.getDescription() + "\t"

+ tInstance.getTimerInstanceId() + "\t"

+ new Date(tInstance.getTimerExpirationTime()) + "\t"

+ tInstance.getState() + "\t" + tInstance.getActor();

}

6.16.5 ビジネスカレンダーの使用

Interstage BPMでは、その有効期限と関連付けて特定のEventをトリガするタイマーを作成することができます。ビジネスカレンダー機

能を使用して、ビジネスタイマーを作成することができます。ビジネスタイマーは特別な種類のタイマーで、営業時間と営業日だけを

「カウント」し、営業時間内に有効期限が切れます。営業時間や営業日は、ビジネスカレンダーで指定します。

ビジネス定期タイマーとビジネス相対時刻タイマーは、ビジネスカレンダーで使用します。ビジネスカレンダーはタイマーとの組合せで

使用されるので、以下の種類のノードで使用することができます。

・ Activityノード

・ Delayノード

・ Voting Activityノード

・ Event Activity(Trigger)ノード

使用可能なタイマーの種類の概要は、「3.2.7 タイマー」を参照してください。

ここで紹介されているプログラミング例のすべてのコードは、TriggerTimerSample.javaサンプルファイル内にあります。

- 112 -

Page 123: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

ビジネスカレンダーの設定

Interstage BPMでは多種多様なビジネスカレンダーを利用できます。使用するプロセス定義にビジネスカレンダーをまだ定義していな

い場合、Interstage BPMはInterstage BPMのインストール時にデフォルトで設定されたビジネスカレンダーを使います。

独自のカスタムビジネスカレンダーを作成することも、デフォルトのビジネスカレンダーをニーズに合わせて変更することもできます。組

織の実状に合わせて必要な数だけビジネスカレンダーを作成し、プロセス定義またはプロセスインスタンスごとに異なるビジネスカレン

ダーを使用できます。カレンダー名はカレンダーのファイル名に対応しています。カレンダーファイルの拡張子は.calで、これによりビジ

ネスカレンダーとして識別できます。

デフォルトのカレンダー(ファイル名Default.cal)は、インストール時に提供されます。他のカレンダーがInterstage BPMに設定されてい

なくても、Interstage BPMプロセスインスタンスにビジネスタイマーを追加し、デフォルトのカレンダーで営業日と営業時間を指定できま

す。デフォルトのカレンダーは、全機能を備えたビジネスカレンダーのサンプルも提供します。

カスタム化したビジネスカレンダーの作成や、デフォルトのビジネスカレンダーの変更に関する詳細については、『Interstage BPMサーバ

管理者ガイド』を参照してください。

ビジネスカレンダーの割当て

カレンダーの名前(拡張子.calを除くファイル名)をユーザ定義属性(UDA)__businessCalendarに割り当てることで、そのカレンダーを

プロセス定義やプロセスインスタンスに割り当てることができます。このUDAはビジネスタイマーと期限にのみ使用されます。

例えば、ドイツの子会社で実行するプロセスインスタンス用として使いたいカレンダーがあり、それをGerman.calと呼ぶことにします。あ

るアクティビティを従業員の1人に割り当てたいが、しばらくこの従業員の手が空いていない場合に、他の従業員に割り当てたいとしま

す。アクティビティを割り当てなおすタイミングは、ビジネスカレンダーとタイマーの定義によって異なります。

ビジネスカレンダーをプロセス定義に割り当てるには、以下の操作を行います。

1. プロセス定義にSTRING型のUDAを追加し、カレンダーファイルの名前をその値として割り当てます。

例えば、STRING型のUDAをドイツの子会社事業部のプロセス定義に追加し、Germanという値を割り当てることもできます。

plan.addDataItemRef("__businessCalendar", DataItemRef.TYPE_STRING, "German");

2. 任意の名前、タイプ、初期値で、UDAをプロセス定義に追加します。UDAの値は、STRINGとして指定し、タイマーの開始時刻

を表します。

以下の例では、営業時間は現在の時刻に相対して2分置いて設定されます。

plan.addDataItemRef("__udaStartTime", DataItemRef.TYPE_STRING, "BT(00:02:00)");

営業時間に使用できる時刻コードと日付コードの一覧については、「6.16.6 タイマーの時刻コードと日付コード」を参照してくだ

さい。

3. 例えばActivityノードなどの、ビジネスの定期タイマーまたは相対タイマーを割り当てるノードを追加します。

Node orderActivity = plan.addNode("Order",Node.TYPE_ACTIVITY);

4. 名前、説明、UDA __udaStartTimeで定義された開始時刻を指定して、また相対タイマーと定期タイマーのいずれであるかを定

義して、タイマーを作成します。

以下の例では、ビジネスの相対タイマーを使用します。

TimerDef busCalTimer = WFObjectFactory.getTimerDef();

busCalTimer.setName("busCalTimer");

busCalTimer.setDescription("Timer to show the business calendar functionality");

busCalTimer.setTime("__udaStartTime");

busCalTimer.setType(TimerDef.BUSINESSRELATIVE);

5. タイマーをActivityノードに追加します。

TimerAction busCalTimerAction = WFObjectFactory.getTimerAction();

// タイマーの期限が切れるときに実行されるJavaActionSetを含む

// UDAの名前を設定します。

busCalTimerAction.setJavaActionSet("BusCalActionSet");

// このタイマー定義にJavaActionSetを指定するTimerAction

// を追加します。このタイマーの期限が切れると

- 113 -

Page 124: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

// アクションの定義済みJavaActionSetが実行されます。

busCalTimer.addTimerAction(busCalTimerAction);

// タイマーをActivityノードに追加します。

orderActivity.addTimer(busCalTimer)

ビジネスカレンダーを特定のビジネスタイマーや期限に割り当てることもできます。ビジネスタイマーや期限は、このビジネスカレ

ンダーに基づいて計算されます。以下の表現を使用します。

UC(<ビジネスカレンダー>):

<ビジネスカレンダー>には、拡張子.calを除いたビジネスカレンダーの名前を指定します。

以下の例では、California.calと呼ばれるビジネスカレンダーをビジネスタイマーの計算に使用します。

plan.addDataItemRef("__udaStartTime", DataItemRef.TYPE_STRING,

"UC(California);BT(00:02:00)");

. . . TimerDef busCalTimer = WFObjectFactory.getTimerDef();

. . . busCalTimer.setTime("__udaStartTime");

busCalTimer.setType(TimerDef.BUSINESSRELATIVE);

. . .

JavaScript関数setProcessAttributeとUDA __businessCalendarを使えば、プロセスインスタンスの実行中でもカレンダーの変更が

可能です。ビジネスカレンダーをEngland.calに変更する場合、以下のスクリプトを使用します。

sec.setProcessAttribute("__businessCalendar","England");

6.16.6 タイマーの時刻コードと日付コード

タイマーを設定するとき、時刻コードと日付コードを使って時刻を指定できます。以下の例では、現在の時刻に対して相対的に表され

る営業時刻を設定しています。時刻コードは太字で示しています。

plan.addDataItemRef("__udaStartTime", DataItemRef.TYPE_STRING,

"BT(00:02:00)");

使用できる時刻コードと日付コードは以下のとおりです。

時刻コード

コード 意味 例

AT 1日のうちの絶対時刻を設定します。 AT(16:30:00): その日の午後4時30分。

CT 1日の終業時刻に対して相対的に表され

る時刻を設定します。

設定可能な値: 00またはマイナスの時間。

一般的には、終業時刻までの相対的な

時刻を計算するために、終業時刻ととも

にマイナスの時間を使用します。

CT(00): 終業時刻。

CT(-02:00:00): 終業時刻の2時間前。

OT 1日の始業時刻に対して相対的に表され

る時刻を設定します。

設定可能な値: 00またはプラスの時間。

OT(00): 始業時刻。

OT(02:00:00): 始業時刻の2時間後。

BT 現在の時刻に対して相対的に表される営

業時刻を設定します。

BT(04:30:00): 営業時刻で現時刻から4時間30分後。

BT(-02:00): 営業時間の2時間前。

BT(00): 現在の時刻が営業時刻ではない場合に、時

刻を変えずに次の営業時刻を順方向検索することがで

きます。営業日によって営業時刻が異なる場合は、こ

れを使用する必要があります。

- 114 -

Page 125: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

コード 意味 例

BT(-00): 直前の営業時刻に逆方向検索する場合に使

用します。現在の時刻がすでに営業時刻になっている

場合は無効です。

日付コード

コード 意味 例

BD 営業日を設定します。 BD(4): 今日から4営業日後。

BD(0): その日が営業日の場合は同じ日、営業日でな

い場合は翌日。

BD(-0): その日が営業日の場合は同じ日、営業日でな

い場合は前日。

RD 現在の日付から日付を相対的に設定し

ます。

RD(7): 1週間後。

RD(-1): 1日前。

WD 曜日を設定します。

設定可能な値: 1以上。

WD(1): その週の日曜日。

WD(7): その週の土曜日。

WD(8): 次の週の日曜日。

WN 今日以降の次の曜日を設定します。

設定可能な値: 1から7。

WN(1): 今日以降の次の日曜日。

WN(7): 今日以降の次の土曜日。

RM 将来の月を相対的に設定します。その月

に十分な日数がないため同じ日に設定

できない場合は、月の 後の日になりま

す。

RM(3): 3か月後。

DM 月の特定の日を設定します。

設定可能な値: -1、1から31

DM(1): 月の 初の日。

DM(-1): 月の 後の日。

BM 月の特定の営業日を設定します。

設定可能な値: -1、1から31

BM(1): 月の 初の営業日。

BM(-1): 月の 後の営業日。

DY その年の特定の日を設定します。

設定可能な値: -1、1から365

DY(1): 年の 初の日。

DY(-1): 年の 後の日。

BY その年の特定の営業日を設定します。

設定可能な値: -1、1から365

BY(1): 年の 初の営業日。

BY(-1): 年の 後の営業日。

6.17 リモートサブプロセスのモデル化

リモートサブプロセスは、リモートコンピュータのワークフローサーバ上で実行されるサブプロセスです。リモートコンピュータのワークフ

ローサーバは、たとえば、ほかのInterstage BPMサーバなどです。

リモートサブプロセスは、親プロセス定義ではRemote Subprocessノードによって表されます。親プロセスとリモートサブプロセスとの間の

やり取りは、以下のステップで行われます。

1. Remote Subprocessノードに到達すると、ローカルコンピュータのワークフローサーバがStartProcess要求をリモートコンピュータの

ワークフローサーバに送ります。このとき、リモートサブプロセスインスタンスが処理するUDAも送られます。

2. リモートコンピュータのワークフローサーバはこの要求を受け取って、プロセスインスタンスを開始します。

3. リモートプロセスインスタンスが完了すると、それを実行したワークフローサーバがProcessCompletedメッセージを返します。この

とき、サブプロセスインスタンスの結果も返されます。

- 115 -

Page 126: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

4. ローカルコンピュータのワークフローサーバはこのメッセージを受け取り、結果を取り込み、Remote Subprocessノードを完了して、

プロセスインスタンスが次のノードに進めるようにします。

このやり取りを正常に行うためには、親プロセス定義に以下を定義する必要があります。

・ リモートプロセス定義のURI

・ やり取りされるUDAの識別子

・ サブプロセス定義の戻り値

6.17.1 親とリモートサブプロセス定義を設計

ここでは親とサブプロセス定義を設計する方法を説明します。以下のサンプルプロセス定義を使って主なステップを説明します。

図6.3 リモートサブプロセスノードとの親プロセス定義

- 116 -

Page 127: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

図6.4 リモートサブプロセス定義

サンプルファイルRemoteSubProcess.javaで、プログラミングコードの全体を参照できます。

親とリモートサブプロセス定義を設計するには、以下の手順に従います。

1. サブプロセス定義を作成します。Startノード、一つ以上のExitノード、および必要なActivityノードをサブプロセス定義に追加しま

す。また、前後にパスされるUDAsを特定します。

サンプルプログラムでは、サブプロセス定義を作成するためにcreateRemoteSubPlan()が呼び出されています。

Plan subPlan = createRemoteSubPlan();

サンプルサブプロセス定義は、Startノード、Activityノードおよび2つのExitノードから成り立っています。Exitノードは親プロセス

定義によって処理される必要があるサブプロセス定義の可能な結果を定義します。

Node exitNodeApp = plan.addNode("Approved", Node.TYPE_EXIT);

exitNodeApp.setPosition(new Point(500, 350));

Node exitNodeRej = plan.addNode("Rejected", Node.TYPE_EXIT);

exitNodeRej.setPosition(new Point(200, 350));

以下のUDAsはサンプルサブプロセス定義で作成されます。

plan.addDataItemRef("Name",

DataItemRef.TYPE_STRING, "John Smith");

plan.addDataItemRef("Number",

DataItemRef.TYPE_STRING, "0123456789");

plan.addDataItemRef("Amount",

DataItemRef.TYPE_FLOAT, "0.0");

plan.addDataItemRef("Limit",

DataItemRef.TYPE_FLOAT, "0.0");

2. 親プロセス定義を作成し、編集モードに設定します。

plan = WFObjectFactory.getPlan();

plan.setWFSession(adminSession);

plan.startEdit();

3. 親プロセス定義では前後にパスされるUDAsを作成します。サンプルプログラムでは以下のUDAsが作成されます。

plan.addDataItemRefWithId("Name", "Name",

DataItemRef.TYPE_STRING, "John Smith");

plan.addDataItemRefWithId("SSN", "SSN",

DataItemRef.TYPE_STRING, "0123456789");

- 117 -

Page 128: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

plan.addDataItemRefWithId("LoanAmount", "Loan Amount",

DataItemRef.TYPE_FLOAT, "0.0");

plan.addDataItemRefWithId("ApprovalLimit", "Approval Limit",

DataItemRef.TYPE_FLOAT, "0.0");

注意

プロセス定義が関わった同じUDAに違う名前を使用できます。ただし同じデータタイプにしてください。

4. Startノード、一つ以上のExitノードおよび必要なActivityノードを親プロセス定義に追加します。

5. 親プロセス定義にRemote Subprocessノードを追加します。

Node RemoteSubProcessNode = plan.addNode("Remote",

Node.TYPE_REMOTE_SUB_PROCESS);

RemoteSubProcessNode.setPosition(new Point(400, 300));

6. 前後にパスされる必要があるUDAsのデータマッピングを定義します。ノードインタフェースの以下のメソッドを使用します。

addDataMappingElement(<UDA identifier in parent process definition>,

<UDA identifier in subprocess definition>,<direction of data flow>)

親からリモートサブプロセスへデータ値を渡すとき、データフローの方向としてDataItemMappingElement.INを指定してください。

リモートサブプロセスから親プロセスへデータ値を渡すとき、DataItemMappingElement.OUTを指定してください。データ値を渡

すのが双方向のときは、DataItemMappingElement.INOUTを指定してください。

サンプルプログラムでは、以下のデータマッピングが定義されます。

RemoteSubProcessNode.addDataMappingElement("Name","Name",

DataItemMappingElement.IN);

RemoteSubProcessNode.addDataMappingElement("SSN","Number",

DataItemMappingElement.IN);

RemoteSubProcessNode.addDataMappingElement("LoanAmount", "Amount",

DataItemMappingElement.IN);

RemoteSubProcessNode.addDataMappingElement("ApprovalLimit", "Limit",

DataItemMappingElement.OUT);

7. 以下のメソッドを使用し、親とサブプロセス定義を接続します。それにはリモートサブプロセス定義のURIとサーバがかかわった

ワークフローで使用される通信プロトコルを指定してください。

RemoteSubProcessNode.setSubPlanURI("asap:" +

subPlan.getPlanURI());

Interstage BPMはワークフローサーバ間のコミュニケーションの2つのオープンプロトコル、シンプルワークフローアクセスプロトコル

(SWAP)と非同期サービスアクセスプロトコル(ASAP)をサポートします。これらのプロトコルはXMLメッセージをワークフローサー

バの間でHTTPを超えて渡します。

プロセスの統合をInterstage BPMサーバ上で実行するときASAP(asapと指定)の使用をお薦めします。Collaboration Ringのみと

SWAP(swapと指定)を使用します。Collaboration Ring連携に関する詳細はお近くのFujitsuサポートセンターに連絡してくださ

い。

8. 親プロセス定義でノードを接続するために矢印を追加します。サブプロセスが戻る可能性を考慮して外向きの矢印をRemoteSubprocessノードに必ず追加します。結果値はリモートサブプロセス定義のExitノードの名前に対応しています。

9. Remote Subprocessノードには、1つ以上の外向きの矢がある場合があります。親プロセスが再開するときは1つの矢印だけが選

択されます。選択された矢印はリモートサブプロセスの結果に一致するものです。サンプルプログラムでサブプロセスは可決か

否決のいずれかを戻します。

Arrow ExitSubProcessApp = plan.addArrow("Approved", RemoteSubProcessNode, activityNodeAfter);

Arrow ExitSubProcessRej = plan.addArrow("Rejected", RemoteSubProcessNode, exitNode);

- 118 -

Page 129: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

注意

サブプロセス定義のExitノードの名前と外向きの矢印の名前は大文字・小文字も同一でなければなりません。

6.17.2 実行中のリモートサブプロセス定義

リモートサブプロセス定義を実行できるように、Interstage BPM連携ユーザはローカルおよびリモートInterstage BPMサーバで構成され

なければなりません。:

・ ローカルInterstage BPMサーバでは、ユーザはリモートInterstage BPMサーバで認証可能であると指定してください。このユーザは

リモートInterstage BPMサーバにサブプロセスインスタンスを作成します。

・ リモートInterstage BPMサーバでは、ユーザはローカルInterstage BPMサーバで認証可能であると指定してください。このユーザは

リモートサブプロセスインスタンスの結果をローカルInterstage BPMサーバに戻します。

Interstage BPM連携ユーザはInterstage BPMサーバのSWAPLinkageUserNameパラメータとSWAPLinkagePasswordで構成されます。

詳しくは『Interstage BPMサーバ 管理者ガイド』を参照してください。

サブプロセス定義がInterstage BPM連携ユーザに属さない限り、発行されたサブプロセス定義のみがリモートに呼び出されます。

Interstage BPM連携ユーザはドラフト状態にあるリモートサブプロセス定義を呼び出すことができます。よって、以下のオプションの一

つをサブプロセス定義のテストに使用します。

1. 実行する前に、リモートサブプロセス定義を発行します。

2. ローカルInterstage BPMサーバに構成されたInterstage BPM連携ユーザを調べます。それをサブプロセス定義の所有者として

使用します。

3. ローカルInterstage BPMサーバに構成されたInterstage BPM連携ユーザを変更します。Interstage BPM連携ユーザとしてサブプ

ロセス定義の所有者を指定します。

6.17.3 リモートサブプロセスのエラー処理

親プロセス定義でRemote SubprocessノードのエラーJava Actionを定義することでリモートサーバが開始しないなどの理由から、リモー

トサブプロセス開始が失敗した場合の処理が可能です。このように、サブプロセスが開始できなければプロセスインスタンスがエラー状

態になるのを避けられます。

リモートサブプロセスが開始に失敗すると、リモートサブプロセスレベルのエラーJava Actionセットが活性化されます。 Java Actionのこ

のタイプに関する詳細は「6.3.8 エラーJava Actionの使用」を参照してください。

エラーアクションセットをRemote Subprocessノードに設計し、割り当てるには、以下の手順に従います。

1. WFObjectFactoryクラスからgetJavaActionSet()を使用して、新しいJavaActionSetオブジェクトを作成します。

JavaActionSet errorJavaActionSet = WFObjectFactory.getJavaActionSet();

2. Java ActionセットにJava Actionsの必要数を生成します。以下の例では、一つのJava Actionが生成しています。

JavaAction[] errorJavaActions = errorJavaActionSet.createJavaActions(1);

3. Java Actionセットを定義します。

errorJavaActions[0]

.setActionName("WriteLogEntry");

errorJavaActions[0]

.setActionDescription("Writes a log entry in case the Remote Subprocess could not be started");

errorJavaActions[0]

.setMethodName("writeLogEntryWithException(String,ServerEnactmentContext)");

errorJavaActions[0]

.setClassName(CLASS_NAME_JAVA_ACTION);

errorJavaActions[0]

.setArgumentsUDANames("<E>uda.LogEntry</E><E>sec</E>");

errorJavaActionSet.setJavaActions(errorJavaActions);

- 119 -

Page 130: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

4. リモートサブプロセスノードにJava Actionセットを割り当てます。

RemoteSubProcessNode.setJavaActionSet(errorJavaActionSet,

JavaActionSet.NODE_ERROR);

6.18 Compound Activityノードの使い方

Compound Activityノードは、プロセスのフェイズを、マイルストーンはフェイズの終了を表します。フェイズは様々なノードや矢印を含

んだ入れ物です。いったんフェイズが完了すると、プロセス内のマイルストーンは達成されたことになり、プロセスは次のアクティビティ

またはフェイズに遷移します。また、フェイズには期限を設定することができます。この期限はタイマーとは別に設定できます。

Compound Activityノードは、入れ子になった子ノードを持ちます。子ノードとして、StartノードとExitノードが必要です。Compound Activityノードの定義については、「6.18.1 Compound Activityノードの定義」を参照してください。

Compound ActivityノードとCompound Activityノード内に入れ子にされたノードインスタンスは、親のプロセスインスタンスと同じプロセ

ス定義Idを持ちます。この入れ子にされたノードインスタンスは、Compound Activityノードの外にアクセスすることはできません。

以下の図は、Compound Activityノードの定義例です。

図6.5 Compound Activityノード

Compound Activityノードに対するワークフロー

プロセスインスタンス内でCompound Activityノードに制御が移ると、以下のように処理が行われます。

1. Compound Activityノードのワークアイテムが作成されます。ワークアイテムは、WaitingForSubProcessの状態になります。

2. 子のStartノードが活性化されます。

注意

Compound Activityノードは、内部にStartノードとEndノードを持たなければなりません。

3. Compound Activityノードの状態はWaitingForSubProcessに変化し、子ノードが実行されます。

4. 子のExitノードに達すると、以下のようになります。

- Compound Activityノードは終了し、完了状態に変化します。

- Compound Activityノードのワークアイテムは、削除されます。

- Compound Activityノードから出ている外向き矢印は、子のExitノードと同じものが活性化されます。

注意

- 子のExitノードの名前が、Compound Activityノードから外向きに出ている矢印のどれかと名前が同じであるかどうか確認し

てください。

- Compound Activityノードに対するワークアイテムが、矢印を選択することによって完了したとき、すべての子ノードインスタン

スは中止されます。そのワークアイテムは削除され、Compound Activityノードは、完了状態になります。

Compound Activityノードの詳細は、「3.2.10 ノードタイプ」を参照してください。

- 120 -

Page 131: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

6.18.1 Compound Activityノードの定義

前提条件

Compound Activityノードをプロセス定義に追加するには、編集モードにする必要があります。

Compound Activityノードを定義するには

1. Compound Activityノードを作成するには、addNode()メソッドを使います。nodeTypeにTYPE_COMPOUND_ACTIVITYをセット

してください。

Node activity = plan.addNode("CompoundActivity",

Node.TYPE_COMPOUND_ACTIVTY);

次のサンプルコードは、CompoundNodeという名前のCompound Activityノードをプロセス定義planに追加しています。

// Adding Compound Activity Node

Node compoundNode =

plan.addNode("CompoundNode",Node.TYPE_COMPOUND_ACTIVITY);

compoundNode.setRole("SampleGroup");

compundNode.setSize(new Dimension(200,100));

2. com.fujitsu.iflow.model.workflow.NodeインタフェースのaddChildNode()APIを使って、子ノードを追加します。

com.fujitsu.iflow.model.workflow.Node

次のサンプルコードは、Compound Activityノードに子ノードを追加しています。

//Adding child nodes

Node subStartNode = compoundNode.addChildNode("SubStart",

Node.TYPE_START);

Node subActivityNode =

compoundNode.addChildNode("SubActivity",Node.TYPE_ACTIVITY);

subActivityNode.setRole("SampleGroup");

//Exit Node name should be same as Compound Activities' outgoing Arrow

name

Node subExitNode = compoundNode.addChildNode ("CommonName",

Node.TYPE_EXIT);

3. 子ノードに矢印を追加します。Compound Activityノードの外向き矢印の名前と、Compound Activityノードの内部のExitノードの

名前が一致していることを確認してください。

次のサンプルコードは、それぞれの子ノードを矢印で接続しています。

plan.addArrow("SubArrow1", subStartNode, subActivityNode);

plan.addArrow("SubArrow2", subActivityNode, subExitNode);

次のサンプルコードは、子のExitノードと同じ名前の外向き矢印を、Compound Activityノードから接続しています。

plan.addArrow("CommonName", compoundNode, actNode);

注意

Compound Activityノード内部の子ノードからCompound Activityノードの外に、矢印を定義することはできません。

6.19 ダイナミックサブタスクの使い方

活性化している作業があるとき、その作業を完了させるために、作業を分割してサブタスクとし、それらのサブタスクに異なる担当者を

割り当てたい場合があります。このような場合、動的にサブタスクを作成して、このサブタスクを異なる作業者に割当てることが可能で

す。作成したサブタスクを、ダイナミックサブタスクと呼びます。

- 121 -

Page 132: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

サブタスクを活性中のアクティビティ(Activity1)に追加するには、子のダイナミックノードインスタンスを作成し、作業者を割当てます。

作成した子のダイナミックノードインスタンスは、Activity1の子のダイナミックノードインスタンスとなり、指定した担当者のワークアイテム

がサブタスクとして作成されます。

注意

サブタスクを追加するには、ノードインスタンスが、活性またはサブプロセスで待機中のどちらかの状態である必要があります。

ノードインスタンスをアクティビティに追加すると、そのノードインスタンスの状態はサブプロセスで待機中に、ワークアイテムの状態はサ

ブプロセスで待機中に変化します。子のダイナミックノードインスタンスと関連するサブタスクの状態は、活性中に変化します。すべて

のサブタスクが完了したとき、そのタスクは完了となります。

注意

子のダイナミックノードインスタンスは、子のダイナミックノードインスタンスが完了または中止になったとき、削除されます。

子のダイナミックノードインスタンスには、さらに子のノードインスタンスを追加することができ、ダイナミックノードインスタンスを階層化で

きます。

子のダイナミックノードインスタンスには、以下を設定することができます。

・ 名前

・ 説明

・ 優先度

・ コメント

・ 所有者

・ Order(一覧表示する際に利用可能なタスクの順序)

・ 担当者

・ Point(画面表示する際に利用可能な位置情報)

子のダイナミックノードインスタンスに、期限を設定することができます。

子のダイナミックノードインスタンス(サブタスク)に、以下のものは設定できません。

・ JavaAction

・ Javascript

・ タイマー

・ トリガ

・ イテレータ(Iterator Count)

・ 取戻しフラグ

・ トランザクションフラグ

・ サブプロセス

・ チェインドサブプロセス(Chained Process)

・ リモートサブプロセス

・ 矢印(サブタスク作成時に、completeという名前の矢印が設定されます。)

・ フォーム

- 122 -

Page 133: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

タスクにサブタスクを追加する

以下の手順は、ノードインスタンス(nodeInstance)に、子のダイナミックノードインスタンス(newNodeInst)を追加する方法を示していま

す。

1. プロセスインスタンスを開始し、ノードインスタンスを活性化します。例えば、nodeInstanceが活性化されるとします。

2. 活性化したノードインスタンス上に、addChildDynamicNodeInstance()APIを使って、子のダイナミックノードインスタンス

(newNodeInst)を作成します。詳細は、下記サンプルコードを参照してください。

// create dynamic node instance

ProcessInstance procInst = … // Get process instance

String[] assignees = {"user1","user2"}

procInst.startEdit();

NodeInstance newNodeInst = nodeInstance.addChildDynamicNodeInstance("SubTask",assignees) ;

newNodeInst.setDesc("Description of this sub task");

newNodeInst.setOrder(10);

newNodeInst.setPriority(Node.PRIORITY_MEDIUM);

procInst.commitEdit();

参照

詳 細 は 、 『 API Javadoc マ ニ ュ ア ル 』 の com.fujitsu.model.workflow パ ッ ケ ー ジ の NodeInstance ク ラ ス の

addChildDynamicNodeInstance()を参照してください。

ここで、newNodeInstは活性化状態となり、nodeInstanceはサブプロセスの完了待ち状態になります。newNodeInstに対して作成

されたワークアイテムが、nodeInstanceのワークアイテムのサブタスクとなります。

注意

親のノードインスタンス、および子のノードインスタンスは、それぞれgetParentNodeInstance()、およびgetChildNodeInstances()APIを使用して取得することができます。

6.20 ダイナミックプロセスの使い方

プロセスインスタンスやワークアイテムの実行中に、プロセス定義が存在しないアクティビティを実施することがあります。言い換えると、

プロセスが定義されていないアクティビティをプロセスの実行時に動的に定義することがあります。

ダイナミックプロセスインスタンスは、プロセス定義を登録しないで作成することができます。また、ダイナミックプロセスは矢印を持ちま

せん。ダイナミックプロセスを完了させるためには、ダイナミックプロセス中に動的に作成されたダイナミックタスクを完了させる必要があ

ります。

ダイナミックプロセスインスタンスを作成するには、WFObjectFactory.createDynamicNodeInstance()メソッドを使用します。

注意

ダイナミックプロセスを作成するには、WFAdminSession.createApplicationSpace(String applicationId)メソッドを使ってアプリケーション

スペースを作成し、アプリケーションIDを決定しておく必要があります。

WFObjectFactory.createDynamicNodeInstance() メ ソ ッ ド を使って 、ダ イナ ミ ッ クプ ロセスを作成するには 、あ らかじめ

WFSession.chooseApplication()メソッドを使って、使用するアプリケーションIDを選択しておく必要があります。

WFSession.chooseApplication()メソッドを実行するとき、システム以外のアプリケーションIdを指定する必要があります。

ダイナミックプロセスとダイナミックノードインスタンスを作成するには

以下はダイナミックプロセスを作成し、ノードインスタンスとタスクを作成する手順を示しています。

- 123 -

Page 134: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

1. ダイナミックプロセスの作成と開始には、WFObjectFactory.createDynamicNodeInstance()APIを使います。以下のサンプルコード

は、ダイナミックノードインスタンスを作成し、ルートのタスクを取得する手順を示しています。

// create dynamic process instance

NodeInstance nodeInst =

WFObjectFactory.createDynamicNodeInstance(wfSession, "Root Task");

2. ダイナミックプロセスインスタンスにノードインスタンスを作成します。

ダイナミックプロセスインスタンスの名前と、そのプロセスインスタンス上に作成されるノードインスタンスの名前には、同じものが

設定されます。

ノードインスタンスの名前やほかの属性値を変えたい場合は、変更することができます。以下のサンプルコードを参照してくださ

い。

// create dynamic node instance

ProcessInstance procInst = nodeInstance.getProcessInstance();

procInst.startEdit();

nodeInst.setName("Modified task name");

nodeInst.setDesc("Description of this sub task");

nodeInst.setOrder(10);

nodeInst.setPriority(Node.PRIORITY_MEDIUM);

procInst.commitEdit();

注意

ダイナミックノードインスタンスが作成されたあと、プロセスインスタンスの作成者が、ノードインスタンスの所有者として設定されま

す。そして、そのノードインスタンスの所有者のワークアイテムが作成されます。

3. 活性化したダイナミックノードインスタンスに、子のダイナミックノードインスタンスを付加します。ダイナミックノードインスタンスは、

サブプロセスの完了待ち状態になります。子のダイナミックノードインスタンスは活性状態になります。以下のサンプルコードを参

照してください。

procInst.startEdit();

String[] assignees = String{"user01","user02"};

nodeInst.addChildDynamicNodeInstance("NewTask", assignees);

nodeInst.setDesc("Description of this sub task");

nodeInst.setOrder(10);

nodeInst.setPriority(Node.PRIORITY_MEDIUM);

procInst.commitEdit();

6.21 決定表

決定表を使うことにより、意思決定のための詳細なルールをプログラミングすることなく作成できます。

決定表は、表に基づいて、動的なルールの管理を行います。そのため、ユーザは、複雑なルールエンジンの基盤の学習・開発および

サポートを行う必要がなくなります。

決定表ファイル(.dtファイル)は、プロセス定義とは独立して存在します。このことにより、ビジネスユーザが業務用語を使用して決定表

を作成でき、また、決定表の作成作業を、より技術的な作業であるプロセス定義の作成から分離することができます。

6.21.1 決定表の概念

決定表は、以下のものから構成されます。

・ 「条件変数」と呼ばれる入力変数の一覧 (例 : Deal Amount)

・ 「結果変数」と呼ばれる出力変数の一覧 (例 : Discount Rate)

・ 入力変数に関する条件を記述した「条件」 (例 : 'Deal Amount > 5000' or 'Deal Amount <= 3000')

・ 出力変数の値を格納した「結果」 (例 : Discount Rate に 35 を設定する)

- 124 -

Page 135: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

・ 様々な条件と結果を結びつける「決定ルール」 (例 : 条件 [Deal Amount > 5000] が成立する場合、結果 [Discount Rate に 35 を設定する]を適用する)

決定表では、入力変数(条件変数)に渡される値をもとに、条件の一覧のうち、どれに合致するかが評価されます。

合致した条件に対応する結果が選択され、結果の値が出力変数(結果変数)に設定されます。

決定表の作成時には、条件変数の作成、結果変数の作成、条件の作成、結果の作成、および条件と結果の対応づけ(決定ルールの

作成)を主に行います。

決定表の例は、以下のような図になります。

図6.6 決定表の概念

上記の例では、CUSTOMER_LEVELとDEAL_AMOUNTが入力変数(条件変数)です。DISCOUNT_RATEとSALES_MAN_BONUSが出力変数(結果変数)です。

一覧に載っている決定ルールは、以下のとおりです。

・ CUSTOMER_LEVEL の値が GOLD かつ DEAL_AMOUNT の値が 500000 よ り大きい場合 、 DISCOUNT_RATE と

SALES_MAN_BONUSの値に35を設定する

・ CUSTOMER_LEVEL の値が SILVER かつ DEAL_AMOUNT の値が 500000 よ り大きい場合、 DISCOUNT_RATE と

SALES_MAN_BONUSの値に25を設定する

・ CUSTOMER_LEVEL の値が REGULAR かつ DEAL_AMOUNT の値が 500000 以上の場合、 DISCOUNT_RATE と

SALES_MAN_BONUSの値に15を設定する

決定表では、決定ルールは上から順に評価され、 初に合致した条件に対応する結果の値が採用されます。

例えば、CUSTOMER_LEVELの値がSILVERでDEAL_AMOUNTの値が800000の場合、 初の条件には合致しません。2番目の条

件に合致するため、DISCOUNT_RATEとSALES_MAN_BONUSの値に25が設定されます。2番目の決定ルールが選択されたため、

3番目の決定ルールは評価されません。

データ辞書

条件変数は、データ辞書と呼ばれる機能を持っています。データ辞書を使うことにより、条件変数の値に同義語を設定することができ

ます。

例として、Countryという条件変数を考え、Country = Japanという条件を作成するものとします。Japanの同義語としてJPやJPNをあらかじ

め設定しておくと、ユーザがCountryの値にJapanでなくJPやJPNを指定した場合でも、Country = Japanという条件が成立します。

データ辞書の機能により、決定表がより柔軟なものになります。

6.21.2 プロセス定義内での決定表の使用

プロセス定義内で決定表を使用するために、決定表を評価するための定義済JavaAction(決定表JavaAction)があります。決定表の変数

(条件変数・結果変数)をプロセス定義のUDAに対応づける必要があります。詳細は、『Studioユーザーズガイド』またはInterstage BPMコンソールのオンラインヘルプを参照してください。

- 125 -

Page 136: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

プロセスインスタンス内で決定表JavaActionが活性化されたとき、入力のUDAの値が決定表内の条件のどれかに合致すれば、決定表

JavaActionは決定表の結果の値を出力UDAに設定します。

6.21.3 決定表の仕様

条件変数・結果変数

条件変数・結果変数は、以下の情報を持っています。

・ 名前 : 条件変数・結果変数の抽象化された名前です。これらの名前は、決定表JavaActionを定義する際に、UDAの名前に対応

づけられます。

・ 説明 : 条件変数・結果変数の簡単な説明です。説明は、決定表の動作に影響しません。

・ 条件変数・結果変数の型として、以下がサポートされています。

- BOOLEAN

- INTEGER

- LONG

- FLOAT

- BIGDECIMAL

- STRING

- DATE

決定ルール

決定ルールは、以下の情報を持っています。

・ それぞれの条件変数に対する条件

・ 結果変数に設定する値

条件では、以下の演算子が使用できます。

・ =, != : 値が一致しているかどうかを判断します。

・ >, <, >=, <= : 数値に対する「以上」・「以下」などを比較します。

・ in(a,b,c) : 複数の値のどれかと一致しているかどうかを判断します。

・ between(x,y) : 数値が指定された範囲に入っているかを判断します。

・ LIKE(), NOT_LIKE() : 式に対するパターンマッチです。「?」は任意の1文字に、「*」は任意の長さの文字列に対応します。例え

ば、LIKE(?OLD)が条件に使われた場合、GOLD、BOLD、TOLDのような値が条件に合致します。LIKE(JAP*)が条件に使われ

た場合、JAPAN、JAPANESEのような値が条件に合致します。

条件変数の型によって、サポートされる演算子が変わります。以下の表を参照してください。

演算子 Boolean Integer Float Long BigDecimal Date String

< × ○ ○ ○ ○ ○ ×

>= × ○ ○ ○ ○ ○ ×

<= × ○ ○ ○ ○ ○ ×

>= × ○ ○ ○ ○ ○ ×

!= ○ ○ ○ ○ ○ ○ ○

= ○ ○ ○ ○ ○ ○ ○

in(a,b,c) × ○ ○ ○ ○ ○ ○

- 126 -

Page 137: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

演算子 Boolean Integer Float Long BigDecimal Date String

between(x,y) × ○ ○ ○ ○ ○ ×

like × × × × × × ○

not_like × × × × × × ○

6.21.4 決定表の管理

決定表の管理には、com.fujitsu.iflow.decisiontableパッケージを使用します。本パッケージには、決定表を管理するためのAPIが含ま

れています。本パッケージおよびAPIの詳細は、『API Javadocマニュアル』を参照してください。

以下の主要な操作について、説明します。

1. 決定表の作成

2. 条件変数・結果変数・決定ルールの作成

3. 決定表の正当性の確認

4. 決定表の評価

5. 決定表の保存

6. 決定表の読み込み

決定表の作成

決定表は、APIを使用して、または決定表のXMLスキーマに準拠するXMLファイルを作成することで、作成されます。

APIを使用した決定表の作成

決定表は、DecisionTableFactoryクラスのcreateDecisionTable()メソッドを使うことにより、作成されます。詳細は、『API Javadocマニュ

アル』を参照してください。

以下は例です。

DecisionTable dt = DecisionTableFactory.createDecisionTable();

dt.setName("DecisionTableName");

dt.setDescription("example of decision table");

XMLスキーマに準拠した、手動による決定表の作成

APIを使わずに決定表を作成する場合、作成された決定表のXMLファイル(.dtファイル)が、.dtファイル用のXMLスキーマに準拠

するようにしてください。XMLスキーマは、<Interstage BPMサーバインストールディレクトリ>/client/DecisionTableディレクトリ内の

DecisionTable.xsdです。

条件変数・結果変数・決定ルールの作成

条件変数の作成

新しい条件変数を作成するには、DecisionTableクラスのcreateConditionCriterion()メソッドを使用します。本メソッドの詳細は、『APIJavadocマニュアル』を参照してください。

以下の例では、CUSTOMER_LEVEL と DEAL_AMOUNT という2つの条件変数が作られています。

また、CUSTOMER_LEVELにはデータ辞書が使われており、条件変数の値 Regularの同義語として、normalおよびnoneが定義さ

れています。

ConditionCriterion criterion1 = dt.createConditionCriterion();

criterion1.setName("CUSTOMER_LEVEL");

criterion1.setType(DataItemRef.TYPE_STRING);

Dictionary dic = criterion1.createDictionary();

DictionaryItem regularDictionaryItem = dic.createDictionaryItem();

regularDictionaryItem.setWord("Regular");

String synonyms[] = new String[2];

synonyms[0] = "Normal";

synonyms[1] = "None";

- 127 -

Page 138: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

regularDictionaryItem.setSynonyms(synonyms);

ConditionCriterion criterion2 = dt.createConditionCriterion();

criterion2.setName("DEAL_AMOUNT");

criterion2.setType(DataItemRef.TYPE_INTEGER);

ConditionCriterion criteria[] = new ConditionCriterion[2];

criteria[0] = criterion1;

criteria[1] = criterion2;

dt.setConditionCriteria(criteria);

結果変数の作成

新しい結果変数を作成するには、DecisionTableクラスのcreateResultLocator()メソッドを使用します。本メソッドの詳細は、『API Javadocマニュアル』を参照してください。

以下の例では、DISCOUNT_RATE と SALES_MAN_BONUS という結果変数が作成されています。

ResultLocator locator1 = dt.createResultLocator();

locator1.setName("DISCOUNT_RATE");

locator1.setType(DataItemRef.TYPE_STRING);

ResultLocator locator2 = dt.createResultLocator();

locator2.setName("SALES_MAN_BONUS");

locator2.setType(DataItemRef.TYPE_STRING);

ResultLocator locators[] = new ResultLocator[2];

locators[0] = locator1;

locators[1] = locator2;

dt.setResultLocators(locators);

決定ルールの作成

以下の例では、次のような決定ルールが作成されています。

- CUSTOMER_LEVEL の値が GOLD かつ DEAL_AMOUNT の値が 500000 より大きい場合、 DISCOUNT_RATE と

SALES_MAN_BONUSの値に35を設定する

- CUSTOMER_LEVELの値がSILVER かつ DEAL_AMOUNTの値が 500000より大きい場合、DISCOUNT_RATEと

SALES_MAN_BONUSの値に25を設定する

Decision decision1 = dt.createDecision();

Condition condition1 = decision1.createCondition();

condition1.setCriterionName("CUSTOMER_LEVEL");

condition1.setOperator(Condition.CONDITION_OPERATOR_EQUAL);

condition1.setValue("Gold");

Condition condition2 = decision1.createCondition();

condition2.setCriterionName("DEAL_AMOUNT");

condition2.setOperator(Condition.CONDITION_OPERATOR_GREATER_THAN);

condition2.setValue("500000");

Condition conditions1[] = new Condition[2];

conditions1[0] = condition1;

conditions1[1] = condition2;

decision1.setConditions(conditions1);

Result result1 = decision1.createResult();

result1.setLocatorName("DISCOUNT_RATE");

result1.setValue("35");

Result result2 = decision1.createResult();

result2.setLocatorName("SALES_MAN_BONUS");

result2.setValue("35");

Result results1[] = new Result[2];

results1[0] = result1;

results1[1] = result2;

decision1.setResults(results1);

Decision decision2 = dt.createDecision();

... //add code for creating decision2, similar to creating decision1

...

- 128 -

Page 139: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

Decision decisions[] = new Decision[2];

decisions[0] = decision1;

decisions[1] = decision2;

dt.setDecisions(decisions);

決定表の正当性の確認

決定表は、評価を行う前に、その正当性を確認する必要があります。

決定表の正当性の確認内容の例として、以下のような基本的な事柄があります。

・ 決定表に名前が指定されているか

・ 条件変数の名前が指定されているか

・ 条件変数の型が指定されているか

決定表の正当性の確認を行うには、DecisionTableクラスのvalidate()メソッドを使用します。本メソッドの詳細は、『API Javadocマニュア

ル』を参照してください。

ValidationResult[] validationResults = dt.validate();

System.out.println(validationResults.length + " Problems detected.");

for (int i = 0; i < validationResults.length; i++) {

ValidationResult validationResult = validationResults[i];

System.out.println("Severity = " + validationResult.getSeverity());

System.out.println("ID = " + validationResult.getIdentifier());

System.out.println("Problem = " + validationResult.getProblem());

}

決定表の評価

決定表を評価する、またはサンプルの入力値を使って決定表をテストするには、DecisionTableクラスのevaluate()メソッドを使用します。

本メソッドの詳細は、『API Javadocマニュアル』を参照してください。

決定表の評価を成功させるためには、決定表が正当なものである必要があります。validate()メソッドの結果に重大度がERRORのもの

がある場合、決定表の評価は失敗します。

以下の例では、CUSTOMER_LEVELにサンプルの値'SILVER'を設定し、DEAL_AMOUNTにサンプルの値'800000'を設定していま

す。決定表はこれらのサンプルの値を使って評価され、対応する結果が設定されます。

Properties conditionValues = new Properties();

conditionValues.setProperty("CUSTOMER_LEVEL","Silver");

conditionValues.setProperty("DEAL_AMOUNT","800000");

DecisionResult decisionResult = newDt.evaluate(conditionValues);

int decisonIndex = decisionResult.getExecutedDecision();

Decision allDecisions[] = newDt.getDecisions();

Decision selectedDecision = allDecisions[decisonIndex];

Result results[] = decisionResult.getResults();

for (int i = 0; i < results.length; i++){

Result result = results[i];

String locatorName = result.getLocatorName();

String value = result.getValue();

System.out.println("result : " + locatorName + " = " + value);

}

決定表の保存

決定表を保存するには、DecisionTableクラスのsave()メソッドを使用します。本メソッドの詳細は、『API Javadocマニュアル』を参照して

ください。

FileOutputStream outFile = new FileOutputStream("/decisiontable.dt");

dt.save(outFile);

- 129 -

Page 140: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

決定表はワークフローアプリケーションに固有のものであるため、<DMSRoot>/apps/<アプリケーションID>/rule/<カテゴリ名> ディレクト

リに保存します。

決定表の読み込み

既存の決定表を読み込むには、DecisionTableクラスのload()メソッドを使用します。本メソッドの詳細は、『API Javadocマニュアル』を参

照してください。

DecisionTable newDt = DecisionTableFactory.createDecisionTable();

FileInputStream inFile = new FileInputStream("/decisiontable.dt");

newDt.load(inFile);

決定表のAPIサンプル

決定表の管理に関するサンプルについては、「A.1.4 決定表に関連したサンプル」を参照してください。

6.22 Iteratorノード

通常、プロセス定義に定義されたそれぞれのノードを実行すると、1つだけインスタンスが作成されます。Iteratorノードを使用すると、1つのノードから複数のノードインスタンスを作成できます。

作成するノードインスタンスの数は、ノードに指定するIteratorカウントによって決まります。

Iteratorノードには、以下のような特徴があります。

・ Iteratorは、プロセス定義で指定します。

・ Iteratorカウントは、UDAを使用して指定します。Iteratorノードのために指定されたUDAが存在しない場合、そのプロセス定義から

はプロセスインスタンスを作成できません。

・ Iteratorは、以下のノードタイプで利用できます。

- Activityノード

- Subprocessノード

- Chained-Processノード

・ すべてのIteratorノード インスタンスは、並行して実行されます。

・ Iteratorを有効にするため、Iteratorカウントに、0より大きい値を設定する必要があります。

・ Iteratorカウントに、0以下が設定された場合、以下のようになります。

- プロセスインスタンス作成時に、ノードインスタンスが1つ作成されますが、活性化されません。

- そのノードインスタンスは実行されず、次のノードが活性化します。

・ 完了したIteratorノードが再実行された場合、作成済のIteratorノードが活性化されます。例えば、 初に3つのIteratorノードにノー

ドインスタンスが作成された場合、以下のようになります。

- 再実行する前に、Iteratorカウントが10に変更された場合、3つのノードインスタンスが再活性化され、7つのノードインスタンスが

新規に作成されます。

- 再実行する前に、Iteratorカウントが2に変更された場合、新しいインスタンスは作成されません。2つのインスタンスが再活性化

され、1つは活性化されません。

・ アドホックな活性化またはアドホックな非活性化によって、ノードインスタンスは活性化または非活性化されます。

- 完了したノードインスタンスは、活性化できません。

- 実行中のノードインスタンスを非活性化した場合、そのIteratorノードのすべての実行中のノードインスタンスが非活性化されま

す。

・ 開始アクションと終了アクションは、生成されるノードインスタンスの数に関係なく、1回だけ実行されます。

・ Iteratorノードインスタンスの外向き矢印インスタンスのソース、またはターゲット ノードインスタンスは、変更できません。

・ Iteratorノードインスタンスを削除した場合、そのIteratorノードのすべてのノードインスタンスが削除されます。

- 130 -

Page 141: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

・ Iteratorノードインスタンスの外向き矢印インスタンスを削除した場合、そのIteratorノードのすべてのノードインスタンスの外向き矢印

インスタンスも削除されます。

・ Iteratorノードインスタンスに外向き矢印インスタンスを追加した場合、そのIteratorノードのすべてのノードインスタンスに、外向き矢

印インスタンスが追加されます。

・ 実行中のノードインスタンスにIteratorカウントを設定しても、ノードインスタンスの実行に影響しません。Iteratorカウントは、ノードイ

ンスタンスが次に実行されるときに使用されます。

・ それぞれのIteratorノードインスタンスは、Iteratorインデックス番号を使って、識別またはアクセスできます。インデックス番号は、1から

nまでの値です。nは、Iteratorカウントと同じ値になります。

・ Iteratorノードを含んでいる実行中のプロセスインスタンスからは、Iteratorノードに指定されたIteratorカウントUDAを削除できませ

ん。

6.22.1 Iteratedアクティビティノード

Iteratorアクティビティノードには、以下の特徴があります。

・ アクティビティノードについて、Iteratorカウントをnとします。プロセスインスタンスが作成されると、すぐに 初のノードのインスタンス

が作成されます。プロセスインスタンスが開始したあと、制御がノードに達すると、以下のことが起こります。

- 1つのアクティビティノードに対して、n-1回インスタンスが繰り返し作成されます。ワークアイテムはn個のノードインスタンスに対

し、ロールに割り当てられたすべてのユーザに作成されます。例えば、ロールに10人のユーザが割当てられていた場合、Iteratorカウントが5なら、50個のワークアイテムが作成されます。

・ あるユーザがワークアイテムを完了させると、ノードインスタンスに含まれるほかのユーザのワークアイテムは削除され、そのノード

インスタンスは完了します。

・ 繰り返し作成されたノードがすべて完了すると、ノードのアクティビティが完了し、次のノードが活性化されます。

・ アクティビティのIteratorノードから外向きの矢印の数は、1つだけです。

・ Iteratorノードのすべてのインスタンスは、プロセス内のすべてのUDAを共有しています。あるインスタンスがUDAの値を変更した

場合、すべてのインスタンスに即座に反映されます。

・ Iteratorを設定したアクティビティノード上で、トリガを使うことはできません。

・ すべての繰り返されたインスタンスは、同じプロパティを持ちます。(名前、説明など。)

・ 繰り返し作成されたインスタンスの繰り返しの数は、ModelAPI、JavaAcript、またはCustomJavaActionを使って取得することができ

ます。詳細は、「Model APIを使った、ノードインタンスのIteratorインデックスの取得」および「カスタムJavaActionクラスを使って、ア

クティビティノードインスタンスのIteratorインデックスを取得する」を参照してください。

・ ノードのそれぞれのIteratorインスタンスには、異なるユーザを割当てることができます。詳細は、「カスタムJavaActionクラスを使っ

て、アクティビティノードインスタンスのIteratorインデックスを取得するを」を参照してください。ロールアクションは、それぞれのノー

ドインスタンスの作成を繰り返すごとに実行されます。

Iteratorノードに対するワークアイテムの取戻し

下記に、Iteratorノードでワークアイテムの取戻しがサポートされるケースを説明します。

Iteratorノードで、ワークアイテムの取戻しをサポートする場合について説明します。

・ Iteratorノードが取戻しソースのノードであるとき、 後に完了したノードのワークアイテムからだけ取戻しができます。

- すべてのIteratorノードインスタンスが完了し、次のアクティビティがまだ活性中である場合

取戻しによって、活性化している取戻しターゲットアクティビティは非活性化します。このとき、取戻しターゲットのアクティビティ

の開始アクションに設定された補償JavaActionが実行されます。また、取戻しソースのアクティビティに設定された終了アクショ

ンが実行されます。そして、取り戻されたIteratorアクティビティが活性化され、取戻しを実行したユーザのワークアイテムが作成

されます。

- すべてのIteratorノードインスタンスが完了していない場合

完了したIteratorノードインスタンスのどれかからだけ実行できます。取戻しによって、取り戻されたアクティビティインスタンスは

再び活性化され、取戻しを実行したユーザのワークアイテムが作成されます。

- 131 -

Page 142: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

・ Iteratorノードが取戻しターゲットノードであるとき、Iteratorノードインスタンスが実行中の場合にだけ、取戻しができます。取戻しに

よって、繰り返し作成されたすべてのノードインスタンスは非活性化します。このとき、取戻しターゲットの開始アクションに設定された補償

JavaActionが実行されます。また、取戻しソースノードに設定された終了JavaActionが実行されます。そして、取戻されたアクティビ

ティは再び活性化し、取戻しを実行したユーザのワークアイテムが作成されます。

ワークアイテムの取戻しについては、「5.3.5 ワークアイテムの取戻し」を参照してください。

6.22.2 繰り返し作成されたSubprocessノードとChained-Processノード

繰り返し作成されたSubprocessノードとChained-Processノードについて、説明します。

・ 繰り返し作成されたSubprocessノードとChained-processノードについて、Iteratorカウントをnに設定したとします。プロセスインスタン

スが作成されると、すぐに 初のノードのインスタンスが作成されます。プロセスインスタンスが開始され、ノードに制御が移ったあ

と、以下の処理が行われます。

- 繰り返し作成されたSubprocessノードでは、n-1のノードインスタンスが作成されます。n個のノードインスタンスにそれぞれ関連

付けてサブプロセスが作成され、開始されます。すべての繰り返し作成されたSubprocessノードのインスタンスが完了したあと、

次のノードに制御が移ります。

- 繰り返し作成されたChained-processノードでは、更なるノードインスタンスは作成されません。プロセスインスタンスと同時に作

成される1つのノードインスタンスから、n個の関連している子プロセスインスタンスが作成され、開始されます。制御は、ただち

に次のノードに遷移します。

・ 繰り返し作成されたSubprocessノードに含まれているプロセスインスタンスが中止された場合、すべての繰り返し作成されたサブプ

ロセスインスタンスは中止されます。

SubprocessとChained-processのIteratorノードに対するデータマッピング

・ 繰り返し作成されたインスタンスは、それぞれUDAを持っています。繰り返し作成されたインスタンス同士の間で、UDAは引き継げ

ません。親プロセスのUDAとだけ、引き継ぎ可能です。

・ 事前に定義された変数を、XML UDAまたはXPathを使うことによって、繰り返し作成された子のプロセスと親のプロセスの間で、変

換することができます。親プロセスのXML UDAのXPath式内の変数は、親のXML UDAを異なる子のプロセスインスタンスのXMLUDAにマッピングするのに利用されます。データマッピングの詳細は、「親と繰り返し作成された子プロセスインスタンス間のデー

タマッピング」を参照してください。

6.22.3 Iteratorノードの使い方

Iteratorノードの作成

プロセス定義を設計するとき、com.fujitsu.iflow.model.workflow.NodeインタフェースのsetIteratorCount(String udaName)メソッドを使っ

て、ノードを繰り返すことができます。このとき、UDAの型はIntegerにしなければなりません。

com.fujitsu.iflow.model.workflow.NodeインタフェースのgetIteratorCount()メソッドを使って、IteratorUDAの名前を取得することができ

ます。詳細は、『API Javadocマニュアル』でこれらのメソッドを参照してください。

次のサンプルコードは、Activityという名前のアクティビティノードに、IteratorCountというUDAの値に5をセットした例です。

//lock a Process definition before calling the API

plan.startEdit();

plan.addDataItemRef("IteratorCount", DataItemRef.TYPE_INTEGER, "5");

Node activityNode = plan.addNode("Activity", Node.TYPE_ACTIVITY); activityNode.setIteratorCount("IteratorCount");

//when you save the plan, the Iterator count of

//the above node will also get saved

plan.createProcessDef();

//Now you can check the Iterator count set above

String iteratorCountUda = activityNode.getIteratorCount();

繰り返し可能に設定したノードを通常のノードに戻すには、空文字“”をIteratorカウントUDAの名前として設定します。

- 132 -

Page 143: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

注意

ノードのIteratorカウントは、それぞれのIteratorアクティビティインスタンスの担当者の数を考慮して設定することをお勧めします。例え

ば、プロセスインスタンスごとに、Iterateアクティビティによって2000以上ものワークアイテムが作成されないようにしてください。この場

合、サーバ環境のセットアップとシステムのロードの際、Iterateノードの活性化のトランザクションにおいて非常に長い時間がかかり、タ

イムアウトを引き起こし、プロセスがエラー状態になることがあります。

Model APIを使った、ノードインタンスのIteratorインデックスの取得

com.fujitsu.iflow.model.workflow.NodeInstanceインタフェースのgetIteratorIndex()メソッドを使って、Iteratorインデックスを取得すること

ができます。詳細は、『API Javadocマニュアル』を参照してください。

サンプルコード

//retrieve the Node instance using Model API, then use code below

//for retrieving iterator index of node instance

//Let 'ni' represent retrieved Node Instance

int iteratorindex ;

iteratorIndex = ni.getIteratorIndex();

//this iteratorIndex can be used for manipulation of an XML UDA as follows

//Create the XPath using above retrieved iteratorIndex

String xpath="//OrderIds/orderId[position()=" + iteratorIndex + "]/text()";

//Retrieve the XML UDA from the process instance

::

//Assume 'dataItem' is the retrieved XML UDA

//Set the new value of the XML UDA using the XPath

dataItem.setElementValue(xpath, "Updated");

//Retrieve the new value

String udaValue = dataItem.getElementValue(xpath);

カスタムJavaActionクラスを使って、アクティビティノードインスタンスのIteratorインデックスを取得する

com.fujitsu.iflow.server.intf.ServerEnactmentContextインタフェースのgetActivityIteratorIndex()を使って、アクティビティインスタンスの

Iteratorインデックスを取得することができます。このインデックスをカスタムJavaActionクラスの中で、実際のノードインスタンスのXML UDAから値を読み取ることができます。

例えば、異なる担当者にそれぞれのインスタンスを割り当てたい場合、アクティビティインスタンスのIteratorインデックスを取得するカスタム

JavaActionクラスを定義する必要があります。

以下の手順で、カスタムメソッドに、このインタフェースアクティビティインスタンスの担当者を設定します。

1. getActivityIteratorIndex()メソッドを使って、担当者を設定するために使われるカスタムメソッドを、カスタムJavaActionクラス内に

作成します。

2. 上記で定義したカスタムJavaActionは、ロールアクションで、繰り返し作成された異なるアクティビティインスタンスに異なる担当

者を割当てることができます。

1.カスタムJavaActionクラスの作成

カスタムJavaActionクラスを作成します。

a. ServerEnactmentContextインタフェースをインポートしてください。

b. JavaActionから呼び出すメソッドのパラメータの1つがServerEnactmentContext型であることを確認してください。

c. JavaActionを定義するとき、メソッドに渡す値を指定します。ServerEnactmentContextインタフェースを表すsecという変数名を

使います。プロセスの実行時、Interstage BPMは、このオブジェクトをカスタムメソッドに渡します。

以下の例は、XML UDAがUdaAssigneesの場合です。

- 133 -

Page 144: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

<Assignees>

<Assignee>ibpm_user1</Assignee>

<Assignee>ibpm_user2</Assignee>

<Assignee>ibpm_user3</Assignee>

</Assignees>

次のサンプルコードは、getActivityIteratorIndexメソッドを使って、setAssigneeという名前のカスタムメソッドを定義したカスタム

JavaActionクラスで、担当者を定義しています。

import com.fujitsu.iflow.server.intf.ServerEnactmentContext;

public class MyClass {

public void setAssignee(ServerEnactmentContext sec)

throws Exception {

String xpath = "//Assignees/Assignee[position()=" +

sec.getActivityIteratorIndex() + "]/text()";

String assignee =

sec.getProcessXMLAttributeElementValue("UdaAssignees", xpath);

//here "UdaAssignees" is the name of the XML UDA containing the assignees

String[] assignees = { assignee };

sec.setActivityAssignees(assignees);

}

}

2.ロールアクションを使って、異なる担当者を、繰り返し作成された異なるノードインスタンスに割当て

a. アクティビティノードを付加します。プロセス定義内の 初のアクティビティの名前には、'protected' 'final' 'static'修飾子を使い

ます。

String NODE_FILL_OUT_PR = "Fill out Purchase Request";

protected final static String NODE_FILL_OUT_PR = "Fill out Purchase

Request";

Node fillOutNode = plan.addNode("NODE_FILL_OUT_PR",Node.TYPE_ACTIVITY);

fillOutNode.setRole("SampleGroup");

fillOutNode.setPosition(new Point(450, 40));

b. WFObjectFactoryクラスのgetJavaActionSet()メソッドを使って、新しいJavaActionSetオブジェクトを生成します。

JavaActionSet asRJavaActionSet = WFObjectFactory.getJavaActionSet();

c. JavaActionSetに対して、要求された数のJavaActionを作成します。

JavaAction[] asRJavaActions = asRJavaActionSet.createJavaActions(1);

d. アクティビティの担当者を設定するJavaActionを定義します。

asRJavaActions[0].setActionDescription("Sets Activity assignee");

asRJavaActions[0].setActionName("Set assignee");

asRJavaActions[0].setMethodName("setAssignee(ServerEnactmentContext");

asRJavaActions[0].setClassName("MyClass");

e. ロールアクションとして、アクティビティノードにJavaActionSetを割当てます。

asRJavaActionSet.setJavaActions(asRJavaActions);

fillOutNode.setJavaActionSet(asRJavaActions,JavaActionSet.NODE_ROLE);

注意

以下のJavaScriptで、getActivityItratorIndex()を使うこともできます。

var iteratorIndex = sec.getActivityIteratorIndex();

- 134 -

Page 145: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

必要に応じて、さらにiteratorIndexを使用できます。

親と繰り返し作成された子プロセスインスタンス間のデータマッピング

XML UDAまたはXPathを使うことによって、繰り返し作成された子のプロセスと親のプロセスの間で、事前に定義された変数$indexを変換することができます。

以下のXML UDAで例示します。

・ 親プロセスのXML UDA名、ParentXMLUDA

<Items>

<Item>A1</Item>

<Item>A2</Item>

</Items>

・ 子プロセスインスタンス#1のXML UDA、ChildXMLUDA_P

<ChildItems>

<ChildItem>P</ChildItem>

</ChildItems>

・ 子プロセスインスタンス#2のXML UDA、ChildXMLUDA_P

<ChildItems>

<ChildItem>P</ChildItem>

</ChildItems>

注意

子のプロセスインスタンスは同じ子プロセス定義から作成されるので、すべての子のインスタンスには、同じ名前で同じ初期値を持つUDAが存在します。

com.fujitsu.iflow.model.workflow.NodeインタフェースのaddDataMappingElement()メソッドを使うことで、親と子のXML UDA間のマッ

ピングを実装することができます。

構文:

addDataMappingElement(java.lang.String parentDataItemRefName,java.lang.String

xPathForParentDataItem,java.lang.String childDataItemRefName,java.lang.String

xPathForChildDataItem,int direction)

なぜ、変数$indexが必要なのか

変数$indexを使わないで、addDataMappingElement()メソッドを使用した場合について、以下に説明します。

例えば、以下のメソッドは次のような動作をします。

addDataMappingElement("ParentXMLUDA", "//Items/Item[2]/text()", "ChildXMLUDA_P",

"//ChildItems/ChildItem/text()", DataItemMappingElement.INOUT)

1. 子プロセスを開始するとき、2つの子プロセスインスタンスのUDA、ParentXMLUDAは、("//Items/Item[2]/text()"という指定によっ

て)同じ値A2が受け取られます。子のプロセスインスタンスのUDAはこのとき、以下のようになります。

- 子のプロセスインスタンス#1のUDA:

<ChildItems>

<ChildItem>A2</ChildItem>

</ChildItems>

- 135 -

Page 146: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

- 子のプロセスインスタンス#2のUDA:

<ChildItems>

<ChildItem>A2</ChildItem>

</ChildItems>

2. 子のプロセスインスタンスが終わると、それぞれのインスタンスは親プロセスのParentXMLUDAの2項目を("//Items/Item[2]/text()"の指定によって)同じ値に変更します。このように、それぞれの変換したデータによって上書きされます。例えば、子のプロ

セスインスタンス#1は、ParentXMLUDAの2番目の値をP1に置き換えます。そして、子プロセスインスタンスの#2は、ParentXMLUDAの2番目の項目をP2に上書きします。親のXMLUDAは、以下のようになります。

<Items>

<Item>A1</Item>

<Item>P2</Item>

</Items>

本質的には、これは、親プロセスから異なった子のプロセスインスタンスに異なった値をマッピングできないことを意味します。非XML UDAデータ・マッピングを使用するときも、同様の問題が起こります。

親プロセスから繰り返し作成された異なる子のプロセスインスタンスに、異なった値をマッピングできるようにするには、事前に定義した変数

$indexを使用する必要があります。

変数$indexを使う

変数$indexを使って、addDataMappingElement()を使用した場合について、以下に説明します。

例えば、以下のメソッドは次のような動作をします。

addDataMappingElement("ParentXMLUDA", "//Items/Item[$index]/text()",

"ChildXMLUDA_P", "//ChildItems/ChildItem/text()", DataItemMappingElement.INOUT)

1. 2つの子インスタンスのUDAは、(as specified by "//Items/Item[$index]/text()"という指定によって)異なる値を受け取ります。親UDAのXPath式で$index変数は、自動的に、1つ目の親のXML UDAを1つ目の子インスタンスのXML UDAに、2つ目の親のXML UDAを2つ目の子インスタンスのXML UDAにといったようにマッピングします。子インスタンスのUDAは、以下のようになります。

- 子のプロセスインスタンス#1のUDA:

<ChildItems>

<ChildItem>A1</ChildItem>

</ChildItems>

- 子のプロセスインスタンス#2のUDA:

<ChildItems>

<ChildItem>A2</ChildItem>

</ChildItems>

2. 子インスタンスが終わると、それぞれの子インスタンスは異なる親のXML UDAの項目を変更しています。親のUDAのXPathにお

ける変数$indexは、自動的に、1つ目の親のXML UDAを1つ目の子インスタンスのXML UDAに、2つ目の親のXML UDAを2つ目の子インスタンスのXML UDAにといったようにマッピングします。親のXML UDAは、以下のようになります。

<Items>

<Item>P1</Item>

<Item>P2</Item>

</Items>

このように、変数$indexを使うことによって、異なる親UDAの値を、繰り返し作成された異なる子プロセスインスタンスのUDAにマッピン

グすることができます。

- 136 -

Page 147: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

注意

・ 変数$indexを使用すると、強制的に連続した値がマッピングされます。(1つ目のアイテムを1つ目の子インスタンスのXML UDAに、

2つ目のアイテムを2つ目の子インスタンスのXML UDAにといったように)このため、親のXML UDAのアイテムが、マッピングされ

る子インスタンスに対応していることを確認する必要があります。

・ 親プロセスのXML UDAのXPathにだけ、変数$indexを使用できます。

・ 繰り返しを設定していない子ノードのXML UDAのXPathに変数$indexを使用すると、実行されている間、この変数は1に置き換え

られます。

データマッピングについては、「6.17.1 親とリモートサブプロセス定義を設計」を参照してください。

- 137 -

Page 148: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

第7章 運用管理

Interstage BPMには、管理者としてのロールが2つあります。

・ スーパーユーザ: テナントを作成・管理することができ、Interstage BPM サーバを管理する管理者です。テナントの作成・管理は、

スーパーユーザだけが行えます。

スーパーユーザは、テナントユーザ、プロセス定義、プロセスインスタンス、およびワークアイテムを管理できません。スーパーユー

ザは、テナントの管理にInterstage BPM テナント管理コンソールを使用します。スーパーユーザの管理者機能については、『InterstageBusiness Process Manager サーバ・コンソール 導入ガイド』および『Interstage BPM サーバ 管理者ガイド』を参照してください。

・ テナント所有者: 管理者のロールを持つテナントユーザです。テナント所有者は、スーパーユーザによって作成されます。

非SaaSモードでは、デフォルトテナントが一つあるだけです。このため、スーパーユーザとテナント所有者は同じ人物になるでしょ

う。しかし、異なる管理機能を利用するために、スーパーユーザかテナント所有者を選んでログインする必要があります。

ここでは、テナント所有者によって行われる運用管理のためのModel APIを使用したプログラミングの例を示します。プログラミングの例

には、以下のものがあります。

・ テナント所有者のログインとログアウト

・ テナントユーザ管理(以降、ユーザ管理とします。)

・ プロセス定義管理

・ プロセスインスタンス管理

・ ワークアイテム管理

こ の 章 で 紹 介 さ れ て い る プ ロ グ ラ ミ ン グ 例 の す べ て の コ ー ド は 、 Adminstration.java サ ン プ ル フ ァ イ ル 、 お よ び

SampleLocalUserManagement.javaサンプルファイル内にあります。

サンプルコードを実装するには、Model APIの次のパッケージを使用する必要があります。

・ com.fujitsu.iflow.model.util

ほかのクラスやインタフェースで一般的に使用される、低レベルのユーティリティクラスが含まれています。

・ com.fujitsu.iflow.model.workflow

プロセス定義やプロセスインスタンスで必要な情報を管理するインタフェースが含まれています。これには、ノード、矢印、添付文

書、ワークアイテム、およびパーミッションレベルが含まれます。

一般的なModel APIの詳細については、『API Javadocマニュアル』を参照してください。

7.1 管理者のログインとログアウト(テナント所有者)プロセス定義やユーザを管理するために、管理者(テナント所有者)はInterstage BPMサーバにログインする必要があります。管理者が

ログインするには、セッション、つまりWFAdminSessionオブジェクトを作成する必要があります。このセッションは、管理者がログアウトす

ると終了します。

管理者がログイン/ログアウトする方法について説明します。

1. 新しいWFAdminSessionオブジェクトを作成します。

adminSession = WFObjectFactory.getWFAdminSession();

ワークフローオブジェクトを割当てるには、WFObjectFactoryクラスを使用します。次に、getWFAdminSession()でWFAdminSessionオブジェクトを作成します。

2. 該当する環境設定ファイルを使用して、セッションを初期化します。

<Interstage BPMサーバ インストールディレクトリ>/client/samples/examples/classesに格納されたiFlowClient.propertファイルのサ

ンプルを使用できます。

このファイルを使うか、実行時のカレントディレクトリに格納された新しいファイルにプロパティを書き込みます。実行時のカレント

ディレクトリの格納先については、「4.3 プロパティファイルの格納」を参照してください。

- 138 -

Page 149: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

使 用 す る プ ロ パ テ ィ フ ァ イ ル に 、 ロ グ イ ン す る テ ナ ン ト 名 を 指 定 し て く だ さ い 。 テ ナ ン ト 名 は 、

WFObjectFactory.TENANT_NAME( テナント名 ) の値として指定します。 Default テナントへログインする場合は、

TenantName=Defaultを指定します。

iFlowClient.properties ファイルの中でバックスラッシュ"¥"またはコロン":"を使用する場合は、バックスラッシュでエスケープする

必要があります。たとえば、サーバのアドレスは以下のように指定します。

ibpmhost\:49950

java.util.Propertiesを使い、iFlowClient.propertiesファイルをロードするとき、load() メソッドは、エスケープ文字を自動的に考慮さ

れます。他の方法でプロパティをロードする場合は、エスケープ文字を正しく扱うようにしてください。iFlowClient.propertiesファイ

ルで使用するのエスケープシーケンスの詳細については、java.util.Properties.store()メソッドのJAVAドキュメントを参照してくださ

い。

セッション用に設定ファイルiFlowClient.propertiesを読み込みます。

Properties sessionProps = new Properties(); sessionProps.load(new FileInputStream("iFlowClient.properties"));

以下のとおり、セッションを初期化します。

adminSession.initForApplication(null, sessionProps);

1. サーバにログインします。

String server = sessionProps.getProperty("HostName") + "Flow";

adminSession.logIn(server, adminName, password);

接続サーバ名には、"Flow"という文字列を追加してください。

2. すべての作業が終了したら、管理者はWFAdminSessionを使用してサーバからログアウトします。

if (adminSession != null ) {

adminSession.logOut();

}

7.2 ワークフローアプリケーションを選択する

ログインしたあと、WFSession.chooseApplication()を使って、操作するワークフローアプリケーションを選択します。

adminSession.chooseApplication(myApplicationID);

注意

ApplicationModeSecurityパラメータにRelaxが設定されている場合、ワークフローアプリケーションの選択を省略することができます。選

択を省略した場合の動作については、『Interstage BPMサーバ 管理者ガイド』の「4.4 ApplicationSecurityMode」を参照してください。

7.3 ユーザおよびグループ管理

Interstage BPMを使うすべてのテナントユーザ(以降、ユーザとします)はユーザアカウントが必要です。ユーザは一つ以上のグループ

に所属しなければなりません。

ユーザアカウント

配備時のInterstage BPMの構成によって、ユーザアカウントはInterstage BPMのローカルユーザストアまたはディレクトリサービス(リモー

トユーザストア)で管理されます。

ローカルのユーザストアを使用する場合、WFAdminSessionインタフェースを使用してユーザの追加や削除、またパスワードのリセット

ができます。

ディレクトリサービスを使用する場合、ユーザの追加や削除にディレクトリサービスの機能を使用します。

- 139 -

Page 150: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

グループ

グループは、組織内である機能を共有するユーザの集まりです。 例えば、マネージャグループは組織の上位のマネージャを含む場

合があります。Interstage BPMでは、グループはだれがプロセスでのタスク責任者であるかを決定するのに使用されます。

グループはInterstage BPMのローカルグループストアかディレクトリサービス(リモートグループストア)、または両方のシステムで管理で

きます。ローカルグループストアを使用する場合、WFAdminSessionインタフェースで管理できます。 WFAdminSessionインタフェース

には、グループの作成、グループを他のグループに追加、ユーザをグループに追加するなどのオペレーションがあります。

グループが他のグループのメンバーである場合もあるので、組織の階層を対応するグループ階層にモデル化できます。どんな深さに

もグループをネストできます。

注意

ユーザとグループを異なったストアで管理できます。例えば、ある組織ではユーザアカウントをディレクトリサービスで管理し、グループ

をローカルグループストアで管理する場合があります。

7.3.1 ローカルユーザの管理

前提条件: Interstage BPMは、ローカルユーザストアを使用するように構成されています。詳細は、『Interstage Business Process Managerサーバ・コンソール 導入ガイド』を参照してください。

WFAdminSessionインタフェースですべてのローカルユーザのリストを取得、ローカルユーザの追加、パスワードのリセット、ローカル

ユーザの削除ができます。

・ すべてのローカルユーザのリストを取得するには、以下のように設定します。

User[] localUser = adminSession.getLocalUsers();

・ ローカルユーザを追加するには、以下のように設定します。

//Check whether the user already exists

User testUser = WFObjectFactory.getUser(sampleUser);

adminSession.createUser(testUser, usrPassword);

ユーザIDとパスワードは 大200文字まで使えます。 英数字、ハイフン、およびアンダースコア ("_")のみを使用してくださ

い。"@"はInterstage BPMでエージェントを特定するのに使われるため、"@"で始まるユーザ名は使用できません。

・ ローカルユーザのパスワードをリセットするには、以下のように設定します。

adminSession.resetPassword(testUser, usrPassword);

注意

ユーザにパスワードを変更する権限を与える場合、WFSessionインタフェースからchangePassword()を使用します。

・ ローカルユーザを削除するには、以下のように設定します。

adminSession.deleteUser(userID);

このユーザは属するすべてのローカルグループから削除、除外されます。

7.3.2 ローカルグループの管理

ここではローカルグループストア管理の も重要なオペレーションを紹介します。プログラミングサンプルでは、3つのグループの階層

が作成され、ユーザはそれらのグループに割り当てられます。以下の図は作成される組織構造を示します。

- 140 -

Page 151: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

図7.1 サンプルグループとユーザ

ローカルグループ管理をするには、以下の手順に従います。

1. WFAdminSessionインタフェースからcreateGroup()を使用して、必要なローカルグループを作成します。

以下のサンプルはAllEmployees、US_Employees、UK_Employeesグループを作成します。グループ作成前にサンプルはグルー

プが既に存在するかどうかチェックします。

group = WFObjectFactory.getGroup("AllEmployees ",

"ALL Employee group");

adminSession.createGroup(group);

group = WFObjectFactory.getGroup("US_Employees ",

"US Employee group");

adminSession.createGroup(group);

group = WFObjectFactory.getGroup("UK_Employees ",

"UK Employee group");

adminSession.createGroup(group);

ユーザIDとパスワードは 大200文字まで使えます。 英数字、ハイフン、およびアンダースコア ("_")のみを使用してくださ

い。"@"はInterstage BPMでエージェントを特定するのに使われるため、"@"で始まるユーザ名は使用できません。

2. getAllGroups()を使用してInterstage BPMで利用可能なすべてのグループを取得できます。

Group[] LocalGroupList = adminSession.getAllGroups();

3. Interstage BPMのローカルグループに割り当てたいユーザを作成します。 このサンプルでは、ユーザのLisa、Sarah、Peterおよび

Johnが作成されます。

testUser = WFObjectFactory.getUser("UserSarah");

adminSession.createUser(testUser, "SomePassword");

testUser = WFObjectFactory.getUser("UserLisa");

adminSession.createUser(testUser, "SomePassword");

testUser = WFObjectFactory.getUser("UserPeter");

adminSession.createUser(testUser, "SomePassword");

testUser = WFObjectFactory.getUser("UserJohn");

adminSession.createUser(testUser, "SomePassword");

4. WFAdminSessionインタフェースからaddUserToGroup()を使用して新たに作成されたユーザをローカルグループに割り当ててく

ださい。サンプルでは、LisaとSarahはUS_Employeesに割り当てられ、JohnとPeterはUK_Employeesに割り当てられます。

adminSession.addUserToGroup("UserSarah", "US_Employees");

adminSession.addUserToGroup("UserLisa", "US_Employees");

adminSession.addUserToGroup("UserPeter", "UK_Employees");

adminSession.addUserToGroup("UserJohn", "UK_Employees");

必要な数のグループに同一ユーザを割り当てることができます。

いかなるInterstage BPMユーザもいかなるローカルグループに割り当てできます。割り当てられるユーザはInterstage BPMのロー

カルユーザストアまたはディレクトリサービスのどちらに保存されていても構いません。

- 141 -

Page 152: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

5. グループの階層構造を作成したい場合は、addGroupToGroup()を使用して子グループを親グループに割り当てます。サンプルでは

US_EmployeesとUK_EmployeesはAllEmployeesグループに関連しています。

adminSession.addGroupToGroup("US_Employees", "AllEmployees");

adminSession.addGroupToGroup("UK_Employees", "AllEmployees");

子グループを親グループに割り当てるとき、子グループのすべてのメンバーが親グループのメンバーになります。

同じグループを複数のグループに割り当てることができます。

注意

循環するグループを作成しないでください。例えば、グループ1をグループ2の子グループとし、グループ2をグループ1の子グ

ループに追加しないでください。

6. ユーザがグループのメンバーでなくなった時点でグループからそのユーザを除外できます。

adminSession.removeUserFromGroup(sampleUser, roleName);

7.3.3 ログインしたユーザリストの作成

すべてのログインしたユーザのリストを取得する方法について説明します。

1. WFAdminSessionインタフェースのgetAllUserAgentInfo()を使用します。

UserInfo[] userInfoList = adminSession.getAllUserAgentInfo();

7.3.4 ユーザのログアウト

・ 単独のユーザをログアウトさせる方法について説明します。

WFAdminSessionインタフェースのlogoutUser()を使用します。

・ すべてのユーザをログアウトさせる方法について説明します。

WFAdminSessionインタフェースのlogoutAllUsers()を使用します。

次の例では、管理者を除くすべてのユーザをuserInfoListからログアウトさせる方法を示しています。

if (userInfoList != null) {

boolean loggedOut = false;

for (int i = 0; i < userInfoList.length; i++) {

// 現在の管理者ではないユーザを取得するために

// ユーザ名を制御します。

if (!userInfoList[i].getName().equals(adminName)) {

adminSession.logoutUser(userInfoList[i].

getClientID());

loggedOut = true;

}

}

}

7.3.5 ユーザとグループキャッシュのリセット

管理セッション(WFAdminSession)で、管理者はディレクトリサーバからグループとユーザのキャッシュデータをリセットできます。

起動時、Interstage BPMサーバはローカルまたはリモートストアからグループとユーザを取得し、キャッシュに保存します。 WFAdminSessionでは、管理者がグループとユーザのキャッシュデータをリセットできます。

・ グループリストをリセットするには、以下のように設定します。

adminSession.resetLDAPGroupsList();

- 142 -

Page 153: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

resetLDAPGroupsList()は即座にグループのキャッシュをクリアします。ローカルまたはリモートストアで定義されたグループのキャッ

シュされたメモリオブジェクトをリセットします。ローカルまたはリモートストアのいかなるグループリストの変更もメモリオブジェクトにリ

ロードされます。

・ ユーザリストをリセットするには、以下のように設定します。

adminSession.resetLDAPUsersList();

resetLDAPUsersList()は即座にユーザのキャッシュをクリアします。ローカルまたはリモートストアで定義されたユーザのキャッシュ

されたメモリオブジェクトをリセットします。ローカルまたはリモートストアのいかなるユーザリストの変更もメモリオブジェクトにリロード

されます。

注意

リモートストアを使用するとき、グループキャッシュは自動的に一定の間隔で更新されます。LDAPグループキャッシュの有効期限は

Interstage BPMサーバのLDAPGroupCacheAgeSecパラメータで設定されます。詳細は『Interstage BPMサーバ 管理者ガイド』を参照し

てください。

7.4 プロセス定義管理

ここでは、以下の一般的なプロセス定義管理タスクについて説明します。

・ プロセス定義リストを作成する

・ プロセス定義を公開する

・ プロセス定義をアーカイブする

・ プロセス定義を削除する

・ アーカイブ済のプロセス定義を削除する

・ プロセス定義をXPDLファイルからインポートする

・ プロセス定義をXPDLファイルにエクスポートする

7.4.1 プロセス定義リストの作成

プロセス定義リストを作成するには、com.fujitsu.iflow.model.workflowパッケージのWFObjectListインタフェースを使用します。このイ

ンタフェースは、Interstage BPMサーバから既存のWFObjectsのリストを取得します。

プロセス定義リストを作成する方法について説明します。

1. Filterクラスを使用して、フィルタを作成します。

プロセス定義のフィルタには以下の条件を使用することができます。

- AllArchivedPlans: アーカイブ済のすべてのプロセス定義を取得します。

- AllPlans: すべてのプロセス定義を取得します。

- MyInactivePlans: 非活性状態のすべてのプロセス定義を取得します。

- MyPlans: ログイン中のユーザに属するすべてのプロセス定義を取得します。

2. openBatchedList()を使用します。

3. openBatchedList()を使用して、取得したオブジェクトのリストからフィルタ条件に一致するものを取り出します。

Plan[] planList = null;

if (filter == Filter.AllArchivedPlans

|| filter == Filter.AllPlans

|| filter == Filter.MyInactivePlans

|| filter == Filter.MyPlans) {

- 143 -

Page 154: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

WFObjectList wfObjectList =

WFObjectFactory.getWFObjectList(adminSession);

wfObjectList.openBatchedList(filter);

Vector tmpList = new Vector();

int batchSize = 50;

Object[] elements = wfObjectList.getNextBatch(batchSize);

Plan plan = null;

while (elements != null && elements.length > 0) {

for (int i = 0; i < elements.length; i++) {

plan = (Plan) elements[i];

// プロセス定義をテンポラリリストに追加します。

tmpList.add(plan);

}

// フィルタに該当するプロセス定義の次のリストを読み込みます。

elements = wfObjectList.getNextBatch(batchSize);

}

// テンポラリリスト内のプロセスインスタンスを

// このプログラムで返されるProcessInstance配列にコピーします。

planList = new Plan[tmpList.size()];

planList = (Plan[]) tmpList.toArray(planList);

return planList;

}

7.4.2 プロセス定義の公開

プロセス定義を公開する方法について説明します。

・ WFAdminSessionインタフェースのpublishPlan()を使用します。

プロセス定義を公開すると、状態が「公開済」に変更されます。

以下の例では、プロセス定義のリスト(planList)の 初のプライベートまたはドラフト状態のプロセス定義を公開する方法を示します。

if (planList != null ) {

boolean published = false;

for (int i = 0; i < planList.length; i++) {

if (planList[i].getState() == Plan.STATE_DRAFT

|| planList[i].getState() == Plan.STATE_PRIVATE) {

adminSession.publishPlan(planList[i].getId());

}

published = true;

}

}

7.4.3 プロセス定義のアーカイブ

プロセス定義をアーカイブすると、状態が「アーカイブ済」に変更されます。すでにアーカイブ済のプロセス定義をアーカイブしようとす

ると、Interstage BPMでは、公開したプロセス定義をアーカイブすると判断します。この場合、プロセス定義リスト内にプロセス定義は残

り、状態が「削除済」になります。

プロセス定義をアーカイブする方法について説明します。

・ WFAdminSessionインタフェースのarchivePlan()を使用します。

adminSession.archivePlan(planList[i].getId());

- 144 -

Page 155: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

一度プロセス定義をアーカイブした後も、以下のように再取得できます。

1. アーカイブ済のプロセス定義のIDを取得するには、アーカイブ済のプロセス定義の全リストを取得します。AllArchivedPlansフィ

ルタの基準を利用します。

2. 特定のアーカイブ済のプロセス定義を取得するにはWFAdminSessionインタフェースのgetArchivedPlan(id)を使用します。

adminSession.getArchivedPlan(planList[i].getId());

アーカイブ済のプロセス定義に対して実行できるのは、情報の取得など、一部の関数のみであることにご注意ください。プロセス定義

を変更する関数すべてが、アーカイブ済のプロセス定義でサポートされているわけではありません(setNameなど)。

7.4.4 プロセス定義の削除

管理者はすべてのユーザのプロセス定義を削除することができます。ただし、一般ユーザは自分が所有者であるプロセス定義だけ削

除できます。

プロセス定義の削除方法について説明します。

1. WFAdminSessionインタフェースのdeletePlan()を使用します。

adminSession.deletePlan(planList[i].getId());

このメソッドは、データベースから指定されたプロセス定義を選択します。プロセス定義は、「ドラフト」または「プライベート」状態

である必要があります。プロセス定義の状態がそれ以外の場合は、状態が「削除済」に変わりますが、データベースから物理的

に削除されるわけではありません。

7.4.5 アーカイブ済のプロセス定義の削除

データベースからアーカイブ済のプロセス定義を削除する方法について説明します。

1. WFAdminSessionインタフェースのdeleteArchivedPlan()を使用します。

adminSession.deleteArchivedPlan(archivedPlanList[i].getId());

7.4.6 プロセス定義のインポート

XPDLファイルをインポートする方法について説明します。

1. WFObjectFactory.getPlan()を使用して、空のプロセス定義オブジェクトを作成します。

2. setWFSession()を使用して、現在のセッションをプロセス定義オブジェクトに設定します。

3. convertFromXPDL()を使用して、XPDLファイルからプロセス定義オブジェクトを作成します。

以下の例が正しく動作するように、定義したインポート元のディレクトリDIR_PATH_IMPORTにファイルが含まれていることを確認しま

す。

File importDir = new File(DIR_PATH_IMPORT);

if (importDir.exists() && importDir.isDirectory()) {

File[] fileList = importDir.listFiles();

String filePath; boolean fileFound = false;

Plan plan = null;

for (int i = 0; i < fileList.length; i++) {

filePath = fileList[i].getAbsolutePath();

if (filePath.endsWith(".xml") ||

filePath.endsWith(".xpdl")) {

plan = WFObjectFactory.getPlan();

plan.setWFSession(adminSession);

plan.convertFromXPDL(new FileInputStream(fileList[i]));

- 145 -

Page 156: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

break;

}

}

}

7.4.7 プロセス定義のエクスポート

PlanインタフェースのconvertToXPDL()を使用して、プロセス定義をXPDLデータに変換することができます。プロセス定義をインポー

トする場合と同様に、インポートの宣言を拡張する必要があります。

プロセス定義をXPDLファイルにエクスポートする方法について説明します。

1. プロセス定義のリストから 初のプロセス定義を取得します。

if (planList != null && planList.length > 0) {

Plan plan = planList[0];

. . .

}

2. エクスポート先のディレクトリが存在するかどうかを確認します。存在しない場合は、新しいディレクトリを作成します。

File exportDir = new File(DIR_PATH_EXPORT);

if (!exportDir.exists() || !exportDir.isDirectory()) {

exportDir.mkdir();

}

3. エクスポートファイルを絶対ファイル名で生成します。

String fileName = DIR_PATH_EXPORT + "/" + "PLAN_" +

plan.getName() + "_" + plan.getId() + ".xml";

4. 新しいファイルオブジェクトを作成します。

File file = new File(fileName);

if (!file.exists()) {

file.createNewFile();

. . .

}

5. プロセス定義をXPDLに変換します。

plan.convertToXPDL(new FileOutputStream(file));

7.5 プロセスインスタンス管理

ここでは、以下のプロセスインスタンス管理タスクについて説明します。

・ プロセスインスタンスリストを作成する

・ プロセスインスタンスの所有権を変更する

・ プロセスインスタンスをアーカイブする

・ プロセスインスタンスを一時停止する

・ プロセスインスタンスを中止する

・ プロセスインスタンスを削除する

・ アーカイブ済のプロセスインスタンスを削除する

- 146 -

Page 157: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

7.5.1 プロセスインスタンスリストの作成

プロセスインスタンスリストを作成するには、com.fujitsu.iflow.model.workflowパッケージのWFObjectListインタフェースを使用します。

このインタフェースは、Interstage BPMサーバから既存のWFObjectsのリストを取得します。

プロセスインスタンスリストを作成する方法について説明します。

1. Filterクラスを使用して、フィルタを作成します。

プロセスインスタンスのフィルタには以下の条件を使用することができます。

- AllActiveProcesses: 活性中のすべてのプロセスインスタンスを取得します。

- AllArchivedProcesses: アーカイブ済のすべてのプロセスインスタンスを取得します。

- AllInactiveProcesses: 非活性状態のすべてのプロセスインスタンスを取得します。

- AllProcesses: すべてのプロセスインスタンスを取得します。

- AllProcessesInErrorState: 非活性状態のすべてのプロセスインスタンスを取得します。

- MyActiveProcesses: ログイン中のユーザによって開始された活性中のすべてのプロセスインスタンスを取得します。

- MyInactiveProcesses: ログイン中のユーザによって開始された非活性状態のすべてのプロセスインスタンスを取得します。

- MyProcesses: ログイン中のユーザによって開始されたすべてのプロセスインスタンスを取得します。

2. openBatchedList()を使用します。

3. openBatchedList()に設定したフィルタ条件に一致する、返却されたオブジェクトのリストの取得を繰り返します。

プロセスインスタンスリストを作成する方法の詳しいサンプルコードに関しては、Windowsの場合<Interstage BPMサーバのインストール

ディレクトリ>\client¥samples¥examples¥sources、SolarisまたはLinuxの場合<Interstage BPMサーバのインストールディレクトリ>/client/samples/examples/sourcesディレクトリ内のAdministration.javaサンプルソースファイルを参照してください。

7.5.2 プロセスインスタンスの所有権の変更

プロセスインスタンスの所有権を変更できるのは、管理者または現在のプロセスインスタンスの所有者だけです。プロセスの所有権は、

プロセス定義レベルで設定される必要があります。プロセス所有者は、「所有者のロール」に属性を設定することで定義されます。「所

有者のロール」という属性は、新しいプロセスインスタンスを活性化する前にInterstage BPMサーバによって確認されます。

ProcessInstanceインタフェースのsetOwners()を使用して、実行中のプロセスインスタンスの所有者を設定します。実際に所有権を変更

する前に、このメソッドは新たに所有者となるユーザやグループの存在を確認します。新たな所有者が存在しない場合、プロセスイン

スタンスはエラー状態になります。

以下の例では、プロセスインスタンスの所有権を、ユーザリストの 初のユーザに割当てます。

プロセスインスタンスの所有権を変更する方法について説明します。

1. 既存の全ユーザグループのリストを作成し、 初のグループのユーザリストを取得します。

if (procInstList != null) {

String[] owners = null;

String role = "";

DirectoryServices ds = WFObjectFactory.getDirectoryServices(

adminSession, adminName, password);

String[] groups = ds.getUserGroups();

if (groups != null && groups.length > 0) {

role = groups[0];

}

owners = ds.getUserList(role);

if (owners != null) {

boolean assigned = false;

...

}

}

- 147 -

Page 158: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

2. プロセスインスタンスの所有者を変更するために、編集モードを開始します。

for (int i = 0; i < procInstList.length; i++) {

procInstList[i].startEdit();

...

}

3. プロセスインスタンスに所有者を設定します。

procInstList[i].setOwners(owners);

4. 編集モードをコミットします。

procInstList[i].commitEdit();

assigned = true;

7.5.3 プロセスインスタンスのアーカイブ

アーカイブできるのは、終了、中止、またはエラー状態のプロセスインスタンスだけです。そのため、プロセスインスタンスをアーカイブ

する前に、プロセスインスタンスの現在の状態を確認する必要があります。ProcessInstanceインタフェースから定数STATE_CLOSEDを

使用するとプロセスインスタンスの終了状態を特定できます。定数STATE_ERRORまたはSTATE_ABORTEDを使用し、プロセスイン

スタンスがエラー状態であるか中止状態であるかを確認します。

プロセスインスタンスをアーカイブする方法について説明します。

1. プロセスインスタンスのリストから、終了、中止、またはエラー状態のプロセスインスタンスを取得します。そのためには、ProcessInstanceインタフェースのgetState()を使用してプロセスインスタンスの現在の状態を確認します。

if (procInstList[i].getState() == ProcessInstance.STATE_CLOSED) || ProcessInstance.STATE_ABORTED ||

ProcessInstance.STATE_ERROR

{

...

}

2. 終了状態のプロセスインスタンスをアーカイブするには、WFAdminSessionインタフェースのarchiveClosedProcess()を使用しま

す。

adminSession.archiveClosedProcess(procInstList[i].getId());

一度プロセスインスタンスをアーカイブした後も、以下のように再取得できます。

1. アーカイブ済のプロセスインスタンスのIDを再取得するには、アーカイブ済のプロセスインスタンスの全リストを取得します。

AllArchivedProcessesフィルタの基準を利用します。

2. 特 定 の ア ー カ イ ブ 済 の プ ロ セ ス イ ン ス タ ン ス を 取 得 す る に は 、 WFAdminSession interface.adminSession.getArchivedProcess(procInstList[i].getId())のgetArchivedProcess(id)を使用します。

アーカイブ済のプロセスインスタンスに対して実行できるのは、情報の取得など、一部の関数のみであることにご注意ください。プロセ

スインスタンスを変更する関数すべてが、アーカイブ済プロセスインスタンスでサポートされているわけではありません(setNameなど)。

7.5.4 プロセスインスタンスの一時停止

実行中のプロセスインスタンスを一時停止すると、インスタンスの状態がSTATE_SUSPENDEDに変わります。このプロセスインスタンス

にワークアイテムがあった場合は、それらも一時停止します。プロセスインスタンスに実行中のサブプロセスインスタンスがあった場合

は、それらも一時停止します。

プロセスインスタンスを一時停止する方法について説明します。

1. プロセスインスタンスの一覧で、実行中のプロセスインスタンスかどうかを確認します。そのためには、ProcessInstanceインタフェースの

getState()を使用してプロセスインスタンスの現在の状態を確認します。

if (procInstList[i].getState() == ProcessInstance.STATE_RUNNING)

{

- 148 -

Page 159: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

...

}

2. 実行中のプロセスインスタンスを一時停止するには、ProcessInstanceインタフェースのsuspend()を使用します。

procInstList[i].suspend();

注意

プロセスインスタンスがSTATE_SUSPENDEDに変更される前に、プロセス定義レベルまたはアクティビティノードレベルで定義されている

Java Actionのセットが実行されることがあります。このJava Actionのセットは、suspend()コマンドを呼び出すとすぐに活性化されます。例

えば、通知メールがプロセスインスタンスの所有者に送信されたり、追加のログファイルエントリが書き込まれたりします。

onSuspendJavaActionSetの定義方法の詳細については、「6.3.11 中止時、一時停止時、および再開時アクションの使用」を参照してく

ださい。

ProcessInstanceインタフェースのresume()を使用して、一時停止しているプロセスインスタンスを再開することができます。プロセスイン

スタンスの状態は、STATE_RUNNINGに変わります。

ここでも、プロセスインスタンスがSTATE_RUNNINGに再び変更される前に、プロセス定義レベルまたはアクティビティノードレベルで

定義されているJava Actionのセットが実行されることがあります。このJava Actionのセットは、resume()コマンドを呼び出すとすぐに活性

化されます。

7.5.5 プロセスインスタンスの中止

プロセスインスタンスを中止すると、インスタンスの状態がSTATE_ABORTEDに変わります。このプロセスインスタンスにワークアイテム

があった場合は、すべて削除されます。プロセスインスタンスに実行中のサブプロセスインスタンスがあった場合は、それらも中止され

ます。

プロセスインスタンスを中止する方法について説明します。

1. ProcessInstanceインタフェースのabort()を使用します。

このメソッドは管理者、またはプロセスインスタンスの所有者だけが使用できます。ほかのユーザは、プロセスインスタンスの中止

を許可されていません。

以下の例では、ProcessInstanceインタフェースのgetState()を使用して、プロセスインスタンスのリスト内で実行中(定数STATE_RUNNING)または一時停止中(定数STATE_SUSPENDED)のインスタンスをチェックします。getState()はプロセスインスタンスの現在の状態を返し

ます。次に、リスト内で 初に見つかった実行中、または一時停止中のプロセスインスタンスを中止します。

if (procInstList != null ) {

boolean aborted = false;

for (int i = 0; i < procInstList.length; i++) {

if (procInstList[i].getState() ==

ProcessInstance.STATE_RUNNING

|| procInstList[i].getState() == ProcessInstance.STATE_SUSPENDED)

{

procInstList[i].abort();

aborted = true;

}

}

}

注意

プロセスインスタンスがSTATE_ABORTEDに再び変更される前に、プロセス定義レベルまたはアクティビティノードレベルで定義されている

Java Actionのセットが実行されることがあります。このJava Actionのセットは、abort()コマンドを呼び出すとすぐに活性化されます。例え

ば、通知メールがプロセスインスタンスの所有者に送信されたり、追加のログファイルエントリが書き込まれたりします。onAbortJavaActionSetの定義方法の詳細については、「6.3.11 中止時、一時停止時、および再開時アクションの使用」を参照してください。

- 149 -

Page 160: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

7.5.6 プロセスインスタンスの削除

プロセスインスタンスの削除方法について説明します。

1. WFAdminSessionインタフェースのdeleteProcessInstance()を使用します。

このメソッドは、プロセスインスタンスのIDを使用してデータベースからプロセスインスタンスを削除します。

以下の例では、リスト内の 初の有効なプロセスインスタンスが削除されます。

if (procInstList != null ) {

boolean deleted = false;

for (int i = 0; i < procInstList.length; i++) {

adminSession.deleteProcessInstance

(procInstList[i].getId());

deleted = true;

break;

}

}

7.5.7 アーカイブ済のプロセスインスタンスの削除

データベースからアーカイブ済のプロセスインスタンスを削除する方法について説明します。

1. WFAdminSessionインタフェースのdeleteArchivedProcess()を使用します。

adminSession.deleteArchivedProcess(archivedProcInstList[i].getId());

7.6 ワークアイテム管理

ここでは、以下のワークアイテム管理タスクについて説明します。

・ ワークアイテムを別のユーザに再割当てする

・ ワークアイテムを更新する

7.6.1 ワークアイテムのユーザに再割当て

ワークアイテムを別のユーザに再割当てする方法について説明します。

1. WFSessionAdminインタフェースのreassign()を使用します。

以下の例では、ワークアイテムをあるユーザから別の既存のユーザに再割当てする方法を示しています。

if (workItemList != null && workItemList.length > 0) {

WorkItem workItem = workItemList[0];

UserInfo[] userList = listUsers();

String oldAssignee = "";

String newAssignee = "";

if (userList != null && userList.length > 0) {

oldAssignee = workItem.getAssignee();

newAssignee = userList[0].getName();

adminSession.reassign(oldAssignee, newAssignee,

workItem.getProcessInstanceId(),

workItem.getId(),false);

}

}

- 150 -

Page 161: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

7.6.2 ワークアイテムの更新

管理者がロールにユーザを追加したり、削除したりする場合、この情報が自動的に関連する活性中のタスクのワークアイテムに転送さ

れることはありません。一般的な操作では、ワークアイテムは、アクティビティが開始された時点のグループに合わせて作成されます。

そして、ワークアイテム作成後のグループの変更は無視されます。しかし、作成されたワークアイテムを変更したグループメンバーに合

わせたい場合があります。この場合の情報を更新するには、管理者がワークアイテムを更新する必要があります。

タスクを完了するために、さまざまな反復処理が必要となるので、ワークアイテムを更新するにはある程度時間がかかります。したがっ

て、実行にかかる時間は、データベース内の活性中のタスクの量に依存します。実行時間を短縮するため、更新するワークアイテムを

選択する際には、以下のオプションがあります。

・ プロセスインスタンスのワークアイテム。

・ プロセス定義に属するすべてのプロセスインスタンスのワークアイテム。

・ グループのワークアイテム。

・ すべての既存のワークアイテム。

・ プロセスインスタンスのワークアイテムを更新する方法について説明します。

boolean ignoreActivityWithRoleScript = true;

String refreshResult = null;

if (procInst != null) {

long procInstId = procInst.getId();

refreshResult = adminSession.refreshWIforProcess(procInstId,

ignoreActivityWithRoleScript);

}

・ プロセス定義に属するすべてのプロセスインスタンスのワークアイテムを更新します。

if (procDef != null) {

long procDefId = procDef.getId();

refreshResult = adminSession.refreshWIforPlan(procDefId,

ignoreActivityWithRoleScript);

・ グループのワークアイテムを更新します。

String group = "SampleGroup";

refreshResult = adminSession.refreshWIforGroup(group,

ignoreActivityWithRoleScript);

・ すべてのワークアイテムを更新します。

refreshResult = adminSession.refreshWorkItems

(ignoreActivityWithRoleScript);

注意

Interstage BPMサーバの SupportGroupWorkItemパラメータにtrueが設定されている場合、Filter.MyActiveWorkItemsフィルタはサポー

トしません。したがって、このフィルタを使用してワークアイテムを取得することはできません。

この場合、更新するワークアイテムを取得する独自のフィルタを定義する必要があります。ワークアイテムのフィルタを構築する詳細に

ついては、「5.3.3 ワークアイテムリストの作成」を参照してください。SupportGroupWorkItemパラメータの詳細については、『Interstage BPMサーバ 管理者ガイド』を参照してください。

更新結果はXMLの文字列としてフォーマットされ、操作が成功したか、失敗したかがリストで表示されます。以下にXML文字列の例を

示します。

<?xml version="1.0" encoding="UTF-8" ?>

<Processes>

<success>

- 151 -

Page 162: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

<Process Name="procName" id="123"></Process>

</success>

<failed>

<Process Name="procName" id="456" Status="ignored"

message="error message" />

<Process Name="procName" id="123">

<Activities>

<Activity Id="123456" Name="activityName"

Status="ignored" message="error message" />

</Activities>

</Process>

</failed>

</Processes>

<success>タグには、ワークアイテムの更新に成功したプロセスインスタンスの一覧が含まれています。<failed>タグには、更新に失敗し

たプロセスインスタンスの一覧が含まれています。<Activities>タグには更新に失敗したプロセスインスタンスのアクティビティが含まれ

ています。

- 152 -

Page 163: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

第8章 履歴情報の取得

各プロセスインスタンスは、ワークフローに関する情報を、teamflowdbというInterstage BPMのデータベースに保存します。teamflowdbデータベースのHistoryテーブルには、プロセスインスタンスのワークフロー内の各ステップが保存されています。

Historyテーブルから履歴情報を取得するには以下の方法があります。

・ Model APIを使用する

・ ハッシュテーブルから取得する

・ SQLステートメントを使用する

8.1 Model APIを使用した履歴情報の取得

Model APIを使用して、プロセスインスタンスから履歴情報を取得する方法について説明します。

1. 次のコードを基礎として使用します。

import com.fujitsu.iflow.model.workflow.ProcessInstance;

import com.fujitsu.iflow.model.util.IflowEnumeration;

int processHistoryFields[] = {

ProcessInstance.HISTORY_ID,

ProcessInstance.HISTORY_TIME_STAMP,

ProcessInstance.HISTORY_EVENT_CODE,

ProcessInstance.HISTORY_EVENT_TYPE,

ProcessInstance.HISTORY_RESPONSIBLE,

ProcessInstance.HISTORY_PRODUCER_TYPE,

ProcessInstance.HISTORY_PRODUCER_ID,

ProcessInstance.HISTORY_CONSUMER_TYPE,

ProcessInstance.HISTORY_CONSUMER_ID,

ProcessInstance.HISTORY_PROCESSINSTANCE_ID,

ProcessInstance.HISTORY_ISHANDLED_CODE,

ProcessInstance.HISTORY_EVENTDATA

};

ProcessInstance procInst =

WFObjectFactory.getProcessInstance(procID, session);

IflowEnumeration sElements =

processInstance.getHistory(processHistoryFields);

getHistory()は、関連するプロセスインスタンスから、すべての履歴データを取得します。取得する列は、INTEGER型の配列で

定義され、メソッドの引数に渡されます。

2. 取得したIflowEnumeration型のオブジェクトを検索し、履歴エントリの各行にアクセスします。

while(sElements.hasMoreElements())

{

Hashtable htblEvent = (Hashtable) sElements.nextElement();

// ここに、「ハッシュテーブルからの履歴情報の取得」のコードが入ります。

}

以下のテーブルは、ProcessInstanceクラスの定数とHistoryテーブルの列のマッピングを示しています。

ProcessInstanceクラスの定数 列名

HISTORY_ID historyID

HISTORY_TIME_STAMP CreatedTime

HISTORY_EVENT_CODE EventCode

HISTORY_EVENT_TYPE EventType

- 153 -

Page 164: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

ProcessInstanceクラスの定数 列名

HISTORY_EVENTDATA EventData

HISTORY_PRODUCER_TYPE ProducerType

HISTORY_PRODUCER_ID ProducerId

HISTORY_CONSUMER_TYPE ConsumerType

HISTORY_CONSUMER_ID ConsumerId

HISTORY_ISHANDLED_CODE IsHandled

HISTORY_PROCESSINSTANCE_ID ProcessInstanceId

HISTORY_RESPONSIBLE Responsible

8.2 ハッシュテーブルからの履歴情報の取得

「8.1 Model APIを使用した履歴情報の取得」のコードを使用して、プロセスインスタンスからすべての履歴データを取得することができ

ます。結果は、ハッシュテーブルに保存されます。以降の各節では、ProcessInstanceクラスの単一定数の値を取得する方法を説明しま

す。

8.2.1 HISTORY_IDエントリの履歴IDを取得するには、次のコードを使用します。

long historyId = ((Long)htblEvent.get

(new Integer(ProcessInstance.HISTORY_ID))).longValue();

Historyテーブルの各エントリには、固有の識別子が設定されています。

8.2.2 HISTORY_TIME_STAMPエントリのタイムスタンプを取得するには、次のコードを使用します。

long timestamp = ((Long)htblEvent.get(

new Integer(ProcessInstance.HISTORY_TIME_STAMP))).longValue();

LONG型の日付の値を読みやすい形式に変換するには、標準のJavaステートメントを使用します。

8.2.3 HISTORY_EVENT_CODEエントリのイベントコードを取得するには、次のコードを使用します。

long historyEventCode = ((Long) htblEvent.get

(new Integer(ProcessInstance.HISTORY_EVENT_CODE)).longValue();

イベントコードは、イベントの種類を表します。次の表は、イベントコードの値と、その意味を示しています。

イベントコード 説明

0 開始(デフォルト)

1 活性化

2 選択

3 承認

4 拒否

5 再割当て

6 終了

7 サブプロセスを作成

- 154 -

Page 165: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

イベントコード 説明

8 ワークアイテムを一時停止

9 ワークアイテムを再開

10 作業開始

11 作業停止

12 投票完了

13 プロセス作成

14 プロセス移行

15 プロセス取戻し

16 ターゲットノードを非活性化

17 ソースノードを活性化

25 将来のワークアイテム作成

8.2.4 HISTORY_EVENT_TYPEエントリのイベントタイプを取得するには、次のコードを使用します。

String eventType = (String) htblEvent.get(

new Integer(ProcessInstance.HISTORY_EVENT_TYPE));

イベントタイプは、Interstage BPMのアクティビティの名前または矢印の名前を特定します。たとえば、矢印にCreate Purchase Requisitionという名前が付けられている場合、HISTORY_EVENT_TYPEの結果は、Create Purchase Requisitionとなります。

8.2.5 HISTORY_EVENTDATAイベントに関する追加データを取得するには、次のコードを使用します。

String eventData = (String) htblEvent.get(

new Integer(ProcessInstance.HISTORY_EVENTDATA));

取得した値は、ほとんどの場合、NULLとなります。

8.2.6 HISTORY_PRODUCER_IDエントリのプロデューサIDを取得するには、次のコードを使用します。

long producerId = ((Long)htblEvent.get(

new Integer(ProcessInstance.HISTORY_PRODUCER_ID))).longValue();

プロデューサタイプに応じて、プロデューサIDは異なる種類の情報を指定します。

8.2.7 HISTORY_PRODUCER_TYPEエントリのプロデューサタイプを取得するには、次のコードを使用します。

long lProdType=((Long)htblEvent.get(

new Integer(ProcessInstance.HISTORY_PRODUCER_TYPE))).longValue();

プロデューサタイプは、現在のイベントの作成に関与するイベントを示します。次の表は、プロデューサタイプの値と、その意味を示し

ています。

プロデューサタイプ 説明

0 矢印

3 アクティビティ

- 155 -

Page 166: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

プロデューサタイプ 説明

7 プロセス

15 タイマ

8.2.8 HISTORY_CONSUMER_IDエントリのコンシューマIDを取得するには、次のコードを使用します。

long consumerId = ((Long)htblEvent.get(

new Integer(ProcessInstance.HISTORY_CONSUMER_ID))).longValue();

コンシューマタイプに応じて、コンシューマIDは様々な種類の情報を指定します。詳細については、「8.2.13 履歴エントリの検索ルー

ル」を参照してください。

8.2.9 HISTORY_CONSUMER_TYPEエントリのコンシューマタイプを取得するには、次のコードを使用します。

long lConsType = ((Long)htblEvent.get(

new Integer(ProcessInstance.HISTORY_CONSUMER_TYPE))).longValue();

コンシューマタイプは、イベントの対象となっているエレメントの種類を示します。次の表は、コンシューマタイプの値と、その意味を示し

ています。

コンシューマタイプ 説明

3 アクティビティ

7 プロセス

コンシューマタイプを解釈する方法の詳細については、「8.2.13 履歴エントリの検索ルール」を参照してください。

8.2.10 HISTORY_ISHANDLED_CODEエントリのIsHandledの値を取得するには、次のコードを使用します。

long isHandledCode = ((Long)htblEvent.get(

new Integer(ProcessInstance.HISTORY_ISHANDLED_CODE)))

.longValue();

次の表は、IsHandledの値と、その意味を示しています。

isHandledコード 説明

0 未処理

1 処理済

2 無視

3 エラー

4 監査

5 一時停止

8.2.11 HISTORY_PROCESSINSTANCE_IDエントリのプロセスインスタンスIDを取得するには、次のコードを使用します。

long procInstId = ((Long)htblEvent.get(

new Integer(ProcessInstance.HISTORY_PROCESSINSTANCE_ID)))

.longValue();

- 156 -

Page 167: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

8.2.12 HISTORY_RESPONSIBLEHistoryテーブルへのエントリの要因となった作業者を取得するには、次のコードを使用します。

String responsible = (String) htblEvent.get(

new Integer(ProcessInstance.HISTORY_RESPONSIBLE));

取得可能な値は、次のとおりです。

・ __process

ワークフローエンジンのアクティビティを示すシステムユーザID

・ <userID>

アクションを実行したユーザIDを示す、有効なユーザID

8.2.13 履歴エントリの検索ルール

プロセスインスタンスのHistoryテーブルのエントリを検索するには、次のルールが定義されています。

ルール1

Historyテーブルのエントリを検索するには、以下の3条件のうちの1つを満たしているエントリだけが評価されます。

・ 活性化イベント

次の基準をすべて満たすものに適用されます。

- ConsumerTypeが、3と定義されている(アクティビティ)

- EventTypeが、__Activateと等しい

・ Activityノード

次の基準をすべて満たすものに適用されます。

- ConsumerTypeが、3と定義されている(アクティビティ)

- EventTypeが、__Activateと等しくない

- ProducerTypeが、7と定義されている(プロセス)

・ 矢印

次の基準をすべて満たすものに適用されます。

- ConsumerTypeが、3と定義されている(アクティビティ)

- EventTypeが、__Activateと等しくない

- ProducerTypeが、0と定義されている(矢印)

ルール2

タイプ1のエントリ、つまり、活性化イベントがある場合、タイムスタンプだけが取得されます。

ルール3

タイプ2のエントリ、つまり、Activityノードがある場合、コンシューマIDは、プロセスインスタンス内のノードインスタンスのIDを表します。

Model APIを使用して、ノードインスタンスを次のように取得することができます。

// CONSUMER_IDは、ノードインスタンスIDを表します。

long consumerId = ((Long)htblEvent.get(

- 157 -

Page 168: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

new Integer(ProcessInstance.HISTORY_CONSUMER_ID))).longValue();

NodeInstance nodeInst = procInst.getNodeInstance(consumerId);

// NodeInstanceクラスのオブジェクトから引き続き

// 情報を取得します。

ルール4

タイプ3のエントリ、つまり、矢印がある場合、プロデューサIDは、プロセスインスタンス内の矢印インスタンスのIDを表します。Model APIを使用して、始点および終点のノードのノードインスタンスを次のように取得することができます。

// PRODUCER_IDは、矢印インスタンスIDを表します。

long producerId = ((Long)htblEvent.get(

new Integer(ProcessInstance.HISTORY_PRODUCER_ID))).longValue();

ArrowInstance arrow = procInst.getArrowInstance(producerId);

NodeInstance sourceNodeInst = arrow.getSourceNodeInstance();

NodeInstance targetNodeInst = arrow.getTargetNodeInstance();

// 矢印インスタンスのソースオブジェクトとターゲットオブジェクトから

// 引き続き情報を取得します。

8.3 履歴テーブル

履歴テーブルでは、プロセスインスタンスのワークフローでの各ステップは別々のエントリ(行)で定義されます。ステップは「プロセスイ

ンスタンスの作成」のようなシステムアクションや「承認に投票」のようなプロセス定義で明示的に定義されるアクティビティの実行で定義

されます。

注意

Interstage BPMの将来のバージョンではここで説明しているデータベーススキーマは変更されるかもしれません。データベーススキー

マに基づいてアプリケーションを開発する場合、データベーススキーマが変更されるとアプリケーションも変更する必要があります。

フィールド 値・サンプル 備考

historyID 888919 履歴テーブル各行で単一に識別

EventCode 0=Start (default)1=Activate2=MakeChoice3=Accept4=Decline5=Reassign6=Exit7=CreateSubProcess8=SuspendWorkItem9=ResumeWorkItem10=StartWork11=StopWork12=VotingComplete13=ProcessCreated14=ProcessMigrated15=ProcessRecall16=DeactivateTargetNode

各コードは別々のEventを一意に識別

- 158 -

Page 169: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

フィールド 値・サンプル 備考

17=ActivateSourceNode25=GenerateFutureWorkItems

EventType "Approve"または

"Submit Purchase Order:99198"

Event名

EventData NULL 追加情報。ほとんどの場合はNULLです。

CreatedTime "2004-11-12 13:19:12.820"または

"22.12.2004 16:48"

このアクティビティ作成のタイマースタンプ

(文字列形式)

Responsible "jim"または

"__process"

イベント作成の原因となったユーザまた

はシステムの名前。ノードに割当てられ

たユーザグループがない場合はシステム

がノードを実行し、名前"__process"を使

用します。

IsHandled 0=notHandled1=handled2=ignored3=Error4=audit↓

Eventの状態

ProducerType 0: arrow7: node↓

現在のEvent作成の原因となったエレメン

ト。矢印かノードのいずれか。

ProducerId 99130 ProducerType = 0の場合、ProducerIdは現在のEventの矢印インスタンスIDを示し

ます。矢印インスタンスIDを使ってEventのソースとターゲットノードインスタンスを

取得できます。

ConsumerType 0=ArrowType3=ActivityType7=ProcessType

Eventが示すエレメントタイプ

ConsumerId 99116 ProducerType = 7の場合、ConsumerIdは現在のノードのノードインスタンスIDを示

します。

ProducerType = 0の場合、ConsumerIdはターゲットノードのノードインスタンスIDを

示します。同じノードインスタンスを矢印

インスタンスから取得することができます。

ProcessInstanceId 88892 プロセスインスタンスの一意なID

ServerName Localhost これらのEventが生成・処理されるサーバ

applicationContainerId 2 プロセスインスタンスを含むアプリケーショ

ンの一意な識別子

8.4 SQLステートメントの履歴情報検索

teamflowdbデータベースでSQLステートメントを使用して履歴情報を検索できます。

・ 履歴テーブルに保存されたすべてのデータに関する全体像を得るには、以下のように設定します。

SELECT * HISTORY

- 159 -

Page 170: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

・ 特定のプロセスインスタンスにリンクしたすべての行を検索するには、以下のように設定します。

SELECT * FROM HISTORY WHERE PROCESSINSTANCEID=<PROCID>

プロセスインスタンスの要求されたID(数字)で<PROCID>を置き換えます。

以下の図は完了したプロセスインスタンスに割り当てられた履歴テーブルへのすべてのエントリ例を示しています。

図8.1 履歴テーブルのエントリ

- 160 -

Page 171: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

付録A Interstage BPMのサンプル

このマニュアルのサンプルでは、Model APIを使ってInterstage BPMのプログラミングを行うさまざまな方法を示します。Interstage BPMサーバをインストールすると、<Interstage BPMサーバのインストールディレクトリ>ディレクトリ (Windowsの場合C:¥Fujitsu¥InterstageBPM、SolarisまたはLinuxの場合/opt/FJSVibpm)に以下のサブディレクトリが作成されます。

¥client\samples¥examples¥sources (Windowsの場合)、/client/samples/examples/sources (SolarisまたはLinuxの場合)

¥ client\samples¥examples¥classes (Windowsの場合)、/client/samples/examples/classes (SolarisまたはLinuxの場合)

¥ client\samples¥examples¥bin (Windowsの場合)、/client/samples/examples/bin (SolarisまたはLinuxの場合)

各サブディレクトリの内容については、次の節で詳しく説明します。

注意

SaaSモードでサンプルプログラムを使用するには、<Interstage BPM インストールディレクトリ>/client/ フォルダ内のiFlowClient.propertiesのTenantNameプロパティに適切な値を設定してください。

A.1 /client/samples/examples/sourcesこのディレクトリにはこのマニュアル中で使用される例のJavaソースコードが格納されています。 例の実行方法は、Interstage BPMサー

バのインストールディレクトリの/client/samples/examples/sourcesサブディレクトリにあるサンプルソースコードを参照してください。

以下は、利用できるサンプルソースのリストと、このマニュアル中での説明箇所です。

A.1.1 プロセスのモデル化と実行に関連したサンプル

SimplePlan.java

このサンプルは単純なInterstage BPMプロセス定義を作成します。

「5.1 基本的なプロセス定義のデザイン」に追加情報があります。

ComplexPlan.java

このサンプルは、ユーザ定義属性やVoting Activityノードの追加方法、Java Actionの使い方など、複雑なInterstage BPMプロセス定

義の作成方法を示します。

このサンプルに関する追加情報については、以下を参照してください。

「5.2 応用的なプロセス定義のデザイン」

「6.3 Java Action」

「6.4 フィルターとソートのAPI」

「6.7 特別なユーザ定義属性のプロパティ」

「6.8 拡張属性の使用」

「6.9 トランザクション制御」に追加情報があります。

ProcessExecution.java

このサンプルは新しいプロセスインスタンスの開始とワークアイテム実行の方法を示します。

「5.3 プロセスインスタンス」

「6.9 トランザクション制御」に追加情報があります。

- 161 -

Page 172: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

注意

このサンプルにはInterstage BPMサーバインストールディレクトリへのpath を含むINSTALL_ROOT定数があります。デフォルトでは、pathの値にはC:\Fujitsu\InterstageBPM が設定されます。UNIXまたはLinuxを使用している場合、もしくは、Interstage BPMサーバを違う

場所にインストールした場合は、この値を調整する必要があります。

SampleJavaActions.java

このサンプルには、ComplexPlan.javaで作成したプロセス定義で定義されたJava Action(メールの送信など)の使用方法が含まれま

す。

「6.3 Java Action」に追加情報があります。

TriggerTimerSample.java

このサンプルはトリガ、タイマーおよびビジネスカレンダーの使用を示します。トリガで始まるプロセス定義を作成します。

「6.10 トリガ」

「6.16 タイマーの使用」に追加情報があります。

RemoteSubProcess.java

このサンプルは、リモートサブプロセスを定義、使用する方法を示しています。Remote Subprocessノードとリモートサブプロセスとして使

用される別のプロセス定義を含むプロセス定義を作成します。

「6.17 リモートサブプロセスのモデル化」に追加情報があります。

AgentSimulator.java and AgentSimulator.xpdl

AgentSimulator.xpdlは、簡単な銀行ローン承認プロセスをモデル化するプロセス定義です。AgentSimulator.javaはローンを決定する

担当をシミュレーションするエージェントクラスの例です。さらなる情報はAgentSimulator.java ソースファイルと「6.15 エージェントの使

用」を参照してください。

HTTPAgentExample

HTTPAgentExampleサブディレクトリにはHTTPエージェントを実行するためにあらかじめ設定されたHTTP Exampleがあります。 例の

エージェントではHTTPエージェントの完全な機能性を示します。さらなる詳細情報はHTTPAgentExampleInstructions.txtファイルと

「6.15.5 HTTPエージェントの使用」を参照してください。

A.1.2 System Administration に関連したサンプル

Administration.java

このサンプルはユーザリスト作成、ユーザログアウト、ユーザディレクトリからのデータをリセット、プロセス定義の発行・保存などのような

様々な管理アクティビティを示します。

注意

このサンプルは既存のプロセス定義とプロセスインスタンスで実行します。確実にすべてのプロセス定義が有効で実行可能であるよう

にしてください。さらに、このサンプルが新しいインスタンスを開始し、既存のインスタンスの状態を変更するようにしてください。

「第7章 運用管理」に追加情報があります。

SampleLocalUserManagement.java

このサンプルはローカルユーザとグループを作成、グループにユーザを配属、他のグループにグループを関連づけるなどのローカル

ユーザとグループ管理を示します。

「7.3 ユーザおよびグループ管理」に追加情報があります。

- 162 -

Page 173: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

A.1.3 JMS インタフェースに関連したサンプル

注意

非SaaSモードでだけ、JMSインタフェースの機能を使用できます。

JMSインタフェースはModel APIのようなInterstage BPMサーバへのインタフェースです。Model APIですべてのInterstage BPMオペ

レーションを実行するオブジェクトをモデル化するためにメソッドに呼び出すことができます。Model APIはInterstage BPMサーバへの

主要インタフェースですが、オプションとしてJMSインタフェースを使用することによって、よりダイレクトに情報交換ができます。しかしJMSインタフェースの機能はいくつかの主要なInterstage BPMオペレーションに制限されます。

JMSインタフェースの基本トピックは2つあります。

・ Interstage BPMコマンドトピック

・ Interstage BPM応答トピック

JMSクライアントはコマンドトピックに要求メッセージを掲示します。このメッセージにはInterstage BPMコマンドとその実行に必要な情報

が入っています。JMSクライアントから要求を受け入れるためにコマンドトピックを構成し、処理のためにInterstage BPMサーバに移しま

す。JMS APIはInterstage BPMサーバへの要求されたアクションを実行し、応答を取得します。適切な形式のすべての要求への応答

メッセージは、必要な情報を含んでいて、応答トピックに掲示されます。その情報はその後JMSクライアントに伝えられます。

要求と応答JMSメッセージはInterstage BPM JMSインタフェーススキーマiFlowJMS.xsdによりフォーマットされなければならないXMLです。<Interstage BPMのインストールディレクトリ>/client/samples/docs/jmsにiFlowJMS.xsdと関連するドキュメントがあります。

JMS Interface を使用する場合は、以下の手順に従います。

1. JMS Client の設定

- JMSインタフェースをランスルーしたいInterstage BPMコマンドにXMLに書き込む必要があるInterstage BPM情報を集めま

す。

必要な情報を決定するとき、ガイドとしてInterstage BPM JMSインタフェーススキーマiFlowJMS.xsdと、関連するドキュメント

を使用します。

- 実行するInterstage BPMコマンドにXMLを書き込みます。

もう一度ガイドとして、Interstage BPM JMSインタフェーススキーマと関連するドキュメントを使用します。任意で、XMLにInterstage BPMインストール時に作成したデフォルト応答トピックと異なる応答トピックを指定できます。

- JMSクライアントをセットアップし、コマンドトピックに書きこんだXMLを掲示します。PATHとCLASSPATH設定のガイドとして

サンプルを使用します。アプリケーションのサーバ特定クライアントプロパティファイルをCLASSPATHに必ず追加します。

- これでコマンドトピックに書きこんだXMLを掲示する準備ができました。

2. コマンドトピックへの掲示要求

<Interstage BPM Installation Directory>/samples/examples/sourceディレクトリのInterstage BPMインスタレーションで利用可能な

様々なJMSに関連するサンプルがあります。これらのサンプルファイルはJms*.javaファイル名で認識されます。

注意

Interstage BPMのJMSインタフェースにはプロセス定義を作成するための機能がありません。ぞのため、プロセス定義の作成を示した

別のサンプルcreatePlan.javaを用意します。

Interstage BPMサンプルのビルドと実行の方法については「B.3 トリガでサポートするJavaScript関数」を参照してください。

JMS インタフェースに関連したサンプルの一覧

注意

いくつかのJMSサンプルが<Interstage BPMのインストールディレクトリ>/samples/configurationにあるサーバプロパティファイル

server.propertiesを参照します。このファイルは以下の属性の読み込み、またアップデートに使用されます。

- 163 -

Page 174: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

planId、processId、workitemId、choiceName、UdaName

createPlanサンプルファイルによって作成されたプロセス定義を使用しない場合、対応するJMSサンプルを実行する前にこのファイルを

アップデートできます。

例: JmsAcceptWorkItemサンプルを実行している場合、server.propertiesで特定されたworkitemidが有効になっている必要があります。

JmsGetMyWorkItemsは適切なworkitemidでserver.propertiesをアップデートします。このように適切なworkitemidでserver.propertiesファ

イルをアップデートされるようにJmsAcceptWorkItemの前にJmsGetMyWorkItemsを実行する必要があります。

注意

JMS インタフェース に関連したサンプルは以前のプログラムで生成されたワークフローオブジェクトを使用するため、特定の順序で実

行する必要があります。例えば、createPlan はJmsGetMyPlans の前にJmsGetMyPlans を実行する必要があります。

JmsGetMyPlans ログインユーザによって所有されたプロセス定義のリストを取得します。

JmsGetPlanState プロセス定義の状態を取得します。

JmsGetPlanUDA プロセス定義を使用してUDAを取得します。

JmsCreateProcess プロセスインスタンスを作成します。

JmsStartProcess プロセスインスタンスを開始します

JmsGetMyProcesses ログインユーザによって所有されたプロセス定義のリストを取得します。

JmsGetProcessState プロセス定義の状態を取得します。

JmsGetProcessUDA プロセス定義を使用してUDAを取得します。

JmsGetMyWorkItems ログインユーザに割当てられたワークアイテムのリストを取得します。

JmsAcceptWorkItem ワークアイテムを受理します

JmsGetWorkItemState ワークアイテムの状態を取得します。

JmsDeclineWorkItem ワークアイテムを拒否します。

注意

このサンプルの前に、以下のサンプルを上から順番に実行してください。

・ JmsCreateProcess

・ JmsStartProcess

・ JmsGetMyWorkItems

JmsGetWorkItemUDA ワークアイテムを使用してUDAを取得します。

JmsMakeChoice Make choiceオペレーションを実行します。

注意

このサンプルの前に、以下のサンプルを上から順番に実行してください。

・ JmsCreateProcess

・ JmsStartProcess

・ JmsGetMyWorkItems

JmsPublishPlan プロセス定義を発行します。

JmsObsoletePlan プロセス定義を「廃止」状態に設定します。

- 164 -

Page 175: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

JmsSuspendProcess プロセスインスタンスの実行を一時停止します。

JmsResumeProcess プロセスインスタンスの実行を再開します。

JmsAbortProcess プロセスインスタンスの実行を停止します。

A.1.4 決定表に関連したサンプル

DecisionTableAPI.java

このサンプルは、決定表・条件変数・結果変数・決定ルールの作成、決定表の正当性確認・評価、決定表の保存、決定表ファイルの

読み込みなど、決定表の管理に関連するさまざまな操作を行います。決定表に関する詳細は、「6.21 決定表」を参照してください。

A.2 /client/samples/examples/classes/client/samples/examples/classesサブディレクトリはサンプルのために保存されたクラスファイルを含んでいます。

A.3 /client/samples/examples/binWindowsの¥client¥samples¥examples¥binサブディレクトリ(SolarisまたはLinuxの場合は/client/samples/examples/bin)には、次の2つの

バッチファイルが格納されています。

StartSamples.bat: サンプルファイルの実行を開始します。SolarisまたはLinuxの場合は、StartSamples.shファイルを使用してください。

必ず実行する前に、このバッチファイルを編集し、JAVA_HOME変数にJDKをインストールするディレクトリを設定してください。さらに、

CLASSPATH変数が、iflow.jarファイルおよびアプリケーションサーバ特定のjarファイルが格納されている正確なディレクトリを指して

いることを確認してください。WeblogicとJBossのパスの例については、ファイルStartSamples.batまたはStartSamples.shを参照してくださ

い。

バッチファイルを実行する場合、サンプルファイル名(以下を参照)、管理者権限を持つユーザ名とパスワード、Interstage BPMサーバ

の名前を指定する必要があります。これらは、IBPMPROPERTIESの表またはibpm.propertiesファイルにあるものと同一でなければなり

ません。

BuildSamples.bat: Javaソースファイル用のクラスファイルを作成します。SolarisまたはLinuxの場合は、BuildSamples.shファイルを使用

してください。

この場合も、JAVA_HOME変数とCLASSPATH変数が正しいディレクトリを指していることを確認してください。

- 165 -

Page 176: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

付録B JavaScript関数

Interstage BPMには、Java Action、トリガ、およびComplex Conditionalノードに使用できるJavaScript関数のセットが用意されています。

ここでは、これらの要素に対してどの関数を使用できるかを説明します。

ここに挙げられている関数とは別に、ECMA標準で定義しているJavaScriptの関数を使用することもできます。ECMA標準の情報につ

いては、Interstage BPMのインストールファイルに含まれているecma-262.pdfを参照してください。

注意

JavaScriptで使用するメソッドが保有しているサイズが、Java Virtual Machine (JVM)により制限されている場合があります。現在では、

そのメソッドバイトコードサイズは、65535バイト(64キロバイト)に制限されています。これ以上のサイズのメソッドを使用している場合に

は、JVMによりエラーが返されます。メソッドのサイズを縮小してから、再度JavaScriptを実行してください。

B.1 JavaScript関数

ここで説明するJavaScript関数は、Java Action、トリガ、およびComplex Conditionalノードに使用できます。

注意

数値がNumber型の値として扱われるため、JavaScriptでは、以下の範囲の整数のみ使用可能です。

・ 低値:-9007199254740992

・ 高値:9007199254740992

Long型の以下の 高値、 低値は、サポートしておりません。

・ 低値:Packages.java.lang.Long.MIN_VALUE

・ 高値:Packages.java.lang.Long.MAX_VALUE

new Packages.java.util.Date()

詳細については、J2SE Development Kit (以降、JDKと呼びます。)に付属しているJavadocを参照してください。

Date DateAdd(DateまたはNumber date, Number offset, String field)

日付にoffset値を加えた結果の日時を含むJavaScript Dateオブジェクトを返します。fieldの値には、offset値の基準となる単位を指定し

ます。有効なfield値は以下のとおりです。

field値 説明

"ss" 秒

"mi" 分

"hh" 時

"dd" 日

例:

var now = Packages.java.util.Date();

uda.Date = DateAdd (now, 1, "dd");

注意

この例が正しく機能するのは、UDA DateがDATE型の場合だけです。

- 166 -

Page 177: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

nowが以下の値であるとします。

Tue Jul 01 2006 14:02:59 GMT-0800 (PST)

この場合、tomorrow ( DateAdd ( now, 1, "dd" ) )の値は以下のようになります。

Wed Jul 02 2006 14:02:59 GMT-0800 (PST)

dateがNUMBER型である場合、その値は1970年1月1日以降のミリ秒として解釈されます。

Boolean DateCompare(DateまたはNumber date1, String operator, DateまたはNumber date2)

2つのDate値を比較し、その結果に応じてtrueまたはfalseを返します。有効な演算子は以下のとおりです。

演算子 説明

">" より大きい

"<" より小さい

">=" 以上

"<=" 以下

"==" と等しい

"!=" と等しくない

例:

var now = Packages.java.util.Date();

var tomorrow = DateAdd (now, 1, "dd");

if (DateCompare (now,"<", tomorrow)) ...; //...DateCompareの結果がtrueのため実行する。

date1とdate2がNUMBER型である場合、それらの値は1970年1月1日以降のミリ秒として解釈されます。

Number DateDiff(DateまたはNumber date1, DateまたはNumber date2, String field)

date1からdate2を減算します。fieldの値に応じて、差分を日、時、分、または秒で返します。有効なfield値は以下のとおりです。

field値 説明

"ss" 秒

"mi" 分

"hh" 時

"dd" 日

例:

var now = Packages.java.util.Date();

var tomorrow = DateAdd (now, 1, "dd");

var diff = DateDiff (tomorrow, now, "dd")); //差の値は1。

date1とdate2がNUMBER型である場合、それらの値は1970年1月1日以降のミリ秒として解釈されます。

例:

var date = DateDiff (20000000,10000000,"ss");

BigDecimal DecimalAdd(BigDecimal value1, BigDecimal value2)

指定したパラメータの合計であるJavaScript BigDecimalオブジェクトを返します。この結果は、パラメータの 大有効桁の精度を継承し

ます。

結果をUDAに割り当てる場合は、そのUDAがBIGDECIMAL型であることを確認してください。

- 167 -

Page 178: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

ほかのデータ型をパラメータとして渡した場合、この関数はパラメータをBigDecimalに変換します。

例:

int x = 39;

var z = DecimalAdd ("3.1416",x);

zがBigDecimalである場合、その値は42.1416になります。

Boolean DecimalCompare(BigDecimal value1, String operator, BigDecimal value2)

2つのBigDecimal値を比較し、その結果に応じてtrueまたはfalseを返します。

有効な演算子は以下のとおりです。

演算子 説明

">" より大きい

"<" より小さい

">=" 以上

"<=" 以下

"==" と等しい

"!=" と等しくない

結果をUDAに割り当てる場合は、そのUDAがBIGDECIMAL型であることを確認してください。

ほかのデータ型をパラメータとして渡した場合、この関数はパラメータをBigDecimalに変換します。

例:

var smallDecimal = "1.11";

var largeDecimal = "22.22";

if (DecimalCompare (smallDecimal,"<", largeDecimal)) ...; //DecimalCompareの結果がtrueのため実行する。

BigDecimal DecimalDivide(BigDecimal value1, BigDecimal value2, Number scale )

value1をvalue2で除算し、その結果を返します。scaleには、丸めの有効桁数を指定します。scaleの値には任意の数値を使用できます。

デフォルト値は2です。

丸めは常に四捨五入で行われ、両方の近接値から等距離である場合以外は、“ 近接値”に丸められます。両方の近接値から等距

離である場合は切り上げられます。

結果をUDAに割り当てる場合は、そのUDAがBIGDECIMAL型であることを確認してください。

ほかのデータ型をパラメータとして渡した場合、この関数はパラメータをBigDecimalに変換します。

BigDecimal DecimalMultiply(BigDecimal value1, BigDecimal value2, Number scale)

value1をvalue2で乗算し、その結果を返します。scaleには、丸めの有効桁数を指定します。scaleには任意の数値を使用できます。デ

フォルト値は2です。

丸めは常に四捨五入で行われ、両方の近接値から等距離である場合以外は、“ 近接値”に丸められます。両方の近接値から等距

離である場合は切り上げられます。

結果をUDAに割り当てる場合は、そのUDAがBIGDECIMAL型であることを確認してください。

ほかのデータ型をパラメータとして渡した場合、この関数はパラメータをBigDecimalに変換します。

BigDecimal DecimalSubtract(BigDecimal value1, BigDecimal value2)

value1からvalue2を減算します。差分はBigDecimalとして返されます。

- 168 -

Page 179: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

boolean toBoolean(StringまたはNumber value)

valueをJavaScript Booleanに変換します。値は、"true"または"false"を含むSTRINGか、ゼロ(true)またはゼロ以外(true)を含むNUMBERです。渡したパラメータに応じて、trueまたはfalseを返します。valueをBooleanに変換できない場合は、falseが返されます。

BigDecimal toDecimal(BigDecimal value, Number scale)

valueをBigDecimalオブジェクトに変換します。変換結果を、scaleで指定した有効桁数に返します。scaleには任意の数値を使用できま

す。デフォルト値は2です。

結果をUDAに割り当てる場合は、そのUDAがBIGDECIMAL型であることを確認してください。

ほかのデータ型をパラメータとして渡した場合、この関数はパラメータをBigDecimalに変換します。

Packages.java.lang.Float.parseFloat

詳細については、JDKに付属しているJavadocを参照してください。

Packages.java.lang.Integer.parseInt

詳細については、JDKに付属しているJavadocを参照してください。

Packages.java.lang.String.valueOf

詳細については、JDKに付属しているJavadocを参照してください。

注意

JavaScriptでは数値はNumber型となるため、整数としては以下の範囲までしか扱うことができません。

・ 小値:-9007199254740992

・ 大値:9007199254740992

JavaScript式でLong型の以下の 小値および 大値を使用することはできませんので、ご注意ください。

・ 小値:Packages.java.lang.Long.MIN_VALUE

・ 大値:Packages.java.lang.Long.MAX_VALUE

B.2 Java ActionでサポートするJavaScript関数

Java Actionでは、「B.1 JavaScript関数」で説明されている関数と、以下に示す関数を使用できます。

以下に示す関数は、Server Enactment Context APIのcom.fujitsu.iflow.server.intf.ServerEnactmentContextを使用して、ワークフロー情

報へのアクセスを提供します。詳細については、『API Javadocマニュアル』を参照してください。

void sec.addAttachment(String attachmentName, String attachmentPath)

void sec.addProcessXMLAttributeSubstructure(String udaName, String xPath, String value)

void sec.addProcessXMLAttributeSubstructureByIdentifier(String identifier, String xPath, String value)

void sec.deleteAttachment(String attachmentName)

void sec.deleteProcessXMLAttributeSubStructure(String udaName, String xPath)

void sec.deleteProcessXMLAttributeSubStructureByIdentifier(String identifier, String xPath)

void sec.escalateActivity(String assignees)

String sec.getActivityActor(String activityName)

Array sec.getActivityAssignees()

String sec.getActivityName()

String sec.getActor()

Array sec.getAllAttachmentNames()

Array sec.getAllAttributeNames()

String sec.getAttachment(String attachmentName)

Number sec.getCurrentActivityId()

Number sec.getCurrentProcessId()

Array sec.getGroupMembers(String groupName)

- 169 -

Page 180: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

String sec.getProcessAttribute(String attName)

String sec.getProcessAttributeByIdentifier(String identifier)

String sec.getProcessAttributeStringType(String udaName)

String sec.getProcessDefinitionId()

String sec.getProcessDefinitionName()

String sec.getProcessDescription()

String sec.getProcessInitiator()

String sec.getProcessName()

Array sec.getProcessOwners()

Number sec.getProcessPriority()

Number sec.getActivityPriority()

String sec.getProcessTitle()

String sec.getProcessXMLAttributeElementValue(String udaName, String xPath)

String sec.joinString(Array)

Array sec.resolveRelationship(String relationship, String sourceValue)

void sec.sendEmail(String to, String from, String cc, String bcc, String subject, String body, String mimeType)

void sec.setActivityAssignees(Array assignees)

void sec.setOwners(Array users)

void sec.setProcessAttribute(String name, String value)

void sec.setProcessAttributeByIdentifier(String identifier, String value)

void sec.setProcessDescription(String description)

void sec.setProcessName(String name)

void sec.setProcessOwners(Array users)

void sec.setProcessPriority(Number priority)

void sec.setActivityPriority(Number priority)

void sec.setProcessTitle(String title)

void sec.setProcessXMLAttributeElementValue(String udaName, String xPath, String value)

void sec.setProcessXMLAttributeElementValueByIdentifier(String identifier, String xPath, String value)

void sec.setProcessXMLAttributeSubstructure(String udaName, String xPath, String value)

void sec.setProcessXMLAttributeSubstructureByIdentifier(String identifier, String xPath, String value)

void sec.validateProcessXMLAttributeValue(String udaName)

void sec.validateProcessXMLAttributeValueByIdentifier(String identifier)

Array sec.splitString(String commaSeparatedList)

UDAを使用する

JavaScriptでプロセス定義に追加したUDAを使用できます。以下の構文を使用します。

uda.<UDA識別子名>

JavaScriptでは、変数名としてマルチバイト文字を使用できないため、UDA名ではなく識別子を使用してください。

以下の例では、変数を作成し、その変数をUDAの値に初期化します。

var someVariable = uda.Price;

以下の例は、変数の値をUDAに割り当てる方法を示しています。

var lastName = "Jones";

uda. udaIdentifier = lastName;

メソッドuda.get、uda.setを使用すると、それらの名前で、UDAにアクセスすることができます。

・ uda.getでは、指定したUDAの値が返されます。

var value = uda.get("<UDA名>");

・ uda.setでは、UDAの値を指定した値に設定します。

uda.set("<UDA名>", "<UDA値>");

JavaScriptの戻り値をUDAに割り当てるときには、それぞれのデータ型が一致していることを確認してください。データ型が一致してい

ない場合は、割当てに失敗します。

- 170 -

Page 181: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

注意

変換などのエラーによってターゲットUDAへの値の割当てに失敗した場合は、エラーの詳細がIBPMServer.logに記録されます。その

場合、ターゲットUDAは更新されず、前の値が維持されます。

UDAのデータ型が以下のJavaデータ型にマッピングされます。

・ BIGDECIMAL型のUDAは、Packages.java.math.BigDecimalオブジェクトにマッピングされます。

・ DATE型のUDAは、Packages.java.util.Dateオブジェクトにマッピングされます。

Javaオブジェクトの詳細については、JDKに付属しているJavadocを参照してください。

B.3 トリガでサポートするJavaScript関数

トリガでは、JavaScript式を使用して制御条件を指定できます。制御条件により、トリガが実行される時期を限定します。

「B.1 JavaScript関数」で説明されている関数と、以下で説明されている関数を使用できます。

String eventData.getXMLData(String xpath)

XPath式で指定されているXMLのテキスト値を返します。

例:

以下にXMLフラグメントの例を示します。

<Customer> <Data> <Name>John</Name> </Data> </Customer>

以下のステートメントは、XMLエレメント<Name>のテキスト値"John"を、変数nameに割り当てます。

var name = eventData.getXMLData ( "/Customer/Data/Name/text()");

- 171 -

Page 182: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

付録C トラブルシューティング

C.1 ログファイルの情報

Interstage BPMの運用中に問題が発生した場合の情報採取のために、次のログファイルを確認してください。

・ IBPMServer.log -このファイルには、Interstage BPM サーバにおける、すべてのエラーが出力されます。このログファイルを参照す

ることで、問題解決のための有益な手がかりが得られます。例えば、データベースサーバが停止していることがわかります。

・ AnalyticsError.log -このファイルには、Interstage BPM Analyticsとの連携に関するエラーが出力されます。

これらのファイルは、Interstage BPM サーバマシンの以下のフォルダに格納されます。

<Interstage BPMサーバインストールディレクトリ>/ server/instance/default/logs

C.2 特定のエラー状態を解決

C.2.1 Interstage BPMサーバの起動の失敗

<Interstage BPMサーバインストールディレクトリ>/server/instance/default/logsディレクトリ内のIBPMServer.logを確認します。

エラー 対処方法

DbService : setConnection: Connection to database serverfailed. Is the database server running and reachable through thenetwork? {ORA-01089: immediate shutdown in progress - nooperations are permitted.

データベースが実行中であることを確認します。また、データ

ベースが別のコンピュータで実行されている場合は、InterstageBPMサーバがインストールされているコンピュータからデータ

ベースにアクセスできることも確認します。サーバホストコン

ピュータからtelnet <Database Server Hostname> <Port> を使

用して、データベースホスト/ポートへの接続が確立可能である

ことを確認できます。

LdapBroker : getContext: Could not create the directoryservices. {[LDAP: error code 49 - Invalid Credentials]}

LdapBroker : getGroupMembersByDN: Could not retrieve theuser groups. {Could not create the directory services.{[LDAP: error code 49 - Invalid Credentials]}}

LdapBroker : Could not retrieve the user groups. {Could notcreate the directory services. {[LDAP: error code 49 -Invalid Credentials]}}

Interstage BPMサーバのLDAPAccessUserID /LDAPAccessUserPasswordパラメータでユーザ名とパスワード

が正しく指定され、それらのユーザ名とパスワードを使用して

ディレクトリサーバにログインできることを確認します。

getContext: Could not create the directory services.

LdapBroker : getGroupMembersByDN: Could not retrieve theuser groups. {Could not create the directory services.

LdapBroker : Could not retrieve the user groups. {Could notcreate the directory services.

Interstage BPMサーバのLDAPServerパラメータで指定した

ポートでLDAPサーバが実行中であることを確認します。サー

バホストコンピュータからtelnet ldapServerHostName portを使

用して、ホスト/ポートへの接続が確立可能であることを確認で

きます。

IflowStartup : @( Failed to execute the IBPM startup routinetask) Unable to deliver the message for the requested eventClass.

{javax.naming.ServiceUnavailableException: Acommunication failure occurred while attempting to obtain aninitial context with the provider URL: "iiop://<サーバ名>:<ポー

ト番号>". Make sure that any bootstrap address information inthe URL is correct and that the target name server is running. Abootstrap address with no port specification defaults to port2809. Possible causes other than an incorrect bootstrap addressor unavailable name server include the network environment andworkstation network configuration.}

これはInterstage BPM サーバの設定ファイルに、WebSphereアプリケーションサーバが使用している

BOOTSTRAP_ADDRESSポートが設定されていないのが原因

です。

1. WebSphere 管 理 コ ン ソ ー ル か ら

BOOTSTRAP_ADDRESSポートを確認してください

(サーバ > アプリケーションサーバ > <サーバ名> > ポー

ト)。

2. iflowClient.propertiesと ibpm.propertiesの以下のパラ

メータへ、BOOTSTRAP_ADDRESSポートを設定してく

- 172 -

Page 183: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

エラー 対処方法

ださい。そして、インポートスク リプ トを使って

ibpm.propertiesをデータベースへ格納してください。

・ JMSNamingProviderURL (記述形式 : iiop://<ホスト名

>:<BOOSTRAP_ADDRESS ポート>)

・ NamingProviderURL ( 記 述 形 式 : iiop://< ホ ス ト 名

>:<BOOSTRAP_ADDRESS ポート>)

C.2.2 IBPMServer.logのエラー

<Interstage BPMサーバインストールディレクトリ>/server/instance/default/logsディレクトリ内のIBPMServer.logを確認してください。

エラー 対処方法

getGroupMembersByDN: Could not retrieve the user groups.{[LDAP: error code 32 - No Such Object]}

原因:ディレクトリサーバ(LDAPサーバ)からユーザを削除した

が、グループ内にユーザが登録されたままになっている。

C.2.3 JavaScript実行中の時間切れ

大きなJavaScriptsの実行時に、WebLogicおよびWebSphere Application Server用に設定されている現在のトランザクション時間切れ(120秒)が不十分です。この設定が原因で、スクリプトの実行が「トランザクション時間切れ」で失敗します。

使用方法の要件に対応して、アプリケーションサーバ管理者は、トランザクション時間切れを長くして、たとえば200秒にすることができ

ます。この設定は、次の場所で変更できます。

・ WebLogic Application Server:

<WebLogicインストールディレクトリ>/../config/config.xml/<jta>/<時間切れ秒数>

・ WebSphere Application Server:

WebSphereコンソール:[サーバ] > [アプリケーションサーバ] > [サーバ1](デフォルト名) > [コンテナサービス] > [トランザクショ

ンサービス] > [トランザクションの合計存続時間の時間切れ]。

C.2.4 Oracleデータベースへの書き込み時のエラー

プロセスインスタンスのアーカイブ時などにOracleデータベーステーブルの更新が失敗した場合は、<Oracleインストールディレクトリ>/admin/<DBインスタンス名>/bdumpディレクトリに存在するOracleアラートログファイルを確認してください。たとえば、次の場所です。

C:\ProgramFiles\Oracle\admin\orcl\bdump\alert_orcl.log

以下のエラーが見つかる場合があります。

{Database add/create request failed.(データベース追加/作成リクエストが失敗しました。){ORA-08103: object no longer exists(オブジェ

クトはもう存在しません)}}

このエラーは、データファイルのサイズがデータベースサーバのハードディスクにおけるファイルサイズ制限に達したために発生した可

能性があります。

システム管理者は、データベースサーバハードディスクのファイルサイズを大きくする必要があります。

C.2.5 Interstage Applicationサーバの警告、エラーメッセージ

Interstage BPM サーバをInterstage Application Serverで実行している際に、イベントログまたはシステムログに警告メッセージが出力さ

れる場合があります。

それらのメッセージと同じ時刻に、Interstage BPMサーバまたは、コンソールワークユニットのコンテナログにもメッセージが出力されて

いるなら、Interstage BPMに原因がある可能性があります。

しかしながら、そのメッセージに、以下に示すエラーや警告のいずれかが含まれるなら、無視できます。

- 173 -

Page 184: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

Error/

Warning

Details

1. 1. ・ イベントログまたはシスログに出力されたメッセージ: od60002

・ Interstage BPMサーバのEJBコンテナログに出力されたメッセージ:

IJServer21104 と IJServer21092

・ Interstage Application Serverの無通信監視機能により時間が超過したEJBオブジェクトが削除されました。

Interstage BPM サーバが自動的に代わりのEJBオブジェクトを作成しますので、メッセージを無視して構いませ

ん。

C.3 インストール、配備時および構成時に発生するエラー

ここでは、Interstage BPMのインストール、配備時および構成時に発生するトラブルの事例およびその対処について説明します。

なお、データベースにSymfowareを使用している場合は、イベントログにエラーの原因が出力されますので、それに従ってください。

以前のバージョンをアンインストールした後、新しいInterstage BPMのインストールに失敗する

I 原因 ・ アンインストーラを使用せずに、Interstage BPMのインストールディレクトリを削除した。また

はアンインストールが失敗した。

対応 Windowsの場合:

以前のInterstage BPMのレジストリエントリを、以下のように手動で削除してください。:

1. スタート メニューから、ファイル名を指定して実行 を選択します。"regedit"と入力し、OKを

クリックします。

2. レジストリ エディタにおいて、HKEY_LOCAL_MACHINE > SOFTWARE > Fujitsu > Install> Interstage BPM Serverを開きます。

3. Installキー配下にあるInterstage BPM Serverのレジストリエントリを削除します。

4. HKEY_LOCAL_MACHINE > SOFTWARE > Microsoft > Windows > CurrentVersion >Uninstall >Interstage Business Process Manager xx.xを開きます。

5. Uninstallキーの配下にあるInterstage Business Process Manager xx.xレジストリエントリを削

除します。これによって、レジストリエントリを完全に削除できます。

・ Solarisの場合:

・ Solarisのパッケージ情報を、以下のように手動で削除してください。:

1. コマンドプロンプトを開き、任意のSolarisマシンからpkginfo -l FJSVibpmのコマンドを実行

してください。そして、Solarisパッケージ情報がまだ存在しているかどうかをチェックしてく

ださい。

2. もしSolarisパッケージ情報が表示された場合、以下の手順でパッケージ情報を削除して

ください。

a. /tmp配下にibpm.uninstという名前のファイルを作成します。

b. Solarisパッケージを削除するために、pkgrm FJSVibpmコマンドを実行してください。

c. 再度、pkginfo -l FJSVibpmコマンドを実行して、Solarisパッケージの削除が成功し

ていることを確認してください。もし何も表示さければ、SolarisパッケージがSolarisから完全に削除されたことになります。

・ Linuxの場合:

・ RPMのパッケージ情報を、以下のように手動で削除してください。:

1. コマンドプロンプトを開き、任意のLinuxマシンからrpm -qi FJSVibpmコマンドを実行してく

ださい。そして、RPMパッケージがまだ存在しているかどうかをチェックしてください。

- 174 -

Page 185: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

2. もしRPMパッケージ情報が表示された場合、rpm -e FJSVibpmコマンドを使用してパッケー

ジ情報を削除してください。

3. 再度、rpm -qi FJSVibpmコマンドを実行して、RPMパッケージの削除が成功していること

を確認してください。もし何も表示されなれば、RPMパッケージが完全に削除されたことに

なります。

LinuxでInterstage BPMインストールプログラムが起動できない

I 原因 libXp-1.0.0-8.i386.rpmパッケージがLinuxマシンにインストールされていません。

対応 Linuxマシンで以下の操作を行ってください。

1. Red Hat Enterprise LinuxのCDまたはウェブサイトから、libXp-1.0.0-8.i386.rpmパッケージ

をダウンロードしてください。

2. rpm -i libXp-1.0.0-8.i386.rpmコマンドを使用して、パッケージをインストールしてください。

3. Linux用のInterstage BPMインストールプログラムを再実行してください。

Interstage BPMのデータベースの作成/更新時のエラー

I 原因 配備時に指定した以下のいずれかの値に誤りがあります。

・ データベース管理者のユーザ名

・ データベース管理者のパスワード

対応 Interstage BPMの配備前に作成したデータベースのバックアップから、データベースを復元しま

す。

配備ツールを再実行し、[Welcome]画面で[Database Configuration]を選択します。これにより、

Interstage BPMを再度配備することなく、データベースが構成されます。

II 原因 配備時に指定した以下のいずれかの値に誤りがあります。

・ データベースサーバのホスト名

・ データベースSID(データベースインスタンス名)

・ データベースポート

対応 Interstage BPMの配備前に作成したデータベースのバックアップから、データベースを復元しま

す。

アプリケーションサーバからInterstage BPMを削除し、配備ツールを使用して再度配備してくだ

さい。

III 原因 データベースサーバが起動していません。

対応 データベースサーバを起動します。

配備ツールを再実行し、[Welcome]画面で[Database Configuration]を選択します。これにより、

Interstage BPMを再度配備することなく、データベースが構成されます。

importLDAP.batの実行時に発生したエラー

I 原因 配備時に指定した以下のいずれかの値に誤りがあります。

・ LDAPキー

・ LDAPの組織単位(OU)

対応 アプリケーションサーバからInterstage BPMを削除し、配備ツールを使用して再度配備してください。

- 175 -

Page 186: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

importAD.batの実行時のエラー

I 原因 配備時に指定した以下のいずれかの値に誤りがあります。

・ Active Directoryキー

・ Active Directoryの組織単位(OU)

対応 アプリケーションサーバからInterstage BPMを削除し、配備ツールを使用して再度配備してください。

C.4 Interstage BPMサーバの起動時のエラー

ここでは、Interstage BPMサーバの起動時に発生するトラブルの事例およびその対処について説明します。起動に失敗した場合、以

下の原因が考えられます。原因を調査し、それぞれ対処してください。

Active Directoryに関連するエラー

I 原因 リモートコンピュータにActive Directoryが配備されているため、Active Directoryが実行され

ていません。

対応 Active Directoryを起動してから、Interstage BPMサーバを起動します。

II 原因 配備時に指定した以下のいずれかの値に誤りがあります。

・ ディレクトリサービスのログインアカウントのユーザ名

・ ディレクトリサービスのログインアカウントのパスワード

これらの値は、importAD.batファイルにnet userコマンドの引数として使用されています。

対応 アプリケーションサーバからInterstage BPMを削除し、配備ツールを使用して再度配備してく

ださい。

III 原因 配備時に指定した以下のいずれかの値が誤っているため、Interstage BPMがActive Directoryに接続できません。

・ Active Directoryキー

・ Active Directoryの組織単位(OU)

対応 アプリケーションサーバからInterstage BPMを削除し、配備ツールを使用して再度配備してく

ださい。

Sun Java System Directory Serverに関連するエラー

I 原因 配備時に指定した以下のいずれかの値が誤っているため、Interstage BPMがLDAPサーバ

に接続できません。

・ LDAPキー

・ LDAPの組織単位(OU)

対応 アプリケーションサーバからInterstage BPMを削除し、配備ツールを使用して再度配備してく

ださい。

データベースに関連するエラー

I 原因 データベースサーバが起動していません。

対応 データベースサーバを起動してから、Interstage BPMサーバを起動します。

II 原因 Symfowareを使用している場合、データベースユーザがロックされたため「JYP1011E 利用者

の認証ができません。」のエラーが出力される場合があります。

対応 データベースユーザのロックを解除するために、データベースサーバで以下のSQL文を実

行してください。詳細については、『Symfoware Server SQLリファレンス』を参照してください。

- 176 -

Page 187: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

・ ALTER USER

データベースユーザのロックを解除したあとで、Interstage BPMサーバを再起動してくださ

い。

ホスト名変更に関連するエラー

I 原因 Interstage BPMサーバをインストールしたコンピュータのホスト名を変更しました。ホスト名が

Interstage BPMサーバのパラメータ名やパラメータ値に設定されている場合は、そのサーバ

にアクセスすることができません。

対応 Interstage BPMデータベースユーザのIBPMPropertiesテーブルに以下の変更を行ってくだ

さい。

・ PROPERTYKEYカラムで、サフィックにホスト名があるすべてのパラメータ名を変更して

ください。

パラメータのフォーマットは、<PARAMETER_NAME>.<HOSTNAME>または、

<PARAMETER_NAME>.<HOSTNAME>.<SERVERNAME>です。

・ PROPERTYVALUEカラムで、ホスト名を含むすべてのパラメータ値を変更してください。

IBPMPropertiesを更新する場合は、適切なデータベースコマンドまたは、データベース

クライアントを使用してください。

C.5 問題が解決できない場合

問題を解決できない場合は、以下の手順に従ってください。

1. 以下の手順に従って、Interstage BPMサーバのDebugLevelパラメータに2を設定します。

a. 以下のURLを使用して、Interstage BPMサーバ設定ツールを起動します。

http://<ホスト名>:<ポート>/fujitsu-ibpm-config-webapp/IBPMConfigServlet

b. Interstage BPMのスーパーユーザでログインしてください。

c. DebugLevelパラメータに2を設定します。

d. [Save and Reload properties]をクリックします。

2. エラーの原因となった操作を再度実行します。

3. 以下の情報を用意して、富士通技術員に連絡してください。

一般情報

- オペレーティングシステム

- ディレクトリサービス(種類とバージョン)

- データベースサーバ(種類とバージョン)

- JDKまたはJREのバージョン

- アプリケーションサーバ(種類とバージョン)

- Interstage BPM Edition、バージョンとビルド番号

- 主な問題領域

- 問題の優先度

- 問題が発生する環境

設定情報

- Interstage BPMサーバからエクスポートした設定ファイル

ログファイル

- 177 -

Page 188: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

- <Interstage BPMサーバインストールディレクトリ>/server/instance/default/logsにあるすべてのログファイル

- Interstage Application Serverの使用時:<Interstageインストールディレクトリ>/J2EE/var/deployment/ijserver/<ユーザのワーク

ユニット>/logにあるすべてのログファイル

- WebLogicの使用時: <WebLogicインストールディレクトリ>/user_projects/domain/<お使いのドメイン>/servers/AdminServer/logsにあるすべてのログファイル

- WebSphereの使用時: <WebSphereインストールディレクトリ>/profiles/<お使いのアプリケーションサーバプロファイル>/logs/<お使いのサーバ>にあるすべてのログファイル

OSシステムログ

- イベントビューアから取得したWindowsイベントログ

- /var/adm/messagesに保存したUNIXシステムログ

- /var/log/messagesに保存したLinuxシステムログ

問題の説明

- 問題が発生する前に実行した手順の説明

- 問題が発生する頻度

問題の詳細

- エラーが発生するアプリケーションプログラムとそのソースコード

- エラーが発生するプロセス定義のXPDLファイル

- プロセス定義で定義されたJava Action、タイマー、エージェントに関する情報

- プロセスインスタンスがエラー状態になる場合、プロセスインスタンス履歴のスクリーンショット

- 例外が表示されたときのスタックトレース

Interstage BPMコンソールに表示されたエラーページの[詳細]をクリックすると、スタックトレースを取得できます。

- 表示されたすべての例外のスクリーンショット

- プロセスインスタンスがエラー状態になった場合、または予期しない状態になった場合、そのプロセスインスタンスのスクリー

ンショット(グラフィカルビュー)

- タイマーを使用する場合は、カレンダーファイル(*.cal)

- エージェントを使用する場合は、agentsConfig.xmlファイル

- 178 -

Page 189: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

用語集 ACID特性

トランザクション処理システムに必須とされる4つの特性です(Atomicity(原子性)、Consistency(一貫性)、Isolation(隔離性)、

Durability(永続性))。

Activityノード

アクティビティをグラフィカルに表すノードです。

ANDノード

プロセス内の複数のブランチの同期をとるノードです。

API

Application Programming Interface (アプリケーションプログラミングインタフェース)の略です。開発者がユーザアプリケーションを

作成する際にサーバへアクセスするために使用するインタフェースやメソッドです。

ASAP

Asynchronous Service Access Protocol(非同期サービスアクセスプロトコル)の略です。ASAPはSOAPに基づく通信プロトコルであ

り、長時間実行されるサービスの開始、管理、およびモニタリングに使用されます。

BPR

Business Process Reengineeringの略です。プロセスの観点から、業務をどのように再定義するかを検討する研究分野のことです。

Chained-Processノード

親プロセス定義で定義されているタスクから独立して完了させることのできるサブプロセス実行を表すノードです。

Complex Conditionalノード

分岐条件がJavaScript式として指定されているConditionalノードです。

Conditionalノード

特定の条件に基づいて複数の選択肢から1つを選択し、プロセスフローを導くノードです。

DBノード

JDBCを使って、外部のデータベースにアクセスするノードです。

Delayノード

プロセスの実行を一定の時間一時停止するノードです。

EJB

Enterprise JavaBeansの略です。

Emailノード

あらかじめ定義されたEmailを送信するノードです。

Exitノード

プロセスの終了を示すノードです。1つのプロセス定義は複数のExitノードをもつことができます。

GUI

Graphical User Interface(グラフィカルユーザインタフェース)の略です。

- 179 -

Page 190: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

Interstage BPMコンソール

ユーザがプロセスインスタンス、プロセス定義を作成し、ワークアイテムにアクセスして反応するためのユーザインタフェ-スです。

Interstage BPMスーパーユーザが、Interstage BPMを管理するためにも使います。

Interstage BPMフォーム

HTMLファイルを生成するXMLレイアウト定義とJavaアダプタクラスです。Interstage BPMフォームは、Interstage BPMフォームエディ

タを使用して作成および設計します。

Java Action

繰り返し利用する機能をプログラム化したコンポーネントです。

LDAP

Lightweight Directory Access Protocol(軽量ディレクトリアクセスプロトコル)の略です。

OnAbortアクション

プロセスインスタンスが中断される前に実行されるJava Actionです。

OnResumeアクション

プロセスインスタンスが再開される前に実行されるJava Actionです。

OnSuspendアクション

プロセスインスタンスが一時停止される前に実行されるJava Actionです。

ORノード

プロセスフローを複数の平行ブランチに分けるノードです。

Remote Subprocessノード

リモートワークフローサーバで実行されるサブプロセスを表すノードです。

SOAP

Simple Object Access Protocol(シンプルオブジェクトアクセスプロトコル)の略です。SOAPは、アプリケーション間でXMLメッセージ

を送信するための標準の通信プロトコルです。たとえば、Webサービスへのアクセスに使用されます。

SQL

Structured Query Language(構造化クエリ言語)の略です。

Startノード

プロセスの開始を示すノードです。1つのプロセスは1つのStartノードしかもつことができません。

Subprocessノード

サブプロセス実行を表すノードです。そのタスクの詳細は、別のプロセス定義で定義されます。

SWAP

Simple Workflow Access Protocol(シンプルワークフローアクセスプロトコル)の略です。SWAPは、ワークフローサーバ間で、HTTPを介してXMLメッセージをやり取りします。

Voting Activityノード

ユーザ同士が連携して1つのアクティビティを処理できるようにするノードです。

- 180 -

Page 191: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

Web Serviceノード

Webサービスからデータを取得し、そのデータを処理できるようにするノードです。

WSDL

Web Services Description Language(Webサービス記述言語)の略です。WSDLは、組織が提供するWebサービスを記述するXMLベースの言語です。WSDLは、Webサービスへのアクセス方法についても記述します。

XMLアクション

たとえば、XMLの下部構造の追加、XMLのテキストまたは属性値の設定、XMLデータからのUDA値の抽出のような、XMLタイプの

UDAに対する特定の動作を行うJava Actionです。

XPath

XML Path Language(XMLパス言語)の略です。XPathは、XML文書内の情報を見つけるための言語であり、エレメントや属性をた

どってゆくために使用されます。

XPDL

XML Process Definition Language(XMLプロセス定義言語)の略です。

アクティビティ

アクティビティは、あるプロセスの中で実行される作業を記述したものです。アクティビティはワークアイテムで表されます。

アクティビティ時間

ある特定のアクティビティを処理するのにかかる時間です。

アノテーション

プロセス定義に説明やコメントを追加するために付加するものです。

エージェント

外部のシステムに非同期にアクセスするためのInterstage BPMのコンポーネントです。

エラーアクション

プロセス定義レベル、リモートサブプロセスレベル、およびJava Actionレベルでの特定のエラーに対処するために使われるJava Actionです。

関係者

あるプロセスに含まれている(関与している)の人です。

起案者

プロセスインスタンスを開始した人です。

期限

活性状態になったアクティビティが完了する期限を指定します。また、期限に到達したときにそのアクティビティがまだ完了していな

い場合の処理についても指定します。

業務プロセス

「プロセス」を参照してください。

グループ

同じカテゴリのアクティビティを視覚的にグループ化したものです。

- 181 -

Page 192: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

グループウェア

ユーザ同士の連携を支援するソフトウェアです。

サーバ

Interstage BPM においては、ワークフローエンジンがプロセスを実行するための実行環境を提供しているコンピュータ上の、ワーク

フロー管理システムのコンポーネントです。

サーバアクション

Interstage BPMサーバとの情報のやり取りを可能にするJava Actionです。

シミュレーションのシナリオ

プロセス定義で定義されたビジネスプロセスの実行をローカルコンピュータでシミュレートするための情報を定義したものです。

所有者

「プロセス定義所有者」および「プロセスインスタンス所有者」を参照してください。

スイムレーン

同じロールによって実行されるアクティビティを視覚的にグループ化するものです。

タイマー

指定された間隔が経過した後、または指定された日時になると期限が切れます。タイマーの期限が切れると、特定のアクションがト

リガされます。

タスク

プロセス内の1つのアクティビティです。通常、人間の関与が要求されます。

担当者

あるアクティビティを実行するために割り当てられた1人または複数の人です。

通知アクション

プロセス実行に関連するイベントをユーザに通知するJava Actionです。プロセスやアクティビティの開始などを、Emailでユーザに

通知することかできます。

ディレクトリサービス(DS)

全ネットワークの認証データや設定データを格納するリポジトリです。

データベースアクション

Interstage BPMから独立している外部のデータベースとの相互作用を実現するJava Actionです。

添付文書

アプリケーションによって生成された、プロセスインスタンスに関連付けられた文書ファイルです。

統合アクション

プロセス定義内から外部機能へのアクセスを可能にするJava Actionです。

投票ルール

Voting Activityノードで定義される投票ルールです。

ネーミングサービス

クライアントに対して名前でオブジェクトを見つける機能を提供するサービスです。

- 182 -

Page 193: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

ノード

プロセスの各段階をグラフィカルに表します。Interstage BPMのノードのタイプには、Activityノード、ANDノード、Subprocessノード、

Conditionalノードなどがあります。

ビジネスカレンダー

営業日および営業時間を指定したカレンダーです。

フォーム

アクティビティ、プロセスインスタンス、またはプロセス定義に関連付けることができる、HTMLまたはXMLファイルです。フォームは

Interstage BPMを使用して作成できますが、その外観は任意のXML編集ツールまたはHTML編集ツールを使用して変更できま

す。

フレームワークアダプタ

デ ィ レ ク ト リ サ ー ビ ス ア ダ プ タ と DMS ア ダ プ タ を 統 合 し ま す 。 DD ア ダ プ タ と 呼 ば れ る こ と も あ り ま す

("DD"は、"Document"と"Directory"の頭文字を繋げた略語)。ディレクトリサービスと文書管理システム(DMS)に対して統合された

ユーザ認証を実現します。

プロジェクト

プロセス定義、フォーム、シミュレーションのシナリオ、添付ファイルなどのコンテナです。ファイルシステムレベルでは、1つのプロ

ジェクトが1つのフォルダになります。

プロセス

業務目標を達成するために実行される一連の手順です。プロセスはプロセス定義でモデル化されます。

プロセスインスタンス

プロセスインスタンスは、あるプロセス定義から生成された1つの実体です。プロセスインスタンスの構造は、基となるプロセス定義の

構造と同一です。

プロセスインスタンス期限

プロセスインスタンスの期限です。

プロセスインスタンス所有者

デフォルトでは、プロセスインスタンスの所有者は、そのプロセスインスタンスが生成されたプロセス定義の所有者です。

プロセス関係者

「関係者」を参照してください。

プロセス起案者

「起案者」を参照してください。

プロセス定義

業務プロセスを表現するための記述で、操作の自動化をサポートします。プロセス定義は、プロセス内の制御のフローを含め、生

成されるプロセスインスタンスのふるまいやプロパティを定義します。

プロセス定義所有者

プロセス定義を作成(または 後に編集)した人です。

文書管理システム(DMS)

Document Management System(文書管理システム)の略です。Interstage BPMと連携して、添付文書やフォームなどを格納するた

めに使用されるシステムです。DMSアダプタはDMSとInterstage BPMを接続します。

- 183 -

Page 194: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

補正アクション

例えば、システムをクリーンアップし、トランザクションに関与している外部システムの安定した状態を保障するような、通常のJava Actionに対する補強として定義できるJava Actionです。

無処理Java Action

動作を指定しない、組み込みのJava Actionです。

矢印

あるノードと別のノードを繋ぐものです。矢印は、ノードからノードへ、プロセスフローを導きます。

ユーザ定義属性(UDA)

顧客データや発注番号など、プロセス関係者がアクセスしたり、修正や追加する必要があるデータです。ユーザ定義属性は、プロ

セス定義の中で定義されます。

ユーザグループ

共通の特徴を持つユーザの集合です。グループは、Interstage BPMのローカルグループストア、ディレクトリサービス、またはその

両方のシステムで定義されます。

ユーザプロファイル

ユーザ固有の設定情報です。ユーザがEmail通知を受信するかどうかの情報や、Emailアドレス、デフォルトのディレクトリがありま

す。

ルール

ルールが定義されたアクティビティにおいて選択肢を決定するための方法です。

ロール

プロセスに関連付けられたタスクを処理すべき責任がある、個人またはグループの総称です(「マネージャー」など)。すべてのプロ

セスの作業(アクティビティ)には、ロールが定義されています。ロールは、Interstage BPMのローカルグループストアやディレクトリ

サービスで定義されるグループに相当します。

ワークアイテム

ワークリストに表示されるアクティビティのことです。

ワークフロー

業務プロセス中に存在する一連のアクティビティの連なりです。

ワークフローアプリケーション

プロセス定義、フォーム、シミュレーションシナリオ、添付文書からなるプロセスソリューションです。Interstage BPMは、定義済みの

構造を持つワークフローアプリケーションプロジェクトの作成を実現します。このアプリケーションは、Interstage BPMクライアントがア

クセスできるInterstage BPMサーバ上に配備できます。

ワークフローサーバ

プロセスを実行するための実行環境を提供する、Interstage BPMのコンポーネントです。

ワークリスト

アクティビティのリストです。

- 184 -

Page 195: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

索 引[A]

ACID特性.........................................................................21,179Activityノード....................................................................14,179Activity ノード..........................................................................58Activityノード 開始アクションを割当てる................................66Activityノード ロール...............................................................11ANDノード.........................................................................16,179ANDノード addNote()...............................................................48API..........................................................................................179ASAP......................................................................................179

[B]BPR.........................................................................................179

[C]CentraSite 連携..........................................................................6Chained-Processノード.......................................................18,179Chained-Processノード addNode()............................................52Complex Conditionalノード....................................................179Compound Activityノード.........................................................19Conditionalノード..........................................................17,48,179

[D]DBノード.................................................................................179Delayノード...................................................................15,58,179Delayノード addNode().............................................................51

[E]EJB..........................................................................................179Emailノード.............................................................................179Event Activityノード.................................................................16Event Activityノード プログラム例...........................................96Exitノード......................................................................14,59,179

[F]FTPエージェント..............................................................104,106fujitsu-ibpm-engine-ejb_jar_client.jar.................................28,30

[G]GUI.........................................................................................179

[H]history.....................................................................................112HTTPエージェント...........................................................107,108

[I]iFlow.jar....................................................................................28Interstage Analytics....................................................................5Interstage BPM...........................................................................1Interstage BPM 主な機能..........................................................2Interstage BPM 外部アプリケーションと統合する...................61Interstage BPM 概要..................................................................1Interstage BPM 基礎知識..........................................................8Interstage BPM 基本設計..........................................................2Interstage BPMコンソール.....................................................180Interstage BPM コンポーネントアーキテクチャ......................2,3Interstage BPM サブプロセス機能..........................................26

Interstage BPMフォーム.........................................................180Interstage BPM マニュアル一覧................................................iiInterstage BPM 利点..................................................................1Interstage BPM連携ユーザ...................................................119Iterated ノード.........................................................................131Iteratorノード......................................................................59,130

[J]Java Action...................................................................11,63,180Java Action:サポートされるJavaScript関数...........................169Java Actions assigning エラーアクション..................................73Java Actions assigning 補償アクション.....................................72Java Actions エラー..................................................................70Java Actions エラー処理..........................................................71Java Actions 構造.....................................................................74Java Action 一時停止..............................................................77Java Action 開始......................................................................66Java Action 組込み..................................................................68JavaAction 再開.......................................................................77Java Action 終了......................................................................67Java Action タイプ....................................................................64Java Action 中止......................................................................77Java Action プロセス所有者....................................................64JavaScript関数........................................................................166JavaScript関数:Java Actionでのサポート.............................169JavaScript関数:一般..............................................................166JavaScript関数:トリガでのサポート........................................171Javaアクション.............................................................................5JDBC..........................................................................................4JMSインタフェース.................................................................163JMS リスナ..............................................................................101

[L]LDAP...................................................................................4,180

[M]Model API..................................................................................5Model API アプリケーションの実行.........................................37Model API アーキテクチャー...................................................38Model API システム環境.........................................................28Model API トランザクション制御..............................................93

[O]OnAbortアクション..................................................................180OnResumeアクション..............................................................180OnSuspendアクション..............................................................180ORノード............................................................................16,180ORノード addNote()..................................................................48

[R]Remote Subprocessノード..................................................18,180Route Nodes.............................................................................58

[S]Server Enactment Context........................................................65SOAP......................................................................................180SQL.........................................................................................180

- 185 -

Page 196: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

Startノード.....................................................................14,59,180Subprocessノード...............................................................17,180Subprocessノード addNode()....................................................50SWAP.....................................................................................180

[T]Triggerノード.............................................................................59

[U]UDA 追加.................................................................................46

[V]Voting Activityノード........................................................15,180Voting Activityノード addNode().............................................47Voting Activityノード 閾値......................................................47Voting Activityノード ルール..................................................47Voting Activityノード ロール...................................................11Votingノード.............................................................................58

[W]Web Serviceノード..................................................................181Webサービス..............................................................................5WSDL.....................................................................................181

[X]XMLアクション.......................................................................181XMLデータ..............................................................................84XPath......................................................................................181XPDL......................................................................................181

[あ]アクティビティ..........................................................................181アクティビティ時間..................................................................181アクティビティノード................................................................131アノテーション.........................................................................181アプリケーション開発 ストラテジ................................................1アーキテクチャ........................................................................2,3一時停止時アクション..............................................................77一時停止時アクション.........................................................64,77一括処理..................................................................................81インタフェース DataItemRef................................................80,86インタフェース WFAdminSession..........................................142インタフェース WFObjectList...................................................54インタフェース WorkItem.........................................................56インタフェース プロセスインスタンス......................................147エラーアクション.................................................11,64,70,72,181エラー処理 Java Actions..........................................................74エラー処理 Java Actionsにおいて...........................................71エラー処理 リモートサブプロセス用......................................119エージェント.....................................................................102,181

[か]開始アクション.....................................................................11,64開始アクション 割当て..............................................................66Activityノード 終了アクションを割当てる................................67外部システム..............................................................................5拡張属性..................................................................................86拡張属性 値の取得.................................................................88拡張属性 取得.........................................................................88

拡張属性 名前.........................................................................89拡張属性 名前空間.................................................................91拡張属性 割当て......................................................................87カスタムEJB................................................................................4関係者....................................................................................181管理者 ログアウト...................................................................138管理者 ログイン......................................................................138管理 ユーザとグループ..........................................................139完了アクション..........................................................................64起案者....................................................................................181期限........................................................................................181キャッシュをクリア...................................................................142業務プロセス..........................................................................181組込みJava Action...................................................................68グループ.................................................................................181グループウェア.......................................................................182グループ管理......................................................................4,139グループキャッシュ クリア.......................................................142決定表.............................................................................124,126決定表の管理........................................................................127決定表の仕様........................................................................126

[さ]再開時アクション.................................................................64,77再割当てモード........................................................................27サーバ....................................................................................182サーバアクション....................................................................182閾値..........................................................................................47実行エンジン..............................................................................4シミュレーションのシナリオ.....................................................182終了アクション.....................................................................11,64終了アクション 割当て..............................................................67将来のワークアイテム..............................................................24初期化アクション......................................................................64所有者....................................................................................182所有者アクション......................................................................64スイムレーン............................................................................182セキュリティモード....................................................................26セッション 管理者...................................................................138セッション ユーザ...................................................................138接続性........................................................................................4絶対時刻タイマー....................................................................12相対時刻タイマー....................................................................12ソート.........................................................................................77ソート順 追加............................................................................79

[た]タイマー....................................................................................12タイマー....................................................................109,112,182タイマーアクション....................................................................64タスク.......................................................................................182担当者....................................................................................182中止時アクション......................................................................65通知アクション........................................................................182定期タイマー............................................................................12ディレクトリサービス.........................................................139,182ディレクトリサービスへの接続性................................................4Emailリスナ...............................................................................99

- 186 -

Page 197: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

添付文書...........................................................................22,182添付文書の処理......................................................................59添付文書を処理する................................................................59データベースアクション..........................................................182データベースへの接続性..........................................................4統合アクション........................................................................182投票ルール.......................................................................47,182トラブルシューティング...........................................................174トラブルシューティング:Interstage BPMサーバの起動........176トランザクションAPI...................................................................93トランザクション制御.................................................................92トリガ..........................................................................................93トリガ:サポートされるJavaScript関数.....................................171トリガ 定義.................................................................................94

[な]ネーミングサービス.................................................................182ノード..................................................................................10,183ノード Conditionalノード...........................................................48ノードインスタンス.....................................................................21ノードタイプ...............................................................................13ノード リモートサブプロセスノード..........................................116

[は]バッチ処理を行う......................................................................80ビジネスカレンダー.........................................................112,183ビジネス相対時刻タイマー......................................................12ビジネス定期タイマー..............................................................12ファイルリスナ...........................................................................97フィルタ.....................................................................................25フィルタ プロセスインスタンス................................................147フィルタ プロセス定義.......................................................54,143フィルタ ワークアイテム............................................................55フィルター.................................................................................77フィルター 追加........................................................................79フォーム.............................................................................11,183フレームワークアダプタ..........................................................183プログラミングサンプル..........................................................161プロジェクト.............................................................................183プロセス..................................................................................183プロセスインスタンス.......................................................8,19,183プロセスインスタンスEJB............................................................4プロセスインスタンス UDAの取得...........................................81プロセスインスタンス アーカイブ............................................148プロセスインスタンス アーカイブ済の削除............................150プロセスインスタンス 一時停止する......................................148プロセスインスタンス 開始する................................................54プロセスインスタンス 再開する..............................................149プロセスインスタンス 削除......................................................150プロセスインスタンス 状態........................................................21プロセスインスタンス 所有権....................................................22プロセスインスタンス所有者...................................................183プロセスインスタンス 所有者を変更する...............................147プロセスインスタンス 中止......................................................149プロセスインスタンスの属性.....................................................20プロセスインスタンス フィルタの条件.....................................147プロセスインスタンス リストを作成する...................................147プロセス関係者......................................................................183

プロセス起案者......................................................................183プロセスコメント.........................................................................82プロセス定義.......................................................................8,183プロセス定義EJB........................................................................4プロセス定義 XPDLファイルからインポートする...................145プロセス定義 XPDLファイルにエクスポートする..................146プロセス定義 アーカイブ.......................................................144プロセス定義 アーカイブ済の削除.......................................145プロセス定義 検証...................................................................43プロセス定義 公開する..........................................................144プロセス定義 新バージョンを取得する...............................54プロセス定義 削除.................................................................145プロセス定義 作成...................................................................43プロセス定義識別子................................................................10プロセス定義 状態.....................................................................9プロセス定義 所有権...............................................................12プロセス定義所有者..............................................................183プロセス定義 属性.....................................................................8プロセス定義 デザイン.............................................................39プロセス定義の版数管理........................................................10プロセス定義 フィルタ..............................................................54プロセス定義 フィルタの条件................................................143プロセス定義 変更する............................................................19プロセス定義 編集モード.........................................................42プロセス定義 変数データ........................................................13プロセス定義 リストを作成する...............................................143プロセス編集............................................................................25フローコントロール....................................................................10文書管理システム..................................................................183変数データ ユーザ定義属性..................................................13補償アクション................................................................11,64,72補正アクション........................................................................184本書の目的.................................................................................i

[ま]無処理Java Action ................................................................184

[や]矢印..............................................................................10,24,184矢印 addArrow()......................................................................43矢印 makeChoice()...................................................................56矢印インスタンス......................................................................21ユーザエージェントEJB.............................................................3ユーザ管理..........................................................................4,139ユーザキャッシュ クリア..........................................................142ユーザグループ................................................................11,184ユーザ定義属性................................................................13,184ユーザ定義属性 (UDA) タイプXMLの...................................84ユーザ定義属性 追加..............................................................46ユーザプロファイル................................................................184ユーザ リストを作成する.........................................................142ユーザ ログアウト......................................................................41ユーザ ログイン........................................................................41

[ら]リストの更新通知......................................................................81リスト ワークアイテム.................................................................55リモートグループストア...........................................................140

- 187 -

Page 198: Interstage Business Process Manager V11software.fujitsu.com/jp/manual/manualfiles/M100001/B1WD...Interstage Business Process Manager コンソールのユーザインタフェースを使用する方法について説明します。・サーバ管理者ガイド

リモートサブプロセス..............................................................115リモートサブプロセス エラー処理..........................................119リモートサブプロセス 認証.....................................................119リモートサブプロセスノード....................................................116リモートユーザストア...............................................................139履歴情報................................................................................153履歴テーブル.........................................................................158ルール...............................................................................47,184例外処理..................................................................................38ログアウト...........................................................................41,138ログイン..............................................................................41,138ローカルグループ管理..........................................................140ローカルグループストア.........................................................140ローカルユーザ管理..............................................................140ローカルユーザストア.............................................................139ロール.....................................................................................184ロールアクション..................................................................11,64

[わ]ワークアイテム...................................................................22,184ワークアイテム 活性.................................................................23ワークアイテム 完了.................................................................24ワークアイテム 拒否.................................................................24ワークアイテム 更新する........................................................151ワークアイテム 再割当てする................................................150ワークアイテム 実行する..........................................................56ワークアイテム 受理.................................................................23ワークアイテム 状態.................................................................23ワークアイテム 属性.................................................................22ワークアイテム 外向き矢印の取得..........................................81ワークアイテムの取戻し...........................................................56ワークアイテム 非活性.............................................................24ワークアイテム フィルタ............................................................55ワークアイテム フィルタの条件................................................55ワークアイテム モード...............................................................22ワークアイテム 読取り...............................................................23ワークアイテム リストを作成する...............................................55ワークフロー...........................................................................184ワークフローアプリケーション.................................................184ワークフローアプリケーションの操作.........................................8ワークフローエレメント..............................................................10ワークフロー 概要......................................................................1ワークフローサーバ................................................................184ワークリスト..............................................................................184ワークリストUDA..................................................................80,85

- 188 -