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("&lt;LWST&gt;");
    //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("&lt;/LWST&gt;");
    //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 предлагает все, что вам нужно.

Другие вопросы по тегам