我有一个带有富文本字段的备注表单,称为“正文”。我已将字段的“存储”属性设置为“将内容存储为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, "<part2>", 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, "<part2>", 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();
答案 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);