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