クライアント・バッファまたはカンマで区切られたファイルにトランザクション・メッセージが戻されます。カンマで区切られたファイルは、リレーショナル・データベースにエクスポートして、サードパーティ・ツールで処理できます。
構文
ESS_FUNC_M EssListTransactions(hCtx, TimeSrc, InpTime,
ListOption, FileName, pCount, ppResults);
| パラメータ | データ型 | 説明 |
|---|---|---|
hCtx |
ESS_HCTX_T |
このAPIを呼び出す前に、ログイン・コンテキストをアクティブに設定する必要があります。 |
TimeSrc |
ESS_USHORT_T |
トランザクションの表示開始時刻をどこで入手するのかを指定するオプション。 |
InpTime |
ESS_TIME32_T |
TimeSrcがESS_TRLOG_TIMESPECIFIEDの場合は、時刻を入力します。時刻は1970年1月1日以降に経過した秒数をULONG値で示します。 |
ListOption |
ESS_USHORT_T |
出力先を指定するオプション。リスト・オプション定数(C)を参照してください |
FileName |
ESS_STR_T |
ListOptionがいずれかのLIST_TRANSACTIONS_*オプションの場合、サーバー・マシン上のこのファイルにコンテンツが書き込まれます:
|
pCount |
ESS_PULONG_T |
戻されたエントリの数 |
ppResults |
ESS_PPTRANSACTION_ENTRY_T |
ListOptionがESS_LIST_TRANSACTIONS_TOCLIENTの場合に戻されるエントリ |
戻り値
0 - 正常終了の場合
pCountには戻されるエントリ数が含まれています
ppResultsには、ListOptionsがESS_LIST_TRANSACTIONS_TOCLIENTの場合に戻されるエントリが含まれています
エラー番号 - 失敗した場合
アクセス
リスト・トランザクションを呼び出す前に、アクティブな設定を使用してデータベースをアクティブにしておく必要があります。
呼出し元にはデータベースへのEssbase管理者アクセス権限が必要です。
例
void ListAndReplayTransactions()
{
ESS_FUNC_M sts = ESS_STS_NOERR;
ESS_USHORT_T TimeSrc;
ESS_TIME32_T timestamp = 0;
ESS_USHORT_T listOption;
ESS_STR_T FileName = ESS_NULL;
ESS_ULONG_T Count = 0;
ESS_PTRANSACTION_ENTRY_T pResults;
ESS_CHAR_T listTime[ESS_TIMESIZE];
ESS_TRANSACTION_REPLAY_INP_T ReplayInp;
ESS_PSEQID_T pSeqIds = ESS_NULL;
ESS_OBJDEF_T Data;
ESS_STR_T Script;
ESS_SHORT_T isAbortOnError;
ESS_PMBRERR_T pMbrErr = NULL;
ESS_PROCSTATE_T pState;
/* Load data from server */
Data.hCtx = hCtx;
Data.AppName = AppName;
Data.DbName = DbName;
Data.ObjType = ESS_OBJTYPE_TEXT;
Data.FileName = "Calcdat";
isAbortOnError = ESS_TRUE;
sts = EssImport (hCtx, ESS_NULL, &Data,
&pMbrErr, NULL, isAbortOnError);
printf("EssImport sts: %ld\r\n",sts);
/* List and replay with a specified time */
TimeSrc = 1;
strcpy(listTime, "09/18/2007:00:00:00");
/* mm/dd/yyyy:hh:mm:ss */
timestamp = adtGenericGetTime(listTime);
listOption = ESS_LIST_TRANSACTIONS_TOCLIENT;
sts =
EssListTransactions(hCtx, TimeSrc,
timestamp, listOption,
FileName, &Count, &pResults);
/* This function converts listTime to the number of
seconds since January 1, 1970. */
printf("EssListTransactions sts: %ld\r\n",sts);
if (Count && pResults)
PrintTransactionLog(Count, pResults);
memset(&ReplayInp, 0, sizeof
(ESS_TRANSACTION_REPLAY_INP_T));
ReplayInp.InpType = ESS_REPLAY_BASED_GIVENTIME;
ReplayInp.value.InpTime = timestamp;
sts = EssReplayTransactions (hCtx, AppName, DbName,
ReplayInp, pSeqIds);
printf("EssReplayTransactions sts: %ld\r\n",sts);
printf("\n\n");
/* Run a calc*/
Script = "CALC ALL;";
sts = EssCalc(hCtx, ESS_TRUE, Script);
printf("EssCalc sts: %ld\r\n",sts);
if (!sts)
{
sts = EssGetProcessState (hCtx, &pState);
while (!sts && (pState.State != ESS_STATE_DONE))
sts = EssGetProcessState (hCtx, &pState);
}
/* List and replay with last replay time */
TimeSrc = 2;
timestamp = 0;
sts =
EssListTransactions(hCtx, TimeSrc,
timestamp, listOption,
FileName, &Count, &pResults);
/* This function converts listTime to the number of
seconds since January 1, 1970. */
printf("EssListTransactions sts: %ld\r\n",sts);
if (Count && pResults)
PrintTransactionLog(Count, pResults);
memset(&ReplayInp, 0, sizeof
(ESS_TRANSACTION_REPLAY_INP_T));
ReplayInp.InpType = ESS_REPLAY_BASED_LASTREPLAYTIME;
sts = EssReplayTransactions (hCtx, AppName,
DbName, ReplayInp, pSeqIds);
printf("EssReplayTransactions sts: %ld\r\n",sts);
if(pSeqIds)
EssFree(hInst, pSeqIds);
if(pResults)
EssFree(hInst, pResults);
if(pMbrErr)
EssFree(hInst, pMbrErr);
}
関連トピック