List 6-168 Business.SlipコンポーネントのCancelAccountingSlipメソッド
  1: Public Sub CancelAccountingSlip(ByVal SlipID)
  2:     ' 指定された伝票を経理処理ずみから発送ずみに戻す
  3:     ' 【引数】
  4:     '   SlipID = 発送ずみに戻したい伝票の伝票番号
  5:     ' 【戻り値】
  6:     '   なし
  7:     Dim objContext As ObjectContext
  8:     Dim objDataSlip As DataObj.Slip
  9:     Dim old_ACCOUNTINGUSER As Variant, old_ACCOUNTINGDATE As Variant
 10:     Dim old_ACCOUNTINGCOMMENT As Variant
 11:     Dim old_SENDUSER As Variant, old_SENDDATE As Variant
 12:     Dim old_SENDCOMMENT As Variant
 13:     Dim SlipStatus As SlipStatus
 14:     
 15:     ' オブジェクトコンテキストの取得
 16:     Set objContext = GetObjectContext()
 17:     
 18:     ' エラーハンドラの設定
 19:     On Error GoTo ErrHandle
 20:     
 21:     ' DataObj.Slipコンポーネントの実体化
 22:     Set objDataSlip = CreateObject("DataObj.Slip")
 23:     
 24:     ' 伝票が存在することを確認
 25:     If objDataSlip.IsDeleted(SlipID) <> ID_Exists Then
 26:         ' 伝票が存在しない
 27:         Err.Raise Errorcode.Err_NOTFOUND, App.Title, _
                       "指定された伝票は存在しません"
 28:     End If
 29:     
 30:     ' 伝票の状態を取得
 31:     SlipStatus = objDataSlip.Get_SlipStatus(SlipID)
 32:     If (SlipStatus <> Accounted) Then
 33:         ' 伝票が経理処理ずみではない
 34:         Err.Raise BusinessError.ERR_CANTUPDATE, App.Title, _
                       "その伝票は経理処理ずみではありません"
 35:     End If
 36:     
 37:     ' 権限の確認
 38:     If Not objContext.IsSecurityEnabled() Then
 39:         ' セキュリティ設定が無効
 40:         Err.Raise ERR_NOSECURE, App.Title, _
                       "セキュリティ機構が無効です"
 41:     End If
 42:     
 43:     ' 経理処理ずみにしたユーザーの情報を取得
 44:     objDataSlip.GetRecord_Accounting SlipID, old_ACCOUNTINGUSER, _
                                          old_ACCOUNTINGDATE, old_ACCOUNTINGCOMMENT
 45:     ' 経理処理ずみとしたユーザーと呼び出したユーザーが一致するか
 46:     If objContext.Security.GetOriginalCallerName() <> old_ACCOUNTINGUSER Then
 47:         ' 一致しない
 48:         ' AccountingAdminロールまたはAllAdminロールに属するのであれば,
 49:         ' 一致しなくてもよいものとする
 50:         If Not (objContext.IsCallerInRole("AccountingAdmin") Or _
                     objContext.IsCallerInRole("AllAdmin")) Then
 51:             ' AccountingAdminロールまたはAllAdminロールに属さない
 52:             Err.Raise ERR_NOSECURE, App.Title, _
                           "他人が経理処理ずみにした伝票を元に戻すことはできません"
 53:         End If
 54:     End If
 55:     
 56:     ' ACCOUNTINGFLAGフィールドの値をFalseにする
 57:     objDataSlip.Set_ACCOUNTINGFLAG SlipID, False, Null
 58:     ' SENDFLAGフィールドの値をTrueにする
 59:     objDataSlip.GetRecord_Send SlipID, old_SENDUSER, old_SENDDATE, old_SENDCOMMENT
 60:     objDataSlip.Set_SENDFLAG SlipID, True, old_SENDCOMMENT
 61:     
 62:     ' コンポーネントの解放
 63:     Set objDataSlip = Nothing
 64:     
 65:     ' トランザクションのコミット
 66:     objContext.SetComplete
 67:     
 68:     ' オブジェクトコンテキストの解放
 69:     Set objContext = Nothing
 70:     
 71:     Exit Sub
 72: 
 73: ErrHandle:
 74:     ' エラーハンドラ
 75:     objContext.SetAbort
 76:     Set objDataSlip = Nothing
 77:     
 78:     ' エラーの再発行
 79:     Err.Raise Err.Number, Err.Source, Err.Description, _
                   Err.HelpFile, Err.HelpContext
 80: End Sub