clrh 20140510 2

28
2014/05/10 CLR/H in TOKYO #2 VB Festival VB.NET による業務アプリ Ahf(小尾 智之)

Upload: tomoyuki-obi

Post on 08-Jul-2015

340 views

Category:

Technology


1 download

DESCRIPTION

2014/05/10 CLR/H in TOKYO #2 で利用したスライド(後編)

TRANSCRIPT

Page 1: Clrh 20140510 2

2014/05/10 CLR/H in TOKYO #2 VB Festival

VB.NET による業務アプリ

Ahf(小尾 智之)

Page 2: Clrh 20140510 2

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 みちのくプロレス

二度も言わせんな

はずかしい(

Page 3: Clrh 20140510 2

2014/05/10 CLR/H in TOKYO #2 VB Festival

agenda

1. 業務アプリとは

2. Windows Forms による実装

Page 4: Clrh 20140510 2

2014/05/10 CLR/H in TOKYO #2 VB Festival

業務アプリケーション

• 業務で利用するアプリケーション

• 基幹システムだけではなく近年は

情報参照系でモバイル利用も増加

• 近年は何をもって業務システムと言うか

の境界が曖昧に

Page 5: Clrh 20140510 2

2014/05/10 CLR/H in TOKYO #2 VB Festival

特徴

• キー入力の効率化

– Enterキーで次項目へ移動

• 前項目へ移動は何故か多種多様

–ファンクションメニュー

–マウス操作は控えめ

• 帳票出力

–伝票などの定型帳票出力

–帳票の種類により電子帳簿保存法の対象

Page 6: Clrh 20140510 2

2014/05/10 CLR/H in TOKYO #2 VB Festival

システムの形態

• クライアント/サーバ型が多い

–ブラウザ依存が大きい配布が楽なWeb型

–配布制約がある何でもできるデスクトップ型

• システム規模は大小様々

Page 7: Clrh 20140510 2

2014/05/10 CLR/H in TOKYO #2 VB Festival

アプリの形式種別

入力系

検索系

メンテナンス系 エントリ系

リスト系

照会系

更新系

バッチ系

その他

Page 8: Clrh 20140510 2

2014/05/10 CLR/H in TOKYO #2 VB Festival

伝票入力形式

• 業務アプリではかなり必要性が高い

• 明細形式の行を一覧で表示した状態でデータ入力を行う

–ベースは財務システムでの伝票入力

• 入力する項目が伝票に合わせて

表示されるので利用者が理解しやすい

Page 9: Clrh 20140510 2

2014/05/10 CLR/H in TOKYO #2 VB Festival

伝票入力のコントロール

• Spread や MultiRow(GrapeCity 製品)といった 3rd パーティー製品の利用が吉

• 予算はないけど時間があるならば

DataGridView をカスタマイズで対応可能

Page 10: Clrh 20140510 2

2014/05/10 CLR/H in TOKYO #2 VB Festival

Windows Forms

• Visual Studio による GUI アプリ基本形

– VB2 のころから続くスタイル

• イベントドリブン形式での実装が基本

–コントロールごとに用意されたイベントに

対して処理を記述する

• .NET Framework 4.5.2 で HighDPI 対応

–今でも密かな改善が続いていた

Page 11: Clrh 20140510 2

2014/05/10 CLR/H in TOKYO #2 VB Festival

画面のデザイン

• フォームサイズ変更に対応するかどうか

• 変更を許可する場合

配置カテゴリに分類されるプロパティの設定を利用することで、ロジックによる対応は殆ど不要

Page 12: Clrh 20140510 2

2014/05/10 CLR/H in TOKYO #2 VB Festival

キー入力

• KeyPress イベント

• KeyDown / KeyUp イベント

–キーを押した/離した際のイベント

– KeyPress と KeyDown/Up では 処理できるキーが一部異なる

– Enter キー押下でフォーカス遷移とか

• Click イベント

– PerfomeClick メソッドでClickイベントを 呼び出せる

Page 13: Clrh 20140510 2

2014/05/10 CLR/H in TOKYO #2 VB Festival

フォーカス遷移時

• Enter イベント

–コントロールがフォーカスを取得

• Leave イベント

–コントロールがフォーカスを喪失

Page 14: Clrh 20140510 2

2014/05/10 CLR/H in TOKYO #2 VB Festival

フォーカス取得時の基本

• テキストをハイライト表示

• 上書き状態で入力するケースが多い

• TextBox.SelectAll メソッド

Page 15: Clrh 20140510 2

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

Page 16: Clrh 20140510 2

2014/05/10 CLR/H in TOKYO #2 VB Festival

フォーカス遷移順

• コントロールのTabIndex値に基づく

• 親となるコンテナのTabIndexも影響

–一つのフォーム上に同一のTabIndex値を持つコントロールが存在する

– Control.SelectNextControl メソッドや

SendKeys.Send(“{TAB}”) では TabIndex が影響

Page 17: Clrh 20140510 2

2014/05/10 CLR/H in TOKYO #2 VB Festival

値の検証

• Validating イベント

–フォーカスが遷移した後で発生

–検証結果によって遷移を取り消す

–引数 e.Cancel = True で遷移取り消し

Page 18: Clrh 20140510 2

2014/05/10 CLR/H in TOKYO #2 VB Festival

イベントの順序

ActiveControl の変更

コントロールの Leave

コントロールの Enter

コントロールの Validating Validating で値の検証結果が

False となった場合は

ActiveControl 設定前へ戻る

Page 19: Clrh 20140510 2

2014/05/10 CLR/H in TOKYO #2 VB Festival

データベース操作

• 業務システムではほぼ必須

• 入力したデータを保持するために必要

• 依存性を低めるために、できるだけ

データを直接操作する部分は独立した

クラスに記載するのがメンテしやすい

– Windows Forms に限らない話

Page 20: Clrh 20140510 2

2014/05/10 CLR/H in TOKYO #2 VB Festival

データバインディング

• WPF ほど万能ではないが表形式のデータ出力などでは有用

• 主に利用するのは DataSet(DataTable)

–個人的には利用しなくてもよいと…

Page 21: Clrh 20140510 2

2014/05/10 CLR/H in TOKYO #2 VB Festival

DataSet の操作

• DataSet.Tables(x).Rows(y).Item形式はDataRowの部分が特に内部処理が重いので今は利用しない

• LINQ to DataSet を用いるだけで

体感レベルで速度が改善される

Page 22: Clrh 20140510 2

2014/05/10 CLR/H in TOKYO #2 VB Festival

LINQ

• 今の時代では必須技術

• 業務アプリでは特に要素をループして

処理するシーンが多いので効果は高い

– LINQ to Object

– LINQ to XML

– LINQ to Dataset

• SQL 構文は使わなくても良い気がする

Page 23: Clrh 20140510 2

2014/05/10 CLR/H in TOKYO #2 VB Festival

帳票の作成

• 業務アプリで求められる帳票の要件

• 自由形式

–プリンタを問わないので比較的自由

• 固定形式

–インパクト式/ライン式のプリンタ利用が多い

–枠線などが印刷済みな用紙を利用

–細かい位置調整が必要

Page 24: Clrh 20140510 2

2014/05/10 CLR/H in TOKYO #2 VB Festival

帳票ツール

• ツールを利用しない実装も可能だが

非常に時間がかかる

• 帳票ツールは要件に合わせて選択が必要

– ActiveReport(GrapeCity)

– ReportViewerテクノロジ(Microsoft)

– Excel

Page 25: Clrh 20140510 2

2014/05/10 CLR/H in TOKYO #2 VB Festival

外部連携

• 1システムだけで終わるケースは少ない

• 別システムとの連携は必要

–販売管理から財務へ

–自社から他社へ

–連携方法も多様

• 直接DB連携

• ファイル形式でのやり取り

• 相手側システムAPIの呼び出し

Page 26: Clrh 20140510 2

2014/05/10 CLR/H in TOKYO #2 VB Festival

アプリの配布

• Windows Installer

• ClickOnce

• XCOPY 等でのファイルコピー

–利用するツールによっては単純にいかない

• 初回配布よりもアップデート方法を

考慮して決める必要がある

–初回配布と別の形式を採用するのもあり

Page 27: Clrh 20140510 2

2014/05/10 CLR/H in TOKYO #2 VB Festival

配布形式を見据えた構成

• 単一Exe形式

–起動~終了までを制御するメインアプリ

–メインアプリより各機能を呼び出す

– Dllを機能単位で作成

• 複数Exe形式

–機能単位でExeファイルを作成

– XCOPY方式が行いやすい

Page 28: Clrh 20140510 2

2014/05/10 CLR/H in TOKYO #2 VB Festival

まとめ

• Windows Forms はまだまだ現役

• 表現力をあまり求めない場面では最適解

• 求める場合は WPF

• LINQ 必須。ラムダ必須。

–社内で反発があったら LINQ to Dataset の

場合のように体感レベルで違いが出るのは

説得材料として有効