EssOtlSortChildren

アウトライン・メンバーの子をソートします。

構文

            ESS_FUNC_M 
            EssOtlSortChildren
             (
            hOutline, hParent, usType, fpCompare, pUserData
            );
         
パラメータデータ型説明

hOutline

ESS_HOUTLINE_T

アウトラインのコンテキスト・ハンドル。

hParent

ESS_HMEMBER_T

ソートする子の親のハンドル。ESS_NULLが指定されている場合は、次元がソートされます。

usType

ESS_USHORT_T

ソート・タイプ。次のいずれかを指定できます:

  • ESS_SORT_ASCENDING

  • ESS_SORT_DESCENDING

  • ESS_SORT_USERDEFINED

fpCompare

ESS_POTLSORTFUNC_T

ユーザーが定義した比較関数へのポインタ。usTypeパラメータがESS_SORT_USERDEFINEDの場合にのみ使用されます。次のように定義された関数へのポインタです:

                  (ESS_INTFUNC_M Compare
ESS_HMEMBER_T mbr1,
ESS_HMEMBER_T mbr2,
ESS_PVOID_T pUserData);
               

この関数は2つのメンバーのハンドルを受け入れ、次の値を戻します:

  • mbr1がmbr2より前にある場合は< 0。

  • mbr1がmbr2と等しい場合は= 0。

  • mbr1がmbr2より後ろにある場合は> 0。

pUserData

ESS_PVOID_T

ユーザーが指定した任意のデータへのポインタ。usTypeパラメータがESS_SORT_USERDEFINEDの場合にのみ使用されます。比較関数を呼び出すたびに、このパラメータの値が比較関数に渡されます。

備考

コールバック関数中は、アウトラインを変更する可能性のあるアウトライン関数は呼び出さないでください。EssOtlGetMemberInfo()EssOtlGetMemberFormula()、およびEssOtlGetMemberAlias()のみ呼び出すことができます。

戻り値

正常終了の場合は0が戻されます。それ以外の場合は、次のいずれかの値が戻されます:

         #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);
}
      

関連トピック

  • EssOtlFindMember