List 6-157 Business.SlipコンポーネントのRejectSlipメソッド
1: Public Sub RejectSlip(ByVal SlipID As Long, _
ByVal Comment As Variant)
2: ' 指定された承認依頼中の伝票を却下する
3: ' 【引数】
4: ' SlipID = 作成中に戻したい伝票の伝票番号
5: ' Comment = 却下時のコメント
6: ' 【戻り値】
7: ' なし
8: Dim objContext As ObjectContext
9: Dim objDataSlip As DataObj.Slip
10: Dim objDataSlipDetail As DataObj.SlipDetail
11: Dim objDataProduct As DataObj.Product
12: Dim SlipStatus As SlipStatus
13: Dim old_CUSTOMERID As Variant, old_SUBTOTAL As Variant, old_TAX As Variant
14: Dim old_TOTAL As Variant, old_MADEDATE As Variant, old_MADEUSER As Variant
15: Dim old_LASTUSER As Variant, old_LASTDATE As Variant
16: Dim old_ONEBILLFLAG As Variant, old_BILLID As Variant, old_BILLDATE As Variant
17: Dim objRecSlipDetail As ADODB.Recordset
18: Dim ProductID As Long, Number As Long
19:
20: ' オブジェクトコンテキストの取得
21: Set objContext = GetObjectContext()
22:
23: ' エラーハンドラの設定
24: On Error GoTo ErrHandle
25:
26: ' DataObj.Slipコンポーネントの実体化
27: Set objDataSlip = CreateObject("DataObj.Slip")
28:
29: ' 伝票が存在することを確認
30: If objDataSlip.IsDeleted(SlipID) <> ID_Exists Then
31: ' 伝票が存在しない
32: Err.Raise Errorcode.Err_NOTFOUND, App.Title, _
"指定された伝票は存在しません"
33: End If
34:
35: ' 伝票の状態を取得
36: SlipStatus = objDataSlip.Get_SlipStatus(SlipID)
37: If (SlipStatus <> RequestingConsent) Then
38: ' 伝票が承認依頼中ではない
39: Err.Raise BusinessError.Err_CANTUPDATE, App.Title, _
"その伝票は承認依頼中ではありません"
40: End If
41:
42: ' ユーザーの確認
43: If Not objContext.IsSecurityEnabled() Then
44: ' セキュリティ設定が無効
45: Err.Raise ERR_NOSECURE, App.Title, _
"セキュリティ機構が無効です"
46: End If
47:
48: ' SalesManagerロール,SalesAdminロール,AllAdminロールに属するか
49: If Not (objContext.IsCallerInRole("SalesManager") Or _
objContext.IsCallerInRole("SalesAdmin") Or _
objContext.IsCallerInRole("AllAdmin")) Then
50: ' SalesAdminロールやAllAdminロールに属さない
51: Err.Raise ERR_NOSECURE, App.Title, _
"却下する権限がありません"
52: End If
53:
54:
55: ' 以上で権限の調査は完了。以下,実際のデータ操作に入る
56:
57: ' REQ_CONSENTFLAGフィールドの値をFalseにする
58: objDataSlip.Set_REQ_CONSENTFLAG SlipID, False, Null
59: ' REJECTEDFLAGフィールドの値をTrueにする
60: objDataSlip.Set_REJECTEDFLAG SlipID, True, Comment
61:
62: ' 製品情報テーブルのBACKORDERフィールドに加えた値を元に戻す
63:
64: ' DataObj.SlipDetailコンポーネントの実体化
65: Set objDataSlipDetail = CreateObject("DataObj.SlipDetail")
66: ' 明細レコードの取得
67: Set objRecSlipDetail = objDataSlipDetail.GetRecords(SlipID)
68:
69: ' DataObj.Productコンポーネントの実体化
70: Set objDataProduct = CreateObject("DataObj.Product")
71:
72: ' すべての明細についてループ
73: While Not objRecSlipDetail.EOF
74: If Not objRecSlipDetail.Fields("DELETEDFLAG").Value Then
75: ' 削除ずみでなければ,製品のBACKORDERフィールドの値を減らす
76: ProductID = objRecSlipDetail.Fields("PRODUCTID").Value
77: Number = objRecSlipDetail.Fields("NUMBER").Value
78:
79: objDataProduct.AddBackOrder ProductID, -Number
80: End If
81: ' 次のレコードに移動
82: objRecSlipDetail.MoveNext
83: Wend
84:
85: objRecSlipDetail.Close
86: Set objRecSlipDetail = Nothing
87:
88: ' 各種コンポーネントの解放
89: Set objDataProduct = Nothing
90: Set objDataSlipDetail = Nothing
91: Set objDataSlip = Nothing
92:
93: ' トランザクションのコミット
94: objContext.SetComplete
95:
96: ' オブジェクトコンテキストの解放
97: Set objContext = Nothing
98:
99: Exit Sub
100:
101: ErrHandle:
102: ' エラーハンドラ
103: objContext.SetAbort
104: Set objDataSlip = Nothing
105: Set objDataSlipDetail = Nothing
106: Set objDataProduct = Nothing
107: Set objRecSlipDetail = Nothing
108:
109: ' エラーの再発行
110: Err.Raise Err.Number, Err.Source, Err.Description, _
Err.HelpFile, Err.HelpContext
111: End Sub