List 6-65 Business.ProductコンポーネントのDeleteProductメソッド
  1: Public Sub DeleteProduct(ByVal ProductID As Long)
  2:     ' 指定された製品番号を持つ製品を削除する
  3:     ' 指定された製品を示すレコードのDELETEDFLAGフィールドの値が
  4:     '   FalseであればそれをTrueに
  5:     '   TrueでありかつProductsAdminロールまたはAllAdminロールに属する
  6:     '       ユーザーから呼び出されたならばレコードそのものを削除する
  7:     ' 【引数】
  8:     '   ProductID = 削除したい製品を特定する製品番号を指定する
  9:     ' 【戻り値】
 10:     '   なし
 11:     Dim objContext As ObjectContext
 12:     Dim objDataProduct As DataObj.Product
 13:     Dim objDataStock As DataObj.STOCK
 14:     Dim objDataSlipDetail As DataObj.SlipDetail
 15:     
 16:     ' オブジェクトコンテキストの取得
 17:     Set objContext = GetObjectContext()
 18:     
 19:     ' エラーハンドラの設定
 20:     On Error GoTo ErrHandle
 21:     
 22:     ' DataObj.Product,Stock,SlipDetailの実体化
 23:     Set objDataProduct = CreateObject("DataObj.Product")
 24:     Set objDataStock = CreateObject("DataObj.Stock")
 25:     Set objDataSlipDetail = CreateObject("DataObj.SlipDetail")
 26:     
 27:     ' 削除対象となる製品が在庫情報ならびに明細情報で使われていないことを確認
 28:     If objDataStock.IsExistsProduct(ProductID) Or _
              objDataSlipDetail.IsExistsProduct(ProductID) Then
 29:         ' 使われている
 30:         Err.Raise BusinessError.ERR_CANTACCESS, App.Title, _
                       "在庫か伝票明細が存在するため削除できません"
 31:     End If
 32:     
 33:     ' 現在の製品の状態を確認
 34:     Select Case objDataProduct.IsDeleted(ProductID)
 35:         Case ID_Exists
 36:             ' 存在する
 37:             ' DELETEDFLAGフィールドの値をTrueにするだけ
 38:             objDataProduct.SetDeletedFlag ProductID, True
 39:         Case ID_Deleted
 40:             ' 削除ずみ
 41:             ' ProductsAdminロールかAllAdminロールに属していることを確認
 42:             If Not objContext.IsSecurityEnabled() Then
 43:                 Err.Raise BusinessError.ERR_NOSECURE, App.Title, _
                               "セキュリティ機構が無効です"
 44:             End If
 45:             ' ProductsAdminロールまたはAllAdminロールに属していることを確認
 46:             If Not (objContext.IsCallerInRole("ProductsAdmin") Or _
                           objContext.IsCallerInRole("AllAdmin")) Then
 47:                 ' 属していない
 48:                 Err.Raise BusinessError.ERR_CANTACCESS, App.Title, _
                               "削除権限がありません"
 49:             End If
 50:             ' レコードを本当に削除してしまう
 51:             objDataProduct.DeleteRecord ProductID
 52:         Case ID_NotFound
 53:             ' 存在しない
 54:             Err.Raise Errorcode.Err_NotFound, App.Title, _
                           "指定された製品番号を持つ製品が見つかりません"
 55:     End Select
 56:     
 57:     ' DataObj.Product,Stock,SlipDetailの解放
 58:     Set objDataSlipDetail = Nothing
 59:     Set objDataStock = Nothing
 60:     Set objDataProduct = Nothing
 61:     
 62:     ' コミットする
 63:     objContext.SetComplete
 64:     
 65:     ' オブジェクトコンテキストの解放
 66:     Set objContext = Nothing
 67:     
 68:     Exit Sub
 69: 
 70: ErrHandle:
 71:     ' エラーハンドラ
 72:     objContext.SetAbort
 73:     Set objContext = Nothing
 74:     Set objDataProduct = Nothing
 75:     Set objDataStock = Nothing
 76:     Set objDataSlipDetail = Nothing
 77:     
 78:     ' エラーの再発行
 79:     Err.Raise Err.Number, Err.Source, Err.Description, _
                   Err.HelpFile, Err.HelpContext
 80: End Sub