ブログ

2025/03/26
【プリザンター】 第291回)コードの繰り返し修正削減!『コードの共有』と『インクルード』でスクリプト管理をシンプルに①

サーバスクリプトの活用

こんにちは、シーイーシーカスタマサービスの森山です。

弊社主催のセミナーや、年間サポートに関するお問合せの中で「サーバースクリプトを上手く使えていない」というご意見をよく伺います。
サーバースクリプトはその名の通りサーバサイドで実行し、条件分岐、計算、文字列処理、レコードの操作、メールやチャットへの通知、動的なアクセス制御等を行うことができますが、スクリプトと比べると実行のタイミングが分かりづらいなど、活用しきれていないケースも多いようです。

また、サーバスクリプトはテーブルに紐づくため、例えば、同じ内容のスクリプトを他テーブルでも使用する場合は、各テーブルに設定する必要があります。
そのため、修正が発生した場合には、設定したテーブルそれぞれで修正をしなくてはなりません。そのような対応を「コードの共有」、「インクルード」を使用することで回避することができます。

そこで今回は「コードの共有」について焦点を当ててみます。
「コードの共有」は、同じテーブル内に他のサーバスクリプトが設定されている場合、「共有」のチェックがされたスクリプトが他のスクリプトの先頭に読み込まれ、処理されるよう追加されます。

「コードの共有」機能を使うことで、以下のようなメリットが得られます。
・コードの重複を防ぎ、保守性を高める
・複数スクリプト間で一貫性を保ちやすくなる
・メンテナンス時の手間を削減、効率的な修正ができる


以上を踏まえて、実際の設定を交えながら「コードの共有」機能をご紹介します。

「共有」の使用例

今回は以下の要件でサーバスクリプトの設定を行います。
①:レコード作成時、管理者項目に指定ユーザを設定する
②:レコード更新時、担当者項目に指定ユーザを設定する
③:レコードの作成更新時、内容項目にログ「日時:操作ユーザ名(ユーザID):アクション名」を出力する

任意のテーブルを用意し、編集画面に「管理者」「担当者」「内容」を表示します。
次に、サーバスクリプトを設定します。まずは①のサーバスクリプトを設定します。
新規作成ボタンをクリックし、任意のタイトル、条件に「作成前」を設定し、スクリプト欄に以下を記述します。

// 管理者項目に、ユーザID:5を設定
model.Manager = 5;

次に、②のサーバスクリプトを設定します。
新規作成ボタンをクリックし、任意のタイトル、条件に「更新前」を設定し、スクリプト欄に以下を記述します。
// 担当者項目に、ユーザID:6を設定
model.Owner = 6;
設定が終わったら動作を見てみましょう。
レコードの新規作成、更新にあわせて、管理者項目と担当者項目のユーザが変化することが確認できます。


最後に、③のサーバスクリプトを設定します。
新規作成ボタンをクリックし、任意のタイトル、条件に「共有」を設定し、スクリプト欄に以下を記述します。
// ユーザー情報取得
var userId = context.UserId;
var user = users.Get(userId);

// 日付&時間を取得しフォーマットする関数
function getCurrentDateTime() {
var day = new Date();

var year = day.getFullYear();
var month = day.getMonth() + 1;
var date = day.getDate();
var hour = day.getHours();
var minute = day.getMinutes();
var second = day.getSeconds();

function padZero(num) {
return ('0' + num).slice(-2);
}

// フォーマット例:20250314123045
return year.toString() + padZero(month) + padZero(date) + padZero(hour) + padZero(minute) + padZero(second);
}

// ログメッセージを作成する関数
function createLog(user, action, dateTime) {
return `${dateTime}:${user.Name}(${user.DeptId}):${action}\r\n`;
}

// ログを追加する関数(既存本文に追記)
function appendLogToBody(body, user, action) {
var dateTime = getCurrentDateTime();
var logLine = createLog(user, action, dateTime);
return logLine + body;
}

// 実際にBodyへログを追記(context.Action をそのまま渡す)
model.Body = appendLogToBody(model.Body, user, context.Action);

設定が終わったら動作を見てみましょう。
レコードの新規作成、更新にあわせて、管理者項目と担当者項目のユーザが変化、且つ、内容項目にログが出力されることが確認できます。


「共有」を使うことで、一つのサーバスクリプトに共通のロジックをまとめ、より効率的な運用を実現できます。

まとめ

いかがでしたか?
次回は「インクルード」機能について解説しますので、ぜひ参考にしてみてください。
「コードの共有」と「インクルード」を使いこなして、サーバースクリプトの利便性を体感していただければ幸いです。

弊社ではプリザンターをご使用中、または、これからご使用になられる方向けに 各種書籍の販売 、プリザンターからの Excel帳票出力・PDF帳票出力の支援パック販売 を行っております。
また、年間サポート では日々の操作や設定に関するご質問、トラブル発生時の調査などの技術サポート、プリザンターをより活用いただくための拡張コンテンツをご提供しております。

プリザンターの導入からスクリプト開発、年間サポートなど、ビジネスをあらゆる角度から全力サポートいたします。ぜひお気軽にご相談ください!
※ご相談の内容によっては有料となる場合がございます。予めご了承ください。
☆☆☆
ブログ内容への質問や追加説明をご希望の方は【 問い合わせフォーム 】からお気軽にお問い合わせください
☆☆☆

お問い合わせ
PAGE TOP