#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;
}
EssOtlQueryMembersExまたはEssOtlGetMemberFieldに戻ります。