ブログ

2024/01/17
【プリザンター】 第230回)2つのテーブルのレコードをバックグラウンドで紐づける方法

2つのテーブルでレコードをリンクさせる

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

今回はタイトルでは分かりづらいかもしれませんが、理解していただくと便利に使えると思いますので、参考にしてください。

例としては、要員の契約管理に関連したものです。
別のシステムで要員管理の情報を保有しており、要員名や要員コード、契約期間、単金、所属会社情報が登録されているものがあります。これらの情報は要員コードは一意になっていますが、契約期間や単金などが異なっています。つまり要員Aが、2024年1月~2月の契約と、2024年3月~4月の契約の情報があった場合は計2レコードとなります。
この情報は契約が更新される度に追加になるため、プリザンターに定期的に取り込んで管理していきたいとします。また、その時に要員の個別情報(スキル等)をプリザンターで持たせて管理したいとします。
要員のマスタとして、別システムにある要員コードと要員名をプリザンターに取り込みます。個別情報はこのマスタに書き込んでいきます。

さて、ここまでで2つの親子テーブルが完成しましたが、2つのテーブルがリンクできていません。要員の契約情報から要員のスキルが管理できると便利になりますが、インポート時に紐づける情報がないためリンクの設定ができません。

そこで、バックグラウンドサービスでサーバスクリプトを動作させて、2つのテーブルをリンクさせたいと思います。
方法については次で説明します。

バックグラウンドサービスでのサーバスクリプト設定

まず2つのテーブル(契約情報テーブル、要員テーブル)を作成します。
「」内は項目名、()内は項目種別を示します。項目種別の指定がないものは今回のスクリプトには影響しませんので、自由に設定してください。

契約情報テーブルには、「要員コード」(分類B)、「要員名」、「単金」、「契約開始日」、「契約終了日」、「リンク用要員コード」(分類A)を登録します。
「リンク用要員コード」の選択肢は、要員テーブルへリンクするように設定してください。([[要員テーブルのサイトID]]を指定)
要員テーブルには、「要員コード」(タイトル)、「要員名」、「スキル情報」を登録します。

契約情報テーブルのデータは、別のシステムからインポートされる想定です。
要員テーブルのデータは、契約情報テーブルから要員コードで重複排除した情報(要員コードと要員名のみ)をインポートする想定です。

ここまでで、2つのテーブルにデータが入り、テーブル自体はリンク設定されていますが各レコードのリンクはありません。
契約情報テーブルの「リンク用要員コード」が空の状態になっています。

契約情報テーブル(リンク前)



要員テーブル


次にバックグラウンドサービスで2つのテーブルのレコードがリンクされるように以下のようなサーバスクリプトを作成します。
バックグラウンドサービスのサーバスクリプトを登録する場合は、特権ユーザである必要があります。
設定は、メニューの「管理」→「テナントの管理」から行います。

下記のサーバスクリプトの例では、「契約情報テーブル」のサイトIDが”113232”、「要員テーブル」のサイトIDが”113233”の場合の記載となっています。


let result_tran = items.Get(113232);
for (let item_tran of result_tran) {
let data = {
'View':{
'ColumnFilterHash':{
'Title':item_tran.ClassB
}
}
};
let result_master = items.Get(113233,JSON.stringify(data));
for (let item_master of result_master) {
if(item_tran.ClassB = item_master.Title){
var jsonData = {
"ClassHash":{"ClassA":item_master.ResultId}
};
items.Update(item_tran.ResultId,JSON.stringify(jsonData));
}
}
}



サーバスクリプトを以下のように設定します。以下のイメージでは実行ユーザ部分は空白になっていますが、実際は各テーブルに権限のあるユーザを選択してください。



設定をした後に「今すぐ実行」をクリックすると、先ほどは空白だった「リンク用要員コード」が設定されます。



以下はサーバスクリプト実行前です。リンク情報がありません。


以下はサーバスクリプト実行後です。リンク情報が作成されています。


これで、元々レコード間でリンクのなかった情報が繋がりました。なお、今回はスケジューリングは設定していませんが、バックグラウンドサービスのサーバスクリプトはスケジュールを指定して定期実行も可能です。

まとめ

いかがでしたか?

今までは各テーブルに紐づいていたサーバスクリプトですが、バックグラウンドサービスで使えるようになったため、今までのような条件(実行トリガ)とは関係なく実行でき便利になりました。
なお、サーバスクリプトはサーバでの処理となるため、負荷のかかる処理などは利用者に影響のないように実行時間帯を考慮するなどしたほうがよいです。

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

PAGE TOP