Xpages 只将第一个字符传递给 Agent

Xpages only passes first character to Agent

我创建了一个 Xpage,允许管理员将单个 Notes 文档(它们是合同)ID 输入编辑框,然后按按钮删除合同。删除调用传递合同 ID 的代理。下面是按钮脚本,然后是代理的相关部分。发生的只是第一个字符被传递给代理,即如果合同 ID 是 9MXCB4,只有“9”被传递,因为代理消息框将其打印到日志中。我在这里做错了什么?如果我在消息框后硬编码合同 ID,合同将得到正确处理。

按钮代码

ag = database.getAgent("DeleteOneContract"); 
noteid = getComponent("ContractIDDelete").getValue()
ag.run(noteid)

部分代理代码

Dim runAgent As NotesAgent
Dim deleteID As Variant

deleteID = runAgent.Parameterdocid 
MsgBox "Input is " & deleteID
'If line below is uncommented it processes the Contract correctly
'deleteID = "9MXCB4"
' Rest of agent process
....

请注意,我还尝试了 runAgent.Target 和 runAgent.Query

我认为音符 ID 参数实际上必须是字符串形式的十六进制数。它不必与数据库中的实际笔记 ID 对齐,但它只能包含 0-9 和 A-F(大概有大小上限)。

刚刚测试过,当我向它传递一个有效的 NoteID 时,代理可以正常读取它。我认为您不能通过这种方式将 NoteID 以外的任何其他值传递给代理。

另一种方法可能是使用 agent.runWithDocumentContext(doc) 方法并在将文档发送给代理之前检索文档。

对 Jesse 和 Mark 的正确答案再补充一点:从 AJF 的问题中,我们无法判断 Xpage 是否绑定到实际的 NotesDocument 对象,或者它是否是(临时)独立页面。那样的话,当然agent.runWithDocumentContext就不行了。
但是除非您有充分的理由使用 LotusScript 编码来执行其余任务:为什么首先要使用代理?为什么不直接使用SSJS代码执行删除呢?在该过程的 Xpages 端,您很可能必须从与 Mark 的示例非常相似的 SSJS 代码开始,但为什么不继续使用两三行代码结束它呢?
事实上,由于性能问题,我尽量避免直接从我的 Xpages 驱动的应用程序 调用代理,因为我不喜欢我的代码散落在各处。