4

我正在处理数据迁移任务,我必须将一个较大的 Lotus Notes 应用程序导出到博客平台。我的第一个任务是将 Lotus Notes 中的文章导出为 CSV 文件。

我在 LotusScript 中创建了一个代理来将数据导出到 CSV 文件中。我使用这个IBM DeveloperWorks 论坛帖子的修改版本。它基本上完成了这项工作。但是 Rich Text 字段的内容没有任何格式。这不是我想要的,我希望富文本字段呈现为 HTML。

GetItemValue方法的文档明确指出将文本呈现为纯文本。所以我开始研究可以检索 HTML 的东西。我在 IBM 文章How To Access HTML in a Rich Text Field Using LotusScript 中找到了 NotesMIMEEntity 类和一些示例代码。

但要使上述文章中描述的技术起作用,富文本字段需要具有“将内容存储为 HTML 和 MIME”属性。我的 Lotus Notes 数据库并非如此。我试图在相关字段上设置属性,但没有成功。

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

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

奖励信息:我正在使用 IBM Lotus Domino Designer 8.5 版

4

10 回答 10

10

有一个相当未知的命令完全符合您的要求:使用命令 OpenField 检索 URL。

仅转换正文字段的示例:

http://SERVER/your%5Fdatabase%5Fpath.nsf/NEW%5FVIEW/docid/Body?OpenField
于 2012-08-11T09:58:28.183 回答
6

这是我使用 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.mydomain.dk/database.nsf/0/" + doc.Universalid + "/" + fieldname + "?openfield&charset=utf-8", False, "", ""
    obj.send("")

    Dim html As String
    html = Trim$(obj.responseText)

    GetHtmlFromField = html
End Function
于 2014-01-10T14:44:48.550 回答
5

我建议看看 Midas 的 Rich Text LSX ( http://www.geniisoft.com/showcase.nsf/MidasLSX )

我没有亲自使用过,但我记得几年前它们是使用富文本的最佳选择。我敢打赌,它可以为您省去很多麻烦。

至于 NotesMIMEEntity 类,我不相信有办法将 RichText 转换为 MIME,只有 MIME 到 RichText(或将 MIME 保留在文档中以用于发送电子邮件)。

于 2009-12-10T17:06:58.170 回答
5

如果您升级到 Notes Domino 8.5.1,那么您可以使用该类的新ConvertToMIME方法NotesDocument。请参阅文档。这应该做你想要的。

或者,让 Domino 服务器呈现 RichText 的最简单方法是通过 url 调用实际检索它。设置一个只有 RichText 字段的简单表单,然后使用您喜欢的 HTTP api 拉入页面。然后应该非常直接地拉出身体。

于 2009-12-11T14:13:45.523 回答
3

把事情简单化。

将 BODY 字段更改为将内容存储为 HTML 和 MIME

在编辑模式下打开文档。节省。关闭。

您现在可以使用 NotesMIMEEntity 从脚本中获取您需要的内容。

于 2012-11-14T21:57:10.810 回答
2

您可以使用 NotesDXLExporter 类导出富文本并使用 XSLT 将输出转换为您需要的内容。

于 2009-12-10T16:13:32.463 回答
2

我知道您提到过使用 LotusScript,但是如果您不介意编写一个小型 Java 代理(在 Notes 客户端中),这可以相当容易地完成 - 并且无需修改现有的表单设计。

基本思想是让您的 Java 代码通过 localhost http 请求(这在 Java 中很简单)打开特定文档,并让您的代码捕获该 html 输出并将其保存回该文档。您基本上允许 Domino 渲染引擎完成繁重的工作。

你会想要这样做:

  1. 创建一个仅包含要转换的富文本字段且内容类型为 HTML 的表单
  2. 使用要转换的所有文档的选择公式创建视图,并使用计算新表单的表单公式
  3. 创建一个 Java 代理,它只是浏览您的视图,并为每个文档获取其 docid,以http://SERVER/your_database_path.nsf/NEW_VIEW/docid?openDocument的形式打开一个 URL,获取http 响应并保存它。

我在这里的类似 SO 帖子中放了一些示例代码:

如何使用 lotusscript 将文档中的文本和富文本字段转换为 html?

于 2009-12-12T23:45:14.137 回答
1

在 Domino 10 中工作(尚未在 9 中测试)

HTMLStrings$ = NotesRichTextItem .Converttohtml([options] ) As String

请参阅文档:

https://help.hcltechsw.com/dom_designer/10.0.1/basic/H_CONVERTOHTML_METHOD_NOTESRICHTEXTITEM.html

更新(2022)

自版本 11 起,HCL 不再支持此方法。文档不包含有关该方法的任何信息。我做了一些测试,它在 v12 中仍然有效,但 HCL 建议不要使用它。

于 2020-03-04T14:20:07.337 回答
0

Casper 的上述建议效果很好,但请确保 ACL 允许匿名访问,否则您的 HTML 将是登录表单中的 HTML

于 2014-07-31T15:11:44.363 回答
0

如果您不需要专门从项目中获取 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 作为 charset,日文文档将无法读取。

这是我使用的方法,它采用 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 "";
        }
    }
于 2016-11-03T12:58:45.377 回答