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文書を作成しました。
##実行結果
<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>