【发布时间】:2013-03-08 03:30:35
【问题描述】:
我想通过触发我的 xpage 上的按钮单击事件来测试 java 代理以清除视图中的所有文档。我在 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();
}
}
}
【问题讨论】:
-
发出任何警告消息了吗?您也可以直接使用 database.getAgent() ,因为对象数据库始终存在。会话也是如此。
-
你有计划以后让这个代理更复杂吗?在当前的形式中,这是一个相当简单的操作……您不妨直接在按钮事件中运行此代码。如果您调用代理的唯一原因是要在签名者的权限下删除文档,请使用 sessionAsSigner 获取当前数据库的单独句柄;您通过该句柄在数据库中执行的任何操作都将作为签名者完成,而不是用户。
-
P.S.如果目标是从给定视图中删除所有文档,请不要费心循环:db.getView("vActualSalesFromSD").getAllEntries().removeAll(true) 将获得相同的结果。
-
实际上我正在尝试编写和测试java代理,因为我不熟悉lotus脚本。此代理稍后会很复杂,并且会更改为计划代理。谢谢大家的建议。
标签: java xpages lotus-domino lotus