NotesRichTextItem.getMIMEEntity() 总是 returns 空

NotesRichTextItem.getMIMEEntity() always returns null

我有一个带有富文本字段的注释表单,名为 "Body"。我已经将字段的 "Storage" 属性 设置为 "Store contents as HTML and MIME".

现在,我正在 Notes 客户端中使用该表单创建一个新文档。

但是,如果我尝试使用 NotesRichTextItem.getMIMEEntity() 访问 SSJS 中富文本字段的值,它总是 returns null。

我是不是漏掉了什么?

提前感谢您的帮助。

更新 2:2015 年 2 月 12 日

我做了更多测试,找到了原因,为什么它不能将富文本字段识别为 MIME 类型,而是总是 returns 将其识别为富文本:

原因是我使用 "sessionAsSigner" 访问数据库,而不是仅使用 "database"。

如果我删除 "sessionAsSigner" 并改用 "database",使 XPage 对 public 访问用户不可用,因此,我被迫登录,代码将其识别为 MIME键入,我可以获得 NotesMIMEEntity 的句柄。

不幸的是,XPage 必须可供 public 访问用户使用,我必须使用 sessionAsSigner。

当我打开文档属性并查看富文本字段时,我可以看到 "Field Flags" 是 "SIGN SEAL"。我的猜测是,这就是 sessionAsSigner 不起作用的原因,但这只是一个猜测。

有什么想法吗?

更新 1:2015 年 2 月 12 日

这是我在 SSJS 中使用的代码:

var oDBCurrent:NotesDatabase = sessionAsSigner.getDatabase(session.getServerName(), session.getCurrentDatabase().getFilePath());
var oVWMailProfiles:NotesView = oDBCurrent.getView('$vwSYSLookupEmailProfiles');
var oVWPWResetRecipient:NotesView = oDBCurrent.getView('$vwPWPMLookupPWResetNotificationProfiles');
var oDocPWResetRecipient:NotesDocument = null;
var oDocMailProfile:NotesDocument = null;
var oDocMail:NotesDocument = null;

var sServer = session.getServerName();

oDocPWResetRecipient = oVWPWResetRecipient.getDocumentByKey(sServer, true);
oDocMailProfile = oVWMailProfiles.getDocumentByKey('.MailTemplate', true);
oDocMail = oDBCurrent.createDocument();

//Set default fields
oDocMail.replaceItemValue('Form', 'Memo');
oDocMail.replaceItemValue('Subject', oDocMailProfile.getItemValueString('iTxtSubject'));
oDocMail.replaceItemValue('SendTo', oDocPWResetRecipient.getItemValue('iNmesRecipients'))

//Get body text
var oItem:NotesItem = oDocMailProfile.getFirstItem("Body");
var entity:NotesMIMEEntity = oItem.getMIMEEntity();

//Create email body
var tmp = entity.getContentAsText();

//Replace <part2> with part 2 of the password
tmp = @ReplaceSubstring(tmp, "&lt;part2&gt;", sPWPart2);

//Set content of Body field as MIME type                                            
var body = oDocMail.createMIMEEntity();
var stream = session.createStream();                                
stream.writeText(tmp);
body.setContentFromText(stream, "text/html; charset=iso-8859-1", 0);        

//Send email
oDocMail.send();

正如我之前提到的,我也尝试过:

var oDBCurrent:NotesDatabase = sessionAsSigner.getDatabase(session.getServerName(), session.getCurrentDatabase().getFilePath());
var oVWMailProfiles:NotesView = oDBCurrent.getView('$vwSYSLookupEmailProfiles');
var oVWPWResetRecipient:NotesView = oDBCurrent.getView('$vwPWPMLookupPWResetNotificationProfiles');
var oDocPWResetRecipient:NotesDocument = null;
var oDocMailProfile:NotesDocument = null;
var oDocMail:NotesDocument = null;

var sServer = session.getServerName();

oDocPWResetRecipient = oVWPWResetRecipient.getDocumentByKey(sServer, true);
oDocMailProfile = oVWMailProfiles.getDocumentByKey('.MailTemplate', true);
oDocMail = oDBCurrent.createDocument();


//Set default fields
oDocMail.replaceItemValue('Form', 'Memo');
oDocMail.replaceItemValue('Subject', oDocMailProfile.getItemValueString('iTxtSubject'));
oDocMail.replaceItemValue('SendTo', oDocPWResetRecipient.getItemValue('iNmesRecipients'))

//Get body text
var entity:NotesMIMEEntity = oDocMailProfile.getMIMEEntity('Body');

//Create email body
var tmp = entity.getContentAsText();

//Replace <part2> with part 2 of the password
tmp = @ReplaceSubstring(tmp, "&lt;part2&gt;", sPWPart2);

//Set content of Body field as MIME type                                            
var body = oDocMail.createMIMEEntity();
var stream = session.createStream();                                
stream.writeText(tmp);
body.setContentFromText(stream, "text/html; charset=iso-8859-1", 0);        

//Send email
oDocMail.send();

您从文档中获取 MIMEEntity,而不是从 Richtext 项目中获取。请在此处查看示例(从第 103 行开始):https://github.com/zeromancer1972/OSnippets/blob/master/CustomControls/ccSnippets.xsp

您应该将会话设置为不将 MIME 转换为 RichText。 将此添加到代码的开头。

session.setConvertMime(false);

尝试调用 sessionAsSigner.setConvertMime(false)