使用Lotusscript实现Database1-Agent向Database2-Agent传参的可行性咨询
LotusScript 跨库触发代理并传参的实现方案
该需求完全可以实现,以下是3种常用的落地方式,可根据实际业务场景选择:
方式1:字符串拼接传参(轻量参数优先选择)
通过NotesAgent.Run方法原生支持传递1个字符串类型参数,你可以将多个字段值用自定义分隔符拼接后传递,目标代理接收后拆分即可。
- Database1(调用侧)代码示例:
Dim session As New NotesSession Dim db2 As NotesDatabase Dim targetAgent As NotesAgent Dim paramStr As String ' 此处的doc为当前上下文的源文档,根据自己的业务逻辑获取 paramStr = doc.fieldA(0) & "|" & doc.fieldB(0) ' 替换为实际的服务器名称、Database2的文件路径 Set db2 = session.GetDatabase("ServerName", "path/Database2.nsf") Set targetAgent = db2.GetAgent("TargetAgentName") ' 运行目标代理,第三个参数为传递的拼接字符串 Call targetAgent.Run(paramStr, 0, "")
- Database2(接收侧)代码示例:
Dim session As New NotesSession Dim currentAgent As NotesAgent Dim paramArr As Variant Set currentAgent = session.CurrentAgent ' 读取传入的参数 paramStr = currentAgent.ParameterDocInit ' 按分隔符拆分得到两个字段值 paramArr = Split(paramStr, "|") fieldAVal = paramArr(0) fieldBVal = paramArr(1) ' 后续业务逻辑编写
方式2:临时文档传参(多参数/复杂参数优先选择)
如果需要传递的参数数量多、或者存在非字符串类型的参数,可以在目标库创建临时文档存储所有参数,将文档NoteID作为参数传递,目标代理根据ID读取文档获取参数即可,用完可删除临时文档避免冗余数据。
- Database1调用侧代码示例:
Dim session As New NotesSession Dim db2 As NotesDatabase Dim tempParamDoc As NotesDocument Dim targetAgent As NotesAgent Set db2 = session.GetDatabase("ServerName", "path/Database2.nsf") ' 在Database2中创建临时参数文档 Set tempParamDoc = db2.CreateDocument tempParamDoc.Form = "TempParam" tempParamDoc.fieldA = doc.fieldA(0) tempParamDoc.fieldB = doc.fieldB(0) Call tempParamDoc.Save(True, False) Set targetAgent = db2.GetAgent("TargetAgentName") ' 传递临时文档的NoteID Call targetAgent.Run(tempParamDoc.NoteID, 0, "")
- Database2接收侧代码示例:
Dim session As New NotesSession Dim currentAgent As NotesAgent Dim tempParamDoc As NotesDocument Set currentAgent = session.CurrentAgent Set db = session.CurrentDatabase ' 读取传入的NoteID,获取临时文档 noteID = currentAgent.ParameterDocInit Set tempParamDoc = db.GetDocumentByID(noteID) ' 直接读取字段值 fieldAVal = tempParamDoc.fieldA(0) fieldBVal = tempParamDoc.fieldB(0) ' 用完删除临时文档,可选操作 Call tempParamDoc.Remove(True)
方式3:环境变量传参(同服务器轻量场景可选)
如果两个数据库部署在同一台Domino服务器上,也可以通过NotesSession.SetEnvironmentVar方法存储参数,目标代理读取后删除即可,不适合高并发场景使用,容易出现参数覆盖冲突。
注意事项
- 需保证运行Database1代理的用户身份,拥有Database2的访问权限以及目标代理的执行权限
- 目标代理的属性设置中,需要开启「允许远程调用」的选项
- 选择第一种拼接参数的方式时,确保自定义分隔符不会出现在fieldA、fieldB的实际业务值中,避免拆分错误
内容的提问来源于stack exchange,提问作者Ragome
相关产品推荐
相关产品推荐

