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);
}
関連トピック