我想测试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