現在表示中:

ワークフローモデルは、各種タイプの一連のステップで構成されます。これらのステップを、それぞれのタイプに応じてパラメーターやスクリプトで設定および拡張し、必要な機能とコントロールを実現することができます。

ステップのプロパティ

各ステップコンポーネントには、必要なプロパティを定義および編集できるステップのプロパティダイアログがあります。

ステップのプロパティ - 「共通」タブ

大部分のワークフローステップコンポーネントでは、プロパティダイアログの「共通」タブで、次のプロパティを組み合わせて使用できます。

  • タイトル
    ステップのタイトル。
  • 説明
    ステップの説明。
  • タイムアウト
    ステップが「タイムアウト」するまでの期間です。
    オフ」、「」、「1 時間」、「6 時間」、「12 時間」、「24 時間」から選択できます。
  • タイムアウトハンドラー
    ステップがタイムアウトしたときにワークフローを制御するハンドラーです。例:
        com.day.cq.workflow.timeout.autoadvance.AutoAdvancer
  • ハンドラー処理の設定 
    実行後にワークフローを次のステップに自動的に進めるには、このオプションを選択します。選択しない場合、実装スクリプトでワークフローの進行を処理する必要があります。

ステップのプロパティ - 「ユーザー/グループ」タブ

多くのワークフローステップコンポーネントでは、プロパティダイアログの「ユーザー/グループ」タブで、次のプロパティを使用できます。

  • ユーザー / グループ
    • ドロップダウン選択ボックスを使用して、ユーザーやグループ間を移動し、選択することができます
    • 特定のユーザーにステップを割り当てた場合は、そのユーザーだけがステップのアクションを実行できます。
    • グループ全体にステップを割り当てた場合、ワークフローがこのステップに到達すると、グループのユーザーすべての「ワークフローの受信ボックス」にアクションが保持されます。
    • 詳しくは、ワークフローへの参加を参照してください。
  • 電子メール
    • ワークフローがステップに到達したときに、参加者に電子メールを送信して通知できます。
    • オン」に設定すると、「ユーザー / グループ」プロパティによって定義されたユーザー、またはグループが定義されている場合はグループの各メンバーに、電子メールが送信されます。

AND 分割

AND 分割は、ワークフロー内に分割を作成し、両方のブランチをアクティブにします。必要に応じて、各ブランチにワークフローステップを追加できます。このステップを使用して、ワークフローに複数の処理パスを導入できます。例えば、複数のレビューステップを並行して発生させ、時間を節約することができます。

AND 分割 - 設定

分割の設定手順

  • 次のタブを編集および使用します。

    • 共通
      • ブランチ:必要なブランチの数(2、3、4 または 5)を選択します。
  • 必要に応じて、各ブランチにワークフローステップを追加します。

コンテナステップ

コンテナステップは、子ワークフローとして実行される別のワークフローモデルを開始します。

このコンテナを使用すると、ワークフローモデルを再利用して、共通のステップシーケンスを実装できます。例えば、1 つの翻訳ワークフローモデルを複数の編集ワークフローで使用することができます。

コンテナステップ - 設定

このステップを設定するには、次のタブを編集および使用します。

  • 共通
  • コンテナ
    • サブワークフロー:開始するワークフローを選択します。

移動ステップ

移動ステップを使用すると、ワークフローモデル内で実行する次のステップを ECMAScript の結果に応じて指定できます。

  • true移動ステップが完了すると、ワークフローエンジンが指定のステップを実行します。
  • false移動ステップが完了すると、通常のルーティングロジックが次に実行するステップを決定します。

移動ステップを使用すると、ワークフローモデル内に詳細なルーティング構造を実装できます。例えば、ループを実装するには、ループ条件を評価するスクリプトを使用して、ワークフロー内の前のステップを実行するように移動ステップを定義します。

移動ステップ - 設定

このステップを設定するには、次のタブを編集および使用します。

  • 共通
  • プロセス
    • 移動先のステップ。:実行するステップを選択します。
    • スクリプトのパス移動ステップを実行するかどうかを判断する ECMAScript へのパス。
    • スクリプト移動ステップを実行するかどうかを判断する ECMAScript。

警告:

スクリプトのパス」または「スクリプト」のどちらかを指定してください。両方のオプションを同時に使用することはできません。両方のプロパティに値を指定した場合、このステップは「スクリプトのパス」を使用します。

ループのシミュレート

ループをシミュレートするには、発生したループの繰り返し回数を記録する必要があります。

  • この回数は、一般的に、アクションの対象となるワークフロー内の項目のインデックスを表します。
  • この回数がループの終了基準として評価されます。

例えば、複数の JCR ノードに対してアクションを実行するワークフローを実装するには、ループカウンターをノードのインデックスとして使用できます。回数を保持するには、ワークフローインスタンスのデータマップに integer 値を保存します。回数を増分したり、回数を終了基準と比較するには、移動ステップのスクリプトを使用します。

function check(){
   var count=0;
   var keyname="loopcount"
   try{
      if (workflowData.getMetaDataMap().containsKey(keyname)){ 
        log.info("goto script: found loopcount key");
        count= parseInt(workflowData.getMetaDataMap().get(keyname))+1;
      } 
 
     workflowData.getMetaDataMap().put(keyname,count);
 
     }catch(err) {
         log.info(err.message);
         return false;
    }
   if (parseInt(count) <7){
       return true;
   } else {
      return false;
   }
}

OR 分割

OR 分割は、ワークフロー内に分割を作成し、どちらか 1 つのブランチだけをアクティブにします。これを使用すると、ワークフローに条件付き処理パスを導入できます。必要に応じて、各ブランチにワークフローステップを追加できます。

OR 分割 - 設定

分割の設定手順

  • 次のタブを編集および使用します。

    • 共通
      • ブランチ:必要なブランチの数(2、3、4 または 5)を選択します。
    • ブランチ <x>
      • スクリプトのパス:スクリプトが格納されたファイルへのパス。
      • スクリプト:スクリプトをボックス内に追加します。
      • デフォルトのルート:分割内のどのブランチにもスクリプトが定義されていない場合、またはどのスクリプトも満たされない場合は、デフォルトのブランチに進みます。デフォルトとして指定できるブランチは 1 つだけです。

    注意:

    ブランチごとに別個のタブがあります。

    • 各ブランチのスクリプトは一度に 1 つずつ評価されます。 
      • ブランチの番号によって、評価される順序が決定されます。
    • true に評価された最初のスクリプトが実行されます。
      • true に評価されたスクリプトがない場合、デフォルトのブランチに進みます。

    警告:

    スクリプトのパス」または「スクリプト」のどちらかを指定してください。両方のオプションを同時に使用することはできません。両方のプロパティに値を指定した場合、このステップは「スクリプトのパス」を使用します。

    注意:

    OR 分割用のルールの定義を参照してください。

  • 必要に応じて、各ブランチにワークフローステップを追加します。

参加者ステップと参加者選択

参加者ステップ

参加者ステップでは、特定のアクションの所有者を割り当てることができます。ワークフローは、ユーザーが手動でステップを承認した場合にのみ続行します。こうした動作は、任意のユーザーに対してワークフロー上のアクション(ステップのレビューなど)を実行させる必要がある場合に利用されます。

余談になりますが、アクションを割り当てる際には、ユーザー認証を考慮する必要があります。ユーザーは、ワークフローのペイロードであるページにアクセスする必要があるからです。

参加者ステップ - 設定

このステップを設定するには、次のタブを編集および使用します。

注意:

次の場合、ワークフロー開始者には常に通知が送信されます。

  • ワークフローが完了(終了)した場合。
  • ワークフローが中止(中断)された場合。

注意:

一部のプロパティでは、電子メール通知を有効にするように設定する必要があります。電子メールテンプレートをカスタマイズしたり、新しい言語用の電子メールテンプレートを追加することもできます。AEM で電子メール通知を設定するには、電子メール通知の設定を参照してください。

ダイアログ参加者ステップ

ダイアログ参加者ステップは、作業項目を割り当てられたユーザーから情報を収集するために使用します。このステップは、ワークフロー内で後で使用する少量のデータを収集するのに役立ちます。

ステップの完了時、作業項目を完了ダイアログには、ダイアログで定義したフィールドが表示されます。各フィールドで収集されたデータは、ワークフローペイロードのノードに保存されます。後続のワークフローステップは、この値をリポジトリから読み取ることができます。

このステップを設定するには、作業項目を割り当てるユーザーまたはグループ、およびダイアログへのパスを指定します。

ダイアログ参加者ステップ - 設定

このステップを設定するには、次のタブを編集および使用します。

ダイアログ参加者ステップ - ダイアログの作成

ダイアログを作成するには、以下を実行する必要があります。

ダイアログ参加者ステップ - ペイロードにデータを保存

ウィジェットデータは、ワークフローペイロードまたは作業項目のメタデータに保存できます。widget ノードの name プロパティの形式によって、データの保存場所が決定されます。

  • データをペイロードと共に保存
    • ウィジェットデータをワークフローペイロードのプロパティとして保存するには、widget ノードの name プロパティの値に次の形式を使用します。
          ./jcr:content/nodename
    • データは、ペイロードのノードの nodename プロパティに保存されます。ノードにこのプロパティが含まれていない場合は、プロパティが作成されます。
    • ペイロードと共に保存した場合は、後で同じペイロードを持つダイアログを使用したときに、プロパティの値が上書きされます。
  • データを作業項目と共に保存
    • ウィジェットデータを作業項目のメタデータのプロパティとして保存するには、name プロパティの値に次の形式を使用します。
          nodename
    • データは、作業項目のメタデータnodename プロパティに保存されます。この場合は、同じペイロードを持つダイアログを使用しても、データは保存されます。

ダイアログ参加者ステップ - タッチ操作向け UI

  1. ダイアログ構造

    ダイアログ参加者ステップのダイアログは、コンポーネントのオーサリング用に作成するダイアログと似ています。ダイアログは、次の場所に保存されます。

    /etc/workflows/dialogs

    タッチ操作向け UI 用ダイアログは、次のノード構造を持ちます。

    newComponent (cq:Component)
      |- cq:dialog (nt:unstructured)
        |- content 
          |- layout 
            |- items 
              |- column 
                |- items 
                  |- component0
                  |- component1
                  |- ...

    注意:

    詳しくは、タッチ操作向け UI 用ダイアログの作成と設定を参照してください。

  2. ダイアログパスのプロパティ

    ダイアログ参加者ステップには、ダイアログパスのプロパティ(および参加者ステップのプロパティ)があります。ダイアログパスのプロパティの値は、ダイアログの dialog ノードへのパスです。

    例えば、ダイアログが /etc/workflows/dialogs ノードに保存されている EmailWatch というコンポーネントに含まれるとします。タッチ操作向け UI の場合、ダイアログパスのプロパティには次の値を使用します。

    /etc/workflow/dialogs/EmailWatch/cq:dialog

  3. ダイアログ定義の例

    次の XML コードスニペットは、ペイロードコンテンツの watchEmail ノードに String 値を保存するダイアログを表しています。title ノードは、TextField コンポーネントを表します。

    jcr:primaryType="nt:unstructured" 
        jcr:title="Watcher Email Address Dialog" 
        sling:resourceType="cq/gui/components/authoring/dialog">
        <content jcr:primaryType="nt:unstructured"
            sling:resourceType="granite/ui/components/foundation/container">
            <layout jcr:primaryType="nt:unstructured" 
                margin="false" 
                sling:resourceType="granite/ui/components/foundation/layouts/fixedcolumns"
            />
            <items jcr:primaryType="nt:unstructured">
                <column jcr:primaryType="nt:unstructured"
                    sling:resourceType="granite/ui/components/foundation/container">
                    <items jcr:primaryType="nt:unstructured">
                        <title jcr:primaryType="nt:unstructured" 
                            fieldLabel="Notification Email Address" 
                            name="./jcr:content/watchEmails"
                            sling:resourceType="granite/ui/components/foundation/form/textfield"
                        />
                    </items>
                </column>
            </items>
        </content>
    </cq:dialog>

    タッチ操作向け UI の場合、この例は次のようなダイアログになります。

ダイアログ参加者ステップ - クラシック UI

  1. ダイアログ構造

    ダイアログ参加者ステップのダイアログは、コンポーネントのオーサリング用に作成するダイアログと似ています。ダイアログは、次の場所に保存されます。

    /etc/workflows/dialogs

    クラシック UI 用ダイアログは、次のノード構造を持ちます。

    newComponent
      |- dialog
        |- items
          |- widget0
          |- widget1
          |- ...

    ノードの説明を以下の表に示します。

    ノード名 jcr:PrimaryType 説明
    dialog cq:Dialog

    ダイアログのルートノード。

    このノードには、値が dialogxtype という名前の String プロパティが必要です。

    アイテム cq:WidgetCollection dialog ノードの子ノードです。
    field_name cq:Widget

    ダイアログに表示される 1 つ以上の UI ウィジェット。これらのノードには任意の有効な JCR 名を使用できます。各ノードには、次のプロパティが必要です。

    • xtypeウィジェットのタイプを決定する String 値。詳しくは、ウィジェット API のリファレンスを参照してください。
    • nameウィジェットデータを保存するノードのパスを表す String 値。

    注意:

    詳しくは、クラシック UI 用ダイアログの作成と設定を参照してください。

  2. ダイアログパスのプロパティ

    ダイアログ参加者ステップには、ダイアログパスのプロパティ(および参加者ステップのプロパティ)があります。ダイアログパスのプロパティの値は、ダイアログの dialog ノードへのパスです。

    例えば、ダイアログが /etc/workflows/dialogs ノードに保存されている EmailWatch というコンポーネントに含まれるとします。クラシック UI の場合、ダイアログパスのプロパティには次の値を使用します。

    /etc/workflow/dialogs/EmailWatch/dialog

  3. ダイアログ定義の例

    次の XML コードスニペットは、ペイロードコンテンツの watchEmail ノードに String 値を保存するダイアログを表しています。title ノードは、textfield ウィジェットを表します。

    jcr:primaryType="cq:Dialog" 
        title="Watcher Email Address Dialog" 
        xtype="dialog">
        <items 
            jcr:primaryType="cq:WidgetCollection">
            <title 
                jcr:primaryType="cq:Widget" 
                fieldLabel="Notification Email Address" 
                name="./jcr:content/watchEmails" 
                xtype="textfield"
            />
        </items>
    </dialog>

    クラシック UI の場合、この例は次のようなダイアログになります。

動的参加者ステップ

動的参加者ステップコンポーネントは参加者ステップに似ていますが、参加者が実行時に自動的に選択される点が異なります。

このステップを設定するには、ダイアログと、作業項目を割り当てる参加者を識別する参加者選択を選択します。

動的参加者ステップ - 設定

このステップを設定するには、次のタブを編集および使用します。

動的参加者ステップ - 参加者選択の作成

参加者選択を作成します。そのために、あらゆる選択ロジックまたは選択条件を使用できます。例えば、参加者選択を使用して、(グループ内で)最も作業項目が少ないユーザーを選択できます。任意の数の参加者選択を作成して、ワークフローモデル内の動的参加者ステップコンポーネントの異なるインスタンスで使用できます。

作業項目を割り当てるユーザーを選択する OSGi サービスまたは ECMAScript を作成します。

  • ECMAScript

    スクリプトには、ユーザー ID を String 値として返す、getParticipant という関数を含める必要があります。スクリプトを /etc/workflow/scripts フォルダーまたはサブフォルダーに保存します。

    標準 AEM インスタンスには、次のサンプルスクリプトが付属しています。

    /etc/workflow/scripts/initiator-participant-chooser.ecma

    このスクリプトは、ワークフロー開始者を参加者として選択します。

    function getParticipant() {
        return workItem.getWorkflow().getInitiator();
    }

    注意:

    ワークフローイニシエーター参加者選択コンポーネントは、動的参加者ステップを拡張し、このスクリプトをステップ実装として使用します。

  • OSGi サービス

    サービスは、com.day.cq.workflow.exec.ParticipantStepChooser インターフェイスを実装する必要があります。このインターフェイスは、次の構成要素を定義します。

    • SERVICE_PROPERTY_LABEL フィールド:このフィールドを使用して、参加者選択の名前を指定します。この名前が、動的参加者ステップのプロパティで使用可能な参加者選択のリストに表示されます。
    • getParticipant メソッド:ユーザー ID を String 値として返します。

    動的参加者ステップコンポーネントに対して実装を使用可能にするには、サービスを書き出す OSGi バンドルに Java クラスを追加し、バンドルを AEM サーバーにデプロイします。

動的参加者ステップ - 参加者選択サービスの例

次の Java クラスは、ParticipantStepChooser インターフェイスを実装します。このクラスは、ワークフローを開始した参加者の名前を返します。このコードでは、サンプルスクリプト(initator-participant-chooser.ecma)と同じロジックを使用しています。

@Property アノテーションは、SERVICE_PROPERTY_LABEL フィールドの値を「ワークフローイニシエーター参加者選択」に設定します。

package com.adobe.example;

import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Service;
import org.osgi.framework.Constants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.day.cq.workflow.WorkflowException;
import com.day.cq.workflow.WorkflowSession;
import com.day.cq.workflow.exec.ParticipantStepChooser;
import com.day.cq.workflow.exec.WorkItem;
import com.day.cq.workflow.metadata.MetaDataMap;

@Component
@Service
@Properties({
        @Property(name = Constants.SERVICE_DESCRIPTION, value = "An example implementation of a dynamic participant chooser."),
        @Property(name = ParticipantStepChooser.SERVICE_PROPERTY_LABEL, value = "Workflow Initiator Participant Chooser") })
public class InitiatorParticipantChooser implements ParticipantStepChooser {

	private Logger logger = LoggerFactory.getLogger(this.getClass());

	public String getParticipant(WorkItem arg0, WorkflowSession arg1,
			MetaDataMap arg2) throws WorkflowException {

		String initiator = arg0.getWorkflow().getInitiator();
		logger.info("Assigning Dynamic Participant Step work item to {}",initiator);

		return initiator;
	}
}

動的参加者ステップのプロパティのダイアログで、参加者選択にこのサービスを表す「ワークフローイニシエーター参加者選択」項目が表示されるようになります。

ワークフローモデルが開始されると、ワークフローを開始し、作業項目が割り当てられたユーザーの ID がログに記録されます。この例では、admin ユーザーがワークフローを開始しています。

13.09.2015 15:48:53.037 *INFO* [10.176.129.223 [1347565733037] POST /etc/workflow/instances HTTP/1.1] com.adobe.example.InitiatorParticipantChooser Assigning Dynamic Participant Step work item to admin

フォーム参加者ステップ

フォーム参加者ステップは、作業項目が開かれるとフォームを表示します。ユーザーがフォームに入力して送信すると、フィールドデータがワークフローペイロードのノードに保存されます。

このステップを設定するには、作業項目を割り当てるユーザーまたはグループ、およびフォームへのパスを指定します。

フォーム参加者ステップ - 設定

このステップを設定するには、次のタブを編集および使用します。

注意:

フォームとワークフローを使用したデータの収集」チュートリアルでは、フォーム参加者ステップと関連フォームを使用するワークフローの作成について、順を追って説明します。

フォーム参加者ステップ - フォームの作成

通常どおり、フォーム参加者ステップで使用するフォームを作成します。ただし、フォーム参加者ステップ用のフォームには、次の設定が必要です。

  • フォームの最初コンポーネントでは、アクションタイププロパティを「ワークフロー制御リソースを編集」に設定する必要があります。
  • フォームの最初コンポーネントでは、フォーム識別子プロパティに値が必要です。
  • フォームコンポーネントでは、エレメント名プロパティを、フィールドデータを保存するノードのパスに設定する必要があります。パスは、ワークフローペイロードコンテンツ内のノードを指す必要があります。値には次の形式を使用します。

    ./jcr:content/path_to_node

  • フォームには、ワークフロー送信ボタンコンポーネントを含める必要があります。このコンポーネントのプロパティは一切設定しないでください。

ワークフローの要件によって、フィールドデータを保存する場所が決定されます。例えば、フィールドデータを使用して、ページコンテンツのプロパティを設定できます。次の値を持つエレメント名プロパティは、フィールドデータを jcr:content ノードの redirectTarget プロパティの値として保存します。

./jcr:content/redirectTarget

次の例では、フィールドデータはペイロードページのテキストコンポーネントのコンテンツとして使用されます。

./jcr:content/par/text_3/text に設定します。

最初の例は、cq:Page コンポーネントがレンダリングする、あらゆるページに使用できます。2 番目の例は、ペイロードページに「text_3」という ID を持つテキストコンポーネントが含まれる場合にのみ使用できます。

フォームは、リポジトリ内のどこにでも配置できますが、ワークフローユーザーにはフォームを読み取るための権限が必要です。

注意:

フォームの作成については、フォームの作成を参照してください。使用可能なフォームコンポーネントについては、ページオーサリング用コンポーネント - フォームセクションを参照してください。

ランダム参加者選択

ランダム参加者選択ステップは、生成された作業項目をリストからランダムに選択されたユーザーに割り当てる参加者選択です。

ランダム参加者選択 - 設定

このステップを設定するには、次のタブを編集および使用します。

  • 共通
  • 引数
    • 参加者:選択に使用できるユーザーのリストを指定します。ユーザーをリストに追加するには、「項目を追加」をクリックし、ユーザーノードのホームパスまたはユーザー ID を入力します。ユーザーの順序は、作業項目が割り当てられる可能性に影響を与えません。

ワークフローイニシエーター参加者選択

ワークフローイニシエーター参加者選択ステップは、生成された作業項目を、そのワークフローを開始したユーザーに割り当てる参加者選択です。共通プロパティ以外に、設定するプロパティはありません。

ワークフローイニシエーター参加者選択 - 設定

このステップを設定するには、次のタブを編集および使用します。

  • 共通
  • 引数
    • 使用可能な引数がありません。

プロセスステップ

プロセスステップは、自動処理を実行する ECMAScript を実行するか、OSGi サービスを呼び出します。

プロセスステップ - 設定

このステップを設定するには、次のタブを編集および使用します。

  • 共通
  • プロセス
    • プロセス:実行するプロセス実装。ドロップダウンメニューを使用して、ECMAScript または OSGi サービスを選択します。参考情報:
    • ハンドラー処理の設定:実行後にワークフローを次のステップに自動的に進めるには、このオプションを選択します。選択しない場合、実装スクリプトでワークフローの進行を処理する必要があります。
    • 引数:プロセスに渡される引数。

本作品は Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

法律上の注意   |   プライバシーポリシー