コンテンツにスキップ

気づき通知バッチ リバース設計書

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 イベントロジック

  1. Load
  2. DB接続作成
  3. sp_ControlReadA で実行間隔・保持月数取得
  4. タイマー開始、フォーム非表示(トレイ常駐)

  5. Timer Tick

  6. ExeSchedule() を実行
  7. KidukiMail.exe を既存プロセス停止後に起動
  8. KidukiTask.exe を既存プロセス停止後に起動
  9. sp_KidukiDelA で保持期限超過データ削除

  10. OKボタン

  11. 入力値をタイマー間隔へ反映
  12. sp_ControlUpdB で実行間隔更新
  13. フォームを再び非表示

  14. 設定メニュー

  15. フォーム表示(タスクバー表示/通常状態)

  16. 終了メニュー

  17. フォームをクローズ

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) 実行履歴更新