代码之家  ›  专栏  ›  技术社区  ›  Emil Rasmussen

如何用lotusscript将富文本字段从Notes导出为HTML?

  •  4
  • Emil Rasmussen  · 技术社区  · 16 年前

    我正在处理一个数据迁移任务,在这个任务中,我必须将一个稍微大一些的LotusNotes应用程序导出到一个博客平台中。我的第一个任务是将文章从LotusNotes导出到csv文件中。

    我在lotusscript中创建了一个代理来将数据导出到csv文件中。我使用了这个的修改版本 IBM DeveloperWorks forum post . 基本上就是这样。但是富文本字段的内容将被去除任何格式。这不是我想要的,我想要将富文本字段呈现为HTML。

    这个 documentation for the GetItemValue 方法显式声明将文本呈现为纯文本。所以我开始研究可以检索HTML的东西。我在IBM文章中找到了notesmiementity类和一些示例代码 How To Access HTML in a Rich Text Field Using LotusScript .

    但是,为了使上述文章中描述的技术发挥作用,富文本字段需要具有“将内容存储为HTML和MIME”属性。我的LotusNotes数据库不是这样的。我试着在有问题的土地上设置地产,但没有成功。

    添加内容后,是否可以使用notesmimeentity并设置“将内容存储为HTML和MIME”属性来导出呈现为HTML的字段?

    或者,将Notes数据库富文本字段导出为HTML有哪些选项?

    额外信息:我使用的是IBM Lotus Domino Designer 8.5版

    9 回复  |  直到 9 年前
        1
  •  4
  •   Ken Pespisa    16 年前

    我建议看midas的富文本lsx( http://www.geniisoft.com/showcase.nsf/MidasLSX )

    我没有亲自使用,但我记得多年前它们是使用富文本的最佳选择。我敢打赌它能帮你减轻很多头痛。

    至于notesMinetity类,我不认为有一种方法可以将richtext转换为mime,只将mime转换为richtext(或者将mime保留在文档中,以便通过电子邮件发送)。

        2
  •  8
  •   D.Bugger    14 年前

    有一个相当未知的命令执行您想要的操作:使用命令openfield检索URL。

    仅转换body字段的示例:

    http://SERVER/your%5Fdatabase%5Fpath.nsf/NEW%5FVIEW/docid/Body?OpenField
    
        3
  •  5
  •   Kerr    16 年前

    如果升级到Notes Domino 8.5.1,则可以使用 ConvertToMIME 方法 NotesDocument 班级。见 docs . 这应该是你想要的。

    另外,让Domino服务器呈现richtext的最简单方法是通过URL调用实际检索它。设置一个只包含richtext字段的简单表单,然后使用您最喜欢的HTTP API拉入页面。然后它应该是相当直的向前拉身体。

        4
  •  3
  •   Casper Skovgaard    12 年前

    下面是我如何使用openfield命令完成的,请参阅上面的d.bugger的帖子。

    Function GetHtmlFromField(doc As NotesDocument, fieldname As String) As String
        Dim obj
        Set obj = CreateObject("Microsoft.XMLHTTP")
        obj.open "GET", "http://www.metz.dk/shops/tilbud.nsf/0/" + doc.Universalid + "/" + fieldname + "?openfield&charset=utf-8", False, "", ""
        obj.send("")
    
        Dim html As String
        html = Trim$(obj.responseText)
    
        GetHtmlFromField = html
    End Function
    
        5
  •  2
  •   Carlos    16 年前

    可以使用notesdxlexporter类导出富文本,并使用XSLT将输出转换为所需的内容。

        6
  •  2
  •   Community Mohan Dere    9 年前

    我知道你提到使用LoopScript,但是如果你不介意编写一个小的Java代理(在Notes客户机中),这可以很容易地完成,并且不需要修改现有的表单设计。

    基本思想是让Java代码通过本地主机HTTP请求(Java中简单)打开特定文档,并让代码捕获HTML输出并将其保存回该文档。您基本上允许Domino渲染引擎执行繁重的提升。

    您需要这样做:

    1. 创建一个只包含要转换的格式文本字段,内容类型为HTML的表单
    2. 为所有要转换的文档创建带有选择公式的视图,并使用计算为新表单的表单公式创建视图
    3. 创建只运行视图的Java代理,并为每个文档获取其DOCID,在窗体中打开URL。 http://SERVER/your_database_path.nsf/NEW_VIEW/docid?openDocument ,获取HTTP响应并保存它。

    我在一个类似的帖子里贴了一些示例代码:

    How to convert text and rich text fields in a document to html using lotusscript?

        7
  •  2
  •   Stephen Lawrie - New Zealand    13 年前

    保持简单。

    更改body字段以将内容存储为html和mime

    以编辑模式打开文档。 保存。 关闭。

    现在可以使用notesmimeetity从脚本中获取所需的内容。

        8
  •  0
  •   David K    12 年前

    上面casper的建议很有效,但是要确保acl允许匿名访问,否则您的html将是登录表单中的html。

        9
  •  0
  •   Jason Shuler    9 年前

    如果您不需要从特定项目中获取richtext,您可以使用?opendocument,其中记录(至少)如下: https://www.ibm.com/developerworks/lotus/library/ls-Domino_URL_cheat_sheet/ https://www.ibm.com/support/knowledgecenter/SSVRGU_9.0.1/com.ibm.designer.domino.main.doc/H_ABOUT_URL_COMMANDS_FOR_OPENING_DOCUMENTS_BY_KEY.html

    OpenDocument还允许您扩展部分(我不确定OpenField是否扩展)

    语法是: http://Host/Database/View/DocumentUniversalID?OpenDocument

    但是一定要包括charset参数-如果不指定utf-8作为字符集,日语文档是不可读的。

    下面是我使用的方法,它获取一个notesdocument并将文档的HTML作为字符串返回。

        private string ConvertDocumentToHml(Domino.NotesDocument doc, string sectionList = null)
        {
            var server = doc.ParentDatabase.Server.Split('/')[0];
            var dbPath = doc.ParentDatabase.FilePath;
            string viewName = "0";
            string documentId = doc.UniversalID.ToUpper();
    
            var ub = new UriBuilder();
            ub.Host = server;
            ub.Path = dbPath.Replace("\\", "/") + "/" + viewName + "/" + documentId;
    
            if (string.IsNullOrEmpty(sectionList))
            {
                ub.Query = "OpenDocument&charset=utf-8";
            }
            else
            {
                ub.Query = "OpenDocument&charset=utf-8&ExpandSection=" + sectionList;
            }
    
            var url = ub.ToString();
    
            var req = HttpWebRequest.CreateHttp(url);
            try
            {
                var resp = req.GetResponse();
                string respText = null;
    
                using (var sr = new StreamReader(resp.GetResponseStream()))
                {
                    respText = sr.ReadToEnd();
                }
                return respText;
            }
            catch (WebException ex)
            {
                return "";
            }
        }
    
    推荐文章