2014-08-28 3 views
2

У меня есть экземпляр lotus.domino.Item.Java - Lotus Notes - Get Attachment Name from Item Instance

item.getType() возвращает Item.ATTACHMENT (то есть элемент представляет вложения)

Когда я System.output в item.getValueString() он выписывает FileName и Контента.

Это нехорошо для меня, так как вы хотите получить FileName и Content отдельно. Проверял API и не смог найти подходящий метод для их извлечения.

Или есть способ разделить содержимое, возвращаемое item.getValueString(), чтобы получить имя и содержимое File?

ответ

3

Получить EmbeddedObject экземпляр класса (ов) из документа:

java.util.Vector embeddedObjects = notesDocument.getEmbeddedObjects(); 

или из форматированного текста:

java.util.Vector embeddedObjects = richTextItem.getEmbeddedObjects(); 

EmbeddedObject содержит метод: getSource(), использовать его, чтобы получить имя файла из тип прикрепленного объекта.

if (embeddedObject.getType() == EmbeddedObject.EMBED_ATTACHMENT) { 
    String attachmentFileName = embeddedObject.getSource(); 
} 

Чтобы получить содержимое файла, используйте extractFile() метод экземпляра класса EmbeddedObject.

Ниже есть Java-код, который демонстрирует, как отделить вложения (образец взят из официальной документации Domino Designer):

import lotus.domino.*; 
import java.util.Vector; 
import java.util.Enumeration; 
public class JavaAgent extends AgentBase { 
    public void NotesMain() { 
    try { 
     Session session = getSession(); 
     AgentContext agentContext = session.getAgentContext(); 
     // (Your code goes here) 
     Database db = agentContext.getCurrentDatabase(); 
     DocumentCollection dc = db.getAllDocuments(); 
     Document doc = dc.getFirstDocument(); 
     boolean saveFlag = false; 
     while (doc != null) { 
     RichTextItem body = 
     (RichTextItem)doc.getFirstItem("Body"); 
     System.out.println(doc.getItemValueString("Subject")); 
     Vector v = body.getEmbeddedObjects(); 
     Enumeration e = v.elements(); 
     while (e.hasMoreElements()) { 
      EmbeddedObject eo = (EmbeddedObject)e.nextElement(); 
      if (eo.getType() == EmbeddedObject.EMBED_ATTACHMENT) { 
      eo.extractFile("c:\\extracts\\" + eo.getSource()); 
      eo.remove(); 
      saveFlag = true; 
      } 
     } 
     if (saveFlag) { 
      doc.save(true, true); 
      saveFlag = false; 
      } 
     doc = dc.getNextDocument(); 
     } 
    } catch(NotesException e) { 
     System.out.println(e.id + " " + e.text); 
     e.printStackTrace(); 
    } 
    } 
} 
+0

Спасибо большое! Я пошел по совершенно неправильному пути :-). Один вопрос, почему нам нужно называть eo.remove()? – user3505441

+0

этот вызов удаляет вложение. Если вы не хотите удалять вложение, просто игнорируйте его в своем коде. – 2014-08-28 08:54:00