11 May 2009
ページ ツール |
中級
本稿は、LiveCycle ES の統合開発環境 LiveCycle Workbench ES を使用した、直感的かつ効率的な SOA 開発を体験するためのチュートリアルです。後編ではいよいよLiveCycle Workbench ESでプロセスの構築作業を行います。
前編をまだご覧になっていない場合は、前編からお読みください。
※本記事よりダウンロード可能なサンプルプロセスファイル(LCAファイル)は、本記事の学習用に限定してご利用いただけます。無許可での再配布などは許諾されておりませんので、ご留意ください。
では、プロセスを定義します。
| 項目名 | 入力(設定)値 | この項目に関する説明 |
|---|---|---|
| Name: | Expense Report | ・プロセス名です。 |
| Category: | Category: | ・プロセスを論理的にまとめるためのカテゴリです。 ・[New]ボタンをクリックし、「New Process Category」ダイアログで文字列を入力します。元の画面に戻ると、入力したカテゴリ名が選択された状態になります。 |
プロセスを作成するときのウィザードで、「Meta-data」の「Type:」という箇所がありました。ここでは、主にプロセスの特性を定義します。値は2つあり、[long-lived]がワークフローのようなプロセスの途中で人の手が介在するようなプロセスの場合、[short-lived]が人の手が介在しない全自動で処理が行われるプロセスの場合です。今回の場合は、[long-lived]となります。
ウィザード終了後、[Processes]ビューに作成したカテゴリやプロセスなどが表示されます。それぞれは、「プロセスカテゴリ」、「プロセス」、そして「プロセスバージョン」と呼ばれるものです。
| 項目名 | 今回の値 | この項目に関する説明 |
|---|---|---|
| プロセスカテゴリ | LiveCycle First Step | ・プロセスを論理的にまとめるフォルダです。 ・プロセスの動作には関与しません。 |
| プロセス | Expense Report | ・プロセスそのものを表します。 ・プロセス配下には複数のプロセスバージョンを定義することができます。 ・プロセスの中身である処理は、次のプロセスバージョンに作成していきます。 |
| プロセスバージョン | Expense Report:1.0 | ・プロセスの処理を実装するところです。 ・アクティベートすると、サービスとなります。 ・バージョン番号が付与され、デフォルトでは1.0です。 ・既存のバージョンを元にして、新規のプロセスバージョンを定義することなどが可能です。 |
(※1)プロセスバージョンを閉じてから編集目的で再び開くときには、プロセスバージョンを右クリックし、表示されるコンテキストメニューから[Edit]を選択して開いてください。プロセスバージョンをダブルクリックして開くと編集することができません。
プロセス変数は、プロセス中で使用する変数です。
ここで、プロセスとプロセス変数のスコープの関係について説明します。
後述のWorkspace ESなどのユーザークライアントやSOAPリクエストなどによって外部からプロセスが呼び出されたとき、呼び出される毎に一連のプロセス処理の実態であるプロセスインスタンスが生成され、一意のIDが自動的に付与されます。プロセス変数のスコープは、そのプロセスインスタンス内となります。(※2)
プロセス変数は、おなじみの数値や文字列といったリテラル型などを含めて80種類以上の豊富な型があります。
プロセス変数の中でも、フォームのデータを格納する変数をフォーム変数と呼ぶことがあります。たとえば、ユーザーがフォームに入力した値をプロセスの中で何らかの処理を行いたい、という場合にはこれを利用する必要があります。
フォーム変数はいくつかありますが、今回はxfaFormを利用します。(※3)
| フォーム名 | Name: | Process variable | ||
|---|---|---|---|---|
| Input | SOutput | Required | ||
| ExpenseNotify.pdf | exp_notify | (チェックなし) | (チェックなし) | (チェックなし) |
| ExpenseReview.pdf | exp_review | (チェックなし) | (チェックなし) | (チェックなし) |
通常、新規にプロセス変数を定義する場合は、[Variables]ビュー右上にある[+]マークをクリックし、「Variable」ダイアログを開いた上で行います。しかし、フォーム変数の場合は、[Variables]ビューにドラッグ&ドロップすれば、変数型やテンプレートが自動的に設定されるので便利です。
exp_report変数のみ、「Process variable」で[Input]および[Required]にチェックを入れました。これは、プロセス開始時(呼び出されたときに)、プロセスへの必須の入力値である、という意味です。今回のシナリオでは、Alex Pinkさんが入力する経費申請用フォームExpenseReport.pdfのデータがこれに相当します。
ちなみに[Output]は、プロセス完了時に返される値であることを示します。
(※2)プロセスに対する入力値と、プロセス処理後の出力値が必要な場合があります。この設定は、プロセス変数のオプションで行います。「Variable」の設定項目に関する詳細は、こちらを参照してください
(※3)xfaFormフォームの詳細については、こちらを参照ください。
サービスは、実際の機能を提供するものです。サービスとなりうるものは、以下の2つです。
これを踏まえて以下の図をご覧ください。使用できるサービスの一覧を表示する[Services]ビューです。(※5)
[Reader Extensions-1.0]や[Rights Management-1.0]は、ソリューションコンポーネントのサービスです。
また、[Expense Repoert-1.0]は、今構築しているプロセス(プロセスバージョン)になります。自作しているプロセスは、後述のアクティベートという操作を行うことでサービスとなります。
サービスであると、以下のことができます。
この時点で、ソリューションコンポーネントも、自作したプロセスも取り扱い方が同じになるというところをご注目ください。
実際には、サービスそのものを呼び出すのではなく、サービスに所属する操作というものを呼び出します。操作には、実際の処理の振る舞いが記述されています。図6では[Rights Management – 1.0]サービス配下の[Apply policy]や[Create policy from template]などが相当します。[Expense Repoert-1.0]においては、[invoke]が相当します。
サービスと操作は、オブジェクト指向のクラスとメソッドに相当すると考えるとわかりやすいと思います。(※7)
では、次の手順でプロセス内に操作を配置していきます。
| Name: | 選択するサービスと操作 | |
|---|---|---|
| Service | Operation | |
| マネージャーレビュー | User – 1.0 | Assign Task |
| 申請用フォームへのマッピング | Set Value – 1.0 | execute |
| 申請者にフォームを戻す | User – 1.0 | Assign Task |
| 承認通知用フォームへのマッピング | Set Value – 1.0 | execute |
| 申請者に承認通知 | User – 1.0 | Assign Task |
(※5)[Services]ビューはデフォルトでは表示されていません。表示するには、メニュー[Windows]→[Show View] → [Services]を選択します。また、今回の図で表示されている[Reader Extensions]や[Rights Management]ソリューションコンポーネントは、前編の手順に沿ってインストール作業を行った場合は表示されません。表示したい場合は、Configuration Managerのソリューションコンポーネントのデプロイ画面で追加する必要があります。
(※6)実際には後述のエンドポイントの設定も必要となります。
(※7)LiveCycle ESでのプログラミングをご覧いただくと、例えがそのままであることがおわかりいただけると思います。
(※8)プロセスを構成するためのモデリングエレメンツと呼ばれるものの1つです。[Modeling Elements]ビュー(デフォルトでは非表示)にも存在し、そこからドラッグ&ドロップすることでも可能ですが、手順に示す操作方法が簡潔です。
(※9)開始アクティビティが存在しないプロセスは正常に開始されません。別のアクティビティを開始アクティビティにする場合は、右クリックし表示されるコンテキストメニューから[Set Start Activity]を選択します。
個々のアクティビティをルートで連結します。
ルートとは、プロセス内の処理の手順を表すものです。
また、1つのアクティビティから複数のルートが存在する場合、どのルートを経由するかを判断する分岐条件を設定することもできます。
手順(6)でルートプロパティを設定しました。今回は設定しませんが、[Conditions]カテゴリで、ルートの分岐条件を設定することができます。ルートの条件は、プロセス変数や比較演算子を利用した一般的な記述式で指定することができます。
各アクティビティのプロパティの設定を行います。それぞれのプロパティの意味については、細かい話題となりますので、後述のリンクで参照してください。
| カテゴリ | 項目名 | 入力(設定)値 | この項目に関する説明 |
|---|---|---|---|
| Initial User Selection | Select Initial User | [Assign to specific user]を選択し、Tony Blueを指定。 | ・タスクを渡すユーザーを指定します。 ・[Browse]ボタンをクリックすると表示される「Selected user」ダイアログでユーザーを検索し、指定します。 |
| Task Instructions | Task Instructions | [templete]を指定し、XPath式を指定。(※10) | ・タスクを渡されたユーザーのクライアントアプリケーションなどに表示する説明や指示事項に関する文字列を指定します。 ・XPath式を使用してプロセス変数と文字列を連結したものを表示することができます。 |
| Form Data Mappings | Input form variable | /process_data/exp_review | ・ユーザーに表示するフォーム変数を指定します。 ・右隣の[…]ボタンをクリックし、表示されるXPath Builder(※11)で設定します。 |
| Output form variable | /process_data/exp_review | ・ユーザーが入力したフォームのデータを渡すフォーム変数を指定します。 ・指定方法はInput form variableと同様です。 |
|
| Routes and Priority | Initialize task with route names および User must select a route to complete this task |
両方ともチェック | ・ユーザーがタスクを完了し、ルートを選択するためのオプションを指定します。 |
(※10)今回は、サンプルファイル中に「入力用テキスト.txt」という名前で入力する文字列を記載しておきましたので、そちらの文字列をコピー&ペーストしてください。
(※11)プロセス変数はXPath式で参照することができます。XPath Builderは、XPath式を記述する際、GUIで式を生成し設定できるツールです。
XPath Builder画面上部で、プロセス変数がツリーで一覧表示されます。必要に応じてツリーをたどり、要素をダブルクリックすると、画面中央部分にXPath式が自動生成されます。
| カテゴリ | 項目名 | 入力(設定)値 |
|---|---|---|
| Initial User Selection | Select Initial User | [Assign to process creator]を選択。 |
| Task Instructions | Task Instructions | [literal value]を指定し、「あなたの申請は拒否されました!」と文字列で指定。 |
| Form Data Mappings | Input form variable | /process_data/exp_report |
| Output form variable | /process_data/exp_report |
| カテゴリ | 項目名 | 入力(設定)値 |
|---|---|---|
| Initial User Selection | Select Initial User | [Assign to process creator]を選択。 |
| Task Instructions | Task Instructions | [literal value]を指定し、「あなたの申請は無事承認されました!」と文字列で指定。 |
| Form Data Mappings | Input form variable | /process_data/exp_notify |
| 項目名 | 入力(設定)値 |
|---|---|
| [location] | /process_data/exp_review/object/data/xdp/datasets/data |
| [expression] | /process_data/exp_report/object/data/xdp/datasets/data |
| 項目名 | 入力(設定)値 |
|---|---|
| [location] | /process_data/exp_report/object/data/xdp/datasets/data |
| [expression] | /process_data/exp_review/object/data/xdp/datasets/data |
| 項目名 | 入力(設定)値 |
|---|---|
| [location] | /process_data/exp_notify/object/data/xdp/datasets/data |
| [expression] | /process_data/exp_review/object/data/xdp/datasets/data |
ここまで構築したプロセスをアクティベートすることによりサービスとして扱えるようにし、外部から呼び出せる状態にします。
操作手順
エンドポイントとは
サービスを呼び出すための設定です。様々なITインフラストラクチャーに対応する呼び出し方法を設定することができます。以下に設定できるエンドポイントの種類を列挙します。
| エンドポイント名 | 説明 |
|---|---|
| EJB | EJB |
| SOAP | SOAPリクエストでサービスを呼び出すことができます。 http:// [LiveCycle ES サーバ] : [ポート番号] / soap / services / [サービス名] ? wsdlにアクセスすると、動的にWSDLが生成され、LiveCycleのサービスの操作をSOAPのオペレーションとして呼び出すことができます。 |
| Remoting | Flex アプリケーションからAMFリクエストで呼び出すことができます。 |
| Task Manager | プロセス参加を目的としたRIAである Workspace ES から呼び出すことができます。 |
| LiveCycleサーバから監視するPOP/IMAPサーバのメール受信をトリガにして呼び出すことができます。 | |
| WatchedFolder | LiveCycleサーバ上のフォルダを監視し、そのフォルダに任意または特定のファイルが配置された時点で呼び出すことができます。 |
操作手順
| 項目名 | 今回の値 | この項目に関する説明 |
|---|---|---|
| 名前: | 経費精算 | ・エンドポイントの名前です。 ・後述のWorkspace ES上では、プロセスカードの上部に表示される文字列となります。 |
| 説明: および Task Instructions: |
経費申請を行います。 | ・ユーザーに表示したときのタスクに関する説明や指示事項を指定する文字列です。 ・後述のWorkspace ESでは、プロセスカードに表示される文字列となります。 |
| カテゴリ名: | 申請関連 | ・プロセスの論理的に分類するカテゴリです。 ・後述のWorkspace ESでは、画面左側のツリーとして表宇治されます。 |
| 操作名: | Invokeを選択 | ・呼び出すサービスの操作を指定します。 |
この操作での注目点
ユーザーがプロセスに参加するためのRIAです。
今回はそのまま使用いたしますが、Flex Builderを使用してカスタマイズすることもできますし、それに相当するアプリケーションをイチから開発することもできます。
今回は、シンプルなプロセスを構築してみました。