"use strict"; /* * マスタテーブル(SiteId=1相当)へ、新規Description062("LINEWORKS所属組織")を追加する。 * 既存Columnsはそのまま維持し、末尾に1件追記する(Columns配列は完全上書きのため、既存分を * 含めて送信する必要がある。add-existence-flag-fields.jsと同じパターン)。 * プリザンターGroups機能(Class035)は今後使わない方針(2026-08-13、ユーザー確定)。 * 既定はドライラン。実際に送信するには --execute を付ける。 * * 実行: node scripts/add-org-units-field.js [--execute] */ const { getSite: fetchSite } = require("../src/lib/pleasanterClient"); const { saveSiteSnapshot } = require("../src/lib/siteConfigStore"); const BASE_URL = process.env.PLEASANTER_BASE_URL; const API_KEY = process.env.PLEASANTER_API_KEY; const SITE_ID = process.env.PLEASANTER_MASTER_SITE_ID; if (!BASE_URL || !API_KEY || !SITE_ID) { console.error("PLEASANTER_BASE_URL / PLEASANTER_API_KEY / PLEASANTER_MASTER_SITE_ID が未設定"); process.exit(1); } const NEW_COLUMNS = [ { ColumnName: "Description062", LabelText: "LINEWORKS所属組織" }, ]; async function getSite() { const data = await fetchSite({ baseUrl: BASE_URL, apiKey: API_KEY, siteId: SITE_ID }); saveSiteSnapshot(SITE_ID, data); return data; } async function updateSite(body) { const res = await fetch(`${BASE_URL.replace(/\/$/, "")}/api/items/${SITE_ID}/updatesite`, { method: "POST", headers: { "Content-Type": "application/json; charset=utf-8" }, body: JSON.stringify(body), }); const data = await res.json(); if (!res.ok || data.StatusCode !== 200) { throw new Error(`updatesite failed: ${res.status} ${JSON.stringify(data)}`); } return data; } async function main() { const execute = process.argv.includes("--execute"); const current = await getSite(); const currentColumns = (current.SiteSettings && current.SiteSettings.Columns) || []; const alreadyExists = currentColumns.some((c) => c.ColumnName === "Description062"); if (alreadyExists) { console.log("[SKIP] Description062は既にColumnsに存在します。二重追加を避けるため何もしません。"); return; } const mergedColumns = [...currentColumns, ...NEW_COLUMNS]; const body = { ApiVersion: "1.1", ApiKey: API_KEY, ReferenceType: current.ReferenceType, ParentId: current.ParentId, InheritPermission: current.InheritPermission, Permissions: current.Permissions, SiteSettings: { ...current.SiteSettings, Columns: mergedColumns }, }; console.log(`接続先: ${BASE_URL} (SiteId=${SITE_ID})`); console.log("--- 現状 → 希望 ---"); console.log(`既存Columns件数: ${currentColumns.length} -> ${mergedColumns.length}`); console.log("追加するColumns:", JSON.stringify(NEW_COLUMNS, null, 2)); if (!execute) { console.log("\n[ドライラン] --execute を付けずに実行したため送信していません。"); return; } const result = await updateSite(body); console.log("\n[OK] 送信結果:", JSON.stringify(result)); await getSite(); console.log(`[OK] 反映後の状態をconfigs/${SITE_ID}/latest.jsonへ保存`); } main().catch((e) => { console.error(e); process.exit(1); });