生JSON取得(siteSettingJsons/)と設定分解(configs/)の保存先を分離し、 仕様書・概要書はClaudeが読み解いて執筆する方式に統一(機械生成の generate-site-documentation.jsは不使用)。10サイト分のspec.md/ overview.mdを刷新し、サイト間連携をまとめたsite-relations_overview.md を新規追加、全docsをPDF化した。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
17 KiB
サイト仕様書:稟議コード管理(SiteId: 160926)
- 取得元データ: site-160926_latest.json
- 取得日時: 2026-05-15T15:22:14(サイト更新日時)/設定バージョン
Ver: 18(SiteSettings.Version: 1.017)
1. サイト基本情報
| 項目 | 値 |
|---|---|
| TenantId | 1 |
| Title | 稟議コード管理 |
| ReferenceType | Results |
| ParentId | 63543(今回対象の10サイト群には含まれない外部の親サイト/フォルダ) |
| InheritPermission | 160926(自サイトの権限設定を使用) |
| Publish | false(外部公開なし) |
| DisableCrossSearch | false |
| Creator | 460 |
| Updator | 678 |
| CreatedTime | 2023-01-24T15:56:46 |
| SiteSettings.Version | 1.017 |
2. アクセス権限(Permissions)
| 種別 | 対象ID | 権限レベル |
|---|---|---|
| Dept | 8 | 7 |
| Dept | 56 | 7 |
| Group | 19 | 511 |
| Group | 27 | 7 |
| User | 460 | 511 |
※権限値はビットフラグの加算方式のため、正確な意味(閲覧/編集/削除等の組み合わせ)は環境のロール定義に依存する。Group 19・User 460 が511(管理者相当)、その他が7(一般的な閲覧+作成レベル相当)という偏りが見られる。
3. 画面構成
3.1 一覧画面(GridColumns)
| 順番 | 列名(内部) | 表示ラベル |
|---|---|---|
| 1 | ResultId | (標準ラベル)ID |
| 2 | Status | (標準ラベル)状態 |
| 3 | ClassA | エリア |
| 4 | ClassB | 稟議分類 |
| 5 | ClassC | 稟議コード |
| 6 | ClassD | 契約コード |
| 7 | ClassF | 用件・物件名 |
| 8 | Owner | 申請者 |
| 9 | DateA | 申請日 |
| 10 | UpdatedTime | (標準ラベル)更新日時 |
3.2 編集画面レイアウト(EditorColumnHash / Sections)
タブ「General」のみ定義。
| 順番 | 項目名(内部名) | ラベル名 |
|---|---|---|
| 1 | Title | (標準ラベル)タイトル |
| 2 | ResultId | (標準ラベル)ID |
| 3 | Status | (標準ラベル)状態 |
| 4 | ClassC | 稟議コード |
| 5 | _Section-2 | ―(セクション「稟議コード取得」開始) |
| 6 | ClassA | エリア |
| 7 | ClassB | 稟議分類 |
| 8 | Owner | 申請者 |
| 9 | ClassD | 契約コード |
| 10 | ClassE | 派生コード |
| 11 | ClassF | 用件・物件名 |
| 12 | DateA | 申請日 |
| 13 | Comments | (標準ラベル)コメント |
| 14 | ClassX | ラベル未設定(Hide項目。ClassAの選択値を裏で保持) |
| 15 | ClassY | ラベル未設定(Hide項目。ClassBの選択値を裏で保持) |
| 16 | _Links-319015 | ―(他サイト連携表示:SiteId 319015「新・稟議申請書」の関連レコード一覧を編集画面内に表示。詳細は「7. 他サイト連携」参照) |
Sections配列:
| Id | ラベル | AllowExpand | Expand |
|---|---|---|---|
| 2 | 稟議コード取得 | false | true |
3.3 タイトル表示(TitleColumns / TitleSeparator)
TitleColumns: ClassC, Owner, DateA を TitleSeparator " - " で連結。
表示式: [ClassC] - [Owner] - [DateA](例: 稟議コード - 申請者 - 申請日)
4. 項目定義(Columns)
| 列名(内部) | 種別 | 表示ラベル | 説明・入力ガイド | 備考 |
|---|---|---|---|---|
| ClassA | 文字列(分類) | エリア | ラジオ選択(東京/愛知/千葉/熊本/静岡/特建事業部/不動産事業部/デザイノ/その他) | NoWrap, ValidateRequired(必須), ExtendedHtmlAfterControlあり(注意書き、4.1参照), SearchType: PartialMatch |
| ClassB | 文字列(分類) | 稟議分類 | ラジオ選択(白稟議/赤稟議/駐車場稟議/赤稟議(5万以下)/事前稟議/お客様返金稟議/社用車事故報告/自家用車事故報告)。選択肢ごとに表示色クラス(status-white等)が設定 | ValidateRequired(必須), SearchType: PartialMatch |
| ClassC | 文字列(分類) | 稟議コード | 自動採番。書式 [ClassX][ClassY]-[yy]-[NNNN]、年単位でリセット、初期採番値4500 |
NoWrap, ExtendedFieldCss/ExtendedControlCss: code-readonly(読み取り専用風の見た目), ExtendedHtmlAfterControlあり(4.1参照) |
| ClassX | 文字列(拡張分類) | ラベル未設定 | Hide項目。ClassAの選択値(数値コード)のコピー先。稟議コード自動採番の構成要素として使用 | Hide: true |
| ClassY | 文字列(拡張分類) | ラベル未設定 | Hide項目。ClassBの選択値(数値コード)のコピー先。稟議コード自動採番の構成要素として使用 | Hide: true |
| Owner | ユーザー選択 | 申請者 | — | NoWrap, EditorReadOnly(編集画面では読み取り専用) |
| ClassD | 文字列(分類) | 契約コード | 外部サイト(SiteId 61259)を検索して選択。表示書式 [ClassH] - [ClassJ] - [ClassO] - [ClassP] |
UseSearch, NoWrap, GridDesign: [ClassD][ClassE], SearchType: PartialMatch, JsonFormat: true(詳細は7章) |
| ClassE | 文字列(分類) | 派生コード | 外部サイト(SiteId 64583/74927/72434の3サイト)を検索して選択 | UseSearch, Link: true, SearchType: PartialMatch |
| ClassF | 文字列(分類) | 用件・物件名 | 「契約コードまたは派生コードを選択すると自動的に邸名が入力されます」 | ValidateRequired(必須), FieldCss: field-wide |
| Status | 状態 | (標準ラベル)状態 | 選択肢: 100=発行, 500=申請, 900=決裁, 910=取消(各ステータスに表示色クラス) | NoWrap, ExtendedControlCss: code-readonly2 |
| DateA | 日付 | 申請日 | DefaultInput: "0"(新規作成時に当日日付が初期値) | EditorReadOnly(編集画面では読み取り専用) |
上記のほか、GridColumns/EditorColumnHashに現れる ResultId(ID), Title(タイトル), Statusのラベル未設定, Comments(コメント), UpdatedTime(更新日時)はColumns配列に個別定義がなく標準ラベルのまま。
4.1 項目ごとの補足HTML(ExtendedHtmlAfterControl)
| 列名 | 色(style/classから読み取れるもの) | 内容 |
|---|---|---|
| ClassA | 赤字(class: commentAdd red) |
「※物件・案件に対応したエリアを選択すること※」 |
| ClassC | 赤字・小フォント(style: color:red; font-size:60%;) |
「※自動採番」 |
5. 作成・更新権限(フィールド単位)
| 設定 | 対象列 | 権限レベル |
|---|---|---|
| PermissionForCreating | Owner | 5 |
| PermissionForUpdating | Owner | 5 |
加えて UpdateColumnAccessControls により、Status 列の更新のみ Dept 8・56、Group 19 に限定されている(一般ユーザーはステータスを直接変更できない)。
6. 集計設定(Aggregations)
| Id | GroupBy | Type | Target |
|---|---|---|---|
| 3 | Status | 0 | (空) |
| 1 | ClassA | 0 | (空) |
| 2 | ClassB | 0 | (空) |
Type: 0 は件数集計(Count)と推定される。
7. 他サイト連携(Links / ルックアップ)
7.1 明示的なLinks設定
| 起点列 | 参照先SiteId | 参照先の値→自コピー先 | JsonFormat |
|---|---|---|---|
| ClassD | 61259 | 参照先サイト(61259)の [ClassH] - [ClassJ] - [ClassO] - [ClassP] を検索・選択し、選択レコードの内容をJSON形式でこのサイトの ClassD にコピーする |
true |
| ClassE | 64583 | 参照先サイト(64583)を検索し、選択結果をこのサイトの ClassE にコピーする |
— |
| ClassE | 74927 | 参照先サイト(74927)を検索し、選択結果をこのサイトの ClassE にコピーする |
— |
| ClassE | 72434 | 参照先サイト(72434)を検索し、選択結果をこのサイトの ClassE にコピーする |
— |
※SiteId 61259・64583・74927・72434 はいずれも今回対象の10サイト(稟議承認ワークフロー関連サイト群)には含まれない、別系統の「契約コード」「派生コード」マスタと推測される。
7.2 編集画面のリンク表示(_Links-319015)
EditorColumnHash.General の末尾に _Links-319015 が定義されており、編集画面内に SiteId 319015(新・稟議申請書) の関連レコード一覧が表示される。これはPleasanterの「関連リンク(Links)」ウィジェットであり、319015側のいずれかの項目がこのサイト(160926)のレコードを参照していることを示す(319015のLinks設定は本仕様書の対象外のため、319015側のspec.mdで裏付けを確認すること)。10サイト間の明示的な連携として重要。
7.3 暗黙的なテーブル参照(ServerScripts/Scriptsのハードコード)
クライアントスクリプト scripts/3_03.更新時の処理.js(Script Id: 3)内で、SiteId 319027(事前稟議一覧)が直接ハードコードされている(let targetTable = '319027'; および url = '.../api/items/' + targetTable + '/upsert')。
- 動作: レコード更新後(
after_send)に自身のAPIデータを取得し直し、Title・Status・Owner・ClassHash・DateHashを、ClassC(稟議コード)をキーとして SiteId 319027 へupsert(挿入または更新)で複製送信している。 - これは正式なLinks設定には現れない、稟議コード管理(160926)→事前稟議一覧(319027)への一方向の暗黙的なデータ複製である。
- このスクリプトにはAPIキーとみられる文字列がソースコード中に2箇所ハードコードされている。値そのものは本書に転記しないが、セキュリティ上の懸念として「気になる点」に記載する。
7.4 ParentId
ParentId: 63543 は今回対象の10サイト(319014/319020/319021/319027/335730/319017/319015/319022/319016/160926)のいずれにも一致しない。稟議コード管理サイトは、これら10サイトとは別の親(フォルダ的な位置づけの外部サイト)の配下に置かれている。
8. プロセス設定(Processes)
定義ファイル: processes.json
| Id | Name・DisplayName | 実行条件(CurrentStatus→ChangedStatus) | 動作 | 成功メッセージ |
|---|---|---|---|---|
| 1 | 取消 / 取消 | 100(発行)→ 910(取消) | 実行可能者: Dept 8・56, Group 19。実行後、通知(Type1)を送信:宛先 [Owner]、CC [Updator], systemadmin@next-hd.co.jp、件名「発行された稟議コードを取り消しました」 |
発行された稟議コードを取り消しました |
9. スタイル(Styles)
| Id | Title | 適用範囲 | ファイル |
|---|---|---|---|
| 1 | readonly-font130%-bold | New, Edit | styles/1_readonly-font130%-bold.css |
| 2 | 取消しグレー表示 | Index | styles/2_取消しグレー表示.css |
| 3 | 太字赤文字化 | New, Edit, Index | styles/3_太字赤文字化.css |
概要:
- Id1:
.code-readonlyを pointer-events無効・フォント130%・太字にする(読み取り専用に見せるための装飾)。.code-readonly2も同様にクリック操作を無効化。 - Id2:
.cancelCodeクラスの行背景をグレーにする(一覧画面で取消済みレコードを視覚的に区別。ServerScripts Id1と連動)。 - Id3: マークダウン内の
<strong>タグを赤字にする(ガイド文の強調表示を目立たせる)。
10. スクリプト(Scripts)/サーバースクリプト(ServerScripts)
| Id | Title | 適用画面 | ファイル |
|---|---|---|---|
| 1 | 稟議コード生成 | New | scripts/1_稟議コード生成.js |
| 2 | 編集禁止処理 | Edit | scripts/2_編集禁止処理.js |
| 3 | 03.更新時の処理 | New, Edit | scripts/3_03.更新時の処理.js |
| Id | Title | 実行タイミング | ファイル |
|---|---|---|---|
| 1 | 取消しグレー表示 | BeforeOpeningRow | serverscripts/1_取消しグレー表示.js |
概要:
- Scripts Id1(稟議コード生成): 新規作成送信直前(
before_send_Create)に、選択済みのClassA(エリア)・ClassB(稟議分類)の値をそれぞれ隠し項目ClassX・ClassYにコピーする(ClassCの自動採番書式[ClassX][ClassY]-[yy]-[NNNN]の構成要素として使用するため)。またClassD(契約コード)またはClassE(派生コード)変更時に、他方の入力を無効化した上でAPI経由($p.apiGet、7.1のLinks設定に基づく参照先サイトを辿る)で関連レコードを取得し、ClassF(用件・物件名)へ自動反映する。 - Scripts Id2(編集禁止処理): 編集画面読み込み時(
on_editor_load)にClassA・ClassB(ラジオボタン全選択肢)・ClassC・ClassD・ClassE・ClassFの入力を無効化し、実質的に編集不可(作成後は内容変更させない)状態にする。あわせて外部CDN(cdnjs.cloudflare.com)からtoastr.jsを読み込み、ClassC(稟議コード)の値をクリップボードにコピーする「Copy」ボタンを追加する。 - Scripts Id3(03.更新時の処理): レコード送信後(
after_send)に自身のデータをAPIで再取得し、SiteId 319027(事前稟議一覧)へ複製データをupsert送信する。詳細・懸念事項は「7.3 暗黙的なテーブル参照」を参照。ソースコード中にAPIキーらしき文字列がハードコードされている(値は本書に転記しない)。 - ServerScripts Id1(取消しグレー表示): 一覧行の表示直前(
BeforeOpeningRow)に、Statusが910(取消)であればExtendedRowCssにcancelCodeを設定し、Styles Id2のCSSと連動して一覧上でグレー表示にする。
11. その他設定
| 設定 | 値・状態 |
|---|---|
| NoDisplayIfReadOnly | false |
| HideLink | true |
| AllowCopy | false(レコードのコピー作成を禁止) |
| SectionLatestId | 2 |
| GridGuide | 設定あり(一覧画面上部に稟議コード発行に関する案内文を表示。発行ミス時の取消手順等) |
| EditorGuide | 設定あり(GridGuideと同内容を編集画面にも表示) |
| CalendarGuide / CrosstabGuide / GanttGuide / BurnDownGuide / TimeSeriesGuide / AnalyGuide / KambanGuide / ImageLibGuide | いずれも未設定 |
| Comments | EditorColumnHashに含まれており使用されている(コメント追記時にNotifications設定により通知が飛ぶ) |
| Notifications(レコードレベル) | Type1、Comments列の変更を監視(MonitorChangesColumns)し、コメント追記時に [Owner], somu@eco-ntk.com, k.nogi@next-hd.co.jp 宛(CC: [Updator]、BCC: systemadmin@next-hd.co.jp)に通知 |
気になる点(レビュー観点)
- セキュリティ:
scripts/3_03.更新時の処理.js(Script Id 3)内にAPIキーとみられる長い16進文字列がソースコード直書きで2箇所存在する。クライアントスクリプトは画面のHTML/JSとしてブラウザに配信されるため、この形での秘匿情報埋め込みは第三者に閲覧され得る状態であり、漏えいリスクが高い。サーバースクリプト側での実行への切り替え、または資格情報の外部管理(環境変数・シークレットストア等)を検討すべき。 - 保守性: レコードレベルのNotifications設定のCC/宛先に、役職名ではなく個人のメールアドレス(
somu@eco-ntk.com,k.nogi@next-hd.co.jp)が直接ハードコードされている。担当者交代時に通知設定の更新漏れが起きるリスクがある。 - 暗黙的な依存: SiteId 319027(事前稟議一覧)への複製送信がクライアントスクリプトの
after_sendイベントに依存しているため、ブラウザ側でJavaScriptの実行が妨げられた場合(通信エラー・スクリプトエラー等)、319027側にデータが反映されずサイト間の不整合が生じ得る。 - 権限の偏り: Permissionsにおいて Group 19・User 460 が511(管理者相当)、他は7と、権限レベルの差が大きい。想定通りの設計か要確認。
- 外部CDN依存: Script Id2で
cdnjs.cloudflare.comからtoastr.jsを都度読み込んでおり、外部サービス障害時にはコピー機能のトースト通知が失敗する可能性がある(機能自体(クリップボードコピー)には支障しない)。 - ClassE用途の紐付け先が3サイトに分散:
ClassE(派生コード)は64583/74927/72434の3サイトを横断検索する設計であり、他の10サイト仕様書と合わせて全体像を確認する際は、この3サイトが「稟議」10サイトの範囲外である点に注意。