2012-03-29 3 views
0

간단한 양식과 본문 필드가 있습니다. 사용자가 첨부 파일을 업로드 할 때 이미 문서의 본문 필드에있는 첨부 파일을 제거하려고합니다. 내 저장 버튼에서 어떻게하면됩니까?새 첨부 파일을 업로드 할 때 첨부 파일 바꾸기

난 항상에 파일 업로드 제어에 property는 설정 그쪽으로 같은 이름의 파일 이름을 변경 시도했지만이 파일을 대체하지 않습니다, 대신 새 파일을 추가하고

<xp:fileUpload id="fileUpload1" value="#{userdoc.Body}" filename="profile"  seUploadname="false"></xp:fileUpload> 
에 새 일련 번호를 추가

저장하기 전에 body 필드의 모든 포함 된 첨부 파일을 루프하려고 시도했지만 모든 첨부 파일은 제거되지만 새 첨부 파일은 추가되지 않습니다.

+0

: 당신은 저장 버튼이 SSJS 코드를 추가 할 수있는 문서에 이미 파일 제거하려면 ("파일"을 가정하는 것은하여 서식있는 텍스트 항목 채의 이름 파일입니다) 그 단계에서 새 파일을 첨부했기 때문에 작동합니다. 그래서 내가 추측 한 마지막 첨부 파일도 삭제합니다 (삭제하기 전에 첨부 파일 이름을 테스트 해 볼 수 있습니다). –

답변

3

모든 첨부 파일을 먼저 제거한 다음 (NotesXSPDocument 개체에서 removeAllAttachments 함수를 사용하여) 업로드 된 파일을 richtext 항목에 수동으로 첨부하여이 작업을 수행 할 수 있습니다.

이 SSJS의 코드가 XPage의 beforeRenderResponse 이벤트에 추가 할 수있다

/사용자 지정 컨트롤 : 파일이 저장되어있는

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(); 

서식있는 텍스트 항목이 "몸"입니다, 데이터 소스의 이름은 "문서 1입니다 ". FileUpload 컨트롤은 "fileUpload1"입니다.

는 두 가지 제한이 있습니다

    당신은 저장 버튼이 사용할 수 없습니다
  1. , 당신은
  2. (세르 다르 Basegmez 위에 쓴 참조) 완전 새로 고침을 만드는 일반 버튼/링크를 사용할 필요가 당신 다시 업로드 한 후에 페이지를 새로 고쳐야합니다. 그렇지 않으면 파일 다운로드 콘트롤에서 업로드 된 파일을 볼 수 없습니다 (아마도이 ​​컨트롤의 부분 새로 고침이 작동 할 수 있습니다).

편집 :

죄송합니다, 내 잘못 : 문서를 저장하는 제출 버튼이 코드 위의 당신은 사용. 그렇다면 페이지를 수동으로 새로 고치지 마십시오! 누군가가 내가 Google을 통해했던 것처럼 여기 도착 조금 늦었지만 경우

+0

좋은. 그것을 시도 할 것인가 –

+0

그것이 효과가 있었느냐? 또는 아닙니다? –

7

...

다른 옵션도있다하십시오 NotesXSPDocument.getAttachmentList ("rtitem")는 문서의 첨부 파일의 목록을 반환합니다. 각 항목의 유형은 DominoDocument.AttachmentValueHolder이며 파일이 이미 문서에 있거나 추가 된 경우 반환되는 getState() 속성이 있습니다. 저장하지 않는 전에 첨부 파일을 삭제

var attList = docFile.getAttachmentList("files"); 

for(var i=0; i<attList.size(); i++) { 
    var att = attList.get(i); 

    if (att.getState()==0) {  //STATE_INDOCUMENT: this is the 'old' file: remove it 
    docFile.removeAttachment("files", att.getName()); 
    } else if (att.getState()==1) {  //STATE_ADDED: this is the new file 
      //leave it   
    } 
} 
+1

좋은 thx, 매우 유용한 .. 이것은 'xp : fileUpload'의 onChange 이벤트에서도 작동합니다. –