我想测试 java 代理,通过触发 xpage 上的按钮单击事件来清除 View 中的所有文档。我在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();
}
}
}
最佳答案
您有 3 种可能性来触发您的代码:
- 您采取的方法
- 对/yourdatabase.nsf/SnapshotUpdate?OpenAgent 进行 ajax 调用
- 建议不要使用代理(高度) -> 它已经是 Java,使用类并在 SSJS 中调用它
可能会出现什么问题:
- 代理有除“无”之外的目标
- 您没有该数据库的删除权限
- 您无权运行代理(不太可能,因为您可以运行 XPage)
我会这样写循环:
public function clearView(Database db, String vName ) {
try {
View view= db.getView("vActualSalesFromSD");
Document docToBeCleared= view.getFirstDocument();
Document nextDoc = null;
while (docToBeCleared != null) {
nextDoc = view.getNextDocument(docToBeCleared);
try {
docToBeCleared.remove(true);
} catch (Exception didntWork) {
// Do some logging here
}
// Recycle your objects
doc.recycle();
docToBeCleared = nextDoc;
}
// cleanup, we recycle what we opened, but not the parameters
// nextDoc and docToBeCleared are null already;
v.recycle();
} catch(Exception e) {
e.printStackTrace();
}
}
让我们知道您的进展。
关于java - 如何从xpage按钮点击事件触发java代理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15286232/