1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Notes文書をJavaでXML文書として出力する

Last updated at Posted at 2021-01-12

Notesデータベースの文書をJSON形式でやりとりできるNotesJSON****という関数があると聞いて試そうと思ったのですが……。Notes10から利用できるクラスということで、自分のNotes環境では検証できませんでした。

ただ、ヘルプなどを色々と調べているときに、generateXMLというメソッドを利用すれば、Notes文書をXML形式で出力できることが分かりました。便利そうな関数なのですが、Javaのみに用意されている関数になるため、LotusScriptは使用できません。

#generateXMLクラスの使い勝手
実際に使ってみたところ、驚愕の機能です。
generateXMLクラスは文書の全てのフィールド情報と値を構造的に書き出してくれるのですが、リスト形式の複数値やリッチテキストのフィールド情報まで正確に書き出してくれます。

LotusScriptで書くと、文書を取得した後、ForAll item In doc.Items などで文書内のフィールドを取得して、フィールドごとに複数値を取得するコードなど、色々と面倒なコードをチマチマと書いたりしないといけないのですが、generateXMLクラスで書くと1行で済んでしまう………。ヘルプには少しだけしか記述が割かれていませんが、もっと知られないといけない機能だと思います。

#ソースコード

import lotus.domino.*;
import java.io.*;

public class JavaAgent extends AgentBase {

    public void NotesMain() {

      try {
    	  Session session = getSession();
    	  AgentContext agentContext = session.getAgentContext();

          // (Your code goes here)
          Database db = agentContext.getCurrentDatabase();
          View view = db.getView("Main");
          view.setAutoUpdate(false);
          Document tmpdoc;
          BufferedWriter bw = new BufferedWriter( new FileWriter("c:\\temp\\document.xml"));
          Document doc = view.getFirstDocument();
          while (doc != null) {
        	  System.out.println(doc.getItemValueString("Uname"));
        	  doc.generateXML(bw);
              tmpdoc = view.getNextDocument(doc);
              doc.recycle();
              doc = tmpdoc;
          }
          bw.close();
      } catch(Exception e) {
          e.printStackTrace();
       }
   }
}

#実行結果
リッチテキストやリストなどの複数の種類が混在したテストフォームを作成して、複数文書がXML形式で出力されることを確認しました

##テスト用のフォームと文書
テキスト/リッチテキスト/時刻/チェックボックスなど、様々な種類のフィールドを配置したテストフォームを用意して、複数のNotes文書を作成しました。
サンプル.png

##実行結果

<document form='Main'>
<noteinfo noteid='912' unid='C7638A880050D1014925865B001F3A1B' sequence='1'>
<created><datetime>20210112T144104,91+09</datetime></created>
<modified><datetime>20210112T144104,92+09</datetime></modified>
<revised><datetime>20210112T144104,91+09</datetime></revised>
<lastaccessed><datetime>20210112T144104,92+09</datetime></lastaccessed>
<addedtofile><datetime>20210112T144104,92+09</datetime></addedtofile></noteinfo>
<updatedby><name>CN=Taro Yamada/O=Taro Yamada</name></updatedby>
<item name='Uname'><text>山田一郎</text></item>
<item name='UDate'><datetime>20210201</datetime></item>
<item name='UTimeS'><datetime>T091500,00</datetime></item>
<item name='UTimeE'><datetime>T180000,00</datetime></item>
<item name='Rtxt'><richtext>
<pardef id='1'/>
<par def='1'><run><font size='18pt' style='bold' name='メイリオ' pitch='variable'
 truetype='true' familyid='30' color='red'/>リッチテキスト</run></par>
<par def='1'><run><font size='18pt' style='bold' name='メイリオ' pitch='variable'
 truetype='true' familyid='30' color='red'/></run></par></richtext></item>
<item name='CheckBox'><textlist><text>埼玉</text><text>東京</text><text>茨木</text></textlist></item>
<item name='Num'><number>12345678.9</number></item></document>

<document form='Main'>
<noteinfo noteid='90e' unid='4358C36AE3645EB44925865B001F2BF9' sequence='1'>
<created><datetime>20210112T144028,73+09</datetime></created>
<modified><datetime>20210112T144028,75+09</datetime></modified>
<revised><datetime>20210112T144028,74+09</datetime></revised>
<lastaccessed><datetime>20210112T144028,75+09</datetime></lastaccessed>
<addedtofile><datetime>20210112T144028,75+09</datetime></addedtofile></noteinfo>
<updatedby><name>CN=Taro Yamada/O=Taro Yamada</name></updatedby>
<item name='Uname'><text>山田三郎</text></item>
<item name='UDate'><datetime>20210112T000000,00+09</datetime></item>
<item name='UTimeS'><datetime>T090000,00</datetime></item>
<item name='UTimeE'><datetime>T180000,00</datetime></item>
<item name='Rtxt'><richtext>
<pardef id='1' keepwithnext='true' keeptogether='true'/>
<par def='1'><run><font name='メイリオ' pitch='variable' truetype='true' familyid='30'/></run></par></richtext></item>
<item name='CheckBox'><text>東京</text></item>
<item name='Num'><number>11</number></item></document>

<document form='Main'>
<noteinfo noteid='906' unid='A871F8B1625F2B0E4925865B001EFFCF' sequence='1'>
<created><datetime>20210112T143835,67+09</datetime></created>
<modified><datetime>20210112T143835,68+09</datetime></modified>
<revised><datetime>20210112T143835,67+09</datetime></revised>
<lastaccessed><datetime>20210112T143835,68+09</datetime></lastaccessed>
<addedtofile><datetime>20210112T143835,68+09</datetime></addedtofile></noteinfo>
<updatedby><name>CN=Taro Yamada/O=Taro Yamada</name></updatedby>
<item name='Uname'><text>山田二郎</text></item>
<item name='UDate'><datetime>20210103T000000,00+09</datetime></item>
<item name='UTimeS'><datetime>T090000,00</datetime></item>
<item name='UTimeE'><datetime>T180000,00</datetime></item>
<item name='Rtxt'><richtext>
<pardef id='1' keepwithnext='true' keeptogether='true'/>
<par def='1'><run><font name='メイリオ' pitch='variable' truetype='true' familyid='30'/>ああああ</run></par></richtext></item>
<item name='CheckBox'><text/></item>
<item name='Num'><text/></item></document>
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?