ページの先頭行へ戻る
Interstage List Works for 大規模 V11.0.0 APIリファレンス

B.1 サーバ機能APIサンプルプログラム

ここでは、以下の処理をするプログラムを説明します。

  1. 保管フォルダ内の帳票一覧を取得します。

  2. 取得した帳票名が「2000年度」で前方一致するかを比較します。

  3. 前方一致した場合、その帳票を削除します。


    #include <stdio.h>
    #include <string.h>
    #include <dlfcn.h>
    #include "lvsvapi.h"
    
    typedef LWAPIHANDLE (*LPSTARTSVAPI)(); 
    typedef void (*LPENDSVAPI)(LWAPIHANDLE); 
    typedef int (*LPGETSERVERERRCODE)(LWAPIHANDLE); 
    typedef void (*LPGETSERVERERRMSG)(LWAPIHANDLE, char*);
    typedef LWFOLDERHANDLE (*LPSTARTKEEPFOLDER)(LWAPIHANDLE, char*, int); 
    typedef int (*LPENDKEEPFOLDER)(LWAPIHANDLE, LWFOLDERHANDLE); 
    typedef int (*LPGETKEEPFOLDERCOUNT)(LWAPIHANDLE, LWFOLDERHANDLE, int*);
    typedef int (*LPGETKEEPFOLDERITEM)(LWAPIHANDLE, LWFOLDERHANDLE, int, LPKPFINFO); 
    typedef LWLISTHANDLE (*LPSTARTKEEPLIST)(LWAPIHANDLE, char*);
    typedef int (*LPENDKEEPLIST)(LWAPIHANDLE, LWLISTHANDLE); 
    typedef int (*LPGETKEEPLISTCOUNT)(LWAPIHANDLE, LWLISTHANDLE, int*);
    typedef int (*LPGETKEEPLISTITEM)(LWAPIHANDLE, LWLISTHANDLE, int, LPKPLINFO); 
    typedef int (*LPDELETEKEEPFILE)(LWAPIHANDLE, char*);
    
    /******************************************************************************/
    /*  1.機能概要                                                              */
    /*    1)保管フォルダの一覧を取得する。                                      */
    /*    2)保管フォルダ内の帳票一覧を取得する。                                */
    /*    3)取得した帳票名が、「2000年度」で前方一致するか比較する。             */
    /*        比較した結果、前方一致したら、その帳票を削除する。                  */
    /******************************************************************************/
    int main(int iArgc, char* cArgv[])
    {
        void        *hinSvAPi = NULL; 
        int         iRetCode = 0;                /* 関数復帰値                     */
        LWAPIHANDLE        iLwSvApiH = 0;        /* サーバAPIハンドル              */
        LWFOLDERHANDLE     iLwSvKpFH = 0;        /* 保管フォルダ一覧ハンドル       */
        LWLISTHANDLE       iLwSvKpLH = 0;        /* 保管フォルダ帳票一覧ハンドル   */
        
        int            iKpFCount = 0;            /* 保管フォルダ数                 */
        KPFINFO        KpFInfo;                  /* 保管フォルダ情報構造体         */
        LPKPFINFO      lpKpFInfo = &KpFInfo; 
        KPLINFO        KpLInfo;                  /* 帳票一覧情報構造体             */
        LPKPLINFO      lpKpLInfo = &KpLInfo; 
        int            iKpLCount = 0;            /* 帳票一覧数                     */
        int            ie_ErrCode = 0;           /* エラーコード                   */
        char           ce_ErrMsg[1024];          /* エラーメッセージ格納域         */
        int            iKpFIndex = 0;            /* フォルダカウンタ               */
        int            iKpLIndex = 0;            /* 帳票カウンタ                   */
        int            iFindFlg = 0;             /* フラグ                         */
        char           ceDeleteFile[260+4];      /* 削除対象ファイル               */
    
        /**************************************************************************/
        /* サーバAPI関数宣言                                                      */
        /**************************************************************************/
        LWAPIHANDLE (*fp_StartSvApi)(); 
        void (*fp_EndSvApi)(LWAPIHANDLE); 
        int (*fp_GetServerApiErrCode)(LWAPIHANDLE); 
        void (*fp_GetServerApiErrMsg)(LWAPIHANDLE, char*);
        LWFOLDERHANDLE (*fp_StartKeepFolder)(LWAPIHANDLE, char*, int); 
        int (*fp_EndKeepFolder)(LWAPIHANDLE, LWFOLDERHANDLE); 
        int (*fp_GetKeepFolderCount)(LWAPIHANDLE, LWFOLDERHANDLE, int*);
        int (*fp_GetKeepFolderItem)(LWAPIHANDLE, LWFOLDERHANDLE, int, LPKPFINFO); 
        LWLISTHANDLE (*fp_StartKeepList)(LWAPIHANDLE, char*);
        int (*fp_EndKeepList)(LWAPIHANDLE, LWLISTHANDLE); 
        int (*fp_GetKeepListCount)(LWAPIHANDLE, LWLISTHANDLE, int*);
        int (*fp_GetKeepListItem)(LWAPIHANDLE, LWLISTHANDLE, int, LPKPLINFO); 
        int (*fp_DeleteKeepFile)(LWAPIHANDLE, char*);
    
        /**************************************************************************/
        /* 初期化処理                                                             */
        /**************************************************************************/
        memset(ceDeleteFile, 0, 260+4); 
    
        /**************************************************************************/
        /* サーバAPIライブラリ(liblwapi.so)のロード                             */
        /**************************************************************************/
        hinSvAPi = dlopen("/opt/FJSVlw-sv/lib/liblwapi.so", RTLD_LAZY); 
        if(hinSvAPi == NULL) 
        {
            printf("ライブラリliblwapi.soのロードに失敗しました。\n");
            goto EXIT; 
        }
    
        /**************************************************************************/
        /* 関数アドレスを取得                                                     */
        /**************************************************************************/
        fp_StartSvApi = (LPSTARTSVAPI)dlsym(hinSvAPi, "LW_StartServerApi");
        if(fp_StartSvApi == NULL) 
        {
            printf("関数アドレスの取得に失敗しました。\n");
            goto EXIT; 
        }
        fp_EndSvApi = (LPENDSVAPI)dlsym(hinSvAPi, "LW_EndServerApi");
        if(fp_EndSvApi == NULL) 
        {
            printf("関数アドレスの取得に失敗しました。\n");
            goto EXIT; 
        }
        fp_GetServerApiErrCode = (LPGETSERVERERRCODE)dlsym(hinSvAPi, "LW_GetServerApiErrCode");
        if(fp_GetServerApiErrCode == NULL) 
        {
            printf("関数アドレスの取得に失敗しました。\n");
            goto EXIT; 
        }
        fp_GetServerApiErrMsg = (LPGETSERVERERRMSG)dlsym(hinSvAPi, "LW_GetServerApiErrMsg");
        if(fp_GetServerApiErrMsg == NULL) 
        {
            printf("関数アドレスの取得に失敗しました。\n");
            goto EXIT; 
        }
        fp_StartKeepFolder = (LPSTARTKEEPFOLDER)dlsym(hinSvAPi, "LW_StartKeepFolder");
        if(fp_StartKeepFolder == NULL) 
        {
            printf("関数アドレスの取得に失敗しました。\n");
            goto EXIT; 
        }
        fp_EndKeepFolder = (LPENDKEEPFOLDER)dlsym(hinSvAPi, "LW_EndKeepFolder");
        if(fp_EndKeepFolder == NULL) 
        {
            printf("関数アドレスの取得に失敗しました。\n");
            goto EXIT; 
        }
        fp_GetKeepFolderCount = (LPGETKEEPFOLDERCOUNT)dlsym(hinSvAPi, "LW_GetKeepFolderCount");
        if(fp_GetKeepFolderCount == NULL) 
        {
            printf("関数アドレスの取得に失敗しました。\n");
            goto EXIT; 
        }
        fp_GetKeepFolderItem = (LPGETKEEPFOLDERITEM)dlsym(hinSvAPi, "LW_GetKeepFolderItem");
        if(fp_GetKeepFolderItem == NULL) 
        {
            printf("関数アドレスの取得に失敗しました。\n");
            goto EXIT; 
        }
        fp_StartKeepList = (LPSTARTKEEPLIST)dlsym(hinSvAPi, "LW_StartKeepList");
        if(fp_StartKeepList == NULL) 
        {
            printf("関数アドレスの取得に失敗しました。\n");
            goto EXIT; 
        }
        fp_EndKeepList = (LPENDKEEPLIST)dlsym(hinSvAPi, "LW_EndKeepList");
        if(fp_EndKeepList == NULL) 
        {
            printf("関数アドレスの取得に失敗しました。\n");
            goto EXIT; 
        }
        fp_GetKeepListCount = (LPGETKEEPLISTCOUNT)dlsym(hinSvAPi, "LW_GetKeepListCount");
        if(fp_GetKeepListCount == NULL) 
        {
            printf("関数アドレスの取得に失敗しました。\n");
            goto EXIT; 
        }
        fp_GetKeepListItem = (LPGETKEEPLISTITEM)dlsym(hinSvAPi, "LW_GetKeepListItem");
        if(fp_GetKeepListItem == NULL) 
        {
            printf("関数アドレスの取得に失敗しました。\n");
            goto EXIT; 
        }
        fp_DeleteKeepFile = (LPDELETEKEEPFILE)dlsym(hinSvAPi, "LW_DeleteKeepFile");
        if(fp_DeleteKeepFile == NULL) 
        {
            printf("関数アドレスの取得に失敗しました。\n");
            goto EXIT; 
        }
    
        /**************************************************************************/
        /* サーバAPI開始                                                          */
        /**************************************************************************/
        iLwSvApiH = (*fp_StartSvApi)(); 
        if(iLwSvApiH == 0) 
        {
            printf("サーバAPIの開始(LW_StartServerApi)に失敗しました。\n");
            goto EXIT; 
        }
    
        /**************************************************************************/
        /* 保管フォルダ一覧開始                                                   */
        /**************************************************************************/
        iLwSvKpFH = (*fp_StartKeepFolder)(iLwSvApiH, NULL, 0); 
        if(iLwSvKpFH == 0) 
        {
            (*fp_GetServerApiErrMsg)(iLwSvApiH, ce_ErrMsg); 
            ie_ErrCode = (*fp_GetServerApiErrCode)(iLwSvApiH); 
            printf("%s RC=%d", ce_ErrMsg, ie_ErrCode); 
            goto EXIT; 
        }
    
        /**************************************************************************/
        /* 保管フォルダ数取得                                                     */
        /**************************************************************************/
        iRetCode = (*fp_GetKeepFolderCount)(iLwSvApiH, iLwSvKpFH, &iKpFCount); 
        if(iRetCode != 0) 
        {
            (*fp_GetServerApiErrMsg)(iLwSvApiH, ce_ErrMsg); 
            ie_ErrCode = (*fp_GetServerApiErrCode)(iLwSvApiH); 
            printf("%s RC=%d", ce_ErrMsg, ie_ErrCode); 
            goto EXIT; 
        }
    
        /**************************************************************************/
        /* 保管フォルダ数分ループする                                             */
        /**************************************************************************/
        for(iKpFIndex = 0; iKpFIndex < iKpFCount; iKpFIndex ++)
        {
            /**********************************************************************/
            /* 保管フォルダ一覧情報を取得                                         */
            /**********************************************************************/
            memset(lpKpFInfo, 0, sizeof(KPFINFO));      /* 初期化処理             */
            lpKpFInfo->usf_Length = sizeof(KPFINFO);    /* 構造体サイズ           */
            iRetCode = (*fp_GetKeepFolderItem)(iLwSvApiH, iLwSvKpFH, iKpFIndex, lpKpFInfo); 
            if(iRetCode != 0) 
            {
                (*fp_GetServerApiErrMsg)(iLwSvApiH, ce_ErrMsg); 
                ie_ErrCode = (*fp_GetServerApiErrCode)(iLwSvApiH); 
                printf("%s RC=%d", ce_ErrMsg, ie_ErrCode); 
                goto EXIT; 
            }
    
            /**********************************************************************/
            /* 保管フォルダ内の帳票一覧開始                                       */
            /**********************************************************************/
            iLwSvKpLH = (*fp_StartKeepList)(iLwSvApiH, lpKpFInfo->cf_PathName); 
            if(iLwSvKpLH == 0) 
            {
                (*fp_GetServerApiErrMsg)(iLwSvApiH, ce_ErrMsg); 
                ie_ErrCode = (*fp_GetServerApiErrCode)(iLwSvApiH); 
                printf("%s RC=%d", ce_ErrMsg, ie_ErrCode); 
                continue; 
            }
    
            /**********************************************************************/
            /* 保管フォルダ内の帳票数取得                                         */
            /**********************************************************************/
            iRetCode = (*fp_GetKeepListCount)(iLwSvApiH, iLwSvKpLH, &iKpLCount); 
            if(iRetCode != 0) 
            {
                (*fp_GetServerApiErrMsg)(iLwSvApiH, ce_ErrMsg); 
                ie_ErrCode = (*fp_GetServerApiErrCode)(iLwSvApiH); 
                printf("%s RC=%d", ce_ErrMsg, ie_ErrCode); 
                goto EXIT; 
            }
    
            /**********************************************************************/
            /* 保管フォルダ内の帳票一覧数分ループする                             */
            /**********************************************************************/
            for(iKpLIndex = 0; iKpLIndex < iKpLCount; iKpLIndex ++)
            {
                /******************************************************************/
                /* 保管フォルダ内の帳票一覧情報の取得                             */
                /******************************************************************/
                memset(lpKpLInfo, 0, sizeof(KPLINFO));      /* 初期化処理         */
                lpKpLInfo->usl_Length = sizeof(KPLINFO);    /* 構造体の長さ       */
                iRetCode = (*fp_GetKeepListItem)(iLwSvApiH, iLwSvKpLH, iKpLIndex, lpKpLInfo); 
                if(iRetCode != 0) 
                {
                    (*fp_GetServerApiErrMsg)(iLwSvApiH, ce_ErrMsg); 
                    ie_ErrCode = (*fp_GetServerApiErrCode)(iLwSvApiH); 
                    printf("%s RC=%d", ce_ErrMsg, ie_ErrCode); 
                    break; 
                }
    
                /* 取得した帳票名が、"2000年度"か比較する                         */
                iRetCode = memcmp(lpKpLInfo->cl_Title, "2000年度", 8); 
                if (iRetCode == 0) 
                {
                    /* 帳票のフルパス名を取得する                                 */
                    iFindFlg = 1; 
                    strcpy(ceDeleteFile, lpKpLInfo->cl_SplFile); 
                    break; 
                }
            }
    
            /**********************************************************************/
            /* 保管フォルダ内の帳票一覧終了                                       */
            /**********************************************************************/
            if(iLwSvKpLH != 0) 
            {
                (*fp_EndKeepList)(iLwSvApiH, iLwSvKpLH); 
                iLwSvKpLH = 0; 
            }
    
            /* 該当する帳票が見つかったため、ループ処理を抜ける                   */
            if (iFindFlg == 1) 
                break; 
        }
    
        /**************************************************************************/
        /* 保管フォルダ終了                                                       */
        /**************************************************************************/
        if(iLwSvKpFH != 0) 
        {
            (*fp_EndKeepFolder)(iLwSvApiH, iLwSvKpFH); 
            iLwSvKpFH = 0; 
        }
    
        /**************************************************************************/
        /* 保管フォルダ内の帳票の削除(フルパス指定)                             */
        /**************************************************************************/
        if (iFindFlg == 1) 
        {
            iRetCode = (*fp_DeleteKeepFile)(iLwSvApiH, ceDeleteFile); 
            if(iRetCode != 0) 
            {
                (*fp_GetServerApiErrMsg)(iLwSvApiH, ce_ErrMsg); 
                ie_ErrCode = (*fp_GetServerApiErrCode)(iLwSvApiH); 
                printf("%s RC=%d", ce_ErrMsg, ie_ErrCode); 
                goto EXIT; 
            }
        }
    
    /******************************************************************************/
    /* 終了処理                                                                   */
    /******************************************************************************/
    EXIT:
        if(iLwSvKpLH != 0)
            (*fp_EndKeepList)(iLwSvApiH, iLwSvKpLH);
    
        if(iLwSvKpFH != 0)
            (*fp_EndKeepFolder)(iLwSvApiH, iLwSvKpFH);
    
        if(iLwSvApiH != 0)
            (*fp_EndSvApi)(iLwSvApiH);
    
        dlclose(hinSvAPi);
    
        return 0;
    }