ページの先頭行へ戻る
Interstage List Works V11.0.0 APIリファレンス
FUJITSU Software

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

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

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

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

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


    #include <stdio.h>
    #include <string.h>
    #include <dlfcn.h>
    #include "lvsvapi.h"
    
    typedef LWAPIHANDLE (*LPSTARTSVAPIEX)(lw_charcode_t);
    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;            /* 保管フォルダ帳票一覧ハンドル  */
        lw_charcode_t  encode = LW_UTF8;         /* 入出力の文字列コード          */
        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_StartSvApiEx)(lw_charcode_t);
          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_StartSvApiEx = (LPSTARTSVAPIEX)dlsym(hinSvAPi, "LW_StartServerApiEx");
              if(fp_StartSvApiEx == 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_StartSvApiEx)(encode);
             if(iLwSvApiH == 0)
             {
                 printf("サーバAPI の開始(LW_StartServerApiEx)に失敗しました。\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;
    }