承認ワークフローの追加
applicationState
フィールドを追加した後、Delectable Bonsaiはアプリケーションに加えられた変更をレビューし、承認するためのワークフローを実装したい。 現在、アプリケーションのすべての更新は、選択された状態に関係なく、自動的に承認される。 Delectable Bonsaiはapproved
とdenied
の状態に追加のビジネスロジックを関連付けるので、ワークフローはapplicationState
フィールドをチェックし、これらの値のいずれかが選択された場合、マネージャのレビューが必要です。 ここでは、Liferay クライアント拡張 を使って、このワークフロープロセスをデプロイし、セットアップします。
クライアント拡張機能の展開
-
サンプルワークスペースをダウンロードし、解凍します。
curl -o https://resources.learn.liferay.com/courses/latest/en/application-development/implementing-business-logic/liferay-c6s3.zip
unzip liferay-c6s3.zip
-
liferay-c6s3/liferay-course-workspace/client-extensions` に移動します:
cd liferay-c6s3/liferay-course-workspace/client-extensions
これには2つのクライアント拡張プロジェクトが含まれます:liferay-course-batch
と
liferay-course-etc-spring-boot` です。 -
このコマンドを実行してクライアントエクステンションをデプロイし、Liferayインスタンスのコンソールでデプロイを確認します:
../gradlew clean deploy -Ddeploy.docker.container.id=$(docker ps -lq)
2023-07-20 21:03:07.142 INFO [Refresh Thread: Equinox Container: 8b6a806c-654e-44f8-8210-75b61d29063c][BundleStartStopLogger:77] STARTED liferaycoursebatch_1.0.0 [1721] 2023-07-20 21:03:12.408 INFO [Refresh Thread: Equinox Container: 8b6a806c-654e-44f8-8210-75b61d29063c][BundleStartStopLogger:77] STARTED liferaycourseetcspringboot_1.0.0 [1722]
-
liferay-course-etc-spring-boot`プロジェクトに移動し、Spring Bootアプリケーションを起動します:
cd liferay-course-etc-spring-boot
./../../gradlew bootRun
-
アプリケーションが起動したら、
http://localhost:58081/ready
にアクセスする。 アプリケーションが使用可能であれば、ページには "READY "と表示されます。
これで、Distributor Application オブジェクトのワークフローを有効にすることができます。
コードを調べる
提供される Workflow Action クライアント拡張機能は、これらの操作を実行します:
-
アプリケーションの状態値を取得し、ワークフローの遷移を決定するために使用する。
-
トランジションに対する非同期HTTP POSTリクエストを行う。
ワークフロー移行の決定
@PostMapping
public ResponseEntity<String> post(
@AuthenticationPrincipal Jwt jwt, @RequestBody String json) {
log(jwt, _log, json);
String transition = "auto-approve";
JSONObject payload = new JSONObject(json);
JSONObject entryDTO = payload.getJSONObject("entryDTO");
JSONObject applicationState = entryDTO.getJSONObject("applicationState");
String applicationStateKey = applicationState.getString("key");
if (Objects.equals("approved", applicationStateKey) || Objects.equals("denied", applicationStateKey)) {
transition = "review";
}
...
}
WorkflowAction1RestController
の post メソッドには、JSON Web Token (JWT) とリクエストボディの 2 つのパラメータがある。 トークンはHTTPコールを認証し、リクエスト・ボディはJSON形式の文字列としてデータを含む。
リクエスト本文をログに記録した後、コードは transition
変数を初期化し、その値を auto-approve
に設定する。
そして、JSONObject()
コンストラクタと .getJSONObject()
メソッドを使って applicationState
フィールドの key
値を取り出し、そのキーを applicationStateKey
変数に格納する。
最後に、状態キーが approved
または denied
の場合に、transition
変数を review
に更新する条件ブロックを定義する。
POSTリクエストの作成
try {
WebClient.Builder builder = WebClient.builder();
WebClient webClient = builder.baseUrl(
lxcDXPServerProtocol + "://" + lxcDXPMainDomain
).defaultHeader(
HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE
).defaultHeader(
HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE
).build();
webClient.post(
).uri(
payload.getString("transitionURL")
).bodyValue(
"{\"transitionName\": \"" + transition + "\"}"
).header(
HttpHeaders.AUTHORIZATION, "Bearer " + jwt.getTokenValue()
).exchangeToMono(
clientResponse -> {
HttpStatus httpStatus = clientResponse.statusCode();
if (httpStatus.is2xxSuccessful()) {
return clientResponse.bodyToMono(String.class);
}
else if (httpStatus.is4xxClientError()) {
return Mono.just(httpStatus.getReasonPhrase());
}
Mono<WebClientResponseException> mono =
clientResponse.createException();
return mono.flatMap(Mono::error);
}
).doOnNext(
output -> {
if (_log.isInfoEnabled()) {
_log.info("Output: " + output);
}
}
).subscribe();
}
ワークフロー遷移を決定した後、コードは非同期HTTP POSTリクエストに進む。 まず、WebClient
を初期化して設定し、ベース URL とヘッダーを決定し、WebClient
の post()
メソッドを呼び出します。
このPOSTリクエストは、元のレスポンスボディにあった transitionURL
値を uri()
に使用する。 次に、bodyValue()
を使用して、ワークフロー・タスクの transitionName
を transition
変数の値で更新する。 リクエストはJWTを使って認証され、レスポンスのHTTPステータスコードに従ってログに記録される。
ディストリビューター・アプリケーションのワークフローを有効にする
-
グローバルメニュー](../../images/icon-applications-menu.png))を開き、アプリケーションタブに移動し、[プロセスビルダー](Process Builder)をクリックします。
-
機械承認のプロセスが表示されることを確認する
このプロセスはバッチクライアント拡張によって追加され、5つのノードを定義する:Start、Machine Review、Manager Review、Update、および Approved である。
Machine Reviewノードは、ワークフローアクションクライアント拡張機能を使用して、各アプリケーションの状態フィールドをチェックする。 値が
approved
またはdenied
の場合、アプリケーションはビジネス開発マネージャーによる承認のためManager Reviewノードに送られます。 そうでない場合は、Machine Reviewノードが自動的にApprovedノードにアプリケーションを誘導する。 -
コンフィギュレーション*タブを開きます。
-
Distributor Application」の「Edit 」をクリックし、「Machine Approver」を選択し、「Save*」をクリックします。
ワークフローのテスト
-
Distributor Applicationsを開き、エントリーの編集を開始します。
-
状態を Under Review に設定し、 Save をクリックする。
-
エントリーのステータスを確認する。 承認されるべきだ。
-
エントリーの状態を Approved に変更する。
-
エントリーのステータスを確認する。 保留中*であるべきだ。
-
個人メニュー を開き、 通知 に移動し、新しい ワークフロー通知*をクリックします。
-
レビュータスクを自分に割り当て、承認する。
-
エントリーのステータスを確認する。 承認されるべきだ。
承認ワークフローを設定し、申請にはマネージャーのレビューが必要です。
今、Delectable Bonsaiは申請、承認、却下の通知を自動化しなければならない。
次へ 通知テンプレートの追加