【Dr.Sum VTB】Dr.Sumインポートを日時指定＆自動で動かす（バッチ）

#目標
Dr.Sum VTBを使ったDr.Sumインポートを日時指定＆自動で動かす（バッチ）
※「担当者が毎日手動でDr.Sum EnterpriseManagerから実行する」でよいなら特に必要ない
※ただし↑この場合、担当者が休みの時は誰がどうする、等の検討は必要だよね

関連記事こちら
[Dr.Sum VTBでOracleから直接データ取得、Dr.Sumへインポートする](https://qiita.com/ratsbane666/items/0046fc30aebad4504d62)

#心意気
私は文系（文学部国文学科）出身でSEになった人間です。
新人研修では講師が何の話をしてるのかわからず、10進数を表す「デシマル」を聞いたとき「それどんな漢字で書くんですか」と聞いて講師を凍らせました（私の脳内では「出四丸かな？」）。
「変数の型」「関数」「配列」「アドレスのアドレス」分からなすぎて何度も心が死にました。研修の開発言語はＣでした。理系出身の同期の話についていくのに何年かかかった感あります。てか、いまでも理解できてない事が沢山あります！
そんな私ですので、生まれて初めて「コマンド」「バッチ」に触れた人の戸惑いが分かります、私もそうでした。そのような人にもわかるよう書く･･･書きたい･･

#必要なもの
(1)Dr.Sumが用意したコマンド「dwtab_import」への認識
　　→コマンドプロンプトで、ルールに従った書き方で入力＝インポート出来る
(2)バッチファイル
　　→(1)を自動で動かすために必要、自分でファイル作成
(3)タスクスケジューラ
　　→Windows付属のアプリ、自分でタスク作成必要

#手順
###(1)Dr.Sumが用意したコマンド「dwtab_import」への認識
コマンドの使用法を理解しましょう。

　コマンド「dwtab_import」
　　2-20　dwtab_import（テーブルにデータをインポートする） 
　　　https://cs.wingarc.com/manual/drsum/4.2/ja/ea42/index.html#60784937.html 
　この手のものに慣れ親しんだ方ならマニュアルでOKと思いますが、そうでない方のために以下書きます。

疑問：コマンド「dwtab_import」？？
→Dr.Sumが用意した呪文と捉えましょう。
　この呪文を**決まった場所**で**型どおり**にとなえるとテーブルにインポートできる。
　呪文は文字でコマンドプロンプトに入力する。
　Dr.Sum EnterpriseManagerを使ってインポートするのと結果は同じだけど。
　コマンドを使うことで、コンピュータにやらせることが出来る（＝自動化）。

疑問：**決まった場所**で？？
　決まった場所＝Dr.Sumインストールしたフォルダ
　　例）E:\DrSum51\AdminTools\cmd\JPN
　
　※始めはコマンドの前にこの「決まった場所」をひっつけて、以降の型を整えたほうがよい。
　　E:\DrSum51\AdminTools\cmd\JPN\dwtab_import .........

疑問：**型どおり**に？？
↓この実際のコマンドで解説します。
```E:\DrSum51\AdminTools\cmd\JPN\dwtab_import "localhost" 6001 "Administrator" "password" "共通" "共通カレンダー "VTB_ROOT" "V_共通カレンダー" "" "" 0 1 0```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278265/e3da1ea3-5514-f352-38da-fe280703f1c9.png)

★マニュアル
　コマンド「dwtab_import」
　　2-20　dwtab_import（テーブルにデータをインポートする） 
　　　https://cs.wingarc.com/manual/drsum/4.2/ja/ea42/index.html#60784937.html 


###(2)バッチファイル
(1)で解説したコマンドの先頭に「call 」を付け、テキストファイルに貼り付ける。
こんな感じ。
```call E:\DrSum51\AdminTools\cmd\JPN\dwtab_import "localhost" 6001 "Administrator" "password" "共通" "共通カレンダー "VTB_ROOT" "V_共通カレンダー" "" "" 0 1 0 ```
できたら、～.batという名前で保存。インポート.batとか。
<font color="OrangeRed">このファイルをダブルクリックするとインポート実行しますので気をつけて！！</font>

###(3)タスクスケジューラ
インポートが決まった日時に実行されるよう設定します。
Windowsの管理ツール→タスクスケジューラで起動、タスクの作成をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278265/e0342a54-4614-4dae-48c6-b978ff9c49f6.png)

名前をつける。セキュリティオプションは私はたいていこのようにしておく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278265/3ef8636d-ef13-8afb-4454-f752b76b9ed5.png)

トリガーは「この作業をいつやりますか？」の設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278265/bd7f72bf-0780-3a26-8444-205aee198571.png)

操作は実際に動かすバッチファイルを指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278265/eea0d288-86e0-4f32-a137-40293620dcb3.png)

タスクができるとこんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278265/11622290-5834-655d-8eb3-9584d062db93.png)
作業フォルダを指定するようにしましょう。

https://delightmode.com/win-taskscheduler/


###(4)バッチ実行後の確認
管理テーブルを確認し、最終更新日時を確認しましょう。ここで分かります。
（またはテーブル一覧で最新の情報に更新しても良いのかなと）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278265/67e5d902-3955-866f-9761-119a281b52fc.png)

SQL Executorを起動、SQLを貼り付け実行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278265/521403ca-3546-7708-dc48-9c144699998a.png)


```select dataupdate_time  from __all_tables__ where table_name = 'テーブル名' AND assortment = 'table'```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278265/75471d71-aeee-2518-9c9b-9d9b5ff770ea.png)

出てきた日時正しいか、確認を。

※副島さん、ご指摘ありがとうございます。

#すぐにぶちあたる課題
バッチが何らかの理由で失敗した時に、どう感知するか？操作のところでいかにも電子メールの送信ができそうなんだけど、実際は使えない。使えないものをなんで出しとるんかわからんわ。
→エラー発生時にお知らせメール飛ばす仕組みを作りました。ダサいやつです。どこかで紹介するかも
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278265/b94860e5-f7b4-bfdd-0b2a-4263dab67b49.png)

#マニュアル
　第3章　バッチ処理の例 
　インポート
　　https://cs.wingarc.com/manual/drsum/4.2/ja/ea42/index.html#60784923.html

　コマンド「dwtab_import」
　　2-20　dwtab_import（テーブルにデータをインポートする） 
　　　https://cs.wingarc.com/manual/drsum/4.2/ja/ea42/index.html#60784937.html 


#ウイングアークのユーザコミュニティ「nest」
私も参加しています。多くの有益な情報があり、交流があります。
世の中が変わり、社外活動の重要性がより増していると考えております。
社外で自分の価値を計れるものさしを持とう。自社だけが世界ではない！

https://www.wingarc.com/wug-nest/


以上