#include <windows.h> #include <essapi.h> #include <essotl.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #define AD_CHK_PRINTF_1(ARG1, ARG2) do { printf(ARG1, (ARG2) ? (ARG2) : "NullValue"); } while (0) void PrintResult(ESS_HCTX_T hCtx, ESS_HINST_T hInst, ESS_HOUTLINE_T hOutline, ESS_HMEMBER_T hMbr) { ESS_PMBRINFO_T pMbrInfo = NULL; ESS_STS_T sts; int size; ESS_STR_T pszFormula = NULL; ESS_STR_T pszLastFormula = NULL; ESS_STR_T pszCommentEx = NULL; ESS_STR_T pszAlias = NULL; ESS_STR_T pszAliasCombo = NULL; ESS_PMBRNAME_T pUDAList = NULL; ESS_USHORT_T iCount = 0; ESS_STR_T pszPrev = NULL; ESS_USHORT_T iIndex; ESS_ULONG_T* pMemNum; ESS_ULONG_T* pDimNum; ESS_STR_T pDimName = NULL; ESS_STR_T pAliasName = NULL; ESS_STR_T pNextName = NULL; ESS_STR_T pPrevName = NULL; ESS_STR_T pParentName = NULL; ESS_STR_T pChildName = NULL; ESS_BOOL_T* pCurrConv = NULL; ESS_ULONG_T* pStatus = NULL; sts = EssOtlGetMemberInfo(hOutline, hMbr, &pMbrInfo); if (sts != 0) goto Error; size = sizeof(ESS_MBRINFO_T); printf("MbrInfo\n"); AD_CHK_PRINTF_1(" szMember --------------->(%s)\n", pMbrInfo->szMember); printf(" usLevel --------------->(%hd)\n", pMbrInfo->usLevel); printf(" usGen ----------------->(%hd)\n", pMbrInfo->usGen); printf(" usConsolidation ------->(%hd)\n", pMbrInfo->usConsolidation); printf(" fTwoPass -------------->(%hd)\n", pMbrInfo->fTwoPass); printf(" fExpense -------------->(%hd)\n", pMbrInfo->fExpense); printf(" usConversion ----------->(%hd)\n", pMbrInfo->usConversion); AD_CHK_PRINTF_1(" szCurMember ------------>(%s)\n", pMbrInfo->szCurMember); printf(" usTimeBalance ---------->(%hd)\n", pMbrInfo->usTimeBalance); printf(" usSkip ----------------->(%hd)\n", pMbrInfo->usSkip); printf(" usShare ---------------->(%hd)\n", pMbrInfo->usShare); printf(" usStorage -------------->(%hd)\n", pMbrInfo->usStorage); printf(" usCategory ------------->(%hd)\n", pMbrInfo->usCategory); printf(" usStorageCategory ------>(%hd)\n", pMbrInfo->usStorageCategory); AD_CHK_PRINTF_1(" szComment -------------->(%s)\n", pMbrInfo->szComment); printf(" ulChildCount ----------->(%ld)\n", pMbrInfo->ulChildCount); sts = EssOtlGetMemberFormula(hOutline, hMbr, &pszFormula); if (sts) printf("sts=%d ", sts); AD_CHK_PRINTF_1("szFormula ------------------>(%s)\n", pszFormula); sts = EssOtlGetMemberLastFormula(hOutline, hMbr, &pszLastFormula); if (sts) printf("sts=%d ", sts); AD_CHK_PRINTF_1("szLastFormula -------------->(%s)\n", pszLastFormula); sts = EssOtlGetMemberCommentEx(hOutline, hMbr, &pszCommentEx); if (sts) printf("sts=%d ", sts); AD_CHK_PRINTF_1("szCommentEx ---------------->(%s)\n", pszCommentEx); sts = EssOtlGetMemberAlias(hOutline, hMbr, ESS_NULL, &pszAlias); if (sts) printf("sts=%d ", sts); AD_CHK_PRINTF_1("szAlias (Default)----------->(%s)\n", pszAlias); sts = EssOtlGetNextAliasCombination(hOutline, hMbr, ESS_NULL, "\0", &pszAliasCombo); if (sts) printf("sts=%d ", sts); printf("szAliasCombo ::\n" ); pszPrev = pszAliasCombo; while (sts && pszAliasCombo) { AD_CHK_PRINTF_1("\t(%s)\n", pszAliasCombo); sts = EssOtlGetNextAliasCombination(hOutline, hMbr, ESS_NULL, pszPrev, &pszAliasCombo); EssFree(hInst, pszPrev); pszPrev = pszAliasCombo; } sts = EssOtlGetUserAttributes(hOutline, hMbr, &iCount, &pUDAList); if (sts) printf("sts=%d ", sts); printf("User Defined Attributes ::\n"); for(iIndex = 0; iIndex < iCount; iIndex++) AD_CHK_PRINTF_1("\t(%s)\n", pUDAList[iIndex]); sts = EssOtlGetMemberField(hOutline, hMbr, ESS_OTLQRYMBR_NUMBER, (ESS_PPVOID_T) &pMemNum); if (sts) { printf("sts=%d ", sts); } else { printf("Member Number ------------------>(%ld)\n", *pMemNum); EssFree(hInst, pMemNum); } sts = EssOtlGetMemberField(hOutline, hMbr, ESS_OTLQRYMBR_DIMNUMBER, (ESS_PPVOID_T) &pDimNum); if (sts) { printf("sts=%d ", sts); } else { printf("Dimension Number ---------------->(%ld)\n", *pDimNum); EssFree(hInst, pDimNum); } sts = EssOtlGetMemberField(hOutline, hMbr, ESS_OTLQRYMBR_DIMNAME, (ESS_PPVOID_T) &pDimName); if (sts) { printf("sts=%d ", sts); } else { AD_CHK_PRINTF_1("Dimension Name ------------------>(%s)\n", pDimName); EssFree(hInst, pDimName); } sts = EssOtlGetMemberField(hOutline, hMbr, ESS_OTLQRYMBR_ALIASNAME, (ESS_PPVOID_T) &pAliasName); if (sts) { printf("sts=%d ", sts); } else { AD_CHK_PRINTF_1("Alias Name ------------------>(%s)\n", pAliasName); EssFree(hInst, pAliasName); } sts = EssOtlGetMemberField(hOutline, hMbr, ESS_OTLQRYMBR_NEXTNAME, (ESS_PPVOID_T) &pNextName); if (sts) { printf("sts=%d ", sts); } else { AD_CHK_PRINTF_1("Next Mbr Name ------------------>(%s)\n", pNextName); EssFree(hInst, pNextName); } sts = EssOtlGetMemberField(hOutline, hMbr, ESS_OTLQRYMBR_PREVNAME, (ESS_PPVOID_T) &pPrevName); if (sts) { printf("sts=%d ", sts); } else { AD_CHK_PRINTF_1("Prev Mbr Name ------------------>(%s)\n", pPrevName); EssFree(hInst, pPrevName); } sts = EssOtlGetMemberField(hOutline, hMbr, ESS_OTLQRYMBR_PARENTNAME, (ESS_PPVOID_T) &pParentName); if (sts) { printf("sts=%d ", sts); } else { AD_CHK_PRINTF_1("Parent MbrName ------------------>(%s)\n", pParentName); EssFree(hInst, pParentName); } sts = EssOtlGetMemberField(hOutline, hMbr, ESS_OTLQRYMBR_CHILDNAME, (ESS_PPVOID_T) &pChildName); if (sts) { printf("sts=%d ", sts); } else { AD_CHK_PRINTF_1("Child Mbr Name ------------------>(%s)\n", pChildName); EssFree(hInst, pChildName); } sts = EssOtlGetMemberField(hOutline, hMbr, ESS_OTLQRYMBR_CURRENCYCONVDB, (ESS_PPVOID_T) &pCurrConv); if (sts) { printf("sts=%d ", sts); printf("Curr Conv Type ------------------>\n"); } else { AD_CHK_PRINTF_1("Curr Conv Type ------------------>(%ld)\n", *pCurrConv); EssFree(hInst, pCurrConv); } sts = EssOtlGetMemberField(hOutline, hMbr, ESS_OTLQRYMBR_STATUS, (ESS_PPVOID_T) &pStatus); if (sts) { printf("sts=%d ", sts); printf("Status ------------------>\n"); } else { printf("Status ------------------>(%hd)\n", *pStatus); EssFree(hInst, pStatus); } EssFree(hInst, pMbrInfo); EssFree(hInst, pszFormula); EssFree(hInst, pszLastFormula); EssFree(hInst, pszCommentEx); EssFree(hInst, pszAlias); EssFree(hInst, pszAliasCombo); return; Error: printf("******************* Error *************************"); } int TestCode_EssOtlQueryMembersEx(ESS_HCTX_T hCtx, ESS_HINST_T hInst) { ESS_STS_T sts = ESS_STS_NOERR; ESS_HOUTLINE_T hOutline; ESS_OBJDEF_T Object; ESS_HMEMBER_T hMember = 0; ESS_PHMEMBER_T phMemberArray = ESS_NULL; ESS_ULONG_T i; unsigned long MaxCount = -1; ESS_STR_T member_fields; ESS_STR_T member_selection; /* query string to get level numbers of all markets members */ member_fields = "<SelectMbrInfo ( MemberName, MemberLevel,Consolidation, MemberFormula ) "; member_selection = "@ichild(Product), @ichild(Market)"; memset(&Object, '\0', sizeof(Object)); Object.hCtx = hCtx; Object.ObjType = ESS_OBJTYPE_OUTLINE; Object.AppName = "Basic"; Object.DbName = "Demo"; Object.FileName = "Demo"; sts = EssOtlOpenOutlineQuery(hCtx, &Object, &hOutline); if (sts) goto exit; if(!sts) { ESS_POTLQUERYERRORLIST_T pqryErrorList; sts = EssOtlQueryMembersEx(hOutline, member_fields, member_selection, &MaxCount, &phMemberArray, &pqryErrorList); if (sts) goto exit; if (phMemberArray) for (i = 0; i< MaxCount; i++) PrintResult(hOutline, phMemberArray[i]); } if(MaxCount && phMemberArray) { sts = EssOtlFreeMembers(hOutline, MaxCount, phMemberArray); if (sts) printf("EssOtlFreeMembers sts = %d\n",sts); } sts = EssOtlCloseOutline(hOutline); exit: return sts; }
Return to EssOtlQueryMembersEx or EssOtlGetMemberField.