アクション実行者の作成
ワークフローノードには、 <action> 要素を含めることができ、これらの要素は Groovy スクリプト を介してカスタムロジックを実行します。
<action>
<name>承認</name>
<script>
<![CDATA[
import com.liferay.portal.kernel.workflow.WorkflowConstants;
import com.liferay.portal.kernel.workflow.WorkflowStatusManagerUtil;
WorkflowStatusManagerUtil.updateStatus(WorkflowConstants.getLabelStatus("承認済み"), workflowContext);
]]>
</script>
<script-language>groovy</script-language>
<execution-type>onEntry</execution-type>
</action>
ワークフロー定義要素 <script> に Groovy アクション ロジックを直接記述する代わりに、 ActionExecutor インターフェースを実装することで Java ロジックを実行できます。
- Javaによる実装を記述してください。
- ワークフロー定義XMLファイルからJavaクラスを呼び出します。
まず、 ActionExecutorをデプロイし、動作を確認します。
アクションエグゼキューターをデプロイする
Liferay DXP の新しいインスタンスを起動するには、以下を実行します。
docker run -it -m 8g -p 8080:8080 liferay/dxp:2026.q1.9-lts
http://localhost:8080 に、メールアドレス test@liferay.com とパスワード test を使用して Liferay にサインインします。 プロンプトが表示されたら、パスワードを learn に変更してください。
サンプルプロジェクトをデプロイする前に、システム設定 → スクリプト管理(セキュリティカテゴリ内)でスクリプトを有効にしてください。
次に、以下の手順に従います。
-
Acme E5C9実装プロジェクトをダウンロードして解凍してください。
curl https://resources.learn.liferay.com/examples/liferay-e5c9.zip -Ounzip liferay-e5c9.zip -
モジュールのルートディレクトリから、ビルドとデプロイを実行します。
./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)ヒントこのコマンドは、デプロイされた jar ファイルを Docker コンテナ上の
/opt/liferay/osgi/modulesにコピーすることと同じです。 -
Liferay Dockerコンテナコンソールでデプロイメントを確認してください。
com.acme.e5c9.impl_1.0.0 を開始しました
便宜上、 ActionExecutor の activate メソッドは、E5C9 Single Approver というワークフロー定義を自動的にロードしました。 このコードは、ワークフロープロセスビルダーに移動してワークフロー定義をアップロードするのと同じことを実現しました。 新しいワークフロー定義のアップロード を参照してください。
アクションエグゼキュータをテストする
Acme E5C9アクションエグゼキュータを使用するには、ワークフロー定義をブログエントリで使用するように設定し、管理者ユーザーを使用して新しいブログエントリを追加します。
-
グローバルメニューで、ワークフローの下にある アプリケーション → プロセスビルダー に移動します。
-
「構成」タブで、E5C9 単一承認者定義を「ブログエントリ」アセットタイプに割り当てます。
-
をクリックして保存します。
-
デフォルトの管理者ユーザー Test Test を使用して、サイト メニュー → コンテンツ & データ → ブログを開きます。
-
追加 ボタン (
) をクリックします。 -
タイトルとコンテンツのフィールドに何かを入力し、 ワークフローに送信をクリックします。
-
メインのブログビューに戻り、エントリが表示され、ステータスが 保留中 とマークされていることを確認します。
ワークフローフレームワークはステータスを「保留中」に設定しました。 この時点以降、ステータスの更新はアクション実行器内のロジックを使用して行われます。
-

ブログ記事にシングル承認ワークフローを割り当てると、E5C9のシングル承認とまったく同じように動作することが確認できます。
E5C9アクションエグゼキュータの理解
Acme E5C9 実装プロジェクトは、単一承認者定義のワークフロー スクリプトのステータス設定ロジックを単一の Java クラス E5C9ActionExecutor に抽出します。
アクション実行者に加えて、このプロジェクトにはE5C9シングル承認者と呼ばれるワークフロー定義が含まれており、自動的にロードされます。これはデフォルトのシングル承認者と同じロジックを持ちますが、ワークフロー定義内でGroovyスクリプトを直接記述する代わりに、アクション実行者クラスのロジックを使用します。
<script>
<![CDATA[com.acme.e5c9.internal.workflow.kaleo.runtime.scripting.internal.action.E5C9ActionExecutor]]>
</script>
ActionExecutor は、各トランジションの名前に従ってワークフローの状態を設定します。
if (Objects.equals(
workflowContext.get("transitionName"), "reject")) {
WorkflowStatusManagerUtil.updateStatus(
WorkflowConstants.STATUS_DENIED, workflowContext);
WorkflowStatusManagerUtil.updateStatus(
WorkflowConstants.STATUS_PENDING, workflowContext);
}
else if (Objects.equals(
workflowContext.get("transitionName"), "approve")) {
WorkflowStatusManagerUtil.updateStatus(
WorkflowConstants.STATUS_APPROVED, workflowContext);
}
ActionExecutorの実装
アクション実行クラスは、 com.acme.e5c9.internal.workflow.kaleo.runtime.scripting.internal.action.ActionExecutor インターフェイスを実装し、その単一の execute メソッドをオーバーライドします。 getActionExecutorKeyメソッド内で、アクションのスクリプト言語をJavaに設定します:
@Override
public String getActionExecutorKey() {
return "java";
}
execute メソッドは何も返しません。 その代わりに、メソッド内でロジックが任意に実行され、ワークフロー処理はXML定義に従って続行されます。 ワークフローのステータスは、多くの場合、アクションの実行中に更新されます。
execute メソッドは、 KaleoAction と ExecutionContext の 2 つのパラメータを受け取ります。 ワークフローエンジンはワークフロープロセス内でアクションエグゼキュータを呼び出す役割を担っているため、あなたのコードはこれらのオブジェクトのインスタンス化や構築を行う必要はありません。 しかし、それらから有益な情報を得ることも可能です。 例えば、E5C9アクションエグゼキュータは、 実行コンテキストから ワークフローコンテキスト (型は マップ)を取得します。
Map<String, Serializable> workflowContext =
executionContext.getWorkflowContext();
workflowContext は、最近実行された遷移を取得するために使用され、条件ロジックによってワークフロー内のアセットに設定するステータスを決定できます。
if (Objects.equals(
workflowContext.get("transitionName"), "reject")) {
WorkflowStatusManagerUtil.updateStatus(
WorkflowConstants.STATUS_DENIED, workflowContext);
WorkflowStatusManagerUtil.updateStatus(
WorkflowConstants.STATUS_PENDING, workflowContext);
}
else if (Objects.equals(
workflowContext.get("transitionName"), "approve")) {
WorkflowStatusManagerUtil.updateStatus(
WorkflowConstants.STATUS_APPROVED, workflowContext);
}
ワークフロー定義でActionExecutorを呼び出す
E5C9 シングル承認ワークフロー定義には、状態ノードとタスクノードにスクリプト要素が含まれています。 これらのスクリプト要素は、アクション実行クラスを宣言します。 定義の2つのアクション(拒否と承認)には、同一のスクリプトタグが使用されています。
<script>
<![CDATA[com.acme.e5c9.internal.workflow.kaleo.runtime.scripting.internal.action.E5C9ActionExecutor]]>
</script>
<script-language>java</script-language>
スクリプトタグは、ワークフローフレームワークに対し、ロジックを保持するアクション実行子を指定します。
ワークフロー定義では、単一のアクション実行者を呼び出すことだけに限定されません。 例えば、 E5C9ActionExecutor には、ワークフロー ステータスを設定する前に遷移を決定するロジックがあります。 ただし、ロジックがより複雑な場合は、ワークフロー内の各アクションを個別の ActionExecutor 実装でサポートすることができ、これらの実装は他のワークフロー定義で再利用できます。