java - 如何从xpage按钮点击事件触发java代理?

标签 java xpages lotus-domino lotus

我想测试 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 种可能性来触发您的代码:

  1. 您采取的方法
  2. 对/yourdatabase.nsf/SnapshotUpdate?OpenAgent 进行 ajax 调用
  3. 建议不要使用代理(高度) -> 它已经是 Java,使用类并在 SSJS 中调用它

可能会出现什么问题:

  1. 代理有除“无”之外的目标
  2. 您没有该数据库的删除权限
  3. 您无权运行代理(不太可能,因为您可以运行 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/

相关文章:

Java 2d 数组正在打印我认为内存中的垃圾而不是元素

java - 使用 JSON.org 解析器从 HttpClient 请求中解析 JSON

c# - Lotus Notes 中的重复日历条目

javascript - 我如何在 XPages 中安装 jquery 和 jqueryUI 文件?

java - 支持 mark() 和 reset() 的轻量级 java.io.InputStream 实现

java - 可以将一半的文本以不同的颜色绘制到 Canvas 上吗?

java - drawString() 方法覆盖了之前的绘图(paintComponent 不清除)

xpages - XPages 项目的 WebContent 文件夹中文件的 URL

performance - 对于新的 XPage 开发人员,您最喜欢的 3 个 XPage 性能提示是什么?

java - Java 脚本库中的 NullPointerException