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, "<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();
您从文档中获取 MIMEEntity,而不是从 Richtext 项目中获取。请在此处查看示例(从第 103 行开始):https://github.com/zeromancer1972/OSnippets/blob/master/CustomControls/ccSnippets.xsp
您应该将会话设置为不将 MIME 转换为 RichText。
将此添加到代码的开头。
session.setConvertMime(false);
尝试调用 sessionAsSigner.setConvertMime(false)
我有一个带有富文本字段的注释表单,名为 "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, "<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();
您从文档中获取 MIMEEntity,而不是从 Richtext 项目中获取。请在此处查看示例(从第 103 行开始):https://github.com/zeromancer1972/OSnippets/blob/master/CustomControls/ccSnippets.xsp
您应该将会话设置为不将 MIME 转换为 RichText。 将此添加到代码的开头。
session.setConvertMime(false);
尝试调用 sessionAsSigner.setConvertMime(false)