生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>
222 lines
17 KiB
Markdown
222 lines
17 KiB
Markdown
# サイト仕様書:稟議コード管理(SiteId: 160926)
|
||
|
||
- 取得元データ: [site-160926_latest.json](../siteSettingJsons/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](../configs/site-160926_稟議コード管理/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](../configs/site-160926_稟議コード管理/styles/1_readonly-font130%25-bold.css) |
|
||
| 2 | 取消しグレー表示 | Index | [styles/2_取消しグレー表示.css](../configs/site-160926_稟議コード管理/styles/2_取消しグレー表示.css) |
|
||
| 3 | 太字赤文字化 | New, Edit, Index | [styles/3_太字赤文字化.css](../configs/site-160926_稟議コード管理/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](../configs/site-160926_稟議コード管理/scripts/1_稟議コード生成.js) |
|
||
| 2 | 編集禁止処理 | Edit | [scripts/2_編集禁止処理.js](../configs/site-160926_稟議コード管理/scripts/2_編集禁止処理.js) |
|
||
| 3 | 03.更新時の処理 | New, Edit | [scripts/3_03.更新時の処理.js](../configs/site-160926_稟議コード管理/scripts/3_03.更新時の処理.js) |
|
||
|
||
| Id | Title | 実行タイミング | ファイル |
|
||
|---|---|---|---|
|
||
| 1 | 取消しグレー表示 | BeforeOpeningRow | [serverscripts/1_取消しグレー表示.js](../configs/site-160926_稟議コード管理/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サイトの範囲外である点に注意。
|