Java でドミノにアクセスするためには、ドミノオブジェクトの階層をだいたい理解しておく必要があります。
といってもそんなに難しいことではなく、まずセッションがあって、データベースを開いて、さらにビューを選んで、何か文書を開けるとフィールドがあって、という順番がそのまま階層です。
サーブレットやスタンドアローンの Java プログラムはまず NotesFactory にお願いして session オブジェクトを作成する必要があります。
エージェントの場合はもうセッションが出来た状態で起動されますから、この過程は要りません。「新規エージェント」で「Java」を選択すると、もうスケルトンのコードが入った状態になりますが、その中を見てみると
Session session = getSession();
という文から始まっています。
getSession() で現在のセッションを取得して、次に
AgentContext agentContext = session.getAgentContext();
でその取得したセッションから、現在のエージェントの実行環境を得ています。この後は実際のコードを書いていけばいいわけです。
こんな風にまずはセッションを取得し、後はそのセッションオブジェクトをもとにいろいろなノーツの設計要素にアクセスしていく、という段取りになります。
以上のようなことはこちらにも書いてありますので、参考にしてください。
では、エージェントを例にとって簡単にドミノオブジェクトへのアクセスのしかたを見ていきましょう。
上の説明の通り、現在の実行環境を取得していますので、その AgentContext のオブジェクト経由で getCurrentDatabase() メソッドを発行することによってそのエージェントが現在アクセスしているデータベースを取得できます。
Database currentdb = agentContext.getCurrentDatabase();
ワークフローなどのアプリケーションで別のデータベースを処理したいケースもあるでしょう。そういった場合には取得したセッションオブジェクトに対して getDatabase() メソッドが使用できます。
また、同じディレクトリのものであれば、以下のようにしてパス情報を切り出して、データベース名と合わせてアクセスする、というようなコーディングが使えます。
String server = session.getServerName();
Database currentdb = agentContext.getCurrentDatabase();
String dbpath = currentdb.getFilePath().substring(0, currentdb.getFilePath().length() - currentdb.getFileName().length());
Database db = session.getDatabase(server, dbpath + "DatabaseName");
getDatabase() でも getCurrentDatabase() でも、取得されるのは データベース (Database) オブジェクトです。
そのデータベースオブジェクトから、ビューを取得することができます。
View view = db.getView("ViewName");
Document doc = vew.getFirstDocument();
while(doc != null) {
//do something like retrievedData = doc.getItemValue("Filed1");
doc = view.getNextDocument(doc);
}
さらにデータベースオブジェクトに対して、新しい文書を作成することができます。
フォームは以下のようにアイテムのひとつの値を変更する形で指定します。
Document newdoc = db.createDocument();
newdoc.appendItemValue("Form", "Form1");
newdoc.appendItemValue("Field1", "Value1");
newdoc.appendItemValue("Field2", "Value2");
newdoc.save();
|
|