GitHub(nextgroup2706/ken_nogi)は今後使わず自社Gitea運用に切替え。 NodeSrvは旧リポジトリの履歴を破棄しファイルのみ統合(Dokploy用サービスアカウントは 別途mygit-admin/NodeSrv.gitに履歴あり)。notepmエクスポート(12GB)とPleasanter インストーラzip(208MB)はサイズが大きいため.gitignoreで除外。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
5.2 KiB
5.2 KiB
別記資料 スクリプト(Scripts)全文 (27/28)
// ...(前ファイルからの続き)
let targetUrl = baseUrl + '/items/' + parentId;
window.location.href = targetUrl;
break;
default:
console.log('processScript: 未対応のプロセス名です: ' + procName);
return false;
}
// プロセス実行
$p.execProcess($btn);
//プロセス側で設定した入力検証(ValidateInputs)が未入力エラーになった場合、
//Pleasanterが対象項目へ<label id="Results_XXX-error" class="error" for="Results_XXX">入力必須項目です。</label>を
//動的追加する。これを拾い、for属性から通常のフィールドラベル(class="error"でない方)を逆引きして
//まとめて下部にアラート表示する(必須項目名はスクリプト内にハードコードしない)
setTimeout(function () {
let $errorLabels = $('label.error[id$="-error"]');
if ($errorLabels.length) {
let labelTexts = [];
$errorLabels.each(function () {
let forAttr = $(this).attr('for');
let $fieldLabel = $('label[for="' + forAttr + '"]').not('.error').first();
labelTexts.push($fieldLabel.length ? $fieldLabel.text().trim() : forAttr);
});
$p.ex.setMyMessage('new-status-red', labelTexts.join('、') + ' は必須項目です。入力してください。');
}
}, 300);
}
//----------------------------------------------------------------------
//日付項目(dateColumn)に本日日付、ユーザー項目(userColumn)にログインユーザーを設定する。
//以前はProcess側の「データの変更」機能で設定していたが、その反映(サーバー側)はexecProcess後になり、
//先に動くbefore_validate側のログ転記処理(saveReasonLog/saveCalculateLog等)が値を取得できず欠落する
//不具合があったため、execProcess呼び出し前にクライアント側で直接設定するここへ移設した
$p.ex.setTodayAndUser = function (dateColumn, userColumn) {
let now = new Date();
let dateStr = now.getFullYear() + '/' + (now.getMonth() + 1).toString().padStart(2, '0') + '/' + now.getDate().toString().padStart(2, '0');
$p.set($('#Results_' + dateColumn), dateStr);
$p.set($('#Results_' + userColumn), $p.userId());
}
//----------------------------------------------------------------------
//ClassG(現在の進捗)が「1:承認図後・着工中」の場合、ClassH(現場の進捗)・ClassI(必要な見積金額)・
//DescriptionA(問い合わせ経緯)が未入力ならアラート表示(プロセス実行自体をブロックする)
//「新規依頼」プロセス実行前のみ呼ばれる(新規依頼以降はStatusControlsによりClassG/H/Iが読取専用化されるため、01_基本スクリプト.jsのbefore_validateからここへ移設)
$p.ex.checkClassGRequiredFields = function () {
if ($('#Results_ClassG').val() == '1') {
let emptyLabels = [];
if (!$('#Results_ClassH').val()) emptyLabels.push('現場の進捗');
if (!$('#Results_ClassI').val()) emptyLabels.push('必要な見積金額');
if (!$('#Results_DescriptionA').val()) emptyLabels.push('問い合わせ経緯');
if (emptyLabels.length > 0) {
window.alert(emptyLabels.join('、') + ' は必須項目です。入力してください。');
return false;
}
}
return true;
}
serverscripts/0_子番自動保存スクリプト.js.js
/*
@config :
@filename : 子番自動保存スクリプト.js
@title : 子番自動保存スクリプト
@name :
@siteIds :
@siteTitles : 問合せ内容管理
@disabled: false
*/
try {
setSubNumber();
} catch (error) {
context.Log(error);
}
//新規作成直後(自動採番=ClassX確定後)にClassXから子番(ClassB)を算出しDBへ保存する。
//クライアント側 $p.setSubNumber(scripts/1_01_基本スクリプト.js.js)と同じロジック・同じガードをサーバー側にも実装し、
//「編集画面を開かない限りClassBがDBへ保存されない」不具合に対応する。
function setSubNumber() {
let classX = model.ClassX;
if (!classX) {
context.Log('[子番自動保存] ClassXが空のためスキップしました。ResultId=' + model.ResultId);
return;
}
let subNumber = classX.split('-')[1]; //管理番号を「-」で分割して子番を取得
if (subNumber && subNumber !== model.ClassB) {
model.ClassB = subNumber;
model.UpdateOnExit = true; //スクリプト終了時に現在のレコード情報を自動保存
context.Log('[子番自動保存] ClassBを保存しました。ResultId=' + model.ResultId + ' ClassB=' + subNumber);
}
}