開発情報・ナレッジ

投稿者: SPIRERS ナレッジ向上チーム 2024年3月21日 (木)

レコード検索ブロックを使用したレコードリストブロック フィルタ設定方法

この記事では、レコード検索ブロックを使用したレコードリストブロック フィルタ設定方法を紹介いたします。

設定イメージ

レコードリストブロックを作成するDB内に認証DBを参照先DBとする参照フィールドが存在する場合はレコード公開範囲のログインフィルタ設定ができ、認証エリアにログインする認証レコードに関連するレコードのみレコードリストブロック上に表示させることができます。
ただし、レコードリストブロックの1レコードに紐づくレコードのみ表示させるフィルタ設定は、現状の標準機能では設定できません。

自身のお問い合わせに紐づいたコメント履歴を表示させたいなどの場合は、今回紹介するフィルタ設定と標準機能のログインフィルタ設定を組み合わせることで実装可能となります。
今回はお問い合わせ一覧を例に説明しますが、他用途の一覧でも使用することができます。
デモはこちら

なお、レコード公開範囲 ログインフィルタ設定はサポートサイトよりご確認ください。
レコード公開範囲

事前準備

お問い合わせDB
必須かつユニークのお問い合わせIDを用意します。
レコード検索ブロックでの検索は部分一致のみの対応となるため、お問い合わせIDは部分一致されないよう、10桁発番など桁数を揃えます。
ID発行については、テキストフィールドのデフォルト値(自動生成値)を利用します。
フィールド名 フィールドタイプ 詳細設定
お問い合わせID テキスト 入力必須 かつ ユニーク
デフォルト値:自動生成値(レコードIDを元に10桁)

お問い合わせコメントDB
お問い合わせDBを参照する参照フィールドとレコード検索ブロック自動検索用のお問い合わせIDを用意します。
フィールド名 フィールドタイプ 詳細設定
お問い合わせID(お問い合わせDB参照) 参照フィールド 参照先DB:お問い合わせDB
ラベルフィールド:お問い合わせID
自動検索用お問い合わせID テキスト インデックス:あり

コメント登録時にお問い合わせDBからお問い合わせIDを取得するDBトリガ レコードアクションを設定します。
▼基本設定
表示名 自動検索用お問い合わせIDにお問い合わせIDを格納
アクション先 自DB:お問い合わせコメントDB
アクション先への操作 更新
▼処理
処理マッピング 自動検索用お問い合わせID = お問い合わせDB > お問い合わせID

設定方法

1. お問い合わせコメントDBでレコード検索ブロックとレコードリストブロックを作成する
お問い合わせ一覧のお問い合わせ詳細(レコードアイテムブロック)を設置しているページに、コメント履歴一覧としてレコード検索ブロックとレコードリストブロックを作成し、設置します。
ご注意
・レコード検索ブロックの検索項目は、自動検索用お問い合わせIDを使用します。
・コメント履歴一覧は、自動検索用お問い合わせIDを使用します。
2. 検索パラメータ「&rlb0aaaa_q_f0bb=」部分を取得する
お問い合わせ詳細ページを表示し自動検索用お問い合わせID検索を実行します。
URLの検索パラメータ「&rlb0aaaa_q_f0bb=」部分をコピーしてテキストエディタなどに保管します。
パラメータ内「&rlb0aaaa」の「aaaa」の部分はコメント履歴一覧のブロックID、
f0bb」の「bb」の部分はお問い合わせコメントDBの自動検索用お問い合わせIDのフィールドIDとなります。
3. お問い合わせ詳細ページへ遷移させるURLに検索パラメータを追加する
お問い合わせ一覧(レコードリストブロック)のお問い合わせ詳細ページへ遷移させるURLに検索パラメータを追加します。
パラメータ内の「${record['f0cc']}」の「cc」の部分はお問い合わせDBのお問い合わせIDのフィールドIDとなります。
フィールドIDの確認場所
rlb0aaaa_q_f0bb=${record['f0cc']}
▼お問い合わせ一覧がビジュアル設定の場合
リストバーツ>カラム詳細設定「リンク設定:パラメータ付与」からパラメータを追加します。
▼お問い合わせ一覧がソース設定の場合
リンク設定されているフィールドソース部分にパラメータを追加します。
4. お問い合わせ詳細ページのレコード検索ブロックを削除する
お問い合わせ詳細ページのレコード検索ブロックは不要なので、ページ上からブロックを削除します。
5. 動作確認をする
マイページへログインしてお問い合わせ一覧からお問い合わせ詳細ページに遷移した際に、そのお問い合わせに紐づくコメントのみが表示されているか動作確認をします。

パラメータ改ざん時の対処方法

お問い合わせ一覧のフィルタはレコード公開範囲で設定するので、お問い合わせ詳細ページ遷移に付与されるパラメータ「?record=DBID.レコードID」のIDを書き換えた場合はシステム側でお問い合わせ詳細部分を非表示にする処理が行われます。
お問い合わせ詳細ページのコメント履歴一覧は冒頭でも記載したとおり、レコード公開範囲では設定できないためシステム側での非表示処理が行われず、URLに付与したお問い合わせIDを別のIDに書き換えると、書き換えたお問い合わせIDに紐づくコメント履歴が表示されます。

そのため、パラメータ値が改ざんされた場合に備えて、コメント履歴一覧を非表示にする処理を追加します。
一般公開している一覧など、すべてのレコードの閲覧を許可する場合は処理不要です。

会員DB
レコードIDをお問い合わせDBに引き渡す用のレコードIDを用意します。
フィールド名 フィールドタイプ 詳細設定
引渡し用レコードID テキスト デフォルト値:自動生成値(レコードID)

お問い合わせDB
会員DBのレコードIDを格納する会員DBのレコードIDを用意します。
フィールド名 フィールドタイプ 詳細設定
会員DBのレコードID テキスト なし

お問い合わせ登録時に会員DBから引渡し用レコードIDを取得するDBトリガ レコードアクションを設定します。
▼基本設定
表示名 会員DBのレコードID に 引渡し用レコードID を格納
アクション先 自DB:お問い合わせDB
アクション先への操作 更新
▼処理
処理マッピング 会員DBのレコードID = 会員メールアドレス(連携用) > 引渡し用レコードID

お問い合わせ一覧
お問い合わせ詳細ページへ遷移させるURLに会員DBのレコードIDのパラメータを追加します。
パラメータ内の「randomNumber=${record['f0dd']}」の「dd」の部分はお問い合わせDBの会員DBのレコードIDのフィールドIDとなります。
フィールドIDの確認場所
rlb0aaaa_q_f0bb=${record['f0cc']}&randomNumber=${record['f0dd']}

会員DBのレコードIDをパラメータで付与させるために、お問い合わせ一覧のソースに会員DBのレコードIDのフィールド使用定義タグを追加します。
<!--/* 会員DBのレコードID(非表示処理用) (number) */-->
  <sp:record-data-field name="f0dd"></sp:record-data-field>

お問い合わせ詳細ページ
bodyタブに、下記Thymeleafを設置します。
コメント履歴一覧を非表示にした際に「アクセス権限なし」などとエラー表示させる場合は、フリーコンテンツブロックの使用を推奨します。
<!-- レコードアイテムブロックタグ -->
<sp:block name="rib0****"></sp:block>

<br><br>

<th:block th:if="${cp.result.value['errorFlg']}">
	<!-- フリーコンテンツブロックタグ -->
	<sp:block name="fcb0****"></sp:block>
</th:block>

<th:block th:if="!${cp.result.value['errorFlg']}">
	<!-- レコードリストブロックタグ -->
	<sp:block name="rlb0****"></sp:block>
</th:block>

PHPタブに、下記PHPを設置します。
パラメータで付与したお問い合わせID改ざん時 または パラメータで付与した会員DBのレコードIDが改ざんされ、認証エリアのPHPにて取得した会員DBのレコードIDと不一致になった場合に、コメント履歴一覧を非表示にします。
<?php
$recordID = "_id"; //会員DBのレコードIDをセット

$autoSearchContactIDTxt = $SPIRAL->getParam("rlb0aaaa_q_f0bb"); //検索項目のお問い合わせID(自動検索用)の検索パラメータをセット
$randomNumber = $SPIRAL->getParam("randomNumber"); //会員DBのレコードID(非表示処理用)のパラメータをセット
$digits = 10; //お問い合わせコメントDBのお問い合わせID(自動検索用)桁数をセット

$SPIRAL->setTHValue("errorFlg",false);
$param = explode(".", $SPIRAL->getParam("record"));
if(str_pad( $param[1], $digits, 0, STR_PAD_LEFT) != $autoSearchContactIDTxt || $SPIRAL->getAuthRecordByFieldId($recordID) != $randomNumber){
    $SPIRAL->setTHValue("errorFlg",true);
}
?>

最後に

今回紹介したレコード検索ブロックを使用したフィルタ設定は、レコード公開範囲を超えたフィルタ設定となります。
そのため実装する際には、意図した動きをしているか十分に動作確認を行ってください。
解決しない場合はこちら コンテンツに関しての
要望はこちら