XPages SSJS代码给出错误“缺少一个或多个源文档的附件”

时间:2015-04-17 17:49:48

标签: xpages xpages-ssjs

这一行

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

1 个答案:

答案 0 :(得分:2)

错误的事件。如果要在写回磁盘时修改文档数据,请使用QuerySave,不要对当前文档执行document.save()。

因此您可能需要拆分代码。

背景:XPage将附件(内嵌图像是附件)上传到临时位置并跟踪它们。保存时,它们会被添加到注释中并被丢弃。指向临时文件的指针仅在事件链之后重置(QuerySave,实际写入磁盘,PostSave)。因此,通过尝试再次保存,您指向已经消失的文件。

顺便说一下。将当前文档(再次)保存在PostSave中(或者就此而言:在QuerySave中过早保存)是Notes开发中流行的反模式