我无法将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插入的值相同。 我错过了什么
答案 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)