参照先DBのレコードをフォームにプルダウンで表示
PHPとAPIを使用して、参照先DBに登録されているデータを参照元DBの登録フォーム入力ステップ上にプルダウンで表示するサンプルプログラムです。
ここでは、セミナー申込DBの登録フォームに、セミナーマスタDBに登録されているセミナー名をプルダウンで表示しつつセミナー管理IDを登録するサンプルプログラムを紹介します。
※予め各DBに必要なフィールドを追加してください。
※登録フォームに参照フィールドを追加する際は「セミナー管理ID」をキーフィールドに設定してください。
※確認ステップで参照先DBの値を表示したい場合は、確認ステップの「+」>「フィールド」より参照先DBのフィールドを追加してください。
※参照フィールドの仕様や設定方法についてはサイトの参照フィールドをご参照ください。
▼セミナーマスタDB
フィールドタイプ | 表示名 | 識別名 |
テキスト | セミナー管理ID | seminarID |
テキスト | セミナー名 | seminarName |
セレクト | 公開フラグ | flag |
▼セミナー申込DB
フィールドタイプ | 表示名 | 参照先DB | ラベルフィールド |
参照フィールド | セミナー管理ID | セミナーマスタDB | セミナー管理ID |
ページのPHP
<?php $seminars = "";//変数を初期化 $apikey = $SPIRAL->getEnvValue("apikey");//あらかじめPHP環境変数にAPIキーを登録しておきます。 $apiurl = $SPIRAL->getEnvValue("apiurl");//あらかじめPHP環境変数にAPIのURL「https://api.spiral-platform.com/v1/apps/」を登録しておきます。 $header = array( "Authorization:Bearer " . $apikey, "Content-Type:application/json", ); //セミナーマスタDBに登録されているデータを取得 $query = "?fields=seminarID,seminarName&enableTotalCount=true&sort=_id:asc"; //出力するフィールド識別名とソート順を指定 $url = $apiurl . "{appid}/dbs/{dbid}/records" . $query; $curl = curl_init(); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_URL , $url); curl_setopt($curl, CURLOPT_HTTPHEADER , $header); curl_setopt($curl, CURLOPT_CUSTOMREQUEST , "GET"); $response = curl_exec($curl); if (curl_errno($curl)) echo curl_error($curl); curl_close($curl); $data = json_decode($response , true); if(array_key_exists('status', $data)){//APIのエラーが発生している場合 if($data["status"] != 200){ $SPIRAL->setTHValue("APIERROR", $data["message"]);//APIのエラーをThymeleafにセット } }else{ $seminars = array(); foreach($data["items"] as $item){ //データを取得 $seminars["items"][] = array("seminar_id"=>$item["seminarID"],"seminar_name"=>$item["seminarName"]); } $SPIRAL->setTHValues($seminars); //データをThymeleafにセット } ?>
※プルダウン上に表示するセミナー名の抽出表示にはレコード公開範囲の条件抽出が適用されないため、別途、クエリパラメータのwhereにレコード公開範囲の抽出条件と同じ条件を指定してください。
例:公開フラグ(セレクト)フィールドのラベル名「公開」のフラグが立つレコードのみプルダウンに表示させたい場合、ページのPHPのサンプルプログラム11行目に「where」パラメータで抽出条件を追加。
$query = "?fields=seminarID,seminarName&enableTotalCount=true&sort=_id:asc&where=@flag=1"; //出力するフィールド識別名、ソート順、条件を指定
ブロックの登録フォーム入力ステップソース
<!--/* セミナー名 */--> <sp:input-field name="f0XX"></sp:input-field> <div class="sp-form-item sp-form-field"> <div class="sp-form-label"> <th:block>セミナー名</th:block> <span class="sp-form-required" th:if="${fields['f0XX'].required}" th:text="${fields['f0XX'].requiredIndicator}">*</span> </div> <div class="sp-form-data"> <div th:if="${cp.result.isSuccess}"> <div class="sp-form-dropdown"> <select class="sp-form-control" th:name="${fields['f0XX'].name}"> <option value="" selected="selected">----- 選択してください -----</option> <option th:each="val : ${cp.result.value['items']}" th:value="${val['seminar_id']}" th:text="${val['seminar_name']}" th:selected="${val['seminar_id']} == ${inputs['f0XX']}">Item</option> </select> <span class="sp-form-dropdown-icon"></span> </div> <p th:text="${cp.result.value['APIERROR']}"></p> </div> <div th:if="${!cp.result.isSuccess}"> <p th:text="${cp.result.errorMessage}">error message</p> </div> <span class="sp-form-noted" th:if="${fields['f0XX'].help != null}" th:text="${fields['f0XX'].help}">Help text</span> <span class="sp-form-error" th:if="${errors['f0XX'] != null}" th:text="${errors['f0XX'].message}">Error message</span> </div> </div>