Xpages只将第一个字符传递给代理

Xpages只将第一个字符传递给代理,xpages,lotusscript,Xpages,Lotusscript,我创建了一个Xpage,允许管理员在编辑框中输入单个Notes文档(它们是合同ID),然后按按钮删除合同。delete调用一个传递合同ID的代理。下面是按钮脚本,然后是代理的相关部分。正在发生的事情是,只有第一个字符被传递给代理,即如果合同ID是9MXCB4,那么在代理消息框将其打印到日志时,只有9被传递。我做错了什么?如果我在消息框后硬编码一个合同ID,则合同被正确处理 按钮代码 ag = database.getAgent("DeleteOneContract"); noteid = ge

我创建了一个Xpage,允许管理员在编辑框中输入单个Notes文档(它们是合同ID),然后按按钮删除合同。delete调用一个传递合同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,我认为Note ID参数实际上必须是字符串形式的十六进制数。它不必与数据库中的实际注释ID对齐,但它只能包含0-9和A-F,可能大小有上限。

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

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


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

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


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

要对Jesse和Mark的正确答案多加思考:从AJF的问题中,我们无法判断Xpage是否绑定到实际的NotesDocument对象,或者它是否是临时独立页面。当然,在这种情况下,agent.runWithDocumentContext将无法工作。 但是,除非您有充分的理由使用LotusScript编码执行任务的其余部分,否则首先为什么要使用代理?为什么不直接使用SSJS代码执行删除?在这个过程的Xpages方面,您很可能必须从与Mark的示例非常相似的SSJS代码开始,但是为什么不继续并用另外两行或三行代码结束呢?
事实上,由于性能问题,我尽量避免直接从我的Xpages驱动的应用程序调用代理,因为我不喜欢我的代码分散在各个地方。

要对Jesse和Mark的正确答案多加思考:从AJF的问题中,我们无法判断Xpage是否绑定到实际的NotesDocument对象,或者它是否是临时独立页面。当然,在这种情况下,agent.runWithDocumentContext将无法工作。 但是,除非您有充分的理由使用LotusScript编码执行任务的其余部分,否则首先为什么要使用代理?为什么不直接使用SSJS代码执行删除?在这个过程的Xpages方面,您很可能必须从与Mark的示例非常相似的SSJS代码开始,但是为什么不继续并用另外两行或三行代码结束呢?
事实上,由于性能问题,我尽量避免直接从我的Xpages驱动的应用程序调用代理,因为我不喜欢我的代码分散在各地。

我们需要在这个网站上设置“问题锁定”,这样,如果有人已经在回答问题,我就不必费心了。或者我应该更快地键入/测试:-或者使用“合并答案”功能,因为您和Jesse都提供了很好的信息,这些信息共同提供了一个非常完整的答案。@Jesse:您确定吗?我记得在我早期的Xpages开发中,我试图传递一个DocumentUniqueID,它也是一个十六进制值,但当NoteIDs总是这样做时,它并没有起作用。这可能是因为UNID太长,或者它可能是早期版本的问题,当时是v8.5或8.5.1,我从未尝试过,所以我的结论可能是错误的。我的直觉是,如果没有广泛的测试,API会在内部将字符串转换为NOTEID,一个32位整数,因此UNID将溢出并失败。所以限制大概是从00000000到FFFFFF的十六进制数。我们需要在这个网站上设置“问题锁定”,这样我就不用担心是否有人已经在回答问题了。或者我应该更快地键入/测试:-或者使用“合并答案”功能,因为您和Jesse都提供了很好的信息,这些信息共同提供了一个非常完整的答案。@Jesse:您确定吗?我记得在我早期的Xpages开发中,我试图传递一个DocumentUniqueID,它也是一个十六进制值,但当NoteIDs总是这样做时,它并没有起作用。这可能是因为unid太长了,或者可能是早期版本的问题,当时是v8.5或8.5.1,我从来没有这样做过

r再次尝试,因此我的结论可能是错误的。我的直觉是,如果没有广泛的测试,API会在内部将字符串转换为NOTEID,即32位整数,因此UNID将溢出并失败。所以这个限制大概是从00000000到FFFFFFFF的十六进制数。我认为constract和NoteID应该是一样的。有区别吗?我可以在按钮脚本中获得它吗?Notes数据库中的每个文档“note”都至少有一个UNID和NoteID。UNID是由十六进制数字0-9、a-F组成的32个字符的组合,用于在所有副本中唯一标识文档;NoteID是最多8个字符的十六进制值,用于唯一标识特定数据库中的文档。您的construcd可能是由系统创建并存储在字段中的值。要检索压缩文件的文档,您需要在数据库中执行搜索或视图查找。是的:您可以在按钮脚本中执行此操作。创建一个按construcd排序的视图,然后在按钮脚本中打开视图并检索文档:var construcd=getcomponentconstructdelete.getValue;var vw=database.getView'your_view';var doc=vw.getDocumentByKey收缩,true;var noteId=doc.getNoteID;我以为缩写和NoteID是一样的。有区别吗?我可以在按钮脚本中获得它吗?Notes数据库中的每个文档“note”都至少有一个UNID和NoteID。UNID是由十六进制数字0-9、a-F组成的32个字符的组合,用于在所有副本中唯一标识文档;NoteID是最多8个字符的十六进制值,用于唯一标识特定数据库中的文档。您的construcd可能是由系统创建并存储在字段中的值。要检索压缩文件的文档,您需要在数据库中执行搜索或视图查找。是的:您可以在按钮脚本中执行此操作。创建一个按construcd排序的视图,然后在按钮脚本中打开视图并检索文档:var construcd=getcomponentconstructdelete.getValue;var vw=database.getView'your_view';var doc=vw.getDocumentByKey收缩,true;var noteId=doc.getNoteID;要使事情变得更复杂-您可以将合同id编码为有效的十六进制值:-要使事情变得更复杂-您可以将合同id编码为有效的十六进制值:-感谢您的回复。是的,你是对的,也许我的问题不清楚。当我尝试将合同ID传递给代理时,没有打开或选择任何文档。也许我应该像你说的那样重新思考,而不是使用代理在Xpages视图中检索文档并让delete按钮在那里处理它。如果我能添加一个不同的选项,我会很高兴。当涉及到Xpages开发时,最好退一步,尝试忘记遗留Notes客户端开发所需的所有机制、技巧和习惯,至少目前是这样。不总是容易的,但它有帮助请不要忘记接受其中一个答案。再次感谢。我修改了页面,使其具有动态视图面板,并将其绑定到视图中。当我点击一个按钮时,我正在努力从编辑框中获取文本作为动态视图面板的参数。这是一个简单的想法:也许你可以将编辑框绑定到某个范围变量,并对视图面板执行同样的操作。然后让按钮或任何东西执行部分刷新。感谢您的回复。是的,你是对的,也许我的问题不清楚。当我尝试将合同ID传递给代理时,没有打开或选择任何文档。也许我应该像你说的那样重新思考,而不是使用代理在Xpages视图中检索文档并让delete按钮在那里处理它。如果我能添加一个不同的选项,我会很高兴。当涉及到Xpages开发时,最好退一步,尝试忘记遗留Notes客户端开发所需的所有机制、技巧和习惯,至少目前是这样。不总是容易的,但它有帮助请不要忘记接受其中一个答案。再次感谢。我修改了页面,使其具有动态视图面板,并将其绑定到视图中。当我点击一个按钮时,我正在努力从编辑框中获取文本作为动态视图面板的参数。这是一个简单的想法:也许你可以将编辑框绑定到某个范围变量,并对视图面板执行同样的操作。然后让按钮或任何东西执行部分刷新。