xpages从当前数据库javaAgent调用另一个数据库的javaAgent
我有一个java代理,我可以从中调用另一个代理,通过它传递的参数包含NoteId,并且使用该NoteId,我能够成功地完成该文档中的工作。直到这里一切都清楚了
与此相关的主要问题是,是否可以从当前数据库代理运行同一服务器上另一个数据库的代理
为了更清楚地说明一个例子 我有两个数据库,“ABC.nsf”和“XYZ.nsf”,JavaAgent“A”在“ABC.nsf”中,JavaAgent“B”在“XYZ.nsf”中。在我的xpage中,我有一个运行代理“a”的按钮,甚至代理“a”也可以从同一数据库运行任何其他javaAgent
代码:
Document mainDoc = db.getDocumentByUNID(tempDoc.getItemValueString("mainDocId"));
String noteID = mainDoc.getNoteID();
String agentName = "NotificationManager";
Agent agent = db.getAgent(agentName);
if (agent != null)
agent.runOnServer(noteID);
else
System.err.println("Something is wrong");
但实际上我想从“ABC.nsf”中的JavaAgent“A”运行位于“XYZ.nsf”中的JavaAgent“B”
经过一些研究,我参考了这段代码。 代码
Database db=session.getDatabase(current_server, "path/to/XYZ.nsf");
Agent myAgent=db.getAgent("B");
myAgent.run();
是的,我在那里没有成功, 需要一些想法来实现这一点。任何建议都将受到欢迎
# 1 楼答案
我可以建议一种不同的方法吗?如果不需要代理立即回复,作为代码中的返回值,为什么不向另一个数据库发送一封特殊邮件?创建邮件代理(在收到新邮件后触发),在发件人端创建NotesDocument对象,添加引用代理要处理的文档所需的值,如服务器名称、数据库的replicaId和uniqueId。代理接收邮件并检查字段,以确定它应该做什么。接收数据库应在N&;一本书作为数据库中的邮件
优点是多方面的:没有权限问题,界面清晰,无需打开其他数据库,代理由代理管理器在方便的时间执行,您可以轻松地以同样的方式添加更多功能,等等
# 2 楼答案
示例代码原则上是正确的。只是一些你必须知道的事情:
首先,服务器的名称可以是“”或服务器的真实名称。但是如果有服务器,那么您必须检查服务器文档中的
Trusted servers:
-部分(安全选项卡-服务器访问部分)。在那里,服务器本身必须是字段的成员(作为名称或组中的成员),否则您可能无法打开另一个数据库第二件事:目标数据库的路径是相对于数据目录的,并且必须是给定操作系统的正确格式
例如
C:\IBM\Domino\Data\first\xyz.nsf
将是first\xyz.nsf
,而/local/notesdata/second/abc.nsf
将是second/abc.nsf
第三:您获得的noteid来自调用数据库的文档。在“目标”-代理中,您必须从源数据库获取文档,否则它将抛出错误,或者(由于noteid只是一个序列号)从目标数据库返回与您正在搜索的文档无关的文档
呼叫代理A的代码如下:
被称为特工B的人可能是这样的
这应该可以工作(如果服务器上的安全性正常)。 正如Paul在评论中提到的,安全性还意味着代理签名者或web用户(取决于代理A中的设置)必须有足够的权限访问目标数据库和目标服务器(如果不同)
如果在安全性正确的情况下仍无法工作:向我们显示准确的错误/跟踪