ver.2.22 より、カスタムプログラムがアクションに追加されました。
本記事では、活用例やサンプルプログラムなどを紹介しますので、活用する際にぜひ参考にしてください。
サポートサイトのスケジュールトリガのカスタムプログラムアクション(2.22)も合わせてご確認ください。
本記事では、活用例やサンプルプログラムなどを紹介しますので、活用する際にぜひ参考にしてください。
サポートサイトのスケジュールトリガのカスタムプログラムアクション(2.22)も合わせてご確認ください。
カスタムプログラムとは
カスタムプログラムは、アプリ管理のアクション機能の1つで、スケジュールトリガに紐づけて利用します。
スケジュールトリガに紐づけて利用することで、定期的にプログラムの実行をすることが可能です。
カスタムプログラムに記載できる言語は、PHP(ver.2.22 時点では、PHP 7.4)となります。
スケジュールトリガに紐づけて利用することで、定期的にプログラムの実行をすることが可能です。
カスタムプログラムに記載できる言語は、PHP(ver.2.22 時点では、PHP 7.4)となります。
活用例
1. 外部チャットツールへの通知
活用例
・お問い合わせDBで未対応かつ一定時間経過している場合に通知
設定時の注意点
1. カスタムプログラムでは、発動条件が指定できないため、APIで未対応のレコードの存在チェックが必要
2. 通知にリンクを含める場合は、アプリ利用画面の検索パラメータに値が入る形で設定
3. 通知する件数によっては多くのAPIを使用するため、実行時間の制限(30秒)に引っかからないように注意
※ 検索条件付きアプリ利用画面URLの取得方法は、こちらの記事の「検索条件付きアプリ利用画面URLの取得方法」を参照ください※ チャットサービスとの連携は、SLACK、Teams のサンプルプログラムを参考にしてください
2. 外部サービスとのデータ連携
設定時の注意点
1. ファイルフィールドを連携する場合は、API を多く使用するためAPI上限の拡張 及び、深夜の実行を推奨
2. 外部サービス側でプログラムを実行できる場合は、「レコード一括登録依頼を作成」「レコード一括登録依頼を取得」などのAPIを利用することで、カスタムプログラムによる連携を使用しない設計も可能
3. 一定期間経過したレコードを一括更新・削除
活用例
・社員DBで退職日が当日になっているレコードを取得し、退職フラグを立てる
・お問い合わせDBで一定期間更新のないレコードを取得し、終了ステータスに変更
・WEB申請DBでステータスが対応済みかつ、30日経過したレコードの削除
設定時の注意点
1. 更新時は、一定期間経過したレコード一覧の取得を行い、複数レコードの更新を行う必要あり
2. 削除時は、レコード一括削除依頼 のAPIを利用することで1回のAPIで削除可能
サンプルプログラム
PHP - 日付フィールドがアクション実行日より7日以上前のレコード削除<?php //------------------------------ // 設定値用モジュール //------------------------------ define("API_URL", "https://api.spiral-platform.com/v1"); define("API_KEY", ""); define("APP_ROLE", ""); define("APP_ID", ""); define("DB_ID", ""); //------------------------------ // API実行 //------------------------------ $commonBase = CommonBase::getInstance(); $requestBody = array( // 例 "where" => "@date <= DATE(NOW()) - INTERVAL('7 days')" // 日付フィールド(識別名:date)に登録されている日付が実行日より7日以上前の場合 ); $resultBatch = $commonBase->apiCurlAction("POST", "/apps/". APP_ID. "/dbs/". DB_ID. "/records/batchDeletes", $requestBody); // 実行結果出力 var_dump($resultBatch); //------------------------------ // 共通用モジュール //------------------------------ class CommonBase { /** * シングルトンインスタンス * @var UserManager */ protected static $singleton; public function __construct() { if (self::$singleton) { throw new Exception('must be singleton'); } self::$singleton = $this; } /** * シングルトンインスタンスを返す * @return UserManager */ public static function getInstance() { if (!self::$singleton) { return new CommonBase(); } else { return self::$singleton; } } /** * V2用 API送信ロジック * @return Result */ function apiCurlAction($method, $addUrlPass, $data = null, $multiPart = null, $jsonDecode = null) { $header = array( "Authorization:Bearer ". API_KEY, "X-Spiral-Api-Version: 1.1", ); if($multiPart) { $header = array_merge($header, array($multiPart)); } else { $header = array_merge($header, array("Content-Type:application/json")); } if(APP_ROLE){ $header = array_merge($header, array("X-Spiral-App-Role: ".APP_ROLE)); } // curl $curl = curl_init(); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_URL, API_URL. $addUrlPass); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); if ($method == "POST") { if ($multiPart) { curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } else { curl_setopt($curl, CURLOPT_POSTFIELDS , json_encode($data)); } curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method); } if ($method == "PATCH") { curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method); } if ($method == "DELETE") { curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method); } $response = curl_exec($curl); if (curl_errno($curl)) echo curl_error($curl); curl_close($curl); if($jsonDecode){ return $response; }else{ return json_decode($response, true); } } }
カスタムプログラムでは、PHP環境変数から値を取得することができないため、設定値は直接入力ください。
また、where文では、SPIRAL ver.2の独自関数なども使用することもできるので、
条件式や計算式の記法を参考にして記載してください。
手動実行
カスタムプログラムは、手動実行ができるためPHPプログラムの動作確認を行うことが可能です。
実行結果を出力する関数(echoなど)も使用できるため、プログラムの動作確認等でも利用することができます。
サイト側で動作確認を行う場合、出力結果を Thymeleaf に渡して表示させるひと手間が必要でしたが、
カスタムプログラムの手動実行では不要です。
PHP
実行結果
実行結果を出力する関数(echoなど)も使用できるため、プログラムの動作確認等でも利用することができます。
サイト側で動作確認を行う場合、出力結果を Thymeleaf に渡して表示させるひと手間が必要でしたが、
カスタムプログラムの手動実行では不要です。
PHP
実行結果
最後に
他の活用方法が知りたい等あれば、下記の「コンテンツに関しての要望はこちら」からご連絡ください。