有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何设置Notes文档中RichTextItem字段的内容?

这个看起来应该足够简单。我正在用Java编写Notes代理;它计算了我想要存储在现有文档中的大量数值数据(6400个双精度输入数组),并更新了一个字段。由于Notes的字段限制,我想我需要使用RichText字段来实现这一点。(我最初尝试写入多值数字字段时,导致它无法保存大小介于4000和5000之间的数组。)不过,我不清楚如何将该值存储在RichTextItem中。我所有的尝试都失败了。在一种情况下,使用doc。replaceItemValue(),它似乎将该项转换为文本列表。获取该项、将其强制转换为RichTextItem并调用setValues()或setValueString()似乎没有任何作用。这不应该这么难!有什么建议吗

(或者:关于如何在数据库中的文档中存储我的数组,有没有更好的建议?)

谢谢, 里德


共 (3) 个答案

  1. # 1 楼答案

    您可以绕过Notes的字段限制。可以使用^{}属性将项目标记为«包含非摘要数据»。您需要将此属性设置为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. # 2 楼答案

    您需要创建一个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
    
  3. # 3 楼答案

    至于“更好”解决方案的问题。我最近编写了一些代码,将Java对象序列化/反序列化为JSON字符串。这样,它们可读性好,易于恢复。我想对于普通阵列来说这是个小问题。尤其是如果您不想恢复它,也没有兴趣查看它(好吧,但它可能应该是一个或另一个:-)

    是的,你必须把它存储在富文本中。或者,您可以编写一个文本文档,并将其附加到RT字段中(同样是RT:-)。非常常见的场景,很容易做到

    最后,您可以将数据存储为数据库对象,但我猜,从Java中,您并没有真正的访问权限。而且似乎没有任何好转