受注伝票ヘッダークラス
受注ヘッダー表に登録する伝票データを管理するためのクラスです。
受注ヘッダーデータ管理クラスの実装
基本クラスClsHeaderBaseは、MustInheritを付加し、抽象クラスとします。インスタンスは生成できません。
基本クラスClsHeaderBaseには、まず、受注ヘッダー表1行分のデータをセットする共有メソッドを追加します。
基本クラスには、さらに、受注日プロパティ・得意先コードプロパティと、派生クラスからアクセスできる受注番号エラーチェックメソッドを実装します。
ClsHeaderBaseを継承したクラスClsInsertHeader派生クラスは、登録ボタンを押したときに、入力データを受注ヘッダー表に追加するためのクラスで、受注日・受注番号・得意先コードをメンバーとして持っています。
ClsInsertHeaderのインスタンス(オブジェクト)は、ClsJuchuDenpyoIOクラスのInsertRecordメソッドの引数に指定します。
ソースリストの枠内をクリックすると全選択できます。
Option Strict On Imports System.Text.RegularExpressions '%%%%%%%%%%%%% 基本クラス:受注ヘッダークラス %%%%%%%%%%%%%%% Public MustInherit Class ClsHeaderBase '--------------------< 定数メンバー >-------------------- Protected Const TABLE_NAME As String = "受注ヘッダー表" Protected Const KEY_FIELD As String = "受注番号" '--------------------< 変数メンバー >-------------------- Protected juchuBiValue As Date ' 受注日 Protected juchuBangoValue As String ' 受注番号 Protected tokuisakiCodeValue As String ' 得意先コード '******************************************************* ' 機能:受注ヘッダー表1行の空データ生成メソッド ' 引数:なし ' 戻値:受注ヘッダー表の1行分空データ ' 補足:インスタンスの生成不要 '******************************************************* Public Shared Function CreateDataRow() As DataRow Dim retDr As DataRow ' リターン値 ' 受注ヘッダー表の1行分空データ生成 Dim dbIO As New ClsHanbaiKanriDBIO( _ TABLE_NAME, KEY_FIELD) retDr = dbIO.CreateDataRow() ' ◆戻値を設定してリターン Return retDr End Function '------------------------------------------------------- ' プロパティ:受注日 '------------------------------------------------------- Public Property JuchuBi() As Date ' Getプロパティ Get Return juchuBiValue End Get ' Setプロパティ Set(ByVal value As Date) juchuBiValue = value End Set End Property '------------------------------------------------------- ' プロパティ:得意先コード '------------------------------------------------------- Public Property TokuisakiCode() As String ' Getプロパティ Get Return tokuisakiCodeValue End Get ' Setプロパティ Set(ByVal tCode As String) ' 得意先エラーチェック Dim tokui As New ClsTokuisaki(tCode) tokuisakiCodeValue = tCode End Set End Property '******************************************************* ' 機能:受注番号のエラーチェックメソッド ' 引数:受注番号 ' 戻値:なし ' 補足:エラーがあれば例外をスロー '******************************************************* Protected Sub CheckJuchuBango(ByVal juchuBango As String) ' 引数未設定はエラー If juchuBango.Length = 0 Then Throw New JuchuBangoException("受注番号を入力してください") End If ' 数字以外はエラー If Not Regex.IsMatch(juchuBango, "^[0-9]+$") Then Throw New JuchuBangoException _ ("受注番号に数字以外の文字があります") End If ' 受注番号長さチェック(6桁以外はエラー) If Not juchuBango.Length = 6 Then Throw New JuchuBangoException("受注番号の桁数が違います") End If End Sub End Class '/////////// 派生クラス:受注ヘッダー追加クラス //////////// Public Class ClsInsertHeader Inherits ClsHeaderBase '======================================================= ' 機能:コンストラクタ ' 引数:受注ヘッダーデータ ' 戻値:なし '======================================================= Public Sub New(ByVal row As DataRow) ' 最初に基本クラスのコンストラクタを呼び出す MyBase.New() ' 受注ヘッダーデータをセット JuchuBi = CDate(row("受注日")) JuchuBango = CStr(row("受注番号")) TokuisakiCode = CStr(row("得意先コード")) End Sub '------------------------------------------------------- ' プロパティ:受注番号 '------------------------------------------------------- Public Property JuchuBango() As String ' Getプロパティ Get Return juchuBangoValue End Get ' Setプロパティ Set(ByVal jBango As String) ' 受注番号エラーチェック CheckJuchuBango(jBango) ' 受注ヘッダー表からレコード取得 Dim dbIO As New ClsHanbaiKanriDBIO( _ TABLE_NAME, KEY_FIELD, jBango) Dim dt As DataTable = dbIO.GetRowsData() ' 受注ヘッダー表にレコードがなければ正常 If dt.Rows.Count = 0 Then juchuBangoValue = jBango Else ' 受注ヘッダー表にレコードがあれば例外スロー Throw New JuchuBangoException _ ("この受注番号は登録済みです") End If End Set End Property End Class