从SSJS调用LS代理

时间:2014-04-17 16:50:18

标签: parameters xpages agent xpages-ssjs

我无法将SSJS操作中的参数传递给LS后端代理。在SSJS中我有这个代码:

var doc:NotesDocument = database.createDocument();
doc.appendItemValue("DeleteDocs",arr);
doc.appendItemValue("Form","frmWFSDeleteDocs");
var UNID = doc.getUniversalID();
dBar.info(UNID, "Doc ID");
doc.appendItemValue("ParentID",UNID);
doc.save();
var agent:NotesAgent = database.getAgent("WFSDeleteDocs");
dBar.info(doc.getItemValueString("ParentID"));
agent.runOnServer(doc.getItemValueString("ParentID"))

dBar信息中显示的UNID是正确的文档UNID。 在我的LS代理中,我有这段代码:

Set agent = s.CurrentAgent    
NoteId = agent.ParameterDocID 
Print "Notes Param " + NoteID
Set thisDoc = db.Getdocumentbyunid(NoteId)

在日志中,NoteID不是UNID而是 HTTP服务器:代理打印:Notes Param 5A3439

当然getDocumentbyunid失败了。我理解帮助的是,这应该与我作为runOnserver中的param插入的值相同。 我错过了什么

2 个答案:

答案 0 :(得分:4)

您需要使用agent.run(<note id>)运行代理。这会将注释ID传输给代理,然后您可以使用agent.getParameterDocID()读取注释ID。

所以,在你的情况下,在SSJS中这样做:

var agent:NotesAgent = database.getAgent("WFSDeleteDocs");
agent.run(doc.getItemValueString("ParentID"))

更新:如果要将代理作为签名者运行,请使用sessionAsSigner:

var backendDb:NotesDatabase = sessionAsSigner.getDatabase(session.getServerName(), database.getFilePath());
var agent:NotesAgent = backendDb.getAgent("WFSDeleteDocs");
agent.run(doc.getItemValueString("ParentID"))

答案 1 :(得分:1)

您正在混合NoteID和UniversalID

UniversalID在不同的数据库副本中是通用的,通常甚至是全局通用的,如UUID或GUID

NoteID是Notes数据库的本地。数据库的不同副本中的相同文档通常具有分配给同一文档的不同NoteID。

代理参数传递必须是NoteID。根本没有其他选择。

我不了解SSJS Notes / Domino-API,但你应该能够使用这样的东西:

agent.runOnServer(doc.getNoteID())

所以你的SSJS代码是

var doc:NotesDocument = database.createDocument();
doc.appendItemValue("DeleteDocs",arr);
doc.appendItemValue("Form","frmWFSDeleteDocs");
doc.save();
var agent:NotesAgent = database.getAgent("WFSDeleteDocs");
agent.runOnServer(doc.getNoteID())

您的Notes-agent代码应该使用

Set thisDoc = db.GetdocumentbyId(NoteId)

而不是

Set thisDoc = db.Getdocumentbyunid(NoteId)

您的完整Notes-agent

Set agent = s.CurrentAgent    
NoteId = agent.ParameterDocID 
Print "Notes Param " + NoteID
Set thisDoc = db.GetdocumentbyId(NoteId)