気づき通知バッチ リバース設計書
1. 概要
本書は /気づき 配下の実装(KidukiScheduler / KidukiTask / KidukiMail)を解析し、現行挙動をリバース生成した設計書である。
対象は「気づき通知」の定期実行・通知データ生成・メール送信の3段構成で、スケジューラが一定間隔でタスク実行EXEとメール送信EXEを起動する。
- KidukiScheduler: 常駐し、実行間隔と保持月数を読み込み、定期実行トリガを管理
- KidukiTask: スケジュール定義から業務SPを実行し、通知キューを登録
- KidukiMail: 通知キューを取得し、テンプレート展開してSMTP送信、送信済み更新
2. データ入出力仕様(関連テーブル・ファイル)
2.1 関連ファイル
| 区分 | パス | 役割 |
|---|---|---|
| 実行 | 気づき/KidukiScheduler/src/frmKidukiScheduler.vb |
常駐画面・タイマーイベント管理 |
| 実行 | 気づき/KidukiScheduler/src/docKidukiScheduler.vb |
設定読込/更新、Mail/Task起動、ログ削除 |
| 実行 | 気づき/KidukiTask/src/docKidukiTask.vb |
通知データ生成ロジック |
| 実行 | 気づき/KidukiMail/src/docKidukiMail.vb |
通知メール送信ロジック |
| 設定 | 気づき/KidukiMail/app.config |
SMTP/再送間隔等の設定 |
| 設定 | KidukiMail.exe基準 ../OAuthSetting.ini |
OAuth設定ファイル |
2.2 入出力データ(論理)
| 種別 | 入出力 | 内容 |
|---|---|---|
| 管理設定 | 入力 | タスク実行間隔(分)、保持月数 |
| スケジュール定義 | 入力 | 実行対象気づき、実行SP名、通知ルール、次回実行日時 |
| 業務SP結果 | 入力 | 通知データ生成用の4列(送信者指定、通知先区分、通知先指定、補足) |
| 気づき通知キュー | 出力 | 通知1件ごとの送信先展開済みレコード |
| メール送信結果 | 出力 | 送信成功時に送信済み状態へ更新 |
| ログ削除 | 出力 | 保持月数を過ぎた気づきデータ削除 |
3. 画面仕様とイベントロジック(各ファンクションキーの挙動詳細)
3.1 画面(frmKidukiScheduler)
| 項目 | コントロール | 説明 |
|---|---|---|
| タスク実行間隔 | GInterval |
分単位、最大3桁 |
| 設定反映 | btnOK |
入力値をタイマー/DBへ反映 |
| トレイメニュー-設定 | GMenuSettei |
設定画面表示 |
| トレイメニュー-終了 | GMenuExit |
終了 |
| 定期実行タイマー | GTimer |
Tick時に実行処理を起動 |
3.2 イベントロジック
- Load
- DB接続作成
sp_ControlReadAで実行間隔・保持月数取得-
タイマー開始、フォーム非表示(トレイ常駐)
-
Timer Tick
ExeSchedule()を実行KidukiMail.exeを既存プロセス停止後に起動KidukiTask.exeを既存プロセス停止後に起動-
sp_KidukiDelAで保持期限超過データ削除 -
OKボタン
- 入力値をタイマー間隔へ反映
sp_ControlUpdBで実行間隔更新-
フォームを再び非表示
-
設定メニュー
-
フォーム表示(タスクバー表示/通常状態)
-
終了メニュー
- フォームをクローズ
3.3 ファンクションキーの挙動
本対象画面・モジュールでは、F1〜F12等の専用ファンクションキーイベントは実装されていない。
操作は主にボタンクリック、トレイメニュー、タイマーイベントで制御される。
3.4 ユーザー操作とシステム処理フロー(Mermaid)
flowchart TB
subgraph L["担当者"]
U0[アプリ起動]
U1[トレイメニュー: 設定]
U2[実行間隔を入力してOK]
U3{入力値は数値か}
U4[トレイメニュー: 終了]
U5{終了確認でYes/No}
end
subgraph R["システム"]
S0[Load: DB接続生成]
S1[sp_ControlReadAで設定読込]
S2[フォーム非表示・タイマー開始]
S3[Timer Tick]
S4[KidukiMail/KidukiTask起動]
S5[sp_KidukiDelAで期限超過削除]
S6[設定画面表示]
S7[SetInterval実行]
S8[sp_ControlUpdB更新]
S9{更新成功?}
S10[エラーログ出力]
S11[画面非表示に戻す]
S12[アプリ終了]
end
U0 --> S0 --> S1 --> S2 --> S3 --> S4 --> S5 --> S2
U1 --> S6 --> U2 --> U3
U3 -- NG --> S10 --> S6
U3 -- OK --> S7 --> S8 --> S9
S9 -- NG --> S10 --> S6
S9 -- OK --> S11 --> S2
U4 --> U5
U5 -- Yes --> S12
U5 -- No --> S2
4. 特記事項・技術的制約
- .NET Framework 4.5.1(VB.NET)実装。
- DBアクセスはSPラッパークラス(
KidukiSp/src/Sp_*.vb)を介して実行。 KidukiTaskの業務SP結果は「列数4」を前提としており、不一致時はエラー記録してスキップ。- エラー時は例外再送出ではなくログのみで継続する箇所があるため、部分失敗時に実行全体は継続し得る。
KidukiMail/app.configにSMTP情報が平文で存在するため、運用上は秘匿化/外部シークレット化が望ましい。
ER図 (Mermaid)
erDiagram
CONTROL ||--o{ KIDUKI_DATA : manage
KIDUKI_INFO ||--o{ KIDUKI_DATA : generates
SYSTEM_MST ||--o{ KIDUKI_INFO : has
MAIL_FORMAT_MST ||--o{ KIDUKI_INFO : uses
USER_MST ||--o{ KIDUKI_DATA : send_from
USER_MST ||--o{ KIDUKI_DATA : notify_to
USER_MST ||--o{ USER_SYSTEM : maps
SYSTEM_MST ||--o{ USER_SYSTEM : maps
GROUP_MST ||--o{ GROUP_USER : contains
USER_MST ||--o{ GROUP_USER : belongs
GROUP_MST ||--o{ KIDUKI_INFO : notify_group
テーブル定義詳細
KIDUKI_DATA(通知キュー)
| 論理名 | 物理名 | 型 | 属性(PK/FK) | 備考(データ制約や想定値) |
|---|---|---|---|---|
| 管理番号 | cntl_no |
INT | PK | 送信済更新キー |
| 気づき情報コード | kidk_info_cd |
CHAR(4) | FK | KIDUKI_INFO参照 |
| 気づき名 | kidk_nm |
VARCHAR(64) | - | 通知名称 |
| 情報区分 | info_kbn |
INT | - | 種別 |
| 送信元ユーザーID | send_from_user_id |
VARCHAR(64) | FK | ユーザー参照 |
| 送信元メール | send_from_mail_addr |
VARCHAR(256) | - | 送信元アドレス |
| 通知先ユーザーID | pers_to_user_id |
VARCHAR(64) | FK | ユーザー参照 |
| 通知先メール | pers_to_mail_addr |
VARCHAR(256) | - | 宛先アドレス |
| メール通知 | mail_pers |
INT | - | 0/1想定 |
| メニュー通知 | menu_pers |
INT | - | 0/1想定 |
| WEB通知 | web_pers |
INT | - | 0/1想定 |
| メール書式コード | fmat_cd |
CHAR(3) | FK | MAIL_FORMAT_MST参照 |
| システムコード | sys_cd |
CHAR(3) | FK | SYSTEM_MST参照 |
| 補足 | supl |
VARCHAR(256) | - | 業務SP4列目 |
KIDUKI_INFO(通知定義/スケジュール)
| 論理名 | 物理名 | 型 | 属性(PK/FK) | 備考(データ制約や想定値) |
|---|---|---|---|---|
| 気づき情報コード | kidk_info_cd |
CHAR(4) | PK | スケジュール識別子 |
| 気づき名 | kidk_nm |
VARCHAR(64) | - | 表示名 |
| 送信元 | send_from |
VARCHAR(64) | FK | ユーザーID |
| 通知先区分 | pers_to_kbn |
INT | - | 0:ユーザー / 1:グループ |
| 通知先 | pers_to |
VARCHAR(64) | FK | 区分に依存 |
| メール通知 | mail_pers |
INT | - | 0/1想定 |
| メニュー通知 | menu_pers |
INT | - | 0/1想定 |
| WEB通知 | web_pers |
INT | - | 0/1想定 |
| メール書式コード | fmat_cd |
CHAR(3) | FK | 書式参照 |
| 実行SP名 | sp_name |
VARCHAR(128) | - | 業務データ取得SP |
| 前回実行日時 | befo_exe_date |
CHAR(14) | - | yyyyMMddHHmmss |
| 次回実行日時 | next_exe_date |
CHAR(14) | - | yyyyMMddHHmmss |
CONTROL(管理設定)
| 論理名 | 物理名 | 型 | 属性(PK/FK) | 備考(データ制約や想定値) |
|---|---|---|---|---|
| 保持月数 | keep_month |
INT | - | ログ削除閾値(月) |
| タスク実行間隔 | task_itvl |
INT | - | 分単位 |
USER_MST / USER_SYSTEM / GROUP_USER
| 論理名 | 物理名 | 型 | 属性(PK/FK) | 備考(データ制約や想定値) |
|---|---|---|---|---|
| ユーザーID | user_id |
VARCHAR(64) | PK | 利用者識別子 |
| ユーザー名 | user_nm |
VARCHAR(64) | - | 表示名 |
| メールアドレス | mail_addr |
VARCHAR(256) | - | 通知先 |
| システムコード | sys_cd |
CHAR(3) | FK | システム識別子 |
| 他システムユーザーID | your_user_id |
VARCHAR(64) | - | 横断ID |
| グループコード | grp_cd |
VARCHAR(64) | FK | グループ識別子 |
SP一覧
| 論理名 | 物理名 | 引数の型 | 備考(データ制約や想定値) |
|---|---|---|---|
| 管理設定取得 | sp_ControlReadA |
なし | 実行間隔・保持月数取得 |
| 管理設定更新 | sp_ControlUpdB |
@iTaskItvl INT |
分単位更新 |
| 気づきデータ削除 | sp_KidukiDelA |
@DelDate DATETIME |
保持期限超過削除 |
| 送信対象取得 | sp_KidukiReadB |
なし | 通知キュー取得 |
| 送信済更新 | sp_KidukiUpdA |
@CntlNo INT |
管理番号指定 |
| 実行対象取得 | sp_InfoReadD |
@cDateTime CHAR(14) |
実行対象スケジュール取得 |
| ユーザー取得 | sp_UserReadC |
@cSysCd CHAR(3), @vUserId VARCHAR(64) |
送信元/通知先解決 |
| 他システムユーザー取得 | sp_UserSysReadA |
@cSysCd CHAR(3), @vUserId VARCHAR(64) |
横断ユーザー解決 |
| グループ所属ユーザー取得 | sp_GroupUserReadC |
@cSysCd CHAR(3), @vUserId VARCHAR(64) |
グループ通知先展開 |
| 通知データ登録 | sp_KidukiInsA |
@cKidkInfoCd CHAR(4) 他23引数 |
通知キュー1件登録 |
| 次回実行日時更新 | sp_ScheduleUpdB |
@cKidkInfoCd CHAR(4), @cBefoExeDate CHAR(14), @cNextExeDate CHAR(14) |
実行履歴更新 |