这个看起来应该很简单。我正在用Java编写Notes代理;它计算了我想要存储在现有文档中的相当大量的数值数据(6400条目的双精度数组),更新了一个字段。由于Notes的字段限制,我认为我需要使用RichText字段来执行此操作。 (我最初尝试写入多值Number字段导致它无法在大小为4000到5000的数组之间进行保存。)但我不清楚如何在RichTextItem中存储该值。我所有的尝试都失败了。在一种情况下,使用doc.replaceItemValue(),它似乎将项目转换为文本列表。获取项目,将其转换为RichTextItem,并调用setValues()或setValueString()似乎没有做任何事情。这应该不是这么难!有什么指针吗?
(或者:关于如何将我的数组存储在数据库中的文档中的任何更好的建议?)
谢谢, 里德
答案 0 :(得分:3)
您需要创建一个RichTextItem并使用该对象上的方法填充它:
import lotus.domino.*;
import java.util.Vector;
public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext =
session.getAgentContext();
// (Your code goes here)
Database db = agentContext.getCurrentDatabase();
Document doc = db.createDocument();
Item subject = doc.replaceItemValue("Subject",
"Project description");
RichTextItem body = doc.createRichTextItem("Body");
body.appendText("Cartoon book for children
ages 9-12");
// Print text of subject and body
System.out.println(subject.getText());
System.out.println(body.getText());
// Save the document
doc.save(true, true);
} catch(Exception e) {
e.printStackTrace();
}
}
}
更新:
如果您需要编辑现有文档,而不是创建新的富文本项,则可以获得现有文档。
RichTextItem body = doc.GetFirstItem("Body"); // instead of createRichTextItem
答案 1 :(得分:1)
您可以绕过Notes的字段限制。您可以使用NotesItem.IsSummary
属性将项目标记为“包含非摘要数据”。您需要将此属性设置为false
。但请记住,您无法在视图和文件夹中使用此项目
这是一个例子:
Vector vector = new Vector();
for (int index = 0; index<6400;index++)
vector.addElement(new Double(Math.random()*100));
Item item = document.replaceItemValue("YourFieldName", vector);
item.setSummary(false);
document.save(true,true);
答案 2 :(得分:1)
关于&#34;更好&#34;的问题解。我最近编写了一些代码,我将Java对象序列化/反序列化为JSON字符串。这样它们具有良好的可读性和易于恢复性。我想对于普通阵列来说这有点问题。特别是如果你不想恢复它并且没有兴趣去看它(好吧,但可能它应该是一个或另一个: - )
是的,无论如何,你必须将它存储在富文本中。您可以选择编写文本文档并将其附加到RT字段(再次RT :-)。很平常的场景,很容易做到。
最后,您可以将数据存储为数据库对象,但我想从Java中您实际上无法访问它。它似乎没有任何好转。