Liferay Objectsの紹介 (3) 連携機能編 - Liferay Objectsの紹介 (3) 連携機能編 - aegif Labo Blog Liferay
null Liferay Objectsの紹介 (3) 連携機能編
こんにちは。おおたにです。
前回に引き続き、Liferay DXP 7.4の新機能であるLiferay Objectsを紹介します。今回は、カスタムオブジェクトの処理連携やデータ連携に関する機能としてアクション機能とヘッドレスAPIについて見ていきます。
アクション
アクションとは、カスタムオブジェクトのエンティティ作成/更新/削除をトリガにして処理を実行するための機能です。これを利用すると、カスタムオブジェクト操作と連動して外部サービスの処理をキックしたり、Liferay内部で追加の処理を実行したりすることができます。トリガとなったカスタムオブジェクトエンティティの情報も渡せるため、エンティティの内容に応じた処理を実行することができます。
例えば、カスタムオブジェクトのデータを外部サービスに連携したり、カスタムオブジェクト操作時にメールを送信したりなど、様々なユースケースが考えられます。
Liferay Objects管理画面でカスタムオブジェクトをクリックし、操作(Actions)タブに移動します。+アイコンをクリックすると新規アクションを追加できます。
基本情報タブではアクション名と説明、アクションの有効/無効を設定できます。
アクションビルダータブではアクションのトリガー、実行条件、実行する操作を設定します。
- トリガー : アクションの実行タイミングを「追加後」「更新後」「削除後」から選択する
- 条件 : 実行条件を指定したい場合、「条件を有効にする」をONにして式ビルダーで実行条件を指定する
- 操作 : 実行する操作をGroovyスクリプトもしくはWebhookで作成する
- Groovyスクリプト : Liferayのコアサービス等を利用したアクション記述が可能
- Webhook : 外部Webサービスの呼出が可能(後述)
例えば、以下のようなアクションを作成するとAdmission Requestエンティティ追加時にメールを送信することができます。なお、admissionDate
、building
、reason
、r_userToAdmissionRequests_userId
はカスタムオブジェクトAdmission Requestのフィールドの各項目名で、Groovy Script内でそのまま使えるようになっています。
- トリガー : 追加後
- 条件 : OFF
- 操作 : 以下のGroovyスクリプト
import com.liferay.portal.kernel.service.UserLocalServiceUtil;
import com.liferay.portal.kernel.model.User;
import com.liferay.mail.kernel.service.MailServiceUtil;
import com.liferay.mail.kernel.model.MailMessage;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
try {
User user = UserLocalServiceUtil.getUser(r_userToAdmissionRequests_userId);
MailMessage mailMessage = new MailMessage();
mailMessage.setTo(new InternetAddress(user.getOriginalEmailAddress()));
mailMessage.setFrom(new InternetAddress("noreply@aegif.jp"));
mailMessage.setSubject("Admission Request submission");
mailMessage.setBody("Admission Date : " + admissionDate + "\nBuilding : " + building + "\nReason : " + reason);
MailServiceUtil.sendEmail(mailMessage);
} catch (AddressException e) {
System.out.println(e);
}
Webhook
Webhookを使うと、トリガ条件に合致した時に指定したURLにPOSTリクエストを投げることができます。
- URL : POSTリクエストの投げ先URL(連携先のWebサービスのURL)
- シークレット : 指定した値がリクエストヘッダパラメータ
x-api-key
として送信される - カスタムオブジェクトエンティティのJSONデータがリクエストボディに格納される
現状シークレットがx-api-key
固定なので、Amazon API Gateway + AWS Lambdaなどで他システム連携用の処理をホストしておくとよいかと思います。
ヘッドレスAPI
Liferay Objectsはカスタムオブジェクト作成と同時に、そのカスタムオブジェクトを操作するためのヘッドレスAPIを自動的に公開します。
http://<ホスト名>:<ポート番号>/o/api
にアクセスすると、ヘッドレスAPIを参照するためのAPI Explorerというツールにアクセスできます。右上のREST Applicationsから、c/<カスタムオブジェクト名>
を選択すると、当該カスタムオブジェクトのヘッドレスAPIを参照することができます。
API ExplorerでAPIを試すこともできます。例えばPUTの/{admissionRequestId}
をクリックしてIDを入力してExecuteをクリックしてみましょう(IDはビューにID列を追加するなどして既存エンティティのIDを確認してみてください)。APIコール方法や目的のエンティティがJSON形式で取得できることが分かります。
エンティティの取得はGET、作成はPUT、更新はPATCH、削除はDELETEメソッドで行うことができます。これらを利用することで外部システムからカスタムオブジェクトエンティティを登録したり取得したりすることができます。
今回の記事は以上です。全3回にわたって紹介したLiferay Objects、是非みなさんもお試しください。