Visual Basicプログラムにおけるメッセージ処理の使用

  Visual Basicプログラムにおいてメッセージ処理を実装するには、最初に次の手順に従ってプログラムをコード化してください:

  1. 初期化関数EsbInit()を呼び出す時点で、ESB_INIT_T構造体のClientErrorフィールドをESB_TRUEに設定し、ESB_INIT_TErrorStackフィールドの値を定義します。

  2. カスタム・メッセージ・ハンドラを定義するには、

    • 次の関数シグネチャを使用して、定義します(関数名は変更できます):

                                Public Function 
                        EsbErrorHandler
                         
              (ByVal MsgNum As Long, ByVal Level As Long, 
              ByVal uLog As String, ByVal uMsg As String) As Long
                     
    • ESB_INIT_T構造体のvbCallbackFuncAddressフィールドをカスタム・メッセージ・ハンドラ関数のアドレスに初期化します。例:

                        Sub ESB_Init()
         Dim Init As ESB_INIT_T
         Dim lx As Long
        
         ESB_FALSE = 0
         ESB_TRUE = 1
      
         Init.Version = ESB_API_VERSION
         Init.MaxHandles = 10
         Init.LocalPath = "C:\Hyperion\products\Essbase"
         Init.MessageFile = ""
         'This must be set to True
         Init.ClientError = ESB_TRUE
         Init.ErrorStack = 100
         'This is where the address of the custom function is set for Init.vbCallbackFuncAddress
         Init.vbCallbackFuncAddress = GetProcAddress(AddressOf EsbErrorHandler)
        
         sts = EsbInit(Init, hInst)
         Debug.Print "EsbInit: sts = " & sts
      
      End Sub
      
      Public Function GetProcAddress(ByVal lngAddressOf As Long) As Long
        GetProcAddress = lngAddressOf
      End Function
      
      Public Function EsbErrorHandler(ByVal MsgNum As Long, ByVal Level As 
      Long, ByVal uLog As String, ByVal uMsg As String) As Long
        ' [ YOUR CODE GOES HERE ]
        MsgBox " Info " & MsgNum & ": Level: " & Level & ": " & uLog & ": " & uMsg
      End Function
                     
  3. Essbaseが提供するメッセージ処理を使用するためには、関数EsbGetMessage()を呼び出し、EssbaseAPIを呼び出した後に戻された情報を取得します。情報を取得した後、必要に応じて、プログラムは情報を表示または処理できます。

ClientErrorフィールドおよびErrorStackフィールドの設定

次に示すコードの一部は、ClientErrorおよびErrorStackのフィールド・セットを示しています。

      Dim Init As ESB_INIT_T

.

.

.

Init.ClientError = ESB_TRUE

Init.ErrorStack = 100
   

EsbGetMessage()の呼出し

API関数を実行すると、情報、警告および、エラー・メッセージはすべて、メッセージ・スタックに蓄積されます。ClientErrorがESB_TRUEに設定されると、EsbGetMessage()を使用して、スタックから最上位のメッセージを取得できます。成功すると、EsbGetMessage()は、メッセージ・レベルへのポインタ、メッセージ番号へのポインタ、およびメッセージ文字列を戻します。また、内部メッセージ・スタック・ポインタを減らします。データが失われることがないように、関数がメッセージ・パラメータで空の文字列および番号パラメータで0を戻すまで、EsbGetMessage()を呼び出す必要があります。詳しくは、EsbGetMessageを参照してください。

Visual Basicプログラムは、APIへの呼出しによって生成される情報を取得するには、EsbGetMessage()を呼び出す必要があります。API呼出しによって生成された戻りコードが0でないとき、戻されたエラーまたはステータス情報を取得するため、これは重要です。さらに、戻りコードが0であるとき、追加情報の戻される可能性がある場合は、EsbGetMessage()を呼び出す必要があります。たとえば、EsbLogin()またはEsbAutoLogin()への呼出しが正常終了した場合、最後のログ・インに関する役に立つ情報が戻されます。

注:

カスタム・エラー処理関数を初期化すると、EsbGetMessageは取得に使用できません。