適格なワークフローを作成するには、アクティビティとフローパス追加のルールを理解する必要があります。ワークフローデータを操作する方法を理解する必要もあります。次のトピックを参照してください。
メモ:プロビジョニング要求定義は、展開前に検証することができます。詳細については、セクション 2.6, プロビジョニングオブジェクトの検証を参照してください。
ワークフローにアクティビティを追加するときに、次のルールに従います:
1つのワークフローには開始アクティビティと完了アクティビティをそれぞれ1つだけ設定できます。
1つのワークフローは次のアクティビティタイプを0個、またはそれ以上持つことができます。
各ブランチアクティビティには対応するマージアクティビティが必要です。
プロビジョニングのステップが実行されていることを確かめるために、ワークフローに少なくとも1つのエンタイトルメントアクティビティまたはエンティティアクティビティが必要です。
ワークフローにフローパスを追加するときには、次のルールに従います:
開始アクティビティ以外のすべてのアクティビティには、1つ以上の着信フローパスを設定できます。開始アクティビティには着信フローパスを設定できません。
完了アクティビティには発信フローパスを設定できません。
開始アクティビティに設定できる発信フローパスは1つだけです。フローパスのタイプは転送でなければなりません。
承認アクティビティには1つから5つまでの発信フローパスを設定できます。有効なフローパスのタイプは、承認、却下済み、拒否済み、タイムアウト、エラーです。ランタイム時には、1つのフローパスだけが実行されます。
エンタイトルメント、エンティティ、ログ、マージの各アクティビティに設定できる発信フローパスは1つだけです。フローパスのタイプは転送でなければなりません。
条件アクティビティには2つまたは3つの発信フローパスを設定できます。有効なフローパスのタイプは、True、False、エラーです。TrueとFalseのフローパスは必須で、エラーのフローパスはオプションです。
ブランチアクティビティには1つ以上の発信フローパスを設定できます。それぞれのフローパスのタイプは転送でなければなりません。ランタイム時には、すべてのフローパスが実行されます。
着信および発信フローパスをアクティビティに追加するときのルールを、次の表にまとめて示します。
表 4-3 各アクティビティに設定できるフローパスの数
ソースまたはターゲットとして設定できるアクティビティのタイプを、使用可能なフローパスタイプごとに、次の表にまとめて示します。
表 4-4 アクティビティで使用可能なフローパスタイプ
ワークフローの作成時には、プロビジョニングアプリケーションのニーズに合わせて、ワークフローデータを操作できます。
ワークフローでは、プロセスに関する情報を管理するために、1つのプロセスオブジェクトを使用します。ワークフロー内のアクティビティごとに別個のアクティビティオブジェクトが作成されて、ユーザとのやりとりを担う各アクティビティのフォームデータが保持されます。
フォーム上の各ユーザインタフェースコントロール(テキストフィールド、ドロップダウンリストなど)に関連付けられているデータオブジェクトは、対応するアクティビティ(開始アクティビティまたは承認アクティビティ)を実行する直前に変更することができます。アクティビティを実行した直後に、このデータを取得することもできます。制御が次のアクティビティに渡されると、フォームコントロールデータは使用できなくなります。そのため、ワークフローにはフローデータと呼ばれる特別なオブジェクトが用意されており、このオブジェクトを使用して独自のデータ項目を定義できるようになっています。このオブジェクトに独自の変数を追加して、フォームデータを含む、ワークフローにとって重要な情報が失われないように追跡することができます。
ワークフローデータのカテゴリを、次の表にまとめて示します。
表 4-5 ワークフローデータのカテゴリ
データオブジェクト |
使用期間 |
編集可能 |
作成者 |
---|---|---|---|
プロセス |
ワークフロー |
いいえ |
システム |
アクティビティ |
ワークフロー |
いいえ |
システム |
アクティビティフォーム |
アクティビティ |
はい |
システムおよびワークフロー設計者 |
フローデータ |
ワークフロー |
はい |
ワークフロー設計者 |
メモ:ワークフロー設計者とは、Designerでワークフローを作成するユーザのことです。
各オブジェクトタイプの変数を、次の表に示します。
表 4-6 ワークフロー内のデータ変数
これらのオブジェクトはECMAScript式で参照できます。ワークフローのスクリプト式は、フロー内でアップストリームにバインドされているデータ項目を常に参照できます。しかし、ワークフロー式はダウンストリームで作成されるデータ項目を参照できず(その時点で該当するデータ項目は存在しないため)、並行処理をサポートするフローで他のブランチにバインドされているデータも参照できません(このブランチが現在のアクティビティと同時に実行されている可能性があるため)。
開始または承認アクティビティの
タブに後動作ターゲット式を指定することにより、フローデータオブジェクトに新しいデータ項目を作成できます。 列に新しいデータ項目の名前を指定すると、変数が自動的に作成されます。その結果、このアクティビティの後に実行したアクティビティが新しいデータ項目にアクセスできるようになります。たとえば、
というフォームフィールドをターゲット式flowdata.myReasonにマップするとします。このとき変数myReasonは、ワークフロー内で後に実行されるすべてのアクティビティが使用できる新しいデータ項目になります。開始または承認アクティビティの
タブに前動作の式を指定することにより、データ項目を変更できます。たとえば、ドル記号を価格にプリペンドするために、次のソース式を というターゲットフォームフィールドにマップします。"$" + flowdata.get(’cost’)
フォームが表示されると、Priceデータが次のように示されます:
$xx.xx
別の例として、基本コストに税金を加えて総コストを計算します。そのためには、次のソース式を[TotalCost]というターゲットフォームフィールドにマップします:
Number(flowdata.get('cost')) + Number(flowdata.get('tax'))
フローデータオブジェクト内のすべてのデータはXML形式で保持されるため、データ項目を階層的に作成することもできます。たとえば、ユーザが買掛金勘定と売掛金勘定の2つの内部システムへのアクセスを要求できるワークフローフォームがあるとします。このフォームには、他のフィールドとともに
と という名前の2つのYes/Noフィールドがあります。後動作のデータ項目マッピングで、次のように2つのマッピングを作成できます。表 4-7 複雑なデータ項目マッピングの例
ソースフォームフィールド |
ターゲット式 |
---|---|
|
flowdata.SystemAccess/AcctPay |
|
flowdata.SystemAccess/AcctRec |
その結果、SystemAccessという名前のXML要素と、AcctPayおよびAcctRecという名前の2つの子要素が作成されます。このようにしてデータを構造化する1つの理由は、多くのフォームとデータ項目が含まれている複雑なワークフローで、データの編成と管理をよりわかりやすくすることにあります。この階層データからデータを取得するには、次の構文を使用します:
flowdata.get(’SystemAccess/AcctPay’).
ECMAScript式の作成の詳細については、「セクション 10.0, ECMA式の使用」を参照してください。
作成したフォームコントロール(DNの表示以外)はすべて自動的に、フォームを使用するアクティビティの
」タブの前動作、後動作の式で使用可能になります。たとえば、AACTIVITYのフォームAFORM上にあるコントロールACONTROLのユーザ入力データを後続のアクティビティで利用できるようにするとします。そのためには、ワークフローでAACTIVITYを選択し、 タブを選択し、 ラジオボタンをクリックします。それから、ソースフォームフィールドACONTROLの横に、次の形式でターゲット式を入力します:flowdata.my_ACONTROL
ワークフロー内の後続のすべてのアクティビティは、次のような前動作ソース式を使用して、このデータにアクセスできるようになります:
flowdata.get(’my_ACONTROL’)
flowdata.getObject(’my_ACONTROL’)
フローデータ値をフォームコントロールに移動することもできます。最もシンプルなケースは、単一のテキスト値をフォームコントロールに移動する場合です。前に示した例で、ACONTROLが1つのテキスト入力フィールドであるとします。この場合、このフィールドをZACTIVITYというアクティビティの別のテキスト入力フィールドに移動するには、ワークフローでZACTIVITYを選択し、
タブを選択し、 ラジオボタンをクリックします。それから、ターゲットフォームフィールドの横に、次のソース式を入力します:flowdata.my_ACONTROL
より複雑なフォームコントロールデータ(複数値DNコントロールなど)を別のフォームコントロールに移動するには、getObject()式構文を使用できます。たとえば、ACONTROLがMultiValue DNコントロールであれば、次のソース式を使用することができます:
flowdata.getObject(’my_ACONTROL’)
データをフォームコントロールに移動する場合には、タイプの制約に注意する必要があります。たとえば、テキストベースのデータを数値コントロールに移動しようとしたり、ブール値をDNコントロールに移動しようとしたりすべきではありません。