Visual Basicプログラムにおいてメッセージ処理を実装するには、最初に次の手順に従ってプログラムをコード化してください:
初期化関数EsbInit()を呼び出す時点で、ESB_INIT_T構造体のClientErrorフィールドをESB_TRUEに設定し、ESB_INIT_TのErrorStackフィールドの値を定義します。
次の関数シグネチャを使用して、定義します(関数名は変更できます):
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
Essbaseが提供するメッセージ処理を使用するためには、関数EsbGetMessage()を呼び出し、EssbaseAPIを呼び出した後に戻された情報を取得します。情報を取得した後、必要に応じて、プログラムは情報を表示または処理できます。
ClientErrorフィールドおよびErrorStackフィールドの設定
次に示すコードの一部は、ClientErrorおよびErrorStackのフィールド・セットを示しています。
Dim Init As ESB_INIT_T
.
.
.
Init.ClientError = ESB_TRUE
Init.ErrorStack = 100
API関数を実行すると、情報、警告および、エラー・メッセージはすべて、メッセージ・スタックに蓄積されます。ClientErrorがESB_TRUEに設定されると、EsbGetMessage()を使用して、スタックから最上位のメッセージを取得できます。成功すると、EsbGetMessage()は、メッセージ・レベルへのポインタ、メッセージ番号へのポインタ、およびメッセージ文字列を戻します。また、内部メッセージ・スタック・ポインタを減らします。データが失われることがないように、関数がメッセージ・パラメータで空の文字列および番号パラメータで0を戻すまで、EsbGetMessage()を呼び出す必要があります。詳しくは、EsbGetMessageを参照してください。
Visual Basicプログラムは、APIへの呼出しによって生成される情報を取得するには、EsbGetMessage()を呼び出す必要があります。API呼出しによって生成された戻りコードが0でないとき、戻されたエラーまたはステータス情報を取得するため、これは重要です。さらに、戻りコードが0であるとき、追加情報の戻される可能性がある場合は、EsbGetMessage()を呼び出す必要があります。たとえば、EsbLogin()またはEsbAutoLogin()への呼出しが正常終了した場合、最後のログ・インに関する役に立つ情報が戻されます。
注: | カスタム・エラー処理関数を初期化すると、EsbGetMessageは取得に使用できません。 |