понедельник, 28 июля 2014 г.

Выгрузка вложений из документов на диск посредством java кода

Файлы хранятся как вложения. Достать без клиента Notes можно:
1) HTTP (если поднят web сервер и разрешен доступ через web к базе а по дефолту так и есть). Нужно знать а) UNID документа б) имя вложения.
тогда URL такой http(s)://yourServer/path/to/database.nsf/0/<UNID>/$FILE/<nameOfAttachmentFile>
минусы - надо знать UNIDы документов и наименования файлов вложений. Есть правда еще варианты сделать собственные представлния с еменами вложений и отдачей этих вьюх в виде JSON или XML, но если с лотусом туго, то они не стоят упоминания.

2) Java + DIIOP (CORBA в Lotus так называется)
для этого нужно
а) поднять на сервере DIIOP (load diiop на консоли сервера, по умолчанию не поднят)
б) взять ncso.jar из клиента или сервера (%PathToNotes%/data/domino/java/ncso.jar например)
ц) запустить что-то типа этого (модифицированный пример из хелпы):

import lotus.notes.*; //для этого нужен ncso.jar
import java.util.Vector;
import java.util.Enumeration;

public class SuperFileExtractor {
  public void static void main(String argv[]) {
    try {
      Session session = NotesFactory.createSession("serverName","userName","password");
   
      Database db = session.getDatabase("serverName","Path/to/yourDatabase.nsf");
      DocumentCollection dc = db.getAllDocuments();
      Document doc = dc.getFirstDocument();
   
      while (doc != null) {
   // вариант 1 - выбрать все вложения из RTF поля BODY (может и по другому называться)
        RichTextItem body = (RichTextItem)doc.getFirstItem("Body");
        Vector v = body.getEmbeddedObjects();
        Enumeration e = v.elements();
        while (e.hasMoreElements()) {
          EmbeddedObject eo = (EmbeddedObject)e.nextElement();
          if (eo.getType() == EmbeddedObject.EMBED_ATTACHMENT) {
            eo.extractFile("path/To/Extaction/Dir/" + eo.getSource());
 }
        }
//END OF вариант 1

//вариант 2 - выбрать вложение по имени (Аttachment.doc например)
EmbeddedObject eo = doc.getAttachment("Attachment.doc");
if(oe != null){
eo.extractFile("/path/To/Extraction/Dir/" + oe.getSource());
}
// END OF вариант 2

        doc = dc.getNextDocument();
      }
    } catch(NotesException e) {
      System.out.println(e.id + " " + e.text);
      e.printStackTrace();
    }
  }
}

//Ссылка на оригинал

Комментариев нет:

Отправить комментарий