NotesRichTextItem.getMIMEEntity()始终返回null

时间:2015-02-11 23:18:20

标签: xpages xpages-ssjs richtext

我有一个带有富文本字段的备注表单,称为“正文”。我已将字段的“存储”属性设置为“将内容存储为HTML和MIME”。

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

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

我错过了什么吗?

提前感谢您的帮助。

更新2:2015年12月2日

我做了一些测试,我找到了原因,为什么它不会将富文本字段识别为MIME类型,而是始终将其作为RICH TEXT返回:

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

如果我删除“sessionAsSigner”并改为使用“数据库”,使XPage对公共访问用户不可用,那么,我被迫登录,代码将其识别为MIME类型,我可以获得NotesMIMEEntity的句柄。

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

当我打开文档属性并查看富文本字段时,我可以看到“Field Flags”是“SIGN SEAL”。我的猜测是,这就是为什么sessionAsSigner无法正常工作,但这只是猜测。

有什么想法吗?

更新1:2015年12月2日

以下是我在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();

3 个答案:

答案 0 :(得分:3)

尝试调用sessionAsSigner.setConvertMime(false)

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

session.setConvertMime(false);