检查 Richtext 是否有附件
Check if Richtext has an attachment
这很奇怪 - 或者说不是因为 Richtext 通常是混蛋的儿子。我想跟踪文档(resp.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 控件垃圾图标)并再次保存文档,后端将无法识别附件已消失和项目,例如"audioHasFile" 未被删除,但仍保留之前设置的值“1”。
只有在我的 Xpage 中(从视图面板)重新打开文档并再次保存时,该字段才会被删除,因为后端现在识别出没有附件。
我知道您在想什么:没有附件并不意味着没有附件 - 错了!我还尝试通过 getType == 1 (Item.ATTACHMENT) 检查 Richtext 项目的类型 - 运气不好。
信息:我通过 currentDocument.getDocument(true) 传递文档参数 - 所以我在这里处理同步的后端文档。
明确一点:这不是一般测试的问题,而是时间问题。
知道如何解决这个问题吗?先感谢您! :)
更新:这是有效的解决方案:
/**
* 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();
}
}
尝试将您的文档包装在 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){
//
}
这很奇怪 - 或者说不是因为 Richtext 通常是混蛋的儿子。我想跟踪文档(resp.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 控件垃圾图标)并再次保存文档,后端将无法识别附件已消失和项目,例如"audioHasFile" 未被删除,但仍保留之前设置的值“1”。
只有在我的 Xpage 中(从视图面板)重新打开文档并再次保存时,该字段才会被删除,因为后端现在识别出没有附件。
我知道您在想什么:没有附件并不意味着没有附件 - 错了!我还尝试通过 getType == 1 (Item.ATTACHMENT) 检查 Richtext 项目的类型 - 运气不好。
信息:我通过 currentDocument.getDocument(true) 传递文档参数 - 所以我在这里处理同步的后端文档。
明确一点:这不是一般测试的问题,而是时间问题。
知道如何解决这个问题吗?先感谢您! :)
更新:这是有效的解决方案:
/**
* 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();
}
}
尝试将您的文档包装在 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){
//
}