インクルード
概要¶
拡張サーバスクリプトなどのサーバスクリプトの共通コードをインクルードする機能です。//Include命令をサーバスクリプトの任意の位置に記述して使用します。共通関数などを定義しておくことで、コードの一元管理が可能になります。
使用例¶
下記の例では Name が "ServerScriptName" の拡張サーバスクリプトを読み込み // Include を記述した位置に挿入します。
※事前に Name が "ServerScriptName" の拡張サーバスクリプトのファイル(JSON)を配置しておく必要があります。
サンプルコード¶
1. 複数のテーブルで使うロガーを、拡張サーバスクリプトとして1本のみ置く
複数のテーブルで使うロガーを、サーバの拡張サーバスクリプトとして1本のみ配置します。各テーブルのサーバスクリプトは//Include: commonLoggerの1行でロガーを読み込み、logger.info(...)のように呼び出します。ロガーを直すときは、サーバ上のファイルを1つ直せば、読み込んでいるすべてのテーブルに反映されます。
実務での使いどころ¶
同じテーブルの中で使う共通の処理には、コードの共有が使えます。ただし、共有はテーブル単位のため、テーブルが増えるとテーブルの数と同じ数のコピーができ、直すときはすべてのコピーを直す必要があります。インクルードを使うと、ロガーの本体はサーバ上に1つになり、テーブルが増えても直す場所は増えません。1つのテーブルで完結する処理は共有を使い、テーブルをまたいで使う段階でインクルードに移すのがおすすめです。
事前準備¶
1:サーバのApp_Data/Parameters/ExtendedServerScripts/に、次の2つのファイルを配置します。
| ファイル | 内容 |
|---|---|
| commonLogger.json | 拡張サーバスクリプトの設定。Nameが//Include:で指定する名前になる。実行条件はすべてfalseにする |
| commonLogger.json.js | ロガーの本体。JSONファイルと同じ名前に.jsを付けたファイルに書くと、Bodyの代わりに読み込まれる |
2:配置・変更のあとは、プリザンターを再起動してください。再起動するまで反映されません。
3:ロガーを使う各テーブルの「テーブルの管理 > サーバスクリプト」タブで、呼び出し側のスクリプトを登録します。
3-1:「新規作成」を選択する。
3-2:タイトル: 任意の名前(例:includeCommonLogger)
3-3:スクリプト: 下記サンプルコード「呼び出し側」を貼り付け
3-4:条件: 「作成後」にチェック
JSON(commonLogger.json)¶
{
"Name": "commonLogger",
"Description": "複数テーブルで共有する汎用ロガー",
"DeptIdList": null,
"GroupIdList": null,
"UserIdList": null,
"SiteIdList": null,
"IdList": null,
"Controllers": null,
"Actions": null,
"WhenloadingSiteSettings": false,
"WhenViewProcessing": false,
"WhenloadingRecord": false,
"BeforeFormula": false,
"AfterFormula": false,
"BeforeCreate": false,
"AfterCreate": false,
"BeforeUpdate": false,
"AfterUpdate": false,
"BeforeDelete": false,
"BeforeBulkDelete": false,
"AfterDelete": false,
"AfterBulkDelete": false,
"BeforeOpeningPage": false,
"BeforeOpeningRow": false,
"Shared": false,
"Functionalize": false,
"TryCatch": false,
"Body": ""
}
JavaScript(commonLogger.json.js)¶
// ============================================================
// デバッグモード。true にすると debug() ログが出力される
// ============================================================
const DEBUG_MODE = false;
/**
* 出力先の制御
* console : ブラウザ開発者ツールのコンソールに出力するか
* syslogs : システムログ(SysLogs テーブル)に出力するか
*/
const LOG_TARGET = {
console: true,
syslogs: true,
};
// ============================================================
// ロガー本体
// ============================================================
const logger = (function (debugMode, target) {
/**
* 内部共通出力関数
* @param {Function} logFn - logs オブジェクトのメソッド
* @param {string} message - ログメッセージ
* @param {string} method - メソッド名(省略可)
* @param {boolean} forceOutput - デバッグモードに関係なく常に出力するか
*/
function _write(logFn, message, method, forceOutput) {
if (!forceOutput && !debugMode) return;
const m = method || '';
logFn(message, m, target.console, target.syslogs);
}
return {
/**
* デバッグログ(DEBUG_MODE=true のときのみ Info として出力)
* @param {string} message
* @param {string} [method]
*/
debug: function (message, method) {
_write(
function (msg, mth, con, sys) {
logs.LogInfo(msg, mth, con, sys);
},
'[DEBUG] ' + message,
method,
false, // デバッグモード時のみ出力
);
},
/**
* 情報ログ(常に Info として出力)
* @param {string} message
* @param {string} [method]
*/
info: function (message, method) {
_write(
function (msg, mth, con, sys) {
logs.LogInfo(msg, mth, con, sys);
},
message,
method,
true, // 常に出力
);
},
/**
* 警告ログ(常に Warning として出力)
* @param {string} message
* @param {string} [method]
*/
warn: function (message, method) {
_write(
function (msg, mth, con, sys) {
logs.LogWarning(msg, mth, con, sys);
},
message,
method,
true,
);
},
/**
* ユーザエラーログ(常に UserError として出力)
* @param {string} message
* @param {string} [method]
*/
userError: function (message, method) {
_write(
function (msg, mth, con, sys) {
logs.LogUserError(msg, mth, con, sys);
},
message,
method,
true,
);
},
/**
* システムエラーログ(常に SystemError として出力)
* @param {string} message
* @param {string} [method]
*/
systemError: function (message, method) {
_write(
function (msg, mth, con, sys) {
logs.LogSystemError(msg, mth, con, sys);
},
message,
method,
true,
);
},
/**
* 例外ログ(常に Exception として出力)
* catch ブロック内で利用する想定。
* @param {Error|string} error - Error オブジェクト、またはメッセージ文字列
* @param {string} [method]
*/
exception: function (error, method) {
var message;
if (error && typeof error === 'object' && error.stack) {
message = error.message + '\n' + error.stack;
} else {
message = String(error);
}
_write(
function (msg, mth, con, sys) {
logs.LogException(msg, mth, con, sys);
},
message,
method,
true,
);
},
};
})(DEBUG_MODE, LOG_TARGET);
JavaScript(呼び出し側)¶
注記¶
SiteIdList(およびDeptIdList・GroupIdList・UserIdList・IdList)で絞り込むと、拡張サーバスクリプトの実行に加えて、//Include:での読み込みも絞り込まれます。対象外のテーブルから//Include:すると、logger is not definedのエラーになります。複数のテーブルから使う場合は、絞り込みを指定しない(nullのまま)でください。//Include:で指定するのはJSONのNameで、ファイル名ではありません。ファイル名とNameをそろえると管理しやすくなります。- 読み込んで使うための拡張サーバスクリプトは、実行条件をすべて
falseにしてください。trueの条件があると、//Include:していないテーブルでも、その条件で実行されます。 - ロガーは、
loggerをトップレベルで宣言しています。tryのブロックの中で宣言すると、呼び出し側から参照できません。
対応バージョン¶
| 対応バージョン | 内容 |
|---|---|
| 1.1.37.0 以降 | 機能追加 |
