You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;") + '</Field1>\n';
xmlContent += '  <Field2>' + field2.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;") + '</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("&", "&amp;")
                    .replace("<", "&lt;")
                    .replace(">", "&gt;")
                    .replace("\"", "&quot;")
                    .replace("'", "&apos;");
    }
}

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, "&", "&amp;")
    str = Replace(str, "<", "&lt;")
    str = Replace(str, ">", "&gt;")
    str = Replace(str, """", "&quot;")
    str = Replace(str, "'", "&apos;")
    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,提问作者Павел Павлов

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 15:38:11