# 履歴検索API

HULFT配信履歴、集信履歴、要求受付履歴、またはスケジュール履歴から、検索条件に一致した情報を検索するAPIです。

履歴ファイルのフォーマットの詳細は、「履歴ファイルのフォーマット」を参照してください。

## 構文

    INT __stdcall  hulrlog( CHAR cLogType , CHAR cStatus , CHAR cReadMode ,
                   LPCSTR lpszVersion , LPCSTR lpszFileID , LPCSTR lpszHostName ,
                   CHAR cSearch , LPCSTR lpStartDate , LPCSTR lpStartTime ,
                   LPCSTR lpEndDate , LPCSTR lpEndTime , LPSTR lpData ,
                   INT nMaxNum , INT* lpMatchNum );

## パラメーター説明

CHAR cLogType（IN）

  検索する履歴の種別を指定

  S

    : 配信履歴

  R

    : 集信履歴

  O

    : 要求受付履歴

  C

    : スケジュール履歴

CHAR cStatus（IN）

  ステータス区分を指定

  A

    : すべての履歴を対象

  N

    : 正常終了した履歴のみを対象

  E

    : 異常が起きた履歴のみを対象

CHAR cReadMode（IN）

  検索順序を指定

  N

    : 古い履歴順に検索

  R

    : 新しい履歴順に検索

LPCSTR lpszVersion（IN）

  出力したい履歴フォーマットのHULFTのバージョン情報を指定

  以下のいずれかを指定します。

  - V06L00

  - V06L01

  - V06L03

  - V07L00

  - V08L00

  - V08L01

  - V08L04

LPCSTR lpszFileID（IN）

  検索したいファイルID、サービス名、またはスケジュールIDを指定

  50バイト以内の文字列で指定します。

  省略する場合は、先頭1バイトの値を“0x00”とするか、ポインタに“NULL”を設定します。

LPCSTR lpszHostName（IN）

  検索したいホスト名を指定

  68バイト以内の文字列で指定します。

  省略する場合は、先頭1バイトの値を“0x00”とするか、ポインタに“NULL”を設定します。

CHAR cSearch（IN）

  将来の使用のための予約領域

  必ず“E”を指定してください。

LPCSTR lpStartDate（IN）

  検索範囲の開始日付を指定

  8バイトの文字列で指定します。「YYYYMMDD」などの形式で指定します。指定する形式は、システム動作環境設定の日付形式（datefmt）の設定に合わせてください。詳細は、以下を参照してください。

  HULFT10 for Windows アドミニストレーション マニュアル : グローバル

  省略する場合は、先頭1バイトの値を“0x00”とするか、ポインタに“NULL”を指定します。

LPCSTR lpStartTime（IN）

  検索範囲の開始時刻を指定

  6バイトの文字列で指定します。形式はHHMMSSです。

  開始日付を省略した場合、指定できません。

  省略する場合は、先頭1バイトの値を“0x00”とするか、ポインタに“NULL”を指定します。

LPCSTR lpEndDate（IN）

  検索範囲の終了日付を指定

  8バイトの文字列で指定します。「YYYYMMDD」などの形式で指定します。指定する形式は、システム動作環境設定の日付形式（datefmt）の設定に合わせてください。詳細は、以下を参照してください。

  HULFT10 for Windows アドミニストレーション マニュアル : グローバル

  省略する場合は、先頭1バイトの値を“0x00”とするか、ポインタに“NULL”を指定します。

LPCSTR lpEndTime（IN）

  検索範囲の終了時刻を指定

  6バイトの文字列で指定します。形式はHHMMSSです。終了日付を省略した場合、指定できません。

  省略する場合は、先頭1バイトの値を“0x00”とするか、ポインタに“NULL”を指定します。

LPSTR lpData（OUT）

  検索結果格納バッファを指すポインタを指定

  バッファはhulrlog()を呼び出す前に、最大検索件数×（レコード長＋1）分確保しておかなければなりません。

  取得した情報の各種日付は、システム動作環境設定の日付形式（datefmt）の設定の形式に変換され、履歴ファイルフォーマットのイメージでバッファに格納されています。

  複数件取得した場合は、セパレータ（0x0a）で区切られています。

  履歴の出力フォーマットは、「lpszVersion」に指定したバージョン情報によって異なります。各バージョンの履歴ファイルフォーマット、レコード長は「履歴ファイルのフォーマット」を参照してください。

INT nMaxNum（IN）

  最大検索件数を指定

  1以上を指定します。

INT* lpMatchNum（OUT）

  検索したレコード数を格納するバッファを指すポインタを指定

## 戻り値

0

  : 検索正常終了

1

  : 検索正常残りあり

2

  : 該当情報なし

3

  : パラメーターエラー

4

  : 履歴ファイルアクセスエラー

5

  : メモリーエラー

6

  : セキュリティエラー

7

  : NULLポインタエラー

98

  : 強制終了

99

  : システムエラー

## 注意事項

lpStartDate、lpStartTime、lpEndDate、lpEndTimeで検索範囲を指定する際、検索対象の履歴と検索キーとなる日時の関係は以下のとおりです。

表7.2 検索キーとなる日時

検索対象の履歴 | 検索キーとなる日時
--- | ---
配信履歴 | 配信終了日時
集信履歴 | 集信終了日時
要求受付履歴 | 依頼受付日時
スケジュール履歴 | 実行終了日時

## 使用例

### Visual C++から使用する場合

    #include <windows.h>
    #include <stdio.h>

    typedef INT(__stdcall *LPHULRLOG)(
        CHAR cLogType, CHAR cStatus, CHAR cReadMode,
        LPCSTR lpszVersion, LPCSTR lpszFileID,
        LPCSTR lpszHostName, CHAR cSearch, LPCSTR lpStartDate,
        LPCSTR lpStartTime, LPCSTR lpEndDate, LPCSTR lpEndTime,
        LPSTR lpData, INT nMaxNum, INT *lpMatchNum);

    int main()
    {
        CHAR cLogType;
        CHAR cStatus;
        CHAR cReadMode;
        CHAR szVersion[6 + 1];
        CHAR szFileID[50 + 1];
        CHAR szHostName[68 + 1];
        CHAR cSearch;
        CHAR szStartDate[8 + 1];
        CHAR szStartTime[8 + 1];
        CHAR szEndDate[8 + 1];
        CHAR szEndTime[8 + 1];
        CHAR szData[(4862 + 1) * 10];
        INT nMaxNum;
        INT nMatchNum;
        HMODULE hHulDll;
        HMODULE hApiDll;
        LPHULRLOG lpHulrlog;
        INT nStatus;

        cLogType = 'S';
        cStatus = 'E';
        cReadMode = 'R';
        strcpy_s(szVersion, sizeof(szVersion), "V08L04");
        strcpy_s(szFileID, sizeof(szFileID), "TEST0001");
        strcpy_s(szHostName, sizeof(szHostName), "");
        cSearch = 'E';
        strcpy_s(szStartDate, sizeof(szStartDate), "20180801");
        strcpy_s(szStartTime, sizeof(szStartTime), "120000");
        strcpy_s(szEndDate, sizeof(szEndDate), "20180802");
        strcpy_s(szEndTime, sizeof(szEndTime), "120000");
        memset(szData, 0x00, sizeof(szData));
        nMaxNum = 10;
        nMatchNum = 0;

        hApiDll = LoadLibraryEx("C:\\HULFT Family\\hulft10\\bin\\hulapi.dll", NULL,
        LOAD_WITH_ALTERED_SEARCH_PATH);
        if (hApiDll == NULL)
        {
            printf("Unable to load hulapi.dll."
                "(Error code = %lu)\n", GetLastError());
            FreeLibrary(hHulDll);
            return 2;
        }
        lpHulrlog = (LPHULRLOG)GetProcAddress(hApiDll, "hulrlog");
        if (lpHulrlog == NULL) {
            printf("Unable to retrieves the address of HULFT API."
                "(Error code = %lu)\n", GetLastError());
            FreeLibrary(hApiDll);
            FreeLibrary(hHulDll);
            return 3;
        }
        nStatus = lpHulrlog(cLogType, cStatus, cReadMode, szVersion,
            szFileID, szHostName, cSearch, szStartDate,
            szStartTime, szEndDate, szEndTime,
            szData, nMaxNum, &nMatchNum);
        if (0 <= nStatus && nStatus <= 2) {
            printf("%d number were searched.\n", nMatchNum);
        } else {
            printf("Error occurred when calling HULFT API."
                "(Returned value = %d)\n", nStatus);
        }

        FreeLibrary(hApiDll);
        FreeLibrary(hHulDll);
        return 0;
    }