EssLROGetCatalogBatch

Essbaseデータベース内の指定した複数のデータ・セルについて、LROカタログ・エントリのリストを取得します。

構文

            ESS_FUNC_M EssLROGetCatalogBatch (
            hCtx, memCount, pMemComb, cellCount, pulLROCount, ppLRODescList)
         
パラメータデータ型説明

hCtx

ESS_HCTX_T

APIコンテキスト・ハンドル。

memCount

ESS_ULONG_T *

pMemCombでセルごとに指定された「メンバー数」の配列。

pMemComb

ESS_PMBRNAMECOMB_T *

「メンバー名」の組合せの配列。配列自体の各要素は、セルごとのメンバー名の配列です。

cellCount

ESS_ULONG_T

LROセルのカウント。

pulLROCount

ESS_ULONG_T *

呼出し元に戻された「LROカタログ・エントリ数」の配列。配列内の各要素は、入力セルのLROカタログ・エントリの数に対応しています。

pLRODescList

ESS_LRODESC_API_T

呼出し元に戻されるLROカタログ・エントリのリストへのポインタのアドレス。

備考

この関数を使用するには、初期化構造体ESS_INIT_TのMaxBufferフィールドを0xFFFFFFFFバイトに設定して、プログラムを初期化します。

戻り値

正常終了の場合は、ESS_STS_NOERRが戻されます。それ以外の場合、エラー・コードが戻されます。

アクセス

この関数を呼び出すには、アクティブなデータベースに対して読取り権限(ESS_PRIV_READ)を持っている必要があります。

         /*
 * ESS_GetLinkedObjectCatalogBatch() -- Gets a list of LRO description for a list of given data cell
 * From the Database Sample.Basic, it will fetch LROs for the following Cells.
 * 1) "Jan", "Sales", "100-10", "New York", "Actual" 
 * 2) "Feb", "COGS", "200-10", "Utah", "Budget"
 * 3) "Mar", "Payroll", "300-10", "Texas", "Variance"
 */
ESS_STS_T ESS_GetLinkedObjectCatalogBatch(ESS_HINST_T hInst, ESS_HCTX_T hCtx)
{
   ESS_STS_T               status = 0;
   ESS_UINT_T              memberLength = ESS_MBRNAMELEN_NONUNI; 
   ESS_PMBRNAME_NONUNI_T  *ppMemComb=NULL;
   ESS_PMBRNAME_NONUNI_T   pMemComb = NULL;
   ESS_ULONG_T            *pulLroCount= NULL;
   ESS_PLRODESC_API_T      pLroDescList = NULL;
   ESS_PLRODESC_API_T     *ppLroDescList = NULL;
   ESS_ULONG_T             cellCount = 3;            /* Number of cells for which to retrieve LROs */
   ESS_ULONG_T             mbrsCount[3] = {5, 5, 5}; /* Number of members in combinations for each cell */

   ESS_ULONG_T             i,j,k,offset;
   ESS_CHAR_T             *pMember = NULL;
   ESS_CHAR_T              response;

   status = EssAlloc(hInst, cellCount * sizeof(ESS_PMBRNAMECOMB_T), (ESS_PPVOID_T)&ppMemComb);
   if (status) 
      goto exit;

   /* Member combination for Cell # 1 */
   status = EssAlloc(hInst, mbrsCount[0] * memberLength, (ESS_PPVOID_T)&(ppMemComb[0]));
   if (status) 
      goto exit;
   pMemComb = ppMemComb[0];
   memset(pMemComb, 0, mbrsCount[0]* memberLength);
   strcpy((pMemComb)[0], "Jan");
   strcpy((pMemComb)[1], "Sales");
   strcpy((pMemComb)[2], "100-10");
   strcpy((pMemComb)[3], "New York");
   strcpy((pMemComb)[4], "Actual");

   /* Member combination for Cell # 2 */
   status = EssAlloc(hInst, mbrsCount[1] * memberLength, (ESS_PPVOID_T)&(ppMemComb[1]));
   if (status) 
      goto exit;
   pMemComb = ppMemComb[1];
   memset(pMemComb, 0, mbrsCount[1] * memberLength);
   strcpy((pMemComb)[0], "Feb");
   strcpy((pMemComb)[1], "COGS");
   strcpy((pMemComb)[2], "200-10");
   strcpy((pMemComb)[3], "Utah");
   strcpy((pMemComb)[4], "Budget");

   /* Member combination for Cell # 3 */
   status = EssAlloc(hInst, mbrsCount[2] * memberLength, (ESS_PPVOID_T)&(ppMemComb[2]));
   if (status) 
      goto exit;
   pMemComb = ppMemComb[2];
   memset(pMemComb, 0, mbrsCount[2] * memberLength);
   strcpy((pMemComb)[0], "Mar");
   strcpy((pMemComb)[1], "Payroll");
   strcpy((pMemComb)[2], "300-10");
   strcpy((pMemComb)[3], "Texas");
   strcpy((pMemComb)[4], "Variance");

   /* Will hold inormation about how many LROs fetched for each Cell */
   status = EssAlloc(hInst, cellCount * sizeof(ESS_ULONG_T), (ESS_PPVOID_T)&pulLroCount);
   if (status) 
      goto exit;
   memset(pulLroCount, 0, cellCount * sizeof(ESS_ULONG_T));

   ppLroDescList = &pLroDescList;

   status = EssLROGetCatalogBatch(hCtx, mbrsCount, ppMemComb, cellCount, pulLroCount, ppLroDescList);
   if (status) 
      goto exit;


   for (k=0, offset=0; k<cellCount; k++)
   {
      ESS_LRODESC_API_T *pLroDesc = &pLroDescList[offset];
      for (i=0; i<pulLroCount[k]; i++, offset++)
      {
         printf("***** information for linked object ********\n");
         printf("Object type - %2d\n", (pLroDesc+i)->usObjType);
         printf("Link Id : \n");
         printf("   Object handle  -   %d \n", (pLroDesc+i)->linkId.hObject);
         printf("   Cell offset    -   %d \n", (pLroDesc+i)->linkId.cellKey.cellOffset);
         printf("   Block offset   -   %lf \n", (pLroDesc+i)->linkId.cellKey.blkOffset);
         printf("   Segment        -   %lf \n", (pLroDesc+i)->linkId.cellKey.segment);
         if ((pLroDesc+i)->usObjType > 0)
         {
            printf("Object name - %s\n",(pLroDesc+i)->lro.lroInfo.objName);
            printf("Object description - %s\n",(pLroDesc+i)->lro.lroInfo.objDesc);
         }
         else
         {
            printf("Cell notes - %s\n",(pLroDesc+i)->lro.note);
         }
         printf("User name - %s\n", (pLroDesc+i)->userName);
         printf("Security Access Level -  %d\n", (pLroDesc+i)->accessLevel);
         if ((pLroDesc+i)->pMemComb)
         {
            printf("Member Name : \n");
            pMember = (ESS_CHAR_T *) (pLroDesc+i)->pMemComb;
            for (j=0; j < (pLroDesc+i)->memCount; j++)
            {
               printf("      %s\n",pMember);
               pMember += memberLength;
            }
            EssFree(hInst, (pLroDesc+i)->pMemComb);
         }
         printf("\n");
      }   
   }
   printf("********* complete **********\n");
   
exit:
   if (status)
      printf("Fail Getting Catalog Information.\n");

   if (ppMemComb)
   {
      for(i=0; i<cellCount; i++) 
      {
         EssFree(hInst, ppMemComb[i]);
      }
      EssFree(hInst, ppMemComb);
   }

   if (pLroDescList)
      EssFree(hInst, pLroDescList);

   if (pulLroCount)
      EssFree(hInst, pulLroCount);

   return(status);

}
      

関連トピック