ken_nogi/Pleasanter/.claude/js/site-scripts/健康診断管理/update-clientscript-process-508971.js
Kenichiro NOGI 88351e4165 feat: Process実行→HC-WP通知の連携をクライアントスクリプトから自動化、実行ログのコメント記録を追加
これまで担当者がPleasanter画面でProcess実行した後、別途n8n Webhookを
手動で叩く必要があった。プロセス実行スクリプトのOnClickへWebhook自動POSTを
追加し、通知失敗時はプロセス実行自体を中断するようにした。あわせて
全Process実行時にコメント欄へ実行者・プロセス名を自動記録する。
2026-09-12 15:24:19 +09:00

69 lines
2.7 KiB
JavaScript

// 健康診断管理 SiteId 508971: 既存のクライアントスクリプト「プロセス実行スクリプト」のBodyのみ
// ローカルファイルの最新内容で上書きする。Columns/EditorColumnHash/Processesには一切触れない。
"use strict";
const fs = require("fs");
const path = require("path");
const { findSiteDir, newModifyDir } = require("../../site-paths.js");
const PROJECT_NAME = "健康診断管理";
const ENV = "production";
const SITE_ID = 508971;
const REQUEST_LABEL = "update-clientscript-process";
const TITLE = "プロセス実行スクリプト";
const REPO_ROOT = path.join(__dirname, "..", "..", "..", "..");
const PROJECT_ROOT = path.join(REPO_ROOT, PROJECT_NAME);
const CONFIGS_DIR = path.join(PROJECT_ROOT, "configs", ENV);
const SCRIPT_FILE = path.join(
CONFIGS_DIR,
"site-508971_社員別健康診断管理",
"scripts",
"3_プロセス実行スクリプト.js"
);
function loadServerConfig() {
return JSON.parse(fs.readFileSync(path.join(REPO_ROOT, `config_${ENV}.json`), "utf-8"));
}
function loadLatest() {
const siteDir = findSiteDir(CONFIGS_DIR, SITE_ID);
const p = path.join(siteDir, "sitesettings", `site-${SITE_ID}_latest.json`);
const raw = JSON.parse(fs.readFileSync(p, "utf-8"));
return { current: raw.Response.Data, siteDir, rawText: fs.readFileSync(p, "utf-8") };
}
const execute = process.argv.includes("--execute");
const server = loadServerConfig();
(async () => {
const { current, siteDir, rawText } = loadLatest();
const settings = JSON.parse(JSON.stringify(current.SiteSettings));
settings.Links = current.SiteSettings.Links || [];
const script = (settings.Scripts || []).find((s) => s.Title === TITLE);
if (!script) {
console.error(`[エラー] スクリプト「${TITLE}」が見つかりません。`);
process.exit(1);
}
const newBody = fs.readFileSync(SCRIPT_FILE, "utf-8");
script.Body = newBody;
const requestBody = {
ApiVersion: 1.1, ApiKey: server.ApiKey, SiteId: SITE_ID,
Title: current.Title, ReferenceType: current.ReferenceType,
ParentId: current.ParentId, InheritPermission: current.InheritPermission,
SiteSettings: settings,
};
const modifyDir = newModifyDir(siteDir, REQUEST_LABEL);
fs.writeFileSync(path.join(modifyDir, `before_site-${SITE_ID}_latest.json`), rawText, "utf-8");
console.log("更新後Body文字数:", newBody.length);
if (!execute) {
console.log("(--execute 未指定のためプレビューのみ)");
return;
}
const url = `${server.BaseUrl}api/items/${SITE_ID}/updatesite`;
const res = await fetch(url, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(requestBody) });
console.log(`[結果] HTTP ${res.status}:`, JSON.stringify(await res.json()));
})();