ブログ

2024/06/26
【プリザンター】 第253回)分類項目以外でルックアップを実現する方法

標準機能のルックアップ機能

こんにちは、CCS田中です。

プリザンターで非常に便利な機能である「ルックアップ機能」は使用されている方も多いと思います。ただし、この機能には以下のような制限があります。
「ルックアップ機能の設定は「分類項目」のみ可能」

つまり、説明項目や数値項目、日付項目の場合はルックアップ機能を使用することができません。
例えば「祝日一覧のマスタデータを保持しているときに、日付を選択したら祝日一覧マスタを参照して祝日名を別項目に連携させる」などとしたい場合にはルックアップ機能で実現しようとすると、分類項目を使わなくてはならず、ちょっと不便です。

そのような要望をサーバスクリプトを用いて解決する方法があります。次で詳細を説明します。

サーバスクリプトを用いてルックアップ機能を実現する方法

登録テーブルで、日付を指定したときに祝日一覧テーブルから祝日名をルックアップで持ってきて、登録テーブルに祝日名を書き出すようにします。
今回以下の2つのテーブルをカッコ内の項目が含まれるように作成します。

・祝日一覧テーブル(日付A、分類A)
・登録テーブル(日付B、分類B)

登録テーブルの日付Bは、「自動ポストバック」のチェックをオンにします。
さらに以下のサーバスクリプトを追加します。
条件は、「画面の表示の前」とします。
下記は、祝日一覧テーブルのサイトIDが「116309」の時の例です。必要に応じてサイトIDは書き換えてください。

<サーバスクリプト>


// マスターサイトIDを設定
let parentSite = 116309;

var specificDate = new Date(model.DateB);
var Holiday = formatDate(specificDate);

// 子サイト日付Bの値で、マスターサイト日付Aをフィルタ
let data = {
"View": {
"ColumnFilterHash": {
"DateA": "[\"" + `${Holiday}` + "," + `${Holiday}` + "\"]"
},
"ColumnFilterSearchTypes": {
"DateA": "ExactMatch"
}
}
};
// dataに設定した条件で、マスターサイトのレコード情報を取得
let results = Array.from(items.Get(parentSite, JSON.stringify(data)));

// 該当するレコードがある場合、分類Bにマスターレコードの分類Aを転記
if(results.length){
model.ClassB = results[0].ClassA;
}

// 日付フォーマットの変換関数
function formatDate(date) {
// 年、月、日を取得
var year = date.getFullYear();
var month = date.getMonth() + 1; // 月は0から始まるので1を加える
var day = date.getDate();

// 月と日が1桁の場合、先頭に0を追加
month = month < 10 ? '0' + month : month;
day = day < 10 ? '0' + day : day;

// フォーマットされた日付文字列を返す
return year + '/' + month + '/' + day;
}



祝日一覧テーブル


登録テーブルの入力画面


日付入力後の登録テーブルの結果
該当する祝日がある場合の表示


該当する祝日がない場合の表示(祝日名が空欄)


上記の結果の通り、祝日一覧に設定されている祝日の日付を指定した場合は、祝日名が連携されて、祝日ではない日を指定した場合は空欄になることが確認できると思います。
このようにルックアップ機能をローコードで生成できました。

まとめ

いかがでしたか?
今回はプリザンターの便利な機能で制限があるものに対してサーバスクリプトを使って拡張してみました。プリザンターは日々機能拡張してきていますが、それでも自分のやりたいことが標準機能では実現されていない場合があります。そんな時のためのローコードです。ぜひ上記の例を参考に試してみてください。

弊社ではプリザンターをご使用中、または、これからご使用になられる方向けに、運用ノウハウ集、プリザンター逆引き辞典、スタイル・スクリプトサンプル集の販売を行っております。
また、 プリザンターからのExcel帳票出力・PDF帳票出力の支援パック販売 も行っております。
プリザンター導入の支援や、スクリプト開発などの支援も行っておりますので、まずは気軽にご相談ください。
※ご相談の内容によっては有料となる場合がございます。予めご了承ください。
☆☆☆
ブログ内容への質問や追加説明をご希望の方は【 問い合わせフォーム 】からお気軽にお問い合わせください
☆☆☆

PAGE TOP