従来の Notes 開発から、データベースやビューなどの Domino オブジェクトをスクリプトで取得することは効果的ではなく、ループ内では避けるべきであることがわかりました。
XPages では、Domino オブジェクトをシリアライズできず、多くの場合、同じオブジェクトを何度も取得します。プロジェクト関連のドキュメントに保存されているプロジェクト番号に基づいて、プロジェクト データを取得する例があります。Bean のスコープapplicationScope
が設定され、結果がキャッシュされます。
public class Projects{
private TreeMap<String, Project> projectList;
public Projects() {
}
public Project getProjectInfo(String projNum) {
Project project = null;
if (projectList==null) {
projectList = new TreeMap<String,Project>();
}
if (projectList.containsKey(projNum)) {
project = projectList.get(projNum);
} else {
try {
Database projDb = DominoAccess.getDatabase("projects");
View v = projDb.getView("(projLookup)");
ViewEntry ve = v.getEntryByKey(projNum);
if (ve != null) {
project = new Project(ve);
projectList.put(projNum, project);
}
} catch (Exception e) {
}
}
return project;
}
}
これが最初に繰り返し使用される場合、各ドキュメントに対してデータベースとビューオブジェクトが作成されます。これはベストプラクティスですか、それともこれを解決するより良い方法はありますか?
最初の使用時にすべてのプロジェクトをマップに配置できることはわかっていますが、これがメモリに関するベスト プラクティスであるかどうかもわかりません。