Это можно сделать, сначала удалив все вложения (используйте функцию removeAllAttachments из объекта NotesXSPDocument), а затем прикрепите загруженный файл вручную к элементу richtext.
Этот код SSJS должен быть добавлен к beforeRenderResponse-событию вашего XPage / Custom Control:
var con = facesContext.getExternalContext();
var request:com.sun.faces.context.MyHttpServletRequestWrapper = con.getRequest();
var map:java.util.Map = request.getParameterMap();
var fileDataName = getClientId('fileUpload1') ;
var fileData:com.ibm.xsp.http.UploadedFile = map.get( fileDataName );
if( fileData == null ){
return;
}
var tempFile:java.io.File = fileData.getServerFile();
var correctedFile = new java.io.File( tempFile.getParentFile().getAbsolutePath() +
java.io.File.separator + fileData.getClientFileName() );
var success = tempFile.renameTo(correctedFile);
try{
document1.removeAllAttachments("Body");
}catch(e){}
var rtFiles:NotesRichTextItem = null;
if(!(document1.getDocument().hasItem("Body"))){
rtFiles = document1.getDocument().createRichTextItem("Body")
}else{
rtFiles = document1.getDocument().getFirstItem("Body");
}
rtFiles.embedObject(lotus.domino.local.EmbeddedObject.EMBED_ATTACHMENT, "",
correctedFile.getAbsolutePath(), null);
correctedFile.renameTo(tempFile);
document1.save();
Элемент richtext, в котором хранятся файлы, - это «Тело», имя источника данных - «document1». Элемент управления Fileupload - «fileUpload1».
Есть два ограничения:
- Вы не можете использовать это с кнопкой сохранения, вы должны использовать обычную кнопку / ссылку, которая выполняет полное обновление (смотрите, что Serdar Basegmez написал выше)
- Вы должны обновить страницу после загрузки еще раз, в противном случае вы не увидите загруженный файл в контроле загрузки файлов (возможно, будет работать частичное обновление этого элемента управления).
EDIT:
Извините, я виноват: вы можете использовать этот код выше в кнопке отправки, которая сохраняет документ. Тогда вам не нужно обновлять страницу вручную!