Sample Visual Basic API Program

This file contains an annotated Essbase Visual Basic API program. This fundamental sample program can be used in a Visual Basic programming environment as a starting point for more functional programs.

This file is to be used with the Hyperion Essbase API Reference to illustrate basic points in API programming. A complete set of actual VB code files is also included with the Hyperion Essbase API.


Visual Basic Sample Program 2 (appdb.vbp)

Code in the Form

This code is attached to the form itself. It calls functions in Code.bas (which follows). This arrangement allows you to include Code.bas in other projects.


Private Sub Form_Load() Call SetBeforeStart End Sub
Private Sub SetBeforeStart() cmdStart.Enabled = True cmdStop.Enabled = False cmdClearMsg.Enabled = False lstMessages.Enabled = False cmdListApps.Enabled = False cmdListDbs.Enabled = False cmdGetActive.Enabled = False cmdSetActive.Enabled = False cmdGetDbInfo.Enabled = False End Sub
Private Sub SetAfterLogin() cmdStart.Enabled = False cmdStop.Enabled = True cmdClearMsg.Enabled = True lstMessages.Enabled = True cmdListApps.Enabled = True cmdListDbs.Enabled = True cmdGetActive.Enabled = True cmdSetActive.Enabled = True cmdGetDbInfo.Enabled = True End Sub
Private Sub cmdClearMsg_Click() lstMessages.Clear End Sub

Code in the Code.bas Module

This code is in code.bas.

Option Explicit

'*******************
'RETURN ERROR STATUS
'*******************
  Dim lngStatus As Long

'***********
'INIT GLOBAL
'***********
  Dim structInit  As ESB_INIT_T
  Dim lngInstHndl As Long

'*********************
'ESB_GetMESSAGE GLOBAL
'*********************
  Dim intMsgLev  As Integer
  Dim lngMsgNmbr As Long

'****************
'ESB_LOGIN GLOBAL
'****************

  Dim lngCtxHndl  As Long
                      
'******************************************
'ESB_SetACTIVE and ESB_ClearDATABASE GLOBAL
'******************************************
  Dim strActiveApp  As String
  Dim strActiveDb   As String


'*********************************************
'Init and turn Essbase error handle turned off
'*********************************************
Sub ESB_Init()

  ESB_TRUE = 1         ' ESB_TRUE
  ESB_FALSE = 0        ' and ESB_FALSE are variables, not constants

  '**********************
  ' Define init structure
  '**********************
  structInit.Version = ESB_API_VERSION
  structInit.MaxHandles = 10
  structInit.LocalPath = "e:\essbase\client"
  structInit.MessageFile = ""
  structInit.ClientError = ESB_TRUE
  structInit.ErrorStack = 100
                                                
  '******************
  'Initialize the API
  '******************
  lngStatus = EsbInit(structInit, lngInstHndl)
 If lngStatus = 0 Then
    MsgBox "The API is initialized: " & (lngInstHndl)
  Else
    MsgBox "The API failed to initialize: " & (lngStatus)
  End If

End Sub

'******************************************************* 'Login in user Admin. All login parameters are hardcoded '******************************************************* Sub ESB_Login() Dim strServer As String * ESB_SVRNAMELEN Dim strUser As String * ESB_USERNAMELEN Dim strPassword As String * ESB_PASSWORDLEN Dim intNumAppDb As Integer strServer = "Localhost" strUser = "Admin" strPassword = "password" lngStatus = EsbLogin(lngInstHndl, _ strServer, strUser, strPassword, _ intNumAppDb, _ lngCtxHndl) '************** 'Error Checking '************** If lngStatus = 0 Then MsgBox "Admin is logged in, with login ID (context handle) " & (lngCtxHndl) Call ESB_ListErrorStackMsgs ' Even successful logins return useful messages Else MsgBox "Login failed: " & (lngStatus) End If End Sub
'******* ' Logout '******* Sub ESB_Logout() lngStatus = EsbLogout(lngCtxHndl) '********************************************** 'Display whether the logout succeeded or failed '********************************************** If lngStatus = 0 Then MsgBox "Admin, with login ID (context handle) " & (lngCtxHndl) _ & ", is logged out" Else MsgBox "EsbLogout() failed: " & (lngStatus) End If End Sub
'***************************** ' Terminate the Essbase VB API '***************************** Sub ESB_Term()
EsbTerm (lngInstHndl) '********************************** 'Display whether the API terminated '********************************** If lngStatus = 0 Then MsgBox "The API is terminated" Else MsgBox "EsbTerm() failed: " & (lngStatus) End If End Sub
'************************************************************ 'This is an error checking subroutine that uses EsbGetMessage '************************************************************ Sub ESB_ListErrorStackMsgs() Const intMsgLen = 256 Dim strMsg As String * intMsgLen lngStatus = EsbGetMessage(lngInstHndl, intMsgLev, lngMsgNmbr, _ strMsg, intMsgLen) Dim intStackNmbr As Integer intStackNmbr = 1 '******************************************************************** 'Do while the error stack has messages and drop messages in a ListBox '******************************************************************** Do While Mid$(strMsg, 1, 1) <> Chr$(0) lstMessages "MESSAGE ON ERROR STACK:" lstMessages "Stack #" & (intStackNmbr) lstMessages "Level #" & (intMsgLev) lstMessages "Message #" & (lngMsgNmbr) lstMessages (strMsg) intStackNmbr = intStackNmbr + 1 lngStatus = EsbGetMessage(lngInstHndl, intMsgLev, lngMsgNmbr, strMsg, intMsgLen) Loop End Sub
'********************************************************************** 'Gets the names of the caller's current active application and database '********************************************************************** Sub ESB_GetActive() Const intAppNameSize = ESB_APPNAMELEN Const intDbNameSize = ESB_DBNAMELEN Dim strAppName As String * intAppNameSize Dim strDbName As String * intDbNameSize Dim intUserAccess As Integer lngStatus = EsbGetActive(lngCtxHndl, strAppName, intAppNameSize, _ strDbName, intDbNameSize, intUserAccess) '********************************** 'Error Checking and Message display '********************************** If lngStatus = 0 Then MsgBox "EsbGetActive() succeeded" If Mid$(strAppName, 1, 1) = Chr$(0) Then lstMessages "No active application/database is set" Else lstMessages (strAppName) lstMessages "/ " & (strDbName) End If Else MsgBox "EsbGetActive() failed: " & (lngStatus) End If End Sub
'********************************************************************** 'Gets a database's information structure, which contains non 'user-configurable parameters for the database. Sample Basic Hardcoded. '********************************************************************** Sub Esb_GetDbInfo() Dim strAppName As String Dim strDbName As String Dim structDbInfo As ESB_DBINFO_T Dim structDbReqInfo As ESB_DBREQINFO_T Dim intI As Integer 'Number of database info structures; 'Applies where database is an empty string Dim intNumDbInfo As Integer strAppName = "Sample" strDbName = "Basic" lngStatus = EsbGetDatabaseInfo(lngCtxHndl, strAppName, strDbName, _ structDbInfo, intNumDbInfo) '********************************** 'Error Checking and Message display '********************************** If lngStatus = 0 Then MsgBox "You have retrieved a list of database info structures" & Chr(10) _ & "EsbGetNextItem() will now generate a list" Else MsgBox "EsbGetDatabaseInfo() failed: " & (lngStatus) MsgBox "Note: Sample / Basic are Hardcoded for this Example" End If '************************************************ 'Get database information and display in list box '************************************************ For intI = 1 To intNumDbInfo lngStatus = EsbGetNextItem(lngCtxHndl, ESB_DBREQINFO_TYPE, structDbReqInfo) If lngStatus = 0 Then MsgBox "EsbGetNextItem() succeeded" 'Return values for the structDbReqInfo.DbReqType: ' 0 = Data load ' 1 = Calculation ' 2 = Outline update lstMessages "Type of request is: " & (structDbReqInfo.DbReqType) lstMessages "User is: " & (structDbReqInfo.User) ' User does not display - none is loading, calculating, or updating outline ' BUT, cannot display structDbInfo fields, which is reason for call Else MsgBox "EsbGetNextItem() failed: " & (lngStatus) End If Next End Sub
'********************************************************* 'Lists all applications which are accessible to the caller '********************************************************* Sub Esb_ListApps() Dim intNumApps As Integer Dim strAppName As String * ESB_APPNAMELEN Dim intI As Integer ' Index for loop lngStatus = EsbListApplications(lngCtxHndl, intNumApps) '********************************** 'Error Checking and Message display '********************************** If lngStatus = 0 Then MsgBox "You have retrieved the application names" & Chr(10) _ & "EsbGetNextItem() will now generate a list" Else MsgBox "EsbListApplications() failed: " & (lngStatus) End If '************************************************ 'Get list of applications and display in list box '************************************************ For intI = 1 To intNumApps lngStatus = EsbGetNextItem(lngCtxHndl, ESB_APPNAME_TYPE, ByVal strAppName) If lngStatus = 0 Then MsgBox "EsbGetNextItem() succeeded" lstMessages (strAppName) Else MsgBox "EsbGetNextItem() failed: " & (lngStatus) End If Next End Sub
'************************************************************* 'Lists all databases which are accessible to the caller, 'either within a specific application, or on an entire server. '************************************************************* Sub Esb_ListDbs() Dim strAppName As String Dim intNumDbs As Integer Dim structAppDb As ESB_APPDB_T Dim intI As Integer ' Index for loop lngStatus = EsbListDatabases(lngCtxHndl, strAppName, intNumDbs) '********************************** 'Error Checking and Message display '********************************** If lngStatus = 0 Then MsgBox "You have retrieved a list of application/database structures" & Chr(10) _ & "EsbGetNextItem() will now generate a list" Else MsgBox "EsbListDatabases() failed: " & (lngStatus) End If '********************************************************** 'Get list of applications/databases and display in list box '********************************************************** For intI = 1 To intNumDbs lngStatus = EsbGetNextItem(lngCtxHndl, ESB_APPDB_TYPE, structAppDb) If lngStatus = 0 Then MsgBox "EsbGetNextItem() succeeded" lstMessages (structAppDb.AppName) lstMessages "/ " & (structAppDb.DbName) Else MsgBox "EsbGetNextItem() failed: " & (lngStatus) End If Next End Sub
'************************************************* 'Sets the caller's active application and database '************************************************* Sub Esb_SetActive() Dim strAppAnswer As String Dim strDbAnswer As String Dim intUserAccess As Integer '******************************************* 'Input boxes allow users to select an app/db '******************************************* strAppAnswer = InputBox("Type the Application Name to Set Active. (May be case sensitive)") ' strDbAnswer = InputBox("Type the Database Name to Set Active. (May be case sensitive)") lngStatus = EsbSetActive(lngCtxHndl, strAppAnswer, strDbAnswer, intUserAccess) '********************************** 'Error Checking and Message display '********************************** If lngStatus = 0 Then MsgBox strAppAnswer & "/" & strDbAnswer & " is now active" Else MsgBox "EsbSetActive() failed: " & (lngStatus) End If End Sub
Sub lstMessages(strItem As String) frmAppDb.lstMessages.AddItem (strItem) End Sub
Sub lstMessagesClear() frmAppDb.lstMessages.Clear End Sub