LotusScript与公式运行Java代理的区别

我在页面上做了两个save按钮。如下图所示:然后在第一个Save按钮用公式运行Java代理。在第二个Save2按钮用LS运行同一个Java代理。Java代理如下:import lotus.domino.*;import javax.swing.JOptionPane;public class JavaAgent extends AgentBase {    public voi...显示全部
我在页面上做了两个save按钮。如下图所示:

QQ截图20150113213416.png


然后在第一个Save按钮用公式运行Java代理。

在第二个Save2按钮用LS运行同一个Java代理。

Java代理如下:
import lotus.domino.*;

import javax.swing.JOptionPane;

public class JavaAgent extends AgentBase {

    public void NotesMain() {

      try {
          Session session = getSession();
          AgentContext agentContext = session.getAgentContext();

          // (Your code goes here)
          Document doc = agentContext.getDocumentContext();
          System.out.println("b");
          System.out.println(doc.getUniversalID());
          doc.replaceItemValue("DocID", doc.getUniversalID());
          System.out.println("c");
          } catch(Exception e) {
             e.printStackTrace();
       }
   }
}

结果发现公式调用的代理可以运行成功,可以向DocID域里写值。而LS调用的代理运行不成功,报如下错误:
java.lang.NullPointerException
        at JavaAgent.NotesMain(Unknown Source)
        at lotus.domino.AgentBase.runNotes(Unknown Source)
        at lotus.domino.NotesThread.run(Unknown Source)


请问是什么原因,谢谢指教!收起
参与14

查看其它 8 个回答virginia的回答

virginiavirginia系统分析师test
一个直接调用代理,默认使用的是当前文档
另一个通过传递参数的方式调用代理,所以,在代理里,要获取对应的文档,就需要通过:
Database db = agentContext.getCurrentDatabase();
Agent agent = agentContext.getCurrentAgent();
Document doc = db.getDocumentByID(agent.getParameterDocID());
或者你的LS里直接调用agent.run()而不是agent.run(doc.NoteID);
IT其它 · 2015-06-30
浏览1514

回答者

virginia
系统分析师test

virginia 最近回答过的问题

回答状态

  • 发布时间:2015-06-30
  • 关注会员:2 人
  • 回答浏览:1514
  • X社区推广