List 6-110 Business.SlipコンポーネントのUpdateSlipメソッド
1: Public Function UpdateSlip(ByVal SlipID As Long, _
ByVal CUSTOMERID As Variant, _
ByVal ONEBILLFLAG As Variant, _
ByVal DIVISION As Variant, _
ByVal PERSON As Variant, _
ByVal DELIVERDATE As Variant, _
ByVal SENT_ADDR As Variant, _
ByVal SENT_TEL As Variant, _
ByVal MEMO As Variant)
2: ' 伝票情報を更新する
3: ' 【引数】
4: ' SlipID = 編集の対象となる伝票を特定する伝票番号
5: ' CustomerID = 対象となる顧客を示す顧客番号
6: ' ONEBILLFLAG = この伝票に対して1枚の請求書を作るならばTrue,
7: ' 別の伝票と合わせて月次の請求書を作るならばFalse
8: ' DIVISION = 顧客側の部署名
9: ' PERSON = 顧客側の担当者名
10: ' DELIVERDATE = 納入予定日
11: ' SENT_ADDR = 発送先の住所
12: ' SENT_TEL = 発送先の電話番号
13: ' MEMO = 摘要
14: ' 【戻り値】
15: ' なし
16: Dim objContext As ObjectContext
17: Dim objDataSlip As DataObj.Slip, objDataSlipInformation As DataObj.SlipInformation
18: Dim objDataCustomer As DataObj.Customer
19: Dim old_CUSTOMERID As Variant, old_SUBTOTAL As Variant, old_TAX As Variant
20: Dim old_TOTAL As Variant, old_MADEDATE As Variant, old_MADEUSER As Variant
21: Dim old_LASTUSER As Variant, old_LASTDATE As Variant
22: Dim old_ONEBILLFLAG As Variant, old_BILLID As Variant, old_BILLDATE As Variant
23: Dim SlipStatus As DataObj.SlipStatus
24: Dim old_DIVISION As Variant, old_PERSON As Variant, old_DELIVERDATE As Variant
25: Dim old_SENT_ADDR As Variant, old_SENT_TEL As Variant, old_MEMO As Variant
26: Dim ChangeFlag As Boolean
27: Dim RecordID As Long
28:
29: ' オブジェクトコンテキストの取得
30: Set objContext = GetObjectContext()
31:
32: ' エラーハンドラの設定
33: On Error GoTo ErrHandle
34:
35: ' DataObj.Slipコンポーネントの実体化
36: Set objDataSlip = CreateObject("DataObj.Slip")
37:
38: ' 削除されていないことを確認
39: If objDataSlip.IsDeleted(SlipID) <> ID_Exists Then
40: Err.Raise Errorcode.Err_NOTFOUND, App.Title, _
"指定された伝票番号を持つ伝票が見つかりません"
41: End If
42:
43: ' 現在の伝票の情報を取得
44: objDataSlip.GetRecord_Slip SlipID, old_CUSTOMERID, _
old_SUBTOTAL, old_TAX, old_TOTAL, _
old_MADEDATE, old_MADEUSER, _
old_LASTDATE, old_LASTUSER
45: objDataSlip.GetRecord_Bill SlipID, old_BILLID, old_BILLDATE, _
old_ONEBILLFLAG
46: ' 変更する権限があるかどうかをチェック
47: If Not objContext.IsSecurityEnabled() Then
48: ' セキュリティ設定が無効
49: Err.Raise ERR_NOSECURE, App.Title, _
"セキュリティ機構が無効です"
50: End If
51:
52: ' 作成者と呼び出し者が一致するか
53: If objContext.Security.GetOriginalCallerName() <> old_MADEUSER Then
54: ' 一致しない
55: ' SalesManagerロール,SalesAdminロール,AllAdminロールに属するのであれば,
56: ' 一致しなくてもよいものとする
57: If Not (objContext.IsCallerInRole("SalesManager") Or _
objContext.IsCallerInRole("SalesAdmin") Or _
objContext.IsCallerInRole("AllAdmin")) Then
58: ' SalesManagerロール,SalesAdminロール,AllAdminロールに属さない
59: Err.Raise ERR_NOSECURE, App.Title, _
"他人が作成した伝票を更新することはできません"
60: End If
61: End If
62:
63:
64: ' 伝票の現在の状態を取得
65: SlipStatus = objDataSlip.Get_SlipStatus(SlipID)
66:
67: ' CUSTOMERIDフィールドの値を更新
68: If CUSTOMERID <> old_CUSTOMERID Then
69: ' 更新できるのは,SlipStatusがRequestingConsentよりも小さいときだけ
70: If SlipStatus >= RequestingConsent Then
71: Err.Raise ERR_CANTUPDATE, App.Title, _
"承認ずみなので顧客の変更はできません"
72: End If
73: ' 顧客が存在することを確認
74: ' DataObj.Customerコンポーネントの実体化
75: Set objDataCustomer = CreateObject("DataObj.Customer")
76: If objDataCustomer.IsDeleted(CUSTOMERID) <> ID_Exists Then
77: ' 顧客がいない
78: Err.Raise Errorcode.Err_CUSTOMERID, App.Title, _
"指定された顧客は存在しません"
79: End If
80: Set objDataCustomer = Nothing
81: ' 更新
82: objDataSlip.Update_CUSTOMERID SlipID, CUSTOMERID
83: End If
84:
85: ' ONEBILLFLAGフィールドの値を更新
86: If ONEBILLFLAG <> old_ONEBILLFLAG Then
87: ' 更新できるのは,SlipStatusがAccountedよりも小さいときだけ
88: If SlipStatus >= Accounted Then
89: Err.Raise ERR_CANTUPDATE, App.Title, _
"経理処理ずみなので請求書の設定変更はできません"
90: End If
91: ' 更新
92: objDataSlip.Update_ONEBILLFLAG SlipID, ONEBILLFLAG
93: End If
94:
95: ' DataObj.SlipInformationコンポーネントの実体化
96: Set objDataSlipInformation = CreateObject("DataObj.SlipInformation")
97:
98: ' 現在の設定値を取得
99: RecordID = objDataSlipInformation.GetRecord(SlipID, old_DIVISION, _
old_PERSON, old_DELIVERDATE, _
old_SENT_ADDR, old_SENT_TEL, old_MEMO, _
old_MADEDATE, old_MADEUSER, _
old_LASTDATE, old_LASTUSER)
100: ' 伝票追加情報を変更
101: ChangeFlag = False
102:
103: ' DIVISIONの内容を設定しようとしているか
104: If DIVISION <> old_DIVISION Or (IsNull(DIVISION) Xor IsNull(old_DIVISION)) Then
105: ChangeFlag = True
106: End If
107: ' PERSONの内容を設定しようとしているか
108: If PERSON <> old_PERSON Or (IsNull(PERSON) Xor IsNull(old_PERSON)) Then
109: ChangeFlag = True
110: End If
111: ' DELIVERDATEの内容を設定しようとしているか
112: If DELIVERDATE <> old_DELIVERDATE Or (IsNull(DELIVERDATE) Xor IsNull(old_DELIVERDATE)) Then
113: ChangeFlag = True
114: End If
115: ' SENT_ADDRの内容を設定しようとしているか
116: If SENT_ADDR <> old_SENT_ADDR Or (IsNull(SENT_ADDR) Xor IsNull(old_SENT_ADDR)) Then
117: ChangeFlag = True
118: End If
119: ' SENT_TELの内容を設定しようとしているか
120: If SENT_TEL <> old_SENT_TEL Or (IsNull(SENT_TEL) Xor IsNull(old_SENT_TEL)) Then
121: ChangeFlag = True
122: End If
123: ' MEMOの内容を設定しようとしているか
124: If MEMO <> old_MEMO Or (IsNull(MEMO) Xor IsNull(old_MEMO)) Then
125: ChangeFlag = True
126: End If
127:
128: ' いずれかの情報を変更しようとしていれば,
129: ' 伝票追加情報テーブル内のレコードを更新
130: If ChangeFlag Then
131: ' 変更できるのは伝票の状態がSendより小さいとき
132: If SlipStatus >= Send Then
133: Err.Raise ERR_CANTUPDATE, App.Title, _
"すでに製品が発送されているため,伝票の情報を変更することはできません"
135: End If
136: ' 既存の伝票追加情報テーブル内のレコードを削除
137: objDataSlipInformation.SetDeleted RecordID
138: ' 新しい情報に設定したレコードを追加する
139: objDataSlipInformation.AddRecord SlipID, DIVISION, PERSON, _
DELIVERDATE, SENT_ADDR, SENT_TEL, MEMO
140: End If
141:
142: ' 各種コンポーネントの解放
143: Set objDataSlipInformation = Nothing
144: Set objDataSlip = Nothing
145: Set objDataCustomer = Nothing
146:
147: ' トランザクションをコミット
148: objContext.SetComplete
149:
150: ' オブジェクトコンテキストの解放
151: Set objContext = Nothing
152:
153: Exit Function
154:
155: ErrHandle:
156: ' エラーハンドラ
157: objContext.SetAbort
158: Set objContext = Nothing
159: Set objDataCustomer = Nothing
160: Set objDataSlip = Nothing
161: Set objDataSlipInformation = Nothing
162:
163: ' エラーの再発行
164: Err.Raise Err.NUMBER, Err.Source, Err.Description, _
Err.HelpFile, Err.HelpContext
165: End Function