List 6-140 Business.SlipコンポーネントのDeleteSlipメソッド
1: Public Sub DeleteSlip(ByVal SlipID As Long)
2: ' 指定された伝票を削除する
3: ' まだDELETEDFLAGフィールドの値がFalseであればそれをTrueに
4: ' Trueであれば伝票のレコードそのものを削除する
5: ' 【引数】
6: ' SlipID = 削除したい伝票の伝票番号
7: Dim objContext As ObjectContext
8: Dim objDataSlip As DataObj.Slip
9: Dim objDataSlipDetail As DataObj.SlipDetail
10: Dim objDataSlipInformation As DataObj.SlipInformation
11: Dim old_CUSTOMERID As Variant, old_SUBTOTAL As Variant, old_TAX As Variant
12: Dim old_TOTAL As Variant, old_MADEDATE As Variant, old_MADEUSER As Variant
13: Dim old_LASTUSER As Variant, old_LASTDATE As Variant
14:
15: ' オブジェクトコンテキストの取得
16: Set objContext = GetObjectContext()
17:
18: ' エラーハンドラの設定
19: On Error GoTo ErrHandle
20:
21: ' セキュリティ設定が有効であることを確認
22: If Not objContext.IsSecurityEnabled() Then
23: ' セキュリティ設定が無効
24: Err.Raise ERR_NOSECURE, App.Title, _
"セキュリティ機構が無効です"
25: End If
26:
27: ' DataObj.Slipコンポーネントの実体化
28: Set objDataSlip = CreateObject("DataObj.Slip")
29:
30: ' 伝票の状態が承認ずみよりも進んでいないことを確認
31: If objDataSlip.Get_SlipStatus(SlipID) >= SlipStatus.Consented Then
32: Err.Raise ERR_CANTDELETE, App.Title, _
"承認された伝票は削除できません"
33: End If
34:
35: ' 削除されているかどうかを確認
36: Select Case objDataSlip.IsDeleted(SlipID)
37: Case ID_NotFound
38: ' 見つからない
39: Err.Raise Errorcode.Err_NOTFOUND, App.Title, _
"指定された伝票番号を持つ伝票が見つかりません"
40: Case ID_Exists
41: ' 存在する
42: ' DELETEDFLAGフィールドをTRUEにするだけ
43: ' その時点の伝票の情報を取得
44: objDataSlip.GetRecord_Slip SlipID, old_CUSTOMERID, _
old_SUBTOTAL, old_TAX, old_TOTAL, _
old_MADEDATE, old_MADEUSER, _
old_LASTDATE, old_LASTUSER
45: ' 削除する権限があるかどうかを調査
46: If objContext.Security.GetOriginalCallerName() <> old_MADEUSER Then
47: If Not (objContext.IsCallerInRole("SalesAdmin") Or _
objContext.IsCallerInRole("AllAdmin")) Then
48: Err.Raise ERR_NOSECURE, App.Title, _
"他人が作成した伝票を削除することはできません"
49: End If
50: End If
51:
52: ' DELETEDFLAGフィールドをTRUEに設定する
53: objDataSlip.SetDeletedFlag SlipID, True
54: Case ID_Deleted
55: ' 削除ずみ
56: ' レコードそのものを削除してしまう
57: ' 削除する権限があるかどうかを調査
58: If Not (objContext.IsCallerInRole("SalesAdmin") Or _
objContext.IsCallerInRole("AllAdmin")) Then
59: Err.Raise ERR_NOSECURE, App.Title, _
"削除する権限がありません"
60: End If
61:
62: ' 伝票に付随する伝票追加情報も削除
63: Set objDataSlipInformation = CreateObject("DataObj.SlipInformation")
64: objDataSlipInformation.DeleteRecord SlipID
65: Set objDataSlipInformation = Nothing
66:
67: ' 伝票に付随する明細情報も削除
68: Set objDataSlipDetail = CreateObject("DataObj.SlipDetail")
69: objDataSlipDetail.DeleteRecord SlipID
70: Set objDataSlipDetail = Nothing
71:
72: ' レコードそのものを削除する
73: objDataSlip.DeleteRecord SlipID
74: End Select
75:
76: ' DataObj.Slipコンポーネントの解放
77: Set objDataSlip = Nothing
78:
79: ' トランザクションのコミット
80: objContext.SetComplete
81: ' オブジェクトコンテキストの解放
82: Set objContext = Nothing
83:
84: Exit Sub
85:
86: ErrHandle:
87: ' エラーハンドラ
88: objContext.SetAbort
89: Set objContext = Nothing
90: Set objDataSlip = Nothing
91: Set objDataSlipInformation = Nothing
92: Set objDataSlipDetail = Nothing
93:
94: ' エラーの再発行
95: Err.Raise Err.NUMBER, Err.Source, Err.Description, _
Err.HelpFile, Err.HelpContext
96: End Sub