Show Menu
トピック×

ワークフローステップのリファレンス

ワークフローモデルは、各種タイプの一連のステップで構成されます。これらのステップを、それぞれのタイプに応じてパラメーターやスクリプトで設定および拡張し、必要な機能とコントロールを実現することができます。
この節では、標準ワークフローのステップについて説明します。
モジュール固有のステップについては、次の資料も参照してください。

ステップのプロパティ

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

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

大部分のワークフローステップコンポーネントでは、プロパティダイアログの「 共通 」タブで、次のプロパティを組み合わせて使用できます。
  • タイトル ​ステップのタイトル。
  • 説明 ​ステップの説明。
  • ワークフローステージ
    A drop down selector to apply a Stage to the step.
  • タイムアウト
    ステップが「タイムアウト」になるまでの期間。 You can select between: Off , Immediate , 1h , 6h , 12h , 24h .
  • タイムアウトハンドラー
    ステップがタイムアウトしたときにワークフローを制御するハンドラ。例: Auto Advancer
  • ハンドラー処理の設定
    実行後にワークフローを次の手順に自動的に進めるには、このオプションを選択します。 選択しない場合、実装スクリプトでワークフローの進行を処理する必要があります。

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

多くのワークフローステップコンポーネントでは、プロパティダイアログの「 ユーザー/グループ 」タブで、次のプロパティを使用できます。
  • 電子メールでユーザーに通知します
    • ワークフローがステップに到達したときに、参加者に電子メールを送信して通知できます。
    • 有効にすると、 User/Group プロパティによって定義されたユーザーに、またはグループが定義されている場合はグループの各メンバーに、電子メールが送信されます。
  • ユーザー / グループ
    • ドロップダウン選択ボックスを使用して、ユーザーやグループ間を移動し、選択することができます
    • 特定のユーザーにステップを割り当てた場合は、そのユーザーだけがステップのアクションを実行できます。
    • If you assign the step to an entire group, then when the workflow reaches this step all users in this group will have the action in their Workflow Inbox .
    • 詳しくは、 ワークフローへの参加 を参照してください。

AND 分割

The AND Split creates a split in the workflow, after which both branches will be active. 必要に応じて、各ブランチにワークフローステップを追加できます。このステップを使用して、ワークフローに複数の処理パスを導入できます。例えば、複数のレビューステップを並列で発生させ、時間を節約することができます。

AND 分割 - 設定

分割の設定手順
  • AND 分割のプロパティ ​を編集します。
    • 名前を分割 :わかりやすい名前を割り当てます。
    • 必要なブランチの数(2、3、4 または 5)を選択します。
  • 必要に応じて、各ブランチにワークフローステップを追加します。

コンテナステップ

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

コンテナステップ - 設定

このステップを設定するには、次のタブを編集および使用します。
  • コンテナ
    • サブワークフロー :開始するワークフローを選択します。

移動ステップ

Goto Step 」では、ワークフローモデルで次に実行する手順を指定できます。 ワークフローモデルの次の手順を評価するルーティング式として、ルール定義、外部スクリプトまたはECMAスクリプトを指定できます。
  • 指定した条件がtrueの場合、 Goto Step (後進ステップ)が完了し、ワークフローエンジンは指定したステップを実行します。
  • 指定した条件がtrueを保持しない場合、 Gotoステップが完了し 、通常のルーティングロジックによって次に実行するステップが決定されます。
移動ステップ ​を使用すると、ワークフローモデル内に詳細なルーティング構造を実装できます。For example, to implement a loop, the Goto Step can be defined to execute a prior step in the workflow, with the routing expression evaluating a loop condition.

移動ステップ - 設定

このステップを設定するには、次のタブを編集および使用します。
  • プロセス
    • ターゲットステップ :ルーティング式の条件を評価した後に実行するステップを選択します。
    • ルーティング式 :「ルール定義」、「外部スクリプト」または Target手順を実行するかどうかを決定するECMAスクリプトを選択します
      • ​ルールの定義:式エディター を使用して 、ルールを定義します。
      • ​外部スクリプト:外部スクリプトのパス。
      • ECMA Script :Gotoステップを実行するかどうかを決定するス クリプト

ループのシミュレート

ループをシミュレートするには、発生したループの繰り返し回数を記録する必要があります。
  • この回数は、一般的に、アクションの対象となるワークフロー内の項目のインデックスを表します。
  • この回数がループの終了基準として評価されます。
例えば、複数の 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;
   }
}

ルール定義を使用したforループのシミュレーション

ルーティング式として「ルール定義」(Rule Definition)を使用して、forループをシミュレートすることもできます。 Longデータ型 count変数を作成します。 Variable stepのマッピングとして、 Variable ​stepの値を設定し、Count variable ​countの値を設定し、Set ​Variable Set Stepの各実行を設定します。
Step 」で、「 Set Variable 」を「 Target Step 」として使用し、「 ​5 goto」をルーティング式としてカウントします。
Set Variable 」ステップは、実行のたびに count 変数の値を1ずつ増分し、値が5に達するまで繰り返し実行します。

OR 分割

OR 分割 ​は、ワークフロー内に分割を作成し、どちらか 1 つのブランチだけをアクティブにします。これを使用すると、ワークフローに条件付き処理パスを導入できます。必要に応じて、各ブランチにワークフローステップを追加できます。
OR分割の作成について詳しくは、次を参照してください。https://helpx.adobe.com/jp/experience-manager/using/aem64_workflow_servlet.html aem64_workflow_servlet.html

OR 分割 - 設定

分割の設定手順
  • OR 分割のプロパティ ​を編集します。
    • 共通
      • 分割名を指定します。
    • 分岐( x)
      • ​分岐を追加:手順に分岐を追加します。
      • ルーティング式の選択 :アクティブなブランチを評価するルーティング式を選択します。 使用できる値は次のとおりです。ルール定義、外部スクリプト、およびECMAスクリプトを参照してください。
      • クリックして式を追加 :ルーティング式として「 Rule Definition 」を選択した場合、アクティブなブランチを評価する式を追加します。
      • Script Path :ルーティング式として「外部スクリプト」を選択した場合に、アクティブなブランチを評価するスクリプトが含まれ るファイル のパスです。
      • スクリプト :ルーティング式として ECMA Scriptを選択した場合、アクティブなブランチを評価するスクリプトを 、ボックスに追加します。
      • Default Route :複数のブランチがある場合は、デフォルトのブランチが使用されます。 デフォルトとして指定できるブランチは 1 つだけです。
    • 1つのブランチは、ルーティング式に基づいて一度に評価されます。
    • 分岐は上から下に評価されます。
    • trueに評価される最初のスクリプトが実行されます。
    • どの分岐もtrueと評価されない場合、ワークフローは進みません。
    OR 分割用のルールの定義 を参照してください。
  • 必要に応じて、各ブランチにワークフローステップを追加します。

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

Participant Step

参加者ステップ ​では、特定のアクションの所有者を割り当てることができます。ワークフローは、ユーザーが手動で手順を確認した場合にのみ続行します。 これは、ワークフローに関するアクションを誰かに実行させる場合に使用します。例えば、レビューステップなどです。
余談になりますが、アクションを割り当てる際には、ユーザー認証を考慮する必要があります。ユーザーは、ワークフローのペイロードであるページにアクセスする必要があるからです。

参加者ステップ - 設定

このステップを設定するには、次のタブを編集および使用します。
次の場合、ワークフロー開始者には常に通知が送信されます。
  • ワークフローが完了しました(完了)。
  • ワークフローが中止(終了)されました。
一部のプロパティでは、電子メール通知を有効にするように設定する必要があります。電子メールテンプレートをカスタマイズしたり、新しい言語用の電子メールテンプレートを追加することもできます。See Configuring Email Notification to configure email notifications in AEM.

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

ダイアログ参加者ステップ ​は、作業項目を割り当てられたユーザーから情報を収集するために使用します。このステップは、ワークフロー内で後で使用する少量のデータを収集するのに役立ちます。
ステップの完了時、 作業項目を完了 ​ダイアログには、ダイアログで定義したフィールドが表示されます。各フィールドで収集されたデータは、ワークフローペイロードのノードに保存されます。後続のワークフローステップは、この値をリポジトリから読み取ることができます。
このステップを設定するには、作業項目を割り当てるユーザーまたはグループ、およびダイアログへのパスを指定します。

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

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

Dialog Participant Step - Creating a dialog

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

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

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

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

  1. ダイアログ構造
    ダイアログ参加者ステップのダイアログは、コンポーネントのオーサリング用に作成するダイアログと似ています。ダイアログは、次の場所に保存されます。
    /apps/myapp/workflow/dialogs
    標準のタッチ操作対応 UI 用ダイアログは、次のノード構造を持ちます。
    newComponent (cq:Component)
      |- cq:dialog (nt:unstructured)
        |- content
          |- layout
            |- items
              |- column
                |- items
                  |- component0
                  |- component1
                  |- ...
    
    
    詳しくは、 ダイアログの作成と設定 を参照してください。
  2. ダイアログパスのプロパティ
    The Dialog Participant Step has the Dialog Path property (together with the properties of a Participant Step ). ダイアログパス ​のプロパティの値は、ダイアログの dialog ノードへのパスです。
    例えば、ダイアログが、ノードに保存されている EmailWatch というコンポーネントに含まれているとします。
    /apps/myapp/workflows/dialogs
    タッチ操作対応 UI の場合、 ダイアログパス ​のプロパティには次の値を使用します。
    /apps/myapp/workflow/dialogs/EmailWatch/cq:dialog
  3. ダイアログ定義の例
    次の XML コードスニペットは、ペイロードコンテンツの String ノードに watchEmail 値を保存するダイアログを表しています。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 の場合、この例は次のようなダイアログになります。

動的参加者ステップ

動的参加者ステップ ​コンポーネントは​ 参加者ステップ ​に似ていますが、参加者が実行時に自動的に選択される点が異なります。
このステップを設定するには、ダイアログと、作業項目を割り当てる参加者を識別する​ 参加者選択 ​を選択します。

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

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

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

参加者選択を作成します。そのために、あらゆる選択ロジックまたは選択条件を使用できます。例えば、参加者選択を使用して、(グループ内で)最も作業項目が少ないユーザーを選択できます。任意の数の参加者選択を作成して、ワークフローモデル内の​ 動的参加者ステップ ​コンポーネントの異なるインスタンスで使用できます。
作業項目を割り当てるユーザーを選択する OSGi サービスまたは ECMAScript を作成します。
  • ECMAScript
    スクリプトには、ユーザー ID を String 値として返す、getParticipant という関数を含める必要があります。Store your custom scripts in, for example, the /apps/myapp/workflow/scripts folder, or a subfolder.
    標準 AEM インスタンスには、次のサンプルスクリプトが付属しています。
    /libs/workflow/scripts/initiator-participant-chooser.ecma
    You must not change anything in the /libs path.
    This is because the content of /libs is overwritten the next time you upgrade your instance (and may be overwritten when you apply either a hotfix or feature pack).
    このスクリプトは、ワークフロー開始者を参加者として選択します。
    function getParticipant() {
        return workItem.getWorkflow().getInitiator();
    }
    
    
    The Workflow Initiator Participant Chooser component extends the Dynamic Participant Step and uses this script as the step implementation.
  • OSGi サービス
    Services must implement the com.day.cq.workflow.exec.ParticipantStepChooser interface. このインターフェイスは、次の構成要素を定義します。
    • SERVICE_PROPERTY_LABEL フィールド:このフィールドを使用して、参加者選択の名前を指定します。 この名前が、 動的参加者ステップ ​のプロパティで使用可能な参加者選択のリストに表示されます。
    • getParticipant メソッド:動的に解決されるプリンシパルIDを値として返 String します。
    The getParticipant method returns the dynamically resolved Principal id. この ID は、グループ ID またはユーザー ID のいずれかになります。
    ただし、グループ ID を使用できるのは、 参加者ステップ ​に対してのみです(参加者のリストが返された場合)。For a Dynamic Participant Step an empty list is returned and this cannot be used for delegation.
    動的参加者ステップ ​コンポーネントに対して実装を使用可能にするには、サービスを書き出す OSGi バンドルに Java クラスを追加し、バンドルを AEM サーバーにデプロイします。
    ランダム参加者選択 ​は、ランダムにユーザーを選択するサンプルサービスです( com.day.cq.workflow.impl.process.RandomParticipantChooser )。サンプルの​ ランダム参加者選択 ​ステップコンポーネントは、 動的参加者ステップ ​を拡張し、このサービスをステップ実装として使用します。

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

次の Java クラスは、 ParticipantStepChooser インターフェイスを実装します。このクラスは、ワークフローを開始した参加者の名前を返します。The code uses the same logic that the sample script ( initiator-participant-chooser.ecma ) uses.
注釈 @Property はフィールドの値をに設 SERVICE_PROPERTY_LABEL 定します Workflow Initiator Participant Chooser
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.adobe.granite.workflow.WorkflowException;
import com.adobe.granite.workflow.WorkflowSession;
import com.adobe.granite.workflow.exec.ParticipantStepChooser;
import com.adobe.granite.workflow.exec.WorkItem;
import com.adobe.granite.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 (service)") })
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;
 }
}

In the Dynamic Participant Step properties dialog, the Participant Chooser list includes the item Workflow Initiator Participant Chooser (script) , which represents this service.
ワークフローモデルが開始されると、ワークフローを開始し、作業項目が割り当てられたユーザーの 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

フォーム参加者ステップ

フォーム参加者ステップ ​は、作業項目が開かれるとフォームを表示します。ユーザーがフォームに入力して送信すると、フィールドデータがワークフローペイロードのノードに保存されます。
このステップを設定するには、作業項目を割り当てるユーザーまたはグループ、およびフォームへのパスを指定します。

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

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

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

通常どおり、 フォーム参加者ステップ ​で使用するフォームを作成します。ただし、フォーム参加者ステップ用のフォームには、次の設定が必要です。
  • Start of Form 」コンポーネントの「 Action Type 」プロパティーは、「 Edit Workflow Controlled Resource(s) 」に設定されている必要があります。
  • The Start of Form component must have a value for the Form Identifier property.
  • フォームコンポーネントでは、 エレメント名 ​プロパティを、フィールドデータを保存するノードのパスに設定する必要があります。パスは、ワークフローペイロードコンテンツ内でノードを見つける必要があります。 値には次の形式を使用します。
    ./jcr:content/path_to_node
  • The form must include a Workflow Submit Button(s) component. このコンポーネントのプロパティは一切設定しないでください。
ワークフローの要件によって、フィールドデータを保存する場所が決定されます。例えば、フィールドデータを使用して、ページコンテンツのプロパティを設定できます。The following value of an Element Name property stores field data as the value of the redirectTarget property of the jcr:content node:
./jcr:content/redirectTarget
In the following example, the field data is used as the content of a Text component on the payload page:
./jcr:content/par/text_3/text
最初の例は、 cq:Page コンポーネントがレンダリングする、あらゆるページに使用できます。2 番目の例は、ペイロードページに「 」という ID を持つ ​テキスト text_3 コンポーネントが含まれる場合にのみ使用できます。
フォームは、リポジトリ内のどこにでも配置できますが、ワークフローユーザーにはフォームを読み取るための権限が必要です。

ランダム参加者選択

The Random Participant Chooser step is a participant chooser that assigns the generated work item to a user that is randomly selected from a list.

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

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

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

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

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

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

プロセスステップ

A Process Step executes an ECMAScript or calls an OSGi service to perform automatic processing.

プロセスステップ - 設定

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

変数を設定

「変数を設定」ステップでは、変数の値を設定し、値が設定される順序を定義できます。 変数は、変数のマッピングが変数の設定手順で示される順序で設定されます。

変数の設定 — 設定

このステップを設定するには、次のタブを編集および使用します。
  • マッピング
    • ​変数の選択:値を設定する変数を選択するには、このオプションを使用します。
    • ​マッピングモードの選択:マッピングモードを選択して、変数の値を設定します。 変数のデータタイプに応じて、次のオプションを使用して変数の値を設定できます。
      • リテラル: ​指定する値が正確に分かっている場合は、このオプションを使用します。
      • ​式:このオプションは、式に基づいて使用する値が計算される場合に使用します。 式は、提供された式エディターで作成されます。
      • ​JSONドット表記:このオプションを使用して、JSON型またはFDM型の変数から値を取得します。
      • ​XPATH:XML型の変数から値を取得するには、このオプションを使用します。
      • ​ペイロードに対する相対:変数に保存する値がペイロードに対する相対パスで使用可能な場合は、このオプションを使用します。
      • ​絶対パス:変数に保存する値が絶対パスで使用可能な場合は、このオプションを使用します。
    • ​値の指定:変数にマップする値を指定します。 このフィールドで指定する値は、マッピングモードによって異なります。
    • ​マッピングの追加:このオプションを使用して、変数の値を設定するマッピングを追加します。