检查Richtext是否有附件

时间:2015-01-28 19:06:21

标签: java xpages

这很奇怪 - 或者不是因为Richtext是一般的儿子。我想跟踪文档(相应的richtext项目)是否有附件,以便在我的后端文档中设置其他字段。我创建了一个静态Java方法来计算东西。从我的数据源的postSaveDocument事件调用该方法。 这是方法:

/**
     * Set flag fields if attachments exist or not
     * 
     * @param xspdoc
     */
    public static void setAttachments(final Document doc, final boolean post) {
        try {
            if (doc.hasItem("audioFile")) {
                doc.replaceItemValue("audioHasFile", "1");
            } else {
                doc.removeItem("audioHasFile");
            }
            if (doc.hasItem("audioCase")) {
                doc.replaceItemValue("audioHasCase", "1");
            } else {
                doc.removeItem("audioHasCase");
            }
            if (doc.hasItem("audioTrackliste")) {
                doc.replaceItemValue("audioHasTrackliste", "1");
            } else {
                doc.removeItem("audioHasTrackliste");
            }
            if (post)
                doc.save();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

问题是:每当我在我的Xpage上的一个RTF项目上添加附件时(通过Fileupload控件),使用简单的操作保存文档,例如, “audioHasFile”设置为“1”。好处!

如果我然后重新打开文档,删除附件(通过Filedownload控件trashicon)并再次保存文档,后端无法识别附件已经消失并且项目例如“audioHasFile”未被删除,但仍保留之前设置的值“1”。

只有在我的Xpage(从“视图”面板)中重新打开文档并再次保存时,该字段才会被删除,因为后端现在识别出没有附件。

我知道你在想什么:缺少一个附件并不意味着theres不是它的项目 - 错!我还尝试通过getType == 1(Item.ATTACHMENT)检查Richtext项的类型 - 没有运气。

信息:我通过currentDocument.getDocument(true)传递Document参数 - 所以我在这里处理同步的后端文档。

要明确:这不是一般的测试问题,而是时间问题。

知道如何解决这个问题吗?先感谢您! :)

更新:这是有效的解决方案:

/**
     * Set flag fields if attachments exist or not
     * 
     * @param xspdoc
     */
    public static void setAttachments(final DominoDocument doc) {

        try {
            doc.replaceItemValue("audioHasFile", doc.getAttachmentList("audioFile").size() > 0 ? "1" : "");         
            doc.replaceItemValue("audioHasTrackliste", doc.getAttachmentList("audioTrackliste").size() > 0 ? "1" : "");
            doc.replaceItemValue("audioHasCase", doc.getAttachmentList("audioCase").size() > 0 ? "1" : "");
            // key
            doc.replaceItemValue("audioKey", doc.getItemValueString("audioTitle").toLowerCase().replaceAll("\\s+",""));

            doc.save();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

1 个答案:

答案 0 :(得分:1)

尝试将文档包装在NotesXspDocument中:

        NotesXspDocument xspDoc;
        xspDoc = com.ibm.xsp.model.domino.wrapped.DominoDocument.wrap(doc.getParentDatabase().getFilePath(), doc, null, null, false, null); 
        if (xspDoc.getAttachmentList("FieldName").size() > 0){
            //
        }