これまで担当者がPleasanter画面でProcess実行した後、別途n8n Webhookを 手動で叩く必要があった。プロセス実行スクリプトのOnClickへWebhook自動POSTを 追加し、通知失敗時はプロセス実行自体を中断するようにした。あわせて 全Process実行時にコメント欄へ実行者・プロセス名を自動記録する。
69 lines
2.7 KiB
JavaScript
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()));
|
|
})();
|