0

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();
       }
     }


}
4

1 に答える 1

5

コードをトリガーするには、次の 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();
     }
 }

進捗状況をお知らせください。

于 2013-03-08T06:14:29.900 に答える