clrh 20140510 2
DESCRIPTION
2014/05/10 CLR/H in TOKYO #2 で利用したスライド(後編)TRANSCRIPT
2014/05/10 CLR/H in TOKYO #2 VB Festival
VB.NET による業務アプリ
Ahf(小尾 智之)
2014/05/10 CLR/H in TOKYO #2 VB Festival
self introduction VB 使い
WF メイニア
CLR/H スタッフ
てすとぶろぐ http://blogahf.blogspot.jp/
@twit_ahf
Tomoyuki.Obi @IT エンジニアライフ
地方からの戯言
プロレス好き DDT / BJW / K-DOJO みちのくプロレス
二度も言わせんな
はずかしい(
2014/05/10 CLR/H in TOKYO #2 VB Festival
agenda
1. 業務アプリとは
2. Windows Forms による実装
2014/05/10 CLR/H in TOKYO #2 VB Festival
業務アプリケーション
• 業務で利用するアプリケーション
• 基幹システムだけではなく近年は
情報参照系でモバイル利用も増加
• 近年は何をもって業務システムと言うか
の境界が曖昧に
2014/05/10 CLR/H in TOKYO #2 VB Festival
特徴
• キー入力の効率化
– Enterキーで次項目へ移動
• 前項目へ移動は何故か多種多様
–ファンクションメニュー
–マウス操作は控えめ
• 帳票出力
–伝票などの定型帳票出力
–帳票の種類により電子帳簿保存法の対象
2014/05/10 CLR/H in TOKYO #2 VB Festival
システムの形態
• クライアント/サーバ型が多い
–ブラウザ依存が大きい配布が楽なWeb型
–配布制約がある何でもできるデスクトップ型
• システム規模は大小様々
2014/05/10 CLR/H in TOKYO #2 VB Festival
アプリの形式種別
入力系
検索系
メンテナンス系 エントリ系
リスト系
照会系
更新系
バッチ系
その他
2014/05/10 CLR/H in TOKYO #2 VB Festival
伝票入力形式
• 業務アプリではかなり必要性が高い
• 明細形式の行を一覧で表示した状態でデータ入力を行う
–ベースは財務システムでの伝票入力
• 入力する項目が伝票に合わせて
表示されるので利用者が理解しやすい
2014/05/10 CLR/H in TOKYO #2 VB Festival
伝票入力のコントロール
• Spread や MultiRow(GrapeCity 製品)といった 3rd パーティー製品の利用が吉
• 予算はないけど時間があるならば
DataGridView をカスタマイズで対応可能
2014/05/10 CLR/H in TOKYO #2 VB Festival
Windows Forms
• Visual Studio による GUI アプリ基本形
– VB2 のころから続くスタイル
• イベントドリブン形式での実装が基本
–コントロールごとに用意されたイベントに
対して処理を記述する
• .NET Framework 4.5.2 で HighDPI 対応
–今でも密かな改善が続いていた
2014/05/10 CLR/H in TOKYO #2 VB Festival
画面のデザイン
• フォームサイズ変更に対応するかどうか
• 変更を許可する場合
配置カテゴリに分類されるプロパティの設定を利用することで、ロジックによる対応は殆ど不要
2014/05/10 CLR/H in TOKYO #2 VB Festival
キー入力
• KeyPress イベント
• KeyDown / KeyUp イベント
–キーを押した/離した際のイベント
– KeyPress と KeyDown/Up では 処理できるキーが一部異なる
– Enter キー押下でフォーカス遷移とか
• Click イベント
– PerfomeClick メソッドでClickイベントを 呼び出せる
2014/05/10 CLR/H in TOKYO #2 VB Festival
フォーカス遷移時
• Enter イベント
–コントロールがフォーカスを取得
• Leave イベント
–コントロールがフォーカスを喪失
2014/05/10 CLR/H in TOKYO #2 VB Festival
フォーカス取得時の基本
• テキストをハイライト表示
• 上書き状態で入力するケースが多い
• TextBox.SelectAll メソッド
2014/05/10 CLR/H in TOKYO #2 VB Festival
フォーム上のTabIndexの走査
• コンテナが関連するので再帰的に
走査する必要がある Dim result = New List(Of Control) sender.Controls.Cast(Of Control).Where(Function(ct) Not ct.IsDisposed) _ .ToList() _ .ForEach(Sub(ct) 'TabStop = True のコントロールを追加
If ct.TabStop Then result.Add(ct) '子供コントロールがあればその内部を走査
Dim child = GetFoucusableControls(ct) If Not IsNothing(child) AndAlso child.Count > 0 Then result.AddRange(child) End If End Sub) Return result
2014/05/10 CLR/H in TOKYO #2 VB Festival
フォーカス遷移順
• コントロールのTabIndex値に基づく
• 親となるコンテナのTabIndexも影響
–一つのフォーム上に同一のTabIndex値を持つコントロールが存在する
– Control.SelectNextControl メソッドや
SendKeys.Send(“{TAB}”) では TabIndex が影響
2014/05/10 CLR/H in TOKYO #2 VB Festival
値の検証
• Validating イベント
–フォーカスが遷移した後で発生
–検証結果によって遷移を取り消す
–引数 e.Cancel = True で遷移取り消し
2014/05/10 CLR/H in TOKYO #2 VB Festival
イベントの順序
ActiveControl の変更
コントロールの Leave
コントロールの Enter
コントロールの Validating Validating で値の検証結果が
False となった場合は
ActiveControl 設定前へ戻る
2014/05/10 CLR/H in TOKYO #2 VB Festival
データベース操作
• 業務システムではほぼ必須
• 入力したデータを保持するために必要
• 依存性を低めるために、できるだけ
データを直接操作する部分は独立した
クラスに記載するのがメンテしやすい
– Windows Forms に限らない話
2014/05/10 CLR/H in TOKYO #2 VB Festival
データバインディング
• WPF ほど万能ではないが表形式のデータ出力などでは有用
• 主に利用するのは DataSet(DataTable)
–個人的には利用しなくてもよいと…
2014/05/10 CLR/H in TOKYO #2 VB Festival
DataSet の操作
• DataSet.Tables(x).Rows(y).Item形式はDataRowの部分が特に内部処理が重いので今は利用しない
• LINQ to DataSet を用いるだけで
体感レベルで速度が改善される
2014/05/10 CLR/H in TOKYO #2 VB Festival
LINQ
• 今の時代では必須技術
• 業務アプリでは特に要素をループして
処理するシーンが多いので効果は高い
– LINQ to Object
– LINQ to XML
– LINQ to Dataset
• SQL 構文は使わなくても良い気がする
2014/05/10 CLR/H in TOKYO #2 VB Festival
帳票の作成
• 業務アプリで求められる帳票の要件
• 自由形式
–プリンタを問わないので比較的自由
• 固定形式
–インパクト式/ライン式のプリンタ利用が多い
–枠線などが印刷済みな用紙を利用
–細かい位置調整が必要
2014/05/10 CLR/H in TOKYO #2 VB Festival
帳票ツール
• ツールを利用しない実装も可能だが
非常に時間がかかる
• 帳票ツールは要件に合わせて選択が必要
– ActiveReport(GrapeCity)
– ReportViewerテクノロジ(Microsoft)
– Excel
2014/05/10 CLR/H in TOKYO #2 VB Festival
外部連携
• 1システムだけで終わるケースは少ない
• 別システムとの連携は必要
–販売管理から財務へ
–自社から他社へ
–連携方法も多様
• 直接DB連携
• ファイル形式でのやり取り
• 相手側システムAPIの呼び出し
2014/05/10 CLR/H in TOKYO #2 VB Festival
アプリの配布
• Windows Installer
• ClickOnce
• XCOPY 等でのファイルコピー
–利用するツールによっては単純にいかない
• 初回配布よりもアップデート方法を
考慮して決める必要がある
–初回配布と別の形式を採用するのもあり
2014/05/10 CLR/H in TOKYO #2 VB Festival
配布形式を見据えた構成
• 単一Exe形式
–起動~終了までを制御するメインアプリ
–メインアプリより各機能を呼び出す
– Dllを機能単位で作成
• 複数Exe形式
–機能単位でExeファイルを作成
– XCOPY方式が行いやすい
2014/05/10 CLR/H in TOKYO #2 VB Festival
まとめ
• Windows Forms はまだまだ現役
• 表現力をあまり求めない場面では最適解
• 求める場合は WPF
• LINQ 必須。ラムダ必須。
–社内で反発があったら LINQ to Dataset の
場合のように体感レベルで違いが出るのは
説得材料として有効