xPages - как добавить и добавить текст в поле richtext
Я перевожу приложение на xpages. У меня есть документ, созданный из электронного письма, полученного приложением. Поле richtext в созданном документе содержит тело письма. Кто-то отвечает отправителю, обновляя это поле и нажимая кнопку Отправить. Прежде, чем это действительно выходит, я добавляю немного текста к отправляемому контенту. Я пробовал много способов сделать это, но тупик.
Я знаю, что.getItemValue возвращает вектор, но я все равно решил попробовать, но возвращает ноль.
var rtiIssueField = maildoc.createRichTextItem("body");
rtiIssueField.appendText("**IMPORTANT:blah **");
rtiIssueField.appendText("\n<LWST>");
rtiIssueField.appendText("\n"+stEntryDoc.getItemValue("Issue"));
rtiIssueField.appendText("\n</LWST>")
Есть намеки? спасибо, клем
4 ответа
Большое спасибо за вклад. Я почти у цели. Просто пара вещей, которые нужно почистить. Но с твоими намеками я смог сделать то, что мне было нужно. Я просто решил поблагодарить вас и опубликовать код, который придумал, на случай, если кому-то еще это понадобится.
var stream:NotesStream = session.createStream();
//Grab the contents of the rt field on the web that has just been edited:
var issueRT:NotesRichTextItem = getComponent("issue1").getValue();
//Prefix some additional information for the customer.
stream.writeText("**IMPORTANT: When responding, please do not include the history. That is, remove this line and everything below it. **");
//carriage return:
stream.writeText("<p>");
//Prefix a tag that will be used to strip off text if they respond WITH email history.
stream.writeText("<LWST>");
//carriage return:
stream.writeText("<p>");
//Prefix the
//Prefix a view scoped variable that contains things like date, responder, etc.
stream.writeText(viewScope.ResponseHeader);
//Add the contents of the rt field.
stream.writeText( issueRT.getText() );
//carriage return:
stream.writeText("<p>");
//Add the end tag.
stream.writeText("</LWST>");
//Create the email body field.
var emailBody:NotesMIMEEntity = maildoc.createMIMEEntity("body");
emailBody.setContentFromText(stream,"text/html;charset=UTF-8", 1725);
stream.close();
Говорите за мной: "В Интернете нет RichText, это прошлое Призрака Рождества, есть только MIME":-) stw
Установите для настроек почтового ящика (в names.nsf) значение "Предпочитает Mime", а для поля "Тело" - "Сохранить как MIME". Это избавит вас от головной боли при постоянном преобразовании (с возможными потерями формата) из / в MIME/RichtText. Затем вы можете либо перехватить поле ckedit при отправке, либо использовать doc.getMimeEntity, чтобы получить поле body. .getMimeEntity в справке содержит пример кода, который вы ищете
Я создал XPages-версию 10 старого приложения, которое добавляет richtext (введено) в существующее поле. Этот код звучит так, как будто он может помочь вам:
var moveAddBody = function(doc:NotesDocument){
var addRt:NotesMIMEEntity = doc.getMIMEEntity("addBody");
var attFiles:NotesRichTextItem = doc.getFirstItem("attachedFiles");
if(addRt == null && attFiles == null) return;
if(attFiles != null) {
// println("attFiles: " + attFiles.getText() + ", length=" + attFiles.getValueLength());
}
// if(addRt != null && @Length(addRt.getContentAsText().trim()) <= 28) return; // The standard tags in an empty field fills 28 chars
// Something to move...
var tmpDoc:NotesDocument = doc.getParentDatabase().createDocument(); // Never saved - just left in the wind...
var mime:NotesMIMEEntity = tmpDoc.createMIMEEntity("myBody");
var stream:NotesStream = session.createStream();
var formatter = java.text.SimpleDateFormat('yyyy-MM-dd HH:mm');
var time = formatter.format(@Now());
var logLine:String = '<font size="2" color="#008080" face="sans-serif"><b>' + time + " - " + @Name("[Abbreviate]",@UserName()) + '</b></font>';
stream.writeText(logLine);
if(addRt != null && @Length(addRt.getContentAsText().trim()) > 28) {
stream.writeText('<font size="2" face="sans-serif">'); // Enforce "simiilar" font type/size...
stream.writeText(addRt.getContentAsText());
stream.writeText('</font>');
}
mime.setContentFromText(stream, "text/html", NotesMIMEEntity.ENC_NONE);
var prevMime = session.isConvertMime();
session.setConvertMime(true);
tmpDoc.closeMIMEEntities(true,"myBody");
var rt:NotesRichTextItem = doc.getFirstItem("Body");
var body = null;
if (rt != null) {
body = rt.copyItemToDocument(tmpDoc,"Body");
rt.remove();
}
rt = doc.createRichTextItem("Body");
var rtMime:NotesRichTextItem = tmpDoc.getFirstItem("myBody");
rt.appendRTItem(rtMime);
if(attFiles != null) {
if(addRt == null) rt.addNewLine(1);
rt.appendRTItem(attFiles);
attFiles.remove();
}
if(body != null) {
rt.addNewLine(2);
rt.appendRTItem(body);
}
if(addRt != null) {
addRt.remove();
addRt.recycle();
}
session.setConvertMime(prevMime);
return true;
}
Вам нужно будет удалить часть приведенного выше кода, поскольку он также добавляет дату / время с некоторым форматированием (в соответствии с версией Notes, прежде чем кто-то шепчет "css...";-)). Это также обрабатывает Attachemnts.
Надеюсь, ты сможешь использовать его для решения своей проблемы?
/ John
Если вы хотите создавать письма из своего приложения, взгляните на этот фрагмент XPages из OpenNTF: http://openntf.org/XSnippets.nsf/snippet.xsp?id=emailbean-send-dominodocument-html-emails-cw-embedded-images-attachments-custom-headerfooter предлагает все, что вам нужно.