List 6-129 Business.SlipコンポーネントのDeleteSlipDetailメソッド
  1: Public Function DeleteSlipDetail(ByVal ID As Variant)
  2:     ' 指定された明細情報を削除する
  3:     ' 【引数】
  4:     '   ID = 削除したい明細のレコードID
  5:     ' 【戻り値】
  6:     '   なし
  7:     Dim objContext As ObjectContext
  8:     Dim objDataSlip As DataObj.Slip, objDataSlipDetail As DataObj.SlipDetail
  9:     Dim old_CUSTOMERID As Variant, old_SUBTOTAL As Variant, old_TAX As Variant
 10:     Dim old_TOTAL As Variant, old_MADEDATE As Variant, old_MADEUSER As Variant
 11:     Dim old_LASTUSER As Variant, old_LASTDATE As Variant
 12:     Dim SUBTOTAL As Currency, TAX As Currency, TOTAL As Currency
 13:     Dim SlipID As Long
 14: 
 15:     ' オブジェクトコンテキストの確認
 16:     Set objContext = GetObjectContext()
 17:     
 18:     ' エラーハンドラの設定
 19:     On Error GoTo ErrHandle
 20: 
 21:     ' 現在の明細を削除
 22:     ' DataObj.SlipDetailコンポーネントの実体化
 23:     Set objDataSlipDetail = CreateObject("DataObj.SlipDetail")
 24:         
 25:     SlipID = objDataSlipDetail.SetDeleted(ID)
 26: 
 27:     ' DataObj.Slipコンポーネントの実体化
 28:     Set objDataSlip = CreateObject("DataObj.Slip")
 29:     
 30:     ' 削除されていないことを確認
 31:     If objDataSlip.IsDeleted(SlipID) <> ID_Exists Then
 32:         Err.Raise Errorcode.Err_NOTFOUND, App.Title, _
                       "指定された伝票番号を持つ伝票が見つかりません"
 33:     End If
 34:     
 35:     ' 伝票の現在の状態が承認待ち以上であれば編集は不可
 36:     If objDataSlip.Get_SlipStatus(SlipID) >= RequestingConsent Then
 37:         Err.Raise ERR_CANTUPDATE, App.Title, _
                       "承認待ち以上まで進んでいるため変更できません"
 38:     End If
 39:     
 40:     ' 伝票の現在の状態を確認
 41:     objDataSlip.GetRecord_Slip SlipID, old_CUSTOMERID, _
                                    old_SUBTOTAL, old_TAX, old_TOTAL, _
                                    old_MADEDATE, old_MADEUSER, _
                                    old_LASTDATE, old_LASTUSER
 42:     
 43:     ' 変更する権限があるかどうかをチェック
 44:     If Not objContext.IsSecurityEnabled() Then
 45:         ' セキュリティ設定が無効
 46:         Err.Raise ERR_NOSECURE, App.Title, _
                       "セキュリティ機構が無効です"
 47:     End If
 48:     
 49:     ' 作成者と呼び出し者が一致するか
 50:     If objContext.Security.GetOriginalCallerName() <> old_MADEUSER Then
 51:         ' 一致しない
 52:         ' SalesManagerロール,SalesAdminロール,AllAdminロールに属するのであれば,
 53:         ' 一致しなくてもよいものとする
 54:         If Not (objContext.IsCallerInRole("SalesManager") Or _
                     objContext.IsCallerInRole("SalesAdmin") Or _
                     objContext.IsCallerInRole("AllAdmin")) Then
 55:             ' SalesManagerロール,SalesAdminロール,AllAdminロールに属さない
 56:             Err.Raise ERR_NOSECURE, App.Title, _
                           "他人が作成した伝票を更新することはできません"
 57:         End If
 58:     End If
 59: 
 60:     ' 伝票の合計の再計算
 61:     SUBTOTAL = objDataSlipDetail.GetSubTotal(SlipID)
 62:     TAX = SUBTOTAL * 0.05
 63:     TOTAL = SUBTOTAL + TAX
 64:     objDataSlip.SetTotal SlipID, SUBTOTAL, TAX, TOTAL
 65:     
 66:     ' コンポーネントの解放
 67:     Set objDataSlipDetail = Nothing
 68:     Set objDataSlip = Nothing
 69: 
 70:     ' トランザクションをコミット
 71:     objContext.SetComplete
 72:     
 73:     ' オブジェクトコンテキストの解放
 74:     Set objContext = Nothing
 75:     
 76:     Exit Function
 77: 
 78: ErrHandle:
 79:     ' エラーハンドラ
 80:     objContext.SetAbort
 81:     Set objContext = Nothing
 82:     Set objDataSlip = Nothing
 83:     Set objDataSlipDetail = Nothing
 84:     
 85:     ' エラーの再発行
 86:     Err.Raise Err.NUMBER, Err.Source, Err.Description, _
                   Err.HelpFile, Err.HelpContext
 87: End Function