Lotus Domino 9:XPage点击按钮从字段生成XML及代理绑定咨询
Lotus Domino 9 实现XPage按钮生成XML并绑定代理
一、从字段内容生成XML的实现
方法1:直接在XPage按钮的服务器端脚本实现(无需代理)
适合逻辑简单的场景,无需额外创建代理:
- 打开XPage设计器,找到目标按钮,将按钮的
onclick事件设置为服务器端JavaScript - 编写脚本获取字段值并拼接XML,示例代码:
// 获取当前文档及字段值 var doc = currentDocument.getDocument(); var field1 = doc.getItemValueString("Field1"); var field2 = doc.getItemValueString("Field2"); // 拼接XML内容(注意转义特殊字符,比如&、<、>等) var xmlContent = '<?xml version="1.0" encoding="UTF-8"?>\n'; xmlContent += '<Root>\n'; xmlContent += ' <Field1>' + field1.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">") + '</Field1>\n'; xmlContent += ' <Field2>' + field2.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">") + '</Field2>\n'; xmlContent += '</Root>'; // 可选操作:将XML保存到文档字段 doc.replaceItemValue("GeneratedXML", xmlContent); doc.save(); // 或直接让浏览器下载XML文件 facesContext.getExternalContext().setResponseContentType("text/xml"); facesContext.getExternalContext().setResponseHeader("Content-Disposition", "attachment; filename=output.xml"); var out = facesContext.getExternalContext().getResponseOutputStream(); out.write(xmlContent.getBytes("UTF-8")); facesContext.responseComplete();
方法2:通过代理实现XML生成
适合逻辑复杂的场景,可选择Java或LotusScript代理:
Java代理示例
import lotus.domino.*; public class GenerateXMLAgent extends AgentBase { public void NotesMain() { try { Session session = getSession(); AgentContext agentContext = session.getAgentContext(); Document doc = agentContext.getDocumentContext(); // 获取字段值 String field1 = doc.getItemValueString("Field1"); String field2 = doc.getItemValueString("Field2"); // 生成XML并转义特殊字符 StringBuilder xmlSb = new StringBuilder(); xmlSb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); xmlSb.append("<Root>\n"); xmlSb.append(" <Field1>").append(escapeXml(field1)).append("</Field1>\n"); xmlSb.append(" <Field2>").append(escapeXml(field2)).append("</Field2>\n"); xmlSb.append("</Root>"); // 保存XML到文档字段 doc.replaceItemValue("GeneratedXML", xmlSb.toString()); doc.save(); } catch(Exception e) { e.printStackTrace(); } } // 自定义XML转义方法 private String escapeXml(String input) { if(input == null) return ""; return input.replace("&", "&") .replace("<", "<") .replace(">", ">") .replace("\"", """) .replace("'", "'"); } }
LotusScript代理示例
Sub Initialize Dim session As New NotesSession Dim doc As NotesDocument Set doc = session.DocumentContext Dim field1 As String, field2 As String field1 = doc.Field1(0) field2 = doc.Field2(0) Dim xmlContent As String xmlContent = "<?xml version=""1.0"" encoding=""UTF-8""?>" & Chr(10) xmlContent = xmlContent & "<Root>" & Chr(10) xmlContent = xmlContent & " <Field1>" & EscapeXML(field1) & "</Field1>" & Chr(10) xmlContent = xmlContent & " <Field2>" & EscapeXML(field2) & "</Field2>" & Chr(10) xmlContent = xmlContent & "</Root>" doc.GeneratedXML = xmlContent doc.Save True, False End Sub ' 自定义XML转义函数 Function EscapeXML(str As String) As String If str = "" Then Exit Function str = Replace(str, "&", "&") str = Replace(str, "<", "<") str = Replace(str, ">", ">") str = Replace(str, """", """) str = Replace(str, "'", "'") EscapeXML = str End Function
二、将代理绑定到XPage按钮
方式1:服务器端脚本直接调用代理
在按钮的onclick服务器端脚本中添加调用代码:
// 获取当前数据库和目标代理 var db = session.getCurrentDatabase(); var agent = db.getAgent("GenerateXMLAgent"); // 替换为你的代理名称 // 传入当前文档执行代理 agent.runWithDocumentContext(currentDocument.getDocument()); // 可选:提示用户操作完成 view.postScript("alert('XML生成完成')");
方式2:使用XPage的Agent控件绑定
- 在XPage中添加
xp:agent控件,配置代理名称和绑定当前文档ID:
<xp:agent id="agentGenerateXML" agentName="GenerateXMLAgent" documentId="#{currentDocument.unid}"></xp:agent>
- 在按钮的
onclick事件中触发代理执行:
getComponent("agentGenerateXML").run();
注意事项
- 代理需开启Web调用权限:在代理属性中勾选"允许在Web浏览器中运行"
- 确保当前用户拥有文档的编辑权限,避免代理执行失败
- 生成XML时必须处理特殊字符,否则会导致XML格式无效
内容的提问来源于stack exchange,提问作者Павел Павлов
相关产品推荐
相关产品推荐

