SPREAD

アプリケーションが参照するマスタテーブルのメンテナンス画面の設計方法について解説します。マスタメンテナンス画面はさまざまなシステムで必要とされます。今回はSPREADの機能に依存していませんので、どなたでも参考になる内容となっています。


プロジェクトをダウンロードする

ClickOnceデモで動作を見る


[マスタメンテナンス]画面について

マスタテーブルに登録された情報は時間や状況とともに変化します。また、テーブルに新たに項目を追加したい、あるいは新たにテーブルを追加したいという場合もあります。そのため、運用後にもマスタテーブルをメンテナンスしやすいように設計しておく必要があります。
ユースケースデモでは、製品情報を管理する「製品マスタテーブル」と、汎用的に使用する名称や区分を管理する「汎用マスタテーブル」を用意しています。[マスタメンテナンス]画面では、これらのマスタに登録されているデータの新規登録・修正・削除を行うことができます。また、次の点を考慮した構成になっています。

  • マスタテーブルのデータを新規登録・修正・削除する
  • 複数のマスタレイアウトに対応できる
  • SPREADの機能に依存せず、標準のデータグリッドにも応用できる
  • プログラムを修正することなくメンテナンス対象のテーブルを増やせる
フローチャート
画像「フローチャート」拡大して見る
製品マスタのメンテナンス画面
画像「製品マスタのメンテナンス画面」拡大して見る
定義ファイルを追加するだけで
画面上でメンテナンス可能
画像「定義ファイルを追加するだけで画面上でメンテナンス可能」拡大して見る
汎用マスタ
 
画像「汎用マスタ」拡大して見る

汎用性と開発工数削減を両立する
[マスタメンテナンス]画面

ユースケースデモでは、運用時にマスタテーブルに修正や追加を行う際も、プログラムを改修する必要がない方法を提案しています。
この画面はSPREADの機能に依存しているわけではありませんので、マスタメンテナンス画面設計のひとつの考え方として、参考にしてください。

テーブルレイアウト情報を外部に出すことで汎用的な画面を実現する

[マスタメンテナンス]画面は複数のマスタレイアウトに対応できるよう、汎用的に実装されています。規定の「マスタ定義ファイル(CSV)」(以下、定義ファイル)に列のデータ型やサイズ、キー項目等をあらかじめ設定しておき、その設定内容に応じてセル型の設定や入力可否を制御しています。そのため、メンテナンス対象のマスタテーブルが増えた場合でも、基本的にプログラム修正は不要です。マスタ情報を格納している定義ファイルを作成(追加)するだけで、追加対象のテーブルを画面上でメンテナンスすることができます。

マスタテーブルのレイアウト情報を定義したCSV
画像「マスタテーブルのレイアウト情報を定義したCSV」拡大して見る

SQLを書かないデータ更新

データ更新時には .NET Frameworkで提供されているDbCommandBuilderを使用しています。これにより、INSERT、UPDATE、または DELETE ステートメントを自動的に生成しているためコードでこれらのSQL文は記述していません。以下は、データ更新部分のコードを抜粋したものです。

コード(C#)
// トランザクション開始
using (TransactionScope _trn = new TransactionScope())
{
    // 更新エラー時は例外
    _oleda.ContinueUpdateOnError = false;
    // 編集確定
    this.bindingSource1.EndEdit();
    OleDbCommandBuilder odbcb = new OleDbCommandBuilder(_oleda);
    // コマンド取得
     odbcb.GetUpdateCommand();
     // 更新
     _oleda.Update(((DataSet)bindingSource1.DataSource).Tables[0]);

     _trn.Complete();
     odbcb.Dispose();
 }
コード(VB)
' トランザクション開始
Using _trn As New TransactionScope()
    ' 更新エラー時は例外
    _oleda.ContinueUpdateOnError = False
    ' 編集確定
    Me.bindingSource1.EndEdit()
    Dim odbcb As New OleDbCommandBuilder(_oleda)
    ' コマンド取得
    odbcb.GetUpdateCommand()
    ' 更新
    _oleda.Update(DirectCast(bindingSource1.DataSource, DataSet).Tables(0))  
  _trn.Complete()
    odbcb.Dispose()
End Using

これらの更新系のコマンドはSelectCommandをもとに生成されるので、Select文だけはデータ表示時にコードで書く必要がありますが、ユースケースデモのようにテーブルのフィールド名も定義ファイルに持たせておくと、この部分も動的に生成することができます。DbCmmandBuilderはマスタメンテナンスのためにあるような機能ですが、利用の際には以下の点を注意してください。

  • 単一テーブルからデータを取得していることと、これに主キーが含まれていること
  • パフォーマンスがあまり高くないため、データ量が多いケースでは注意が必要

クラスの詳細は、次のMSDNを参考にしてください。
MSDN : CommandBuilder でのコマンドの生成(ADO.NET)

今回の記事では、工数をかけずに汎用性の高いマスタメンテナンス画面を設計する簡単な方法を紹介しました。実際のシステム開発では、あまり修正の入らないマスタは今回のようなシンプルな方法で設計し、重要度の高いものは別途カスタマイズするといったように、マスタテーブルの修正頻度や重要度に応じてメンテナンス画面を作り分けるのもよいかもしれません。
SPREADを利用する場合はExcelのインポート機能がありますので、マスタデータそのものをExcelで作りこんでおき、メンテナンス画面として活用するなどの使い方も可能です。プロジェクトの要件やマスタデータの形式、業務ロジックなどもろもろの条件によりさまざまな工夫ができますので、運用後に優れた弾力性のある画面を設計してみてください。



かんたん・多機能・安心のサポート
SPREADで楽々アプリケーション開発

まずは評価版ダウンロードから

今すぐ評価版を無料で入手する


製品・サービスに関する
ご質問・ご相談など、
お気軽にお問合せください。

電話でお問合せ

048-222-3001

(平日 9:00~12:00、13:00~17:30)