<?xml version="1.0" encoding="UTF-8"?> <xp:view xmlns:xp="http://www.ibm.com/xsp/core"> <xp:this.data> <xp:dominoView var="view1" viewName="ByCategory"></xp:dominoView> </xp:this.data> <div> <h3>@DBColumnを使用(エラー)</h3> <xp:comboBox id="comboBox1"> <xp:selectItems> <xp:this.value><![CDATA[#{javascript:@DbColumn(@DbName(), "ByCategory", 1)}]]></xp:this.value> </xp:selectItems> </xp:comboBox> </div> <div> <h3>ssjsで実装</h3> <xp:comboBox id="comboBox2"> <xp:selectItems> <xp:this.value><![CDATA[#{javascript: var ndb:NotesDatabase = database, nview:NotesView = ndb.getView("ByCategory"), entries:NotesViewEntryCollection = nview.getAllEntries(), entry:NotesViewEntry, categories:java.util.List = new java.util.Vector(), entry = entries.getFirstEntry(); while(entry !== null){ if(entry.isCategory){ categories.add(entry.getColumnValues().get(0)); } entry = entries.getNextEntry(entry); } return categories.toArray(); }]]></xp:this.value> </xp:selectItems> </xp:comboBox> </div> </xp:view>
コンボボックスの値を@DBColumnで指定した場合、Notesクライアントの場合と同様に、リストサイズが32KBを超えるとエラーが発生し、リストボックスの選択肢には”Infinity”とのみ表示されます。
こうなった場合には、@DBColumn関数を使用せず、ViewEntryから値を生成する必要があります。
コードには、コンボボックスを2つ定義していて、1つ目(<h3>@DBColumnを使用(エラー)</h3>以降)がエラー発生ケース。
2つ目(<h3>ssjsで実装</h3>)がSSJSによる実装です。
高速化(効果不明ですが)のため、Documentクラスは使用せず、ViewEntryCollectionのみで処理しています。
使用するには、ビュー名(<xp:dominoView var="view1" viewName="ByCategory"></xp:dominoView>)と、 取得するカラム位置(categories.add(entry.getColumnValues().get(0));)を変更する必要があります。