受注伝票ヘッダークラス [VB]

Visual Basic ADO.NET [Community Express]

受注伝票ヘッダークラス

受注ヘッダー表に登録する伝票データを管理するためのクラスです。

受注ヘッダーデータ管理クラスの実装

受注エントリー画面

基本クラス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