This file contains an annotated Essbase C API program. This fundamental sample program can be used in a C++ 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 C code files is also included with the Hyperion Essbase API. Look in /essbase/docs/samples/cexecs/ for the *.c files, executables, projects, and workspaces.
/* Copyright 1992-1999 Hyperion Solutions Corporation. All Rights Reserved. RESTRICTED RIGHTS LEGEND: Use, duplication, or disclosure by the Government is subject to restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in Technical Data and Computer Software clause at DFARS 252.227-7013, or in the Commercial Computer Software Restricted Rights clause at FAR 52.227-19, as applicable. Hyperion Solutions Corporation 1344 Crossman Avenue, Sunnyvale, CA 94089 USA NAME cs2.c DEPENDENCIES DESCRIPTION This file is used by Hyperion Publications as an example of a simple applications program. This program performs basic initialization and login and queries the active application/database. It then manipulates the user list, adding, renaming, and deleting a new user. NOTES This program has three sections: 1 - The includes and function definitions 2 - The function declarations 3 - The main flow MODIFIED * Modified 03 Sep 1999 Publications */ /************************************************************************************/ /*********************** START FUNCTION DEFINITIONS *******************************/ /************************************************************************************/ #if defined _WIN32 || defined _WINDOWS #include <windows.h> #endif #include <string.h> #include <stdio.h> #include <stdlib.h> #pragma pack (1) #include <essapi.h> #include <essotl.h> #pragma pack () ESS_HINST_T hInst; ESS_HCTX_T hCtx; ESS_SVRNAME_T srvrName = ""; ESS_USERNAME_T userName = ""; ESS_PASSWORD_T pswd = ""; /* Initialization and Login functions */ void ESS_Init(); // void ESS_Login(); /* This requires command line arguments */ void ESS_Logout(); void ESS_Term(); void ESS_AutoLogin(); /* This displays the login dialog box */ void ESS_LoginSetPassword(); /* This is called if EssAutoLogin returns error */ void ESS_GetVersion(); void ESS_GetAPIVersion(); /* Application functions */ void ESS_SetActive(); // void ESS_GetActive(); void ESS_ListApplications(); void ESS_ListDatabases(); void ESS_GetDatabaseInfo(); void ESS_ListUsers(); /* These functions will be called repeatedly */ void ESS_CreateUser (); /* to create a user, list users, rename the */ void ESS_RenameUser(); /* new user, list users again, then delete */ void ESS_DeleteUser(); /* the new users and list users again */ void ESS_GetUserInfo (); /************************************************************************************/ /********************** START FUNCTION DECLARATIONS *******************************/ /************************************************************************************/ void ESS_Init() { ESS_STS_T sts; ESS_INIT_T InitStruct = {ESS_API_VERSION, NULL, 0L, 255, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0L }; if ((sts = EssInit(&InitStruct, &hInst)) != ESS_STS_NOERR) { printf("EssInit failure: %ld\n", sts); exit ((int) sts); } printf("EssInit sts: %ld\n", sts); } /************************************************************************************/ void ESS_Login () { ESS_STS_T sts = ESS_STS_NOERR; ESS_USHORT_T Items; ESS_PAPPDB_T pAppsDbs = NULL; sts = EssLogin (hInst, srvrName, userName, pswd, &Items, &pAppsDbs, &hCtx); printf("EssLogin sts: %ld\r\n", sts); if ( (sts == 1051093L) || (sts == 1051090L) ) { ESS_LoginSetPassword(); } else if ( (sts != 0) && (sts != 1051093L) && (sts != 1051090L) ) { printf("\n\tUsage: MAINAPI servername username password\n"); printf("\tDefault: \n\tserver name: local\n\tuser name: admin\n\tpassword: password\n"); exit ((int) sts); } } /************************************************************************************/ void ESS_AutoLogin () { ESS_STS_T sts = ESS_STS_NOERR; ESS_CHAR_T SvrName[ESS_SVRNAMELEN]; //this is different in VC++6 ESS_CHAR_T UserName[ESS_USERNAMELEN]; ESS_CHAR_T Password[ESS_PASSWORDLEN]; ESS_CHAR_T AppName[ESS_APPNAMELEN]; ESS_CHAR_T DbName[ESS_DBNAMELEN]; ESS_USHORT_T Option; ESS_ACCESS_T Access ; // ESS_HCTX_T hCtx; Don't set this again, it is set at the top /* Initialize parameters */ strcpy(SvrName,"localhost"); strcpy(UserName,"Admin"); strcpy(Password,"Password"); strcpy(AppName,""); strcpy(DbName,""); Option = AUTO_DEFAULT; /* Login to Essbase server */ sts = EssAutoLogin (hInst, SvrName, UserName, Password, AppName, DbName, Option, &Access, &hCtx); printf("EssAutoLogin sts: %ld\r\n", sts); } /************************************************************************************/ void ESS_LoginSetPassword() { ESS_STS_T sts = ESS_STS_NOERR; ESS_USHORT_T Items; ESS_PAPPDB_T pAppsDbs = NULL; ESS_PASSWORD_T newPswd = "password2"; sts = EssLoginSetPassword (hInst, srvrName, userName, pswd, newPswd, &Items, &pAppsDbs, &hCtx); printf("EssLoginSetPassword sts: %ld\r\n", sts); if (sts) { printf("\n\tEssLoginSetPassword sts: %ld\n",sts); exit ((int) sts); } } /************************************************************************************/ void ESS_GetAPIVersion() { ESS_STS_T sts = ESS_STS_NOERR; ESS_ULONG_T Version; sts = EssGetAPIVersion(&Version); if(!sts) printf("API Version %#x\n",Version); } /************************************************************************************/ void ESS_Term() { ESS_STS_T sts = ESS_STS_NOERR; if ((sts = EssTerm(hInst)) != ESS_STS_NOERR) { /* error terminating API */ exit((ESS_USHORT_T) sts); } printf("EssTerm sts: %ld\r\n", sts); } /************************************************************************************/ void ESS_Logout() { ESS_STS_T sts = ESS_STS_NOERR; sts = EssLogout (hCtx); printf("\n\nEssLogout sts: %ld\n",sts); } /************************************************************************************/ void ESS_GetVersion() { ESS_STS_T sts = ESS_STS_NOERR; ESS_USHORT_T Release; ESS_USHORT_T Version; ESS_USHORT_T Revision; sts = EssGetVersion (hCtx, &Release, &Version, &Revision); printf("EssGetVersion sts: %ld\r\n", sts); if(!sts) { printf("\r\nEssbase Application Server - Version %d.%d.%d\r\n", Release, Version, Revision); } } /************************************************************************************/ void ESS_GetActive() { ESS_STS_T sts = ESS_STS_NOERR; ESS_STR_T pDbName; ESS_STR_T pAppName; ESS_ACCESS_T Access; if((sts = EssAlloc (hInst, 80, (ESS_PPVOID_T)&pAppName)) == 0) { if((sts = EssAlloc (hInst, 80, (ESS_PPVOID_T)&pDbName)) == 0) { if((sts = EssGetActive(hCtx, &pAppName, &pDbName, &Access)) == 0) { if(pAppName) { if(*pAppName) printf("Current active application is [%s]\r\n",pAppName); else printf("No active Application is set\r\n"); } EssFree(hInst, pDbName); } EssFree(hInst, pAppName); } } } /************************************************************************************/ void ESS_SetActive() { ESS_STS_T sts = ESS_STS_NOERR; ESS_ACCESS_T Access; ESS_STR_T AppName; ESS_STR_T DbName; AppName = "sample"; DbName = "basic"; sts = EssSetActive(hCtx, AppName, DbName, &Access); printf("EssSetActive sts: %ld\r\n",sts); } /************************************************************************************/ void ESS_ListApplications() { ESS_STS_T sts = ESS_STS_NOERR; ESS_PAPPNAME_T strp = NULL; ESS_USHORT_T Items; ESS_USHORT_T ind; sts = EssListApplications(hCtx, &Items, &strp); if(!sts) { if(Items && strp) { printf("Applications availables\r\n"); for(ind = 0; ind <Items; ind++) { if(strp[ind] != NULL) printf("%s\r\n", strp[ind]); } EssFree(hInst, strp); } else printf("\r\nApplication List is Empty\r\n\r\n"); } } /************************************************************************************/ void ESS_ListDatabases() { ESS_STS_T sts = ESS_STS_NOERR; ESS_USHORT_T Items; ESS_USHORT_T ind; ESS_PAPPDB_T pAppsDbs = NULL; sts = EssListDatabases(hCtx, NULL, &Items, &pAppsDbs); printf("EssListDatabases sts: %ld\r\n",sts); if(!sts) { if(Items && pAppsDbs) { printf("\r\n--Applications/databases available--\r\n"); for (ind = 0; ind<Items; ind++) { if((pAppsDbs+ind) !=NULL) { if((pAppsDbs[ind].AppName != NULL) && (pAppsDbs[ind].DbName != NULL)) { printf("%s",pAppsDbs[ind].AppName); printf(" ==> "); printf("%s",pAppsDbs[ind].DbName); printf("\n\r"); } } } EssFree(hInst, pAppsDbs); } else printf("\r\nDatabase List is Empty\r\n\r\n"); } } /************************************************************************************/ void ESS_GetDatabaseInfo() { ESS_STS_T sts = ESS_STS_NOERR; ESS_PDBINFO_T DbInfo; ESS_STR_T AppName; ESS_STR_T DbName; AppName = "Sample"; DbName = "Basic"; sts = EssGetDatabaseInfo(hCtx, AppName, DbName, &DbInfo); if(!sts) { printf("\r\n----- Results of EssGetDatabaseInfo -----\r\n"); printf("AppName: %s\r\n",DbInfo->AppName); printf("DbName: %s\r\n",DbInfo->Name); printf("DbType: %d\r\n",DbInfo->DbType); printf("Status: %d\r\n",DbInfo->Status); printf("nConnects: %d\r\n",DbInfo->nConnects); printf("nLocks: %d\r\n",DbInfo->nLocks); printf("nDims: %d\r\n",DbInfo->Data); printf("Country: %s\r\n",DbInfo->Country); printf("Time: %s\r\n",DbInfo->Time); printf("Category: %s\r\n",DbInfo->Category); printf("Type: %s\r\n",DbInfo->Type); printf("CrPartition: %s\r\n",DbInfo->CrPartition); printf("\r\n----- Results of EssGetDatabaseInfo -----\r\n"); if(DbInfo) { EssFree(hInst, DbInfo); } } } /************************************************************************************/ void ESS_ListUsers() { ESS_STS_T sts; ESS_USHORT_T Count; ESS_PUSERINFO_T Users = NULL; ESS_USHORT_T ind; sts = EssListUsers (hCtx, NULL, NULL, &Count, &Users); if (!sts) { if (Count && Users) { printf ("\r\n-------User List from EssListUsers()-------\r\n\r\n"); for (ind = 0; ind < Count; ind++) { printf ("Name->%s\tApplication->%s\tdatabase->%s\r\n", Users[ind].Name, Users[ind].AppName, Users[ind].DbName); } printf ("\r\n-------User List from EssListUsers()-------\r\n\r\n"); EssFree (hInst, Users); printf("\r\n"); } else printf ("\r\nUsers list is empty\r\n\r\n"); } } /************************************************************************************/ void ESS_CreateUser() { ESS_STS_T sts = ESS_STS_NOERR; ESS_CHAR_T UserName[] = "newuser"; //this is different in VC++6 ESS_CHAR_T Password[] = "password"; //compare to the API reference example printf("Begin EssCreateUser Function"); sts = EssCreateUser (hCtx, UserName, Password); printf("EssCreateUser sts: %ld",sts); } /************************************************************************************/ void ESS_RenameUser() { ESS_STS_T sts = ESS_STS_NOERR; ESS_CHAR_T OldName[] = "newuser"; ESS_CHAR_T NewName[] = "user4"; sts = EssRenameUser (hCtx, OldName, NewName); } /************************************************************************************/ void ESS_DeleteUser() { ESS_STS_T sts = ESS_STS_NOERR; ESS_CHAR_T UserName[] = "user4"; sts = EssDeleteUser (hCtx, UserName); printf("EssDeleteUser sts: %ld",sts); } /************************************************************************************/ void ESS_GetUserInfo () { ESS_STS_T sts = ESS_STS_NOERR; ESS_PUSERINFO_T User = NULL; sts = EssGetUser (hCtx, "Jim Smith", &User); printf("EssGetUserInfo %ld\r\n",sts); if (!sts) { printf ("Name->%s Application->%s database->%s\r\n", User->Name, User->AppName, User->DbName); printf("Login %d\r\n",User->Login); printf("Type %d\r\n",User->Type); printf("Access %d\r\n",User->Access); printf("MaxAccess %d\r\n",User->MaxAccess); printf("Expiration %d\r\n",User->Expiration); printf("LastLogin %d\r\n",User->LastLogin); printf("FailCount %d\r\n",User->FailCount); printf("LoginId %ld\r\n",User->LoginId); if (User) EssFree (hInst, User); } } /************************************************************************************/ void getCmdLineArgs(int argc, char *argv[]) { if (argc>1) strcpy(srvrName,argv[1]); if (argc>2) strcpy(userName,argv[2]); if (argc>3) strcpy(pswd,argv[3]); printf("Server name: %s\n",srvrName); printf("User name: %s\n",userName); printf("Password: %s\n",pswd); } /*****************************************************/ /*************** MAIN FUNCTION ***********************/ /*****************************************************/ void main(int argc, char *argv[]) { getCmdLineArgs(argc,argv); ESS_Init(); ESS_AutoLogin(); ESS_GetVersion(); ESS_GetAPIVersion(); ESS_SetActive(); ESS_ListApplications(); ESS_ListDatabases(); ESS_GetDatabaseInfo(); ESS_ListUsers(); //ESS_CreateUser(); //ESS_RenameUser(); //ESS_DeleteUser(); //ESS_GetUserInfo (); ESS_Logout(); ESS_Term(); } /* End of program */