0

XPage と標準のファイル アップロード コントロールを使用してファイルをアップロードしています。データソースには WebQuerySave エージェントがあります。

WQS-agent は LotusScript にあります。

ユーザーは XML ファイルをアップロードしており、アップロードされた XML を解析するのに役立つ既存のヘルパー ライブラリがあります。そのため、WQS は LotusScript で記述されています。

アップロードされたファイルをサーバーにデタッチできないため、Java エージェントを呼び出して、XML を文字列に読み取り、それをドキュメントに格納します。

param ドキュメントを使用して Java エージェントを呼び出していますが、これはすべて基本的なものです。

param doc には、添付ファイルを含むドキュメントの UniversalID を含めます。これが私の問題です!

Java エージェントは、UniversalID が無効であると主張しています。

「HTTP JVM: 4091 無効なユニバーサル ID」

しかし、LotusScript エージェントで文書を検索しようとすると、Java エージェントを呼び出す前に、同じ UNID を使用して文書が検出されます: Set tempDoc = db.Getdocumentbyunid(unid)

Java コード:

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import lotus.domino.Agent;
import lotus.domino.AgentBase;
import lotus.domino.AgentContext;
import lotus.domino.Database;
import lotus.domino.Document;
import lotus.domino.NotesException;
import lotus.domino.Session;

public class JavaAgent extends AgentBase {
    public void NotesMain() {
        try {
            Session session = getSession();
            AgentContext agentContext = session.getAgentContext();
            Database db = agentContext.getCurrentDatabase();
            Agent agent = agentContext.getCurrentAgent();

            // Get document used for passing data
            System.out.println(agent.getParameterDocID());

            Document paramDoc = db.getDocumentByID(agent.getParameterDocID());
            String UniversalID = paramDoc.getItemValueString("unid");

            System.out.println(UniversalID);
            Document doc = db.getDocumentByUNID(UniversalID);

Java エージェントを実行すると、印刷コマンドから何も得られませんが、おそらくそれは予想されることです...(?)

既存のドキュメントですべてを手動で実行すると、機能します。ただし、ブラウザから送信されたドキュメントではありません。

私には、添付ファイルを含むドキュメントはまだ Java の準備ができていないように感じます。

ドミノ 8.5.3

どんな助けでも大歓迎です!

/J

PS私はJavaの初心者なので、知っています.. ;-)

4

4 に答える 4

1

extlibx パッケージで拡張ライブラリを使用できますか? もしそうなら、sbt.XmlNavigator という XML パーサーが既に組み込まれています。XPages Extension Library book の第 13 章を参照してください。Java エージェントを呼び出す LotusScript エージェントを呼び出さないように注意することをお勧めします。これらのパッケージは Java から使用できますが、SSJS も使用できます。絆創膏をはぎ取ってそれを使用する方が簡単かもしれません (または別の Java ベースの XML パーサー、いくつかあると思います)。今は少し面倒かもしれませんが、将来的にはもっと役立つでしょう。

于 2013-02-20T16:37:24.410 に答える
1

コンテキスト ドキュメントには、save() メソッドを呼び出すと永続的な値に変更される一時的な UNID があることを覚えているようです。したがって、LotusScript コードは、コンテキスト ドキュメントを保存する前に、その UniversalId プロパティを読み取っていると推測できます。

したがって、私が正しければ、コンテキスト ドキュメントを保存するまで、LotusScript エージェントで universalId プロパティを取得する呼び出しを移動し、その値を Java エージェントに渡します。

于 2013-02-20T21:14:32.943 に答える
0

これを解決できる唯一の方法は、documentContext のすべてのアイテムをデータベースに作成した新しいドキュメントにコピーすることでした。

  • それを保存します
  • この新しいドキュメントの UNID を取得します
  • それをagent.run - Javaに渡すとうまくいきました!
于 2013-02-20T21:58:05.957 に答える