2014-06-10 3 views
1

이전 Notes 클라이언트 애플리케이션이 있습니다. 양식에는 첨부 파일을 보유하는 두 개의 서식있는 텍스트 필드가 있습니다. JPG의, PDF의, 뭐든간에. 이 문서에는 고유 한 키와 다른 메타 데이터도 들어 있습니다.XPage에서 RichText를 RichText로 마이그레이션 할 수 없습니다.

내가하고 싶은 일은 문서의 여러 첨부 파일을 각 첨부 파일의 새 문서로 마이그레이션하는 것입니다. 나는 임베디드 객체로 많은 일을 해본 적이 없으며 MIME을 사용하면 훨씬 적다.

현재 XPages Java에서 작업하고 있지만 필요한 경우 LotusScript로 이동할 수 있습니다.

것은 나는이 조각 작업을했다 :

List<EmbeddedObject> docPicture = this.getFileAttachments(doc, "picture"); 
List<EmbeddedObject> docPDF = this.getFileAttachments(doc, "pdf"); 

for (EmbeddedObject eoPic : docPicture) { 
picCount++; 
Document newDoc = currentDatabase.createDocument(); 
newDoc.replaceItemValue("form", "fm_file"); 
newDoc.replaceItemValue("uploadToken", doc.getItemValueString("barCodeHuman")); 
newDoc.replaceItemValue("fileName", eoPic.getName()); 
newDoc.replaceItemValue("size", eoPic.getFileSize()); 
fileName = eoPic.getName(); 
fileType = fileName.substring(fileName.length() - 3); 

newDoc.replaceItemValue("type", this.getMIMEType(fileType)); 


// Extract Attachment and Add To Attachment Document 
InputStream attachInputStream = eoPic.getInputStream(); 
Stream attachStream = session.createStream(); 
attachStream.setContents(attachInputStream); 

MIMEEntity attachField = newDoc.createMIMEEntity("attachment"); 
MIMEHeader attachHeader = attachField.createHeader("content-disposition"); 
attachHeader.setHeaderVal("attachment;filename=\"" + eoPic.getName() + "\""); 
attachField.setContentFromBytes(attachStream, this.getMIMEType(fileType), MIMEEntity.ENC_IDENTITY_BINARY); 
  • 주 내가 OpenNTF API를 사용하고 있지만, 필요하다면 연꽃 객체로 돌아갈 수 있습니다.

어쨌든 - 거의 효과가 있습니다. 내 문서가 있습니다 - 첨부 파일 당 1 개. 그러나 문서에있는 "첨부 파일"필드에 들어가면 RichTextField가 아니며 MIME 형식입니다. 그것은 아마 내 프로젝트의 다음 단계에서 나를 일으키는 것입니다. RichTextDocuments는 잘 작동하지만 MIME은 작동하지 않습니다.

이것은 1 회 마이그레이션이 필요하므로 RichTextFields로 끝날 수있는 방법에 대한 의견을 보내 주시면 감사하겠습니다. 감사!!

+0

음, RTF 항목에 첨부 된 파일 다운로드 컨트롤을 사용하고 RTF 항목을 Xpage의 편집기로 표시한다고 생각한 적이 있습니까? 주의 사항 : Xpage를 통해 업데이트 된/새로 생성 된 모든 데이터는 MIME 형식으로 저장되므로 양식과 함께 Notes 클라이언트를 사용할 때 이전 버전과의 호환성이 없을 수 있습니다. 양식에서 RTF의 속성을 변경하여 MIME 형식으로 데이터를 저장하고 모든 문서를 클라이언트에 다시 저장하여 RTF로 변환 할 수도 있습니다. 우아하지는 않지만 작동합니다. 고유 한 문서에 각 첨부 파일을 추출하는 것에 대한 대답은 아니라는 것을 알고 있습니다 만,이 방법이 훨씬 쉽습니다. –

답변

0

mime 엔티티를 전혀 포함하지 않으려 고합니다. Oliver가 말한 것처럼 양식의 대상 richText 필드에 'mime as as store mime'이 선택되어 있지 않은지 확인하십시오. richtext 라이트 필드를 사용하여 첨부 파일을 제한 할 수도 있습니다.

doc에서 doc로 첨부 파일을 직접 이동하려는 경우 MIMEEntity 메서드 setContentsFromStream을 사용하고있을 것 같습니까? 리치 텍스트 내장 객체 (mime 엔티티 관여 없음) 만 사용하여 이동하려는 경우 먼저 .extractFile을 사용하여 파일 시스템에 embeddedObject를 추출해야합니다. 그런 다음 새로운 doc에 작성한 RichTextItem (mime 엔티티 생성 대신)을 사용하여 rti.embedObject를 사용하여 추출한 파일을 첨부 할 수 있습니다. (마이그레이션 성공 후 임시 추출 파일을 삭제하는 것이 가장 좋음) 첨부 파일 포함에 필요한 매개 변수 예제에 대한 디자이너 도움말을 참조하십시오.

파일 시스템으로 파일을 추출 할 때 JVM의 임시 디렉토리에 압축을 풀 수있는 경우 파일 시스템의 파일은 새 문서에 첨부 할 때 필요로하는 동일한 파일 이름을 가져야합니다. 임시 파일 이름에 임의의 문자가 있으므로 File.createTemporaryFile()을 사용할 수 없습니다. 대신 당신은 당신이

System.getProperty("java.io.tmpdir")` 

하고 추출 파일 경로에서 사용 그것과 임시 디렉토리를 얻을 수 있습니다 .

처리를 시작하기 전에 확인해야 할 사항은 현재 notesSession의 isConvertMIME 설정입니다. 소스 필드가 mime 인 경우 session.isConvertMIME == true는 문서를로드 할 때 필드를 richText로 변환합니다. xpages에서 기본적으로 false라고 생각합니다. 원본 첨부 파일이 이미 richText라고 생각하기 때문에 영향을 미치지 않을 것이라고 생각합니다. 그러나 이것을 읽고 mime 소스 필드를 사용하면주의해야합니다. 또한 setConvertMIME을 사용하여이 값을 변경하는 경우 처리를 완료했을 때의 값으로 다시 변경해야합니다.