我正在进行数据迁移任务,我必须将一个稍大的Lotus Notes应用程序导出到博客平台。我的第一个任务是将Lotus Notes中的文章导出为CSV文件。
我在LotusScript中创建了一个代理,用于将数据导出为CSV文件。我使用此IBM DeveloperWorks forum post的修改版本。它基本上完成了这项工作。但Rich Text字段的内容将被删除任何格式。这不是我想要的,我希望Rich Text字段呈现为HTML。
documentation for the GetItemValue方法明确指出文本呈现为纯文本。所以我开始研究能够检索HTML的东西。我在IBM文章How To Access HTML in a Rich Text Field Using LotusScript中找到了NotesMIMEEntity类和一些示例代码。
但是,对于上述文章中描述的技术,Rich Text字段需要具有“将内容存储为HTML和MIME”属性。我的Lotus Notes数据库不是这种情况。我试图在有问题的字段上设置属性,但它没有做到这一点。
是否可以在添加内容后使用NotesMIMEEntity并将“将内容存储为HTML和MIME”属性,以导出呈现为HTML的字段?
或者我将Notes数据库Rich Text字段导出为HTML的选项是什么?
奖励信息:我使用的是IBM Lotus Domino Designer 8.5版
答案 0 :(得分:8)
这个相当未知的命令可以完全按照您的意愿执行:使用命令OpenField检索URL。
仅转换Body-field的示例:
http://SERVER/your%5Fdatabase%5Fpath.nsf/NEW%5FVIEW/docid/Body?OpenField
答案 1 :(得分:5)
如果升级到Notes Domino 8.5.1,则可以使用ConvertToMIME
类的新NotesDocument
方法。请参阅docs。这应该做你想要的。
另外,让Domino服务器呈现RichText的最简单方法是通过url调用实际检索它。设置一个只有RichText字段的简单表单,然后使用您喜欢的HTTP API来拉入页面。那么拔出身体应该是非常直接的。
答案 2 :(得分:4)
我建议查看Midas的Rich Text LSX(http://www.geniisoft.com/showcase.nsf/MidasLSX)
我没有亲自使用,但我记得他们多年前是使用Rich Text的最佳选择。我敢打赌,它可以为你节省很多麻烦。
对于NotesMIMEEntity类,我不相信有一种方法可以将RichText转换为MIME,只将MIME转换为RichText(或者在文档中保留MIME以用于电子邮件目的)。
答案 3 :(得分:4)
我是这样做的,使用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
答案 4 :(得分:2)
您可以使用NotesDXLExporter类导出Rich Text并使用XSLT将输出转换为您需要的输出。
答案 5 :(得分:2)
我知道你提到过使用LotusScript,但是如果你不介意编写一个小的Java代理(在Notes客户端中),这可以很容易地完成 - 而且不需要修改现有的表单设计。
基本思想是让您的Java代码通过localhost http请求(在Java中很简单)打开特定文档,并让您的代码捕获该html输出并将其保存回该文档。你基本上允许Domino渲染引擎完成繁重的工作。
你想要这样做:
我在这里的类似SO帖子中提供了一些示例代码:
How to convert text and rich text fields in a document to html using lotusscript?
答案 6 :(得分:2)
保持简单。
将BODY字段更改为将内容存储为HTML和MIME
在editmode中打开doc。 保存。 关闭。
您现在可以使用NotesMIMEEntity从脚本中获取所需内容。
答案 7 :(得分: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
答案 8 :(得分:0)
Casper上面的建议很有效,但请确保ACL允许匿名访问,否则您的HTML将是登录表单中的HTML
答案 9 :(得分: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作为字符集,则日文文档是不可读的。
这是我使用的方法,它接受NotesDocument并以字符串形式返回doc的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 "";
}
}