条件評価ツールの作成
ワークフロー 条件ノード は Groovy スクリプトを使用して、ワークフロー項目が通過する適切な遷移を決定します。 ワークフロー定義要素 <script> に Groovy でロジックを直接記述する代わりに、 ConditionEvaluator インターフェースを実装することで Java ロジックをデプロイできます。
-
Javaによる実装を記述してください。
-
ワークフロー定義XMLファイルからJavaクラスを呼び出します。
まず、 ConditionEvaluatorをデプロイし、動作を確認します。
条件評価ツールをデプロイする
新しいLiferay インスタンスを起動し、以下を実行します。
docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.132-ga132
http://localhost:8080 で Liferay にサインインしてください。 メールアドレス test@liferay.com とパスワード test を使用してください。 プロンプトが表示されたら、パスワードを learn に変更してください。
サンプルプロジェクトをデプロイする前に、システム設定 → スクリプト管理(セキュリティカテゴリ内)でスクリプトを有効にしてください。
次に、以下の手順に従ってください。
-
Acme R6J9実装プロジェクトをダウンロードして解凍してください。
curl https://resources.learn.liferay.com/examples/liferay-r6j9.zip -Ounzip liferay-r6j9.zip -
モジュールのルートディレクトリから、ビルドとデプロイを実行します。
./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)ヒントこのコマンドは、デプロイされたjarファイルをDockerコンテナの/opt/liferay/osgi/modulesにコピーするのと同じです。
-
Liferay Dockerコンテナコンソールでデプロイメントを確認してください。
com.acme.r6j9.impl_1.0.0 を開始しました
利便性を考慮し、ConditionEvaluatorのactivateメソッドは、R6J9 Conditional Approver のワークフロー定義を自動読み込みしました。 このコードは、ワークフロープロセスビルダーに移動してワークフロー定義をアップロードするのと同じことを実現しました。 新しいワークフロー定義のアップロード を参照してください。
コンディション評価ツールをテストする
Acme R6J9コンディション評価ツールを使用するには、ブログエントリで使用するように設定し、管理者ユーザーで新しいブログエントリを追加してください。
-
グローバルメニューで、ワークフローの下にある アプリケーション → プロセスビルダー に移動します。
-
「構成」タブで、R6J9条件付き承認者定義を「ブログエントリアセットタイプ」に割り当てます。
-
をクリックして保存します。
-
デフォルトの管理者ユーザー Test Test を使用して、サイト メニュー → コンテンツ & データ → ブログを開きます。
-
追加ボタン(
)をクリックします。 -
タイトルとコンテンツのフィールドに何かを入力し、 ワークフローに送信をクリックします。
-
メインのブログ画面に戻り、エントリが表示され、ステータスが 承認済み とマークされていることを確認します。
ヒントステータスが最初に
保留中と表示される場合は、ページを更新してください。
単一承認者定義または他の非管理者ユーザーでテストすると、ブログエントリがステータス 保留中 で追加されることが確認できます。
R6J9状態評価装置の理解
Acme R6J9 実装プロジェクトには、ワークフロー ユーザーが管理者ロールを持っている場合に 承認 遷移をトリガーする条件評価器が含まれています。 これには単一のクラスが含まれています: R6J9ConditionEvaluator。
このプロジェクトには、条件評価機能に加えて、条件評価機能を使用する「R6J9条件付き承認者」と呼ばれるワークフロー定義が含まれており、自動的に読み込まれます。
条件評価ツールは、ワークフローに送信される資産の状態を変更しません。 それは単に、移行を実行するための便利な方法を提供するだけです。 ワークフローの状態を変更する必要がある場合は、 WorkflowStatusManagerUtil クラスの updateStatus メソッドを呼び出します。 定義の 承認済み 状態ノードは、ステータスを承認済みに設定します。
<state>
<name>承認済み</name>
<metadata>
<![CDATA[
{
"xy": [
380,
51
]
}
]]>
</metadata>
<actions>
<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>
</actions>
</state>
ConditionEvaluator を実装しています
条件評価クラスは、 com.liferay.portal.workflow.kaleo.runtime.condition.ConditionEvaluator インターフェイスを実装し、その単一の evaluate メソッドをオーバーライドします。 scripting.language=java コンポーネントプロパティを設定します。
@Component(
property = "scripting.language=java", service = ConditionEvaluator.class
)
public class R6J9ConditionEvaluator implements ConditionEvaluator {
evaluate メソッドは、ワークフロー定義で呼び出されたときに、ワークフローが遷移を介して適切なノードに進むことができるように、有効な遷移名を返す必要があります。
evaluate メソッドは、 KaleoCondition と ExecutionContext の 2 つのパラメータを受け取ります。 ワークフローエンジンはワークフロープロセス内で条件評価器を呼び出す役割を担っているため、あなたのコードはこれらのオブジェクトのインスタンス化や構築を行う必要はありません。 しかし、それらから有益な情報を得ることも可能です。 たとえば、R6J9 条件評価器は、ExecutionContext からworkflowContext(型はMap)とserviceContext(型はServiceContext)を取得します。
Map<String, Serializable> workflowContext =
executionContext.getWorkflowContext();
ServiceContext serviceContext = executionContext.getServiceContext();
workflowContext はワークフロー ユーザーの ID を取得するために使用され、 serviceContext は仮想インスタンスの ID ( companyId ) を取得するために使用されます。 両方とも、ユーザーがロール 管理者を持っているかどうかを確認するために必要です。ユーザーが管理者ロールを持っている場合、アセットはワークフローによって自動的に承認されます ( 承認という名前のトランジションとともに送信されます)。 そうでない場合は、 レビュー 遷移を実行します。
if (_userLocalService.hasRoleUser(
serviceContext.getCompanyId(), RoleConstants.ADMINISTRATOR,
userId, false)) {
return "approve";
}
return "review";
ワークフロー定義で ConditionEvaluator を呼び出す
Acme R6J9実装プロジェクトによって自動的にロードされたR6J9条件付き承認者ワークフロー定義は、Liferay DXP/Portalに付属する単一承認者定義とほぼ同じです。 最初の違いは、 が 状態ノードを作成した点です。 単一承認者定義は常にレビュー遷移を実行しますが、R6J9 条件付き承認者は チェックロール 遷移を実行します。 主な違いは、 という同じ名前の条件ノード が追加されていることです。 条件ノードは、条件ロジックを実行するために R6J9ConditionEvaluator に依存します。
<condition>
<name>check-role</name>
<script>
<![CDATA[com.acme.r6j9.internal.kaleo.runtime.condition.R6J9ConditionEvaluator]]>
</script>
<script-language>java</script-language>
<transitions>
<transition>
<name>レビュー</name>
<target>レビュー</target>
</transition>
<transition>
<name>承認</name>
<target>承認済み</target>
</transition>
</transitions>
</condition>
承認済みおよびレビュー済みの遷移は、条件ノードの有効なターゲットとして追加されることに注意してください。 ConditionEvaluator で使用されている遷移が、呼び出された条件ノードからの有効な遷移として含まれていることを確認してください。