TECH BLOG

MENU

invoiceAgent

invoiceAgent AI OCR

前回の記事「Connect for Java APIを使ってみる3 ファイルの保存/アーカイブ/カスタムプロパティをセット」ではinvoiceAgent Connect for Java APIを使ったファイルのアーカイブ方法についてご説明しました。

 

今回は保管したファイルを探し出すために必要なAPIについてご説明いたします。
invoiceAgentではフォルダーやファイルにユニークなIDが付与されており、ご説明にあたり本記事ではそれを「フォルダーID」「文書ID」と記載いたします。

 

具体的には以下の3つの処理を行います。

 

これらの処理をメインメソッドに記載すると以下のような流れになります。

    /**
     * メイン
     * @param args
     */
    public static void main(String[] args) throws Exception {
        //1.ログイン
        C4JApi3ListSearch cls = new C4JApi3ListSearch();
        try {
            cls.login();
            System.out.println("1.ログイン成功");
        } catch (SpaClientException e) {
            System.out.println("ログインに失敗しました。ID/PWを確認してください。");
            e.printStackTrace();
            return;
        }

        //2.フォルダーのパスからフォルダーID取得
        System.out.println("2.フォルダーのパスからフォルダーID取得");
        String folderPath = "/01.機能別/01.検索/101.基本検索";
        String folderId = cls.getFolderId(folderPath);
        System.out.println("2.フォルダーID取得 パス " + folderPath + "  ID = " + folderId);

        //3.フォルダー配下にある全ファイルの文書IDを取得
        System.out.println("3.フォルダー配下にある全ファイルの文書IDを取得");
        List dlist = cls.getDocumentIdList(folderId);
        for (String did : dlist) {
            System.out.println("  文書ID = " + did);
        }

        //4.指定フォルダー内を全文&ファイル名検索
        System.out.println("4.指定フォルダー内を全文&ファイル名検索");
        List srlist = cls.getSearchDocument(folderId, "札幌市", "05");
        for (String did : srlist) {
            System.out.println("  検索結果ドキュメントID = " + did);
        }

        //9.ログアウト
        cls.logout();
        System.out.println("9.ログアウト 成功");
    }

1.ログイン、9.ログアウトの解説は省略させていただき2~3の処理についてご説明します。

本記事の解説を一通り実装したサンプルを末尾のリンクよりダウンロードいただけます。

 

フォルダーパスからフォルダーIDの取得 FoldersResourceクラス

フォルダーパスをフォルダーIDに変換するにはFoldersResourceクラスを使用します。
実装を見てみましょう。

    /**
     * 指定したフォルダーパスからフォルダーのIDを返す
     * @param path パス(例: /フォルダーA/フォルダーB)
     * @return フォルダーID
     * @throws SpaClientException
     * @throws IOException
     */
    public String getFolderId(String path) throws SpaClientException,IOException{
        String folderid = null;

        //FoldersResourceをインスタンス化
        FoldersResource fr = new FoldersResource(client__);
        //フォルダー情報パラメータ
        List fnames = new ArrayList();
        fnames.add(path);

        //フォルダーID取得を実行
        LookupTableList lt = fr.lookup(fnames);
        for(LookupTableEntry lte: lt){
            folderid = lte.getId();
        }

        return folderid;
    }

引数で指定したフォルダーパスを、FoldersResource#lookupでフォルダーIDに変換していることがお分かりいただけると思います。

 

特定フォルダー配下の文書一覧を取得する DocumentsResourceクラス

文書に関する処理はDocumentsResourceクラスを使用します。

    /**
     * フォルダーID配下にある全ファイルの文書IDを取得
     *
     * @param folderId フォルダーID
     * @return ドキュメントIDのリスト
     * @throws SpaClientException
     * @throws IOException
     */
    public List getDocumentIdList(String folderId) throws SpaClientException,IOException{
        List list = new ArrayList();

        DocumentsResource dr = new DocumentsResource(client__);
        DocumentList dlist = dr.list(Long.parseLong(folderId), false);

        //DocumentContentからIDを取得
        for(DocumentContent dcon: dlist){
            String id = dcon.getId();
            list.add(id);
        }
        return list;
    }

DocumentsResource#listにフォルダーIDを指定することで全文書の文書IDを取得しています。
第二引数でfalseを指定しているのは直下のフォルダーを取得しないためです。

 

全文検索、ファイル名検索を組み合わせて行う SearchResourceクラス

検索に関してはSearchResourceクラスを使用します。

    /**
    * 全文&ファイル名検索を実行する。
    * 引数で指定したフォルダーID配下を対象、全文検索キーワードを含む、ファイル名の一部にこのワードを含むで検索を行います。
    * 戻り値で検索結果にヒットした文書ID
    *
    * @param folderId フォルダーID
    * @param keyword 全文検索キーワード
    * @param fileNameKey ファイル名に含む文字列
    * @return ヒットしたファイルの文書ID
    * @throws SpaClientException
    * @throws IOException
    */
   public List getSearchDocument(String folderId, String keyword, String fileNameKey) throws SpaClientException,IOException{
       List list = new ArrayList();

       //検索パラメータ設定
       MultiFolderSearchConditionList searchConditionList = new MultiFolderSearchConditionList();
       //フォルダー指定
       List folderIds = new ArrayList<>();
       folderIds.add(new FolderCondition(String.valueOf(folderId)));
       searchConditionList.setFolderIds(folderIds);

       //全文検索キーワード設定
       searchConditionList.setSearchWord(keyword);

       //ファイル名にfileNameKeyを含むの条件を指定
       SystemPropertySearchConditionEntry spe = new SystemPropertySearchConditionEntry();
       //ファイル名で検索を指定
       spe.setName(PropertyName.name);
       //キーワード
       spe.setValue(fileNameKey);
       //「含む」条件の設定
       spe.setType(SearchConditionEntry.ConditionType.contains);
       List selist = new ArrayList();
       selist.add(spe);
       searchConditionList.setConditions(selist);

       //検索実行
       SearchResource searchResource = new SearchResource(client__);
       SearchResultDocumentList searchResultDocumentList = searchResource.search(searchConditionList);

       //結果から文書IDを取得
       List dlist = searchResultDocumentList.getDocuments();
       for (DocumentContent dc : dlist) {
           String did = dc.getId();
           list.add(did);
       }

       return list;
   }

検索を実行するSearchResourceクラスの使い方はシンプルですが、検索条件を格納するMultiFolderSearchConditionListの使い方はいろいろと条件指定できるため複雑に感じられるかもしれません。

全文検索はMultiFolderSearchConditionList#setSearchWord に検索キーワードを指定します。

ファイル名に「〇〇を含む」といった条件指定にSystemPropertySearchConditionEntry のsetName,setValue,setTypeメソッドで指定します。

検索結果はList<DocumentContent>で返ってくるのでそこから文書IDを取得しています。

 

サンプルソースのダウンロードと実行

本記事でご説明したサンプルソースを以下よりダウンロードいただけます。

※ダウンロードボタンをクリックするとzip形式でダウンロードいただけます。解凍してご確認ください。
※ソースファイルの文字コードはUTF-8です。
※実行の際は必ず「Connect for Java APIを使ってみる1 invoiceAgent Connect for Java APIとは」でご説明したライブラリへクラスパスを通してください。

事項すると以下のようにコンソール出力されます。

1.ログイン成功
2.フォルダーのパスからフォルダーID取得
2.フォルダーID取得 パス /01.機能別/01.検索/101.基本検索 ID = 103
3.フォルダー配下にある全ファイルの文書IDを取得
  文書ID = 109
  文書ID = 104
  文書ID = 105
  文書ID = 106
  文書ID = 107
  文書ID = 108
  文書ID = 100
  文書ID = 101
  文書ID = 102
  文書ID = 103
4.指定フォルダー内を全文&ファイル名検索
検索結果文書ID = 107
9.ログアウト 成功

 

Connect for Java APIを使ってみる4 文書一覧の取得/検索 まとめ

今回はinvoiceAgent Connect for Java APIを利用して保管後のファイルを見つけ出すための一覧取得や検索を実行しました。

invoiceAgentに保管後の文書操作を行うには基本のAPIになると思います。

検索についてはいろいろな条件が指定できるために、APIとしてはJavaDocを見ただけでは分かりにくいところもあると思いますが今回の実装を参考にしてください。

※本記事の情報は、2023年04月21日現在のものです。(invoiceAgent V10.8.1 / invoiceAgent Cloud Ver.10.8.1.1302)

 

 

この記事にリアクションしてみませんか?

  • 分かりやすい (1)
  • 問題が解決した (1)
評価ありがとうございます!
プロフィールへ

北出 秀行

ITベンダーを経て2016年にウイングアーク1st株式会社へ入社。「北海道」にてプリセールス活動を行っています。 2022年よりWA製品のeラーニング/教育コンテンツ作成も担当。 文書情報管理士/eLPベーシック(eLC認定 e-Learning Professional)資格保有

Related article

Related article関連記事

Pick up

Pick upおすすめ記事

特定の文字列で分割して階層構造をつくりたい!~DS Scriptで分割する~1

  • #データ加工
  • #DS Script

2023.07.17

Dr.Sum

DS Scriptで必要なテーブルだけ再構築(リビルド)をしよう

  • #DS Script

2023.07.06

Dr.Sum

「データポイント数が、しきい値をオーバーしました」というエラーの解決方法【データベースで処理をしよう】

  • #データ加工

2023.06.13

MotionBoard

Ranking

Rankingランキング

1

【まとめ】invoiceAgentのWeb APIを使ってみる

  • #API

2023.04.05

invoiceAgent

2

invoiceAgentのWeb APIを使ってみる1 ログインとCo…

  • #API

2021.08.25

invoiceAgent

3

invoiceAgentのWeb APIを使ってみる2 ファイルの保存…

  • #API

2022.01.20

invoiceAgent

Info

Information

ウイングアーク1stからのお知らせ