我有一个lotus.domino.Item实例。
item.getType()返回Item.ATTACHMENT(表示项目代表和附件)
当我System.output item.getValueString()时,它会写出FileName和Content。
这对我来说并不好,因为它想分别提取FileName和Content。检查了API,找不到合适的方法来提取这些。
或者有没有办法拆分item.getValueString()返回的内容以获取FileName和Content?
答案 0 :(得分: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();
}
}
}