这一行
publishedDoc.save(true, false, true);
会偶尔导致上述错误,在网络上保存的文档中,通过CKEditor添加内联图像。我无法查明导致此错误的情况,因此非常感谢任何提示或评论。
这里有更多代码,因此您可以获得该调用的上下文:
function postSavePage(doc) {
if(doc.getItemValueString("status")=="To Be Published" || doc.getItemValueString("status")=="Save as Current Version" ) {
var saveAsCurrent = doc.getItemValueString("status")=="Save as Current Version";
var publishedDoc:NotesDocument = getCurrentlyPublishedDoc(doc);
if(!publishedDoc) {
publishedDoc = doc;
publishedDoc.replaceItemValue("status", "Published");
PublishedDoc.replaceItemValue("VERNUMBER", 1);
} else {
//******
//copy draft to temp doc
var tmpDoc:NotesDocument = database.createDocument();
doc.copyAllItems(tmpDoc, true);
//copy published to draft (for archiving)
publishedDoc.copyAllItems(doc, true);
if(saveAsCurrent) {
doc.replaceItemValue("status", "Archive (Saved As Current)");
} else {
doc.replaceItemValue("status", "Archive");
}
//copy temp (newly published) to published doc
tmpDoc.copyAllItems(publishedDoc, true);
//Make sure we set the version number if saved as current version
if(saveAsCurrent){
publishedDoc.replaceItemValue("VERNUMBER", doc.getItemValueInteger("VERNUMBER"));
}
publishedDoc.replaceItemValue("status", "Published");
updateRevisionData(doc);
if(!saveAsCurrent) {
setVersion(doc);
}
//save docs
doc.save(true, false, true);
publishedDoc.save(true, false, true);
}
}
}
基本上,此代码管理CMS类型应用程序中的verioning。由于现有内容中已存在许多文档链接,因此我需要保留已发布文档的UNID。这解释了已发布的文档,临时文档和文档之间的良好小舞蹈,即草稿:草稿内容转到已发布的版本,已发布的版本转到了档案。
我将持久性设置为"将页面保留在磁盘上#34;和持久性模式到"整个页面内容"。不确定它会有所作为......
任何线索? :d
答案 0 :(得分:2)
错误的事件。如果要在写回磁盘时修改文档数据,请使用QuerySave,不要对当前文档执行document.save()。
因此您可能需要拆分代码。
背景:XPage将附件(内嵌图像是附件)上传到临时位置并跟踪它们。保存时,它们会被添加到注释中并被丢弃。指向临时文件的指针仅在事件链之后重置(QuerySave,实际写入磁盘,PostSave)。因此,通过尝试再次保存,您指向已经消失的文件。
顺便说一下。将当前文档(再次)保存在PostSave中(或者就此而言:在QuerySave中过早保存)是Notes开发中流行的反模式