Sorts the children of an outline member.
Syntax
ESS_FUNC_M EssOtlSortChildren (hOutline, hParent, usType, fpCompare, pUserData);
Parameter | Data Type | Description |
---|---|---|
hOutline | ESS_HOUTLINE_T | Outline context handle. |
hParent | ESS_HMEMBER_T | Handle of parent of the children to sort. If this is ESS_NULL, the dimensions are sorted. |
usType | ESS_USHORT_T | Sort type. This can be one of the following:
|
fpCompare | ESS_POTLSORTFUNC_T | Pointer to user-defined comparison function. This is only used if the usType parameter is ESS_SORT_USERDEFINED. It points to a function defined as follows: (ESS_INTFUNC_M Compare ESS_HMEMBER_T mbr1, ESS_HMEMBER_T mbr2, ESS_PVOID_T pUserData); The function accepts handles for two members and should return the following:
|
pUserData | ESS_PVOID_T | Pointer to any user-specified data. This is only used if the usType parameter is ESS_SORT_USERDEFINED. Each time the comparison function is called, the value of this parameter is passed into the comparison function. |
Notes
During the callback function, you should not call any outline functions that might change the outline. Only EssOtlGetMemberInfo(), EssOtlGetMemberFormula(), and EssOtlGetMemberAlias() can be called.
Return Value
Returns 0 if successful; otherwise one of the following:
OTLAPI_BAD_SORTTYPE
OTLAPI_BAD_SORTCOMPAREFUNC
OTLAPI_SORT_TOOMANY
Example
#include <essapi.h> #include <essotl.h> ESS_STS_T sts = 0; ESS_HOUTLINE_T hOutline; ESS_HMEMBER_T hMeasures; FARPROC pfnSort; ESS_OBJDEF_T Object; ESS_APPNAME_T szAppName; ESS_DBNAME_T szDbName; ESS_OBJNAME_T szFileName; memset(&Object, '\0', sizeof(Object)); Object.hCtx = hCtx; Object.ObjType = ESS_OBJTYPE_OUTLINE; strcpy(szAppName, "Sample"); strcpy(szDbName, "Basic"); strcpy(szFileName, "Basic"); Object.AppName = szAppName; Object.DbName = szDbName; Object.FileName = szFileName; sts = EssOtlOpenOutline(hCtx, &Object, ESS_TRUE, ESS_TRUE, &hOutline); if (!sts) { sts = EssOtlFindMember(hOutline, "Measures", &hMeasures); } if (!sts) { sts = EssOtlSortChildren(hOutline, hMeasures, ESS_SORT_USERDEFINED, (ESS_POTLSORTFUNC_T)pfnSort, (ESS_PVOID_T)hOutline); } /***********************************************/ int ESS_INTFUNCT_M SortCompare ( ESS_HMEMBER_T hMember1, ESS_HMEMBER_T hMember2, ESS_PVOID_T pData) { int nRet = 0; int nLen1; int nLen2; ESS_STS_T sts = 0; ESS_PMBRINFO_T pMbrInfo1 = ESS_NULL; ESS_PMBRINFO_T pMbrInfo2 = ESS_NULL; ESS_HOUTLINE_T hOutline = (ESS_HOUTLINE_T)pData; sts = EssOtlGetMemberInfo(hOutline, hMember1, &pMbrInfo1); if (!sts && pMbrInfo1) sts = EssOtlGetMemberInfo(hOutline, hMember2, &pMbrInfo2); if (!sts && pMbrInfo2) { nLen1 = strlen(pMbrInfo1->szMember); nLen2 = strlen(pMbrInfo2->szMember); if (nLen1 < nLen2) nRet = -1; else if (nLen1 > nLen2) nRet = 1; } if (pMbrInfo1) { EssFree(hInst, pMbrInfo1); } if (pMbrInfo2) { EssFree(hInst, pMbrInfo2); } return (nRet); }
See Also