我想測試java代理,通過觸發xpage上的按鈕單擊事件來清除視圖中的所有文檔。我在Java代理中沒有錯誤,但它不起作用。你能幫助我渡過這個階段嗎?如何從xpage按鈕點擊事件觸發java代理?
按鈕單擊事件:
var serverName=session.getCurrentDatabase().getServer();
//@WarningMessage("current one");
//@WarningMessage("server=" + serverName);
//var db:NotesDatabase = session.getDatabase(session.getCurrentDatabase().getServer(), "\ProTexII.nsf");
var db:NotesDatabase=session.getCurrentDatabase();
@WarningMessage("db=" + db);
var agent:NotesAgent = db.getAgent("SnapShotUpdate");
@WarningMessage("agent" + agent);
if (agent!=null){
agent.run();
@WarningMessage("view is fired!");
}
Java代理:
package javaPkg;
import java.io.PrintWriter;
import lotus.domino.*;
public class SnapShotUpdate extends AgentBase{
public void NotesMain() {
try {
//String p = session.getPlatform();
//PrintWriter out=getAgentOutput();
System.out.println("Hello i never give it up!!");
Session session = getSession();
AgentContext agentContext =session.getAgentContext();
Database db=session.getCurrentDatabase();
//**clear view "vActualSalesFromSD" before copying documents into it
DocumentCollection dc= db.createDocumentCollection();
View view= db.getView("vActualSalesFromSD");
Document docToBeCleared= view.getFirstDocument();
while (docToBeCleared != null) {
{
dc.addDocument(docToBeCleared);
}
docToBeCleared = view.getNextDocument(docToBeCleared);
}
dc.removeAll(true);
} catch(Exception e) {
e.printStackTrace();
}
}
}
任何warningmessage被觸發?由於對象數據庫始終存在,因此您也可以直接使用database.getAgent()。會議同樣如此。 – 2013-03-08 06:04:39
您是否有計劃在以後使這個代理更復雜?在目前的形式下,這是一個相當簡單的操作......你可能直接在按鈕事件中直接運行這些代碼。如果您調用代理的唯一原因是在簽名者的權限下發生文檔刪除,請使用sessionAsSigner在當前數據庫上獲取單獨的句柄;您通過該句柄在數據庫中執行的任何操作都將作爲簽名者完成,而不是用戶完成。 – 2013-03-08 07:23:50
P.S.如果目標是專門刪除給定視圖中的所有文檔,請不要打擾循環:db.getView(「vActualSalesFromSD」)。getAllEntries()。removeAll(true)將獲得相同的結果。 – 2013-03-08 07:25:23