ken_nogi/Pleasanter/営業積算システム/docs/新・営業積算システム仕様書_分割/037_新・営業積算システム仕様書_別記資料スクリプト(7/28).md
Kenichiro NOGI ce58cb4be4 初回コミット: dev配下(NodeSrv/Pleasanter等)をGitea管理下に統合
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>
2026-09-04 15:37:06 +09:00

3.2 KiB
Raw Permalink Blame History

別記資料 スクリプトScripts全文 728

/*
@config :
@filename : 02_プロセス処理スクリプト.js
@title : 02_プロセス処理スクリプト.js
@name :
@siteIds :
@siteTitles : プロセス実行前の処理
@disabled: false
*/

//プロセスボタンから呼び出す共通ディスパッチャ(雛形)
//Process定義側のOnClickは $p.ex.processScript($(this)); の形(ボタン要素そのものを渡す形)で呼び出す想定。
//procNum数値文字列ではなく、ボタンの表示ラベル文字列procNameで処理を振り分ける方針②サイトに倣う//プロセス再設計時、switch内にプロセス名ごとのcaseを追加していく。
$p.ex.processScript = async function (target) {
    let $btn = $(target);
    if (!$btn.length) {
        console.log('processScript: 対象ボタンが取得できませんでした');
        return false;
    }

    let procName = $btn.text().replace(/^\s+/, '').trim();
    console.log('processScript ' + procName);

    //確認ダイアログを出さないプロセス名。ここにprocNameを追加すると、そのプロセスはconfirmをスキップして即実行する
    let noConfirmProcesses = [];

    switch (procName) {
        case '登録完了':
            //実行者登録者本人限定、Process側View.ColumnFilterHash: ClassB=Ownで担保
            //要入力チェックありProcess側ValidateInputsで担保
            //確認プロンプトあり
            let popMessage1 = '"' + procName + '" 処理を実行します。よろしいですか?';
            if (!confirm(popMessage1)) return;
            break;
        default:
            let popMessage = '"' + procName + '" 処理を実行します。よろしいですか?';
            if (!noConfirmProcesses.includes(procName) && !confirm(popMessage)) return;
            break;
    }

    //プロセス実行
    $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);
}

serverscripts/1_マスターデータ取得.js