Xpages 如何将富文本附件从一个文档传输到另一个文档

Xpages 如何将富文本附件从一个文档传输到另一个文档,xpages,lotus-notes,attachment,richtext,Xpages,Lotus Notes,Attachment,Richtext,我有两个文件,它们的工作方式应该能够在它们之间传输文件。但是,它不起作用。我得到的异常是调用方法NotesDocument.save()时发生的异常。Notes错误:缺少一个或多个源文档的附件。运行Fixup删除源数据库中的文档。这是在我尝试对刚从第一个数据库向其传输文件的文档调用save()函数后发生的 功能如下: function transferFiles(docToGetFrom, docToTransferTo, fileFieldFromFirstName, fileFieldFro

我有两个文件,它们的工作方式应该能够在它们之间传输文件。但是,它不起作用。我得到的异常是调用方法NotesDocument.save()时发生的异常。Notes错误:缺少一个或多个源文档的附件。运行Fixup删除源数据库中的文档。这是在我尝试对刚从第一个数据库向其传输文件的文档调用
save()
函数后发生的

功能如下:

function transferFiles(docToGetFrom, docToTransferTo, fileFieldFromFirstName, fileFieldFromSecondName) 
{
    var rit1:NotesRichTextItem = getFirstNotesRichTextItem(docToGetFrom, fileFieldFromFirstName);
    docToTransferTo.copyItem(rit1, fileFieldFromSecondName);
    deleteAllFilesFromDocument(docToGetFrom, fileFieldFromFirstName);

    docToTransferTo.save();
}

function getFirstNotesRichTextItem(documentToGetFrom, fileFieldName) 
{
    if (documentToGetFrom == null)
    {
        return(null);
    }
    if (!documentToGetFrom.hasItem(fileFieldName))
    {
        return(null);
    }
    var rit1:NotesRichTextItem = documentToGetFrom.getFirstItem(fileFieldName);

    return rit1;
}

function deleteAllFilesFromDocument(documentToDeleteFrom, fileFieldName) 
{
    var arr = getAllEmbeddedObjects(documentToDeleteFrom, fileFieldName);

    for(var i = 0; i < arr.length; i++)
    {
        arr[i].remove();
    }

    documentToDeleteFrom.save();

}

function getAllEmbeddedObjects(documentToGetFrom, fileFieldName) 
{

    var rit1:NotesRichTextItem = getFirstNotesRichTextItem(documentToGetFrom, fileFieldName);
    if (rit1 == null)
    {
        return(null);
    }
    try
    {
    var arr=rit1.getEmbeddedObjects();
    return arr;
    }
    catch(e)
    {
        return(null);
    } 

}
函数传输文件(docToGetFrom、docToTransferTo、fileFieldFromFirstName、fileFieldFromSecondName)
{
变量rit1:NotesRichTextItem=getFirstNotesRichTextItem(docToGetFrom,fileFieldFromFirstName);
copyItem(rit1,fileFieldFromSecondName);
DeleteAllFileFromDocument(docToGetFrom,fileFieldFromFirstName);
docotransferto.save();
}
函数getFirstNotesRichTextItem(documentToGetFrom,fileFieldName)
{
if(documentToGetFrom==null)
{
返回(空);
}
如果(!documentToGetFrom.hasItem(fileFieldName))
{
返回(空);
}
变量rit1:NotesRichTextItem=documentToGetFrom.getFirstItem(fileFieldName);
返回rit1;
}
函数DeleteAllFileFromDocument(documentToDeleteFrom,fileFieldName)
{
var arr=getAllEmbeddedObjects(documentToDeleteFrom,fileFieldName);
对于(变量i=0;i
根据简单的逻辑,我需要执行以下操作以使其正常工作:

  • 从文档A获取附件
  • 将它们复制到文档B中
  • 从文档A中删除附件
  • 在服务器上调用
    save()
  • 在B上调用
    save()

  • 我也做了同样的事,但还是得到了这个令人讨厌的例外。此外,我还试图通过将设置为1来解决此问题,但运气不佳。我假设方法
    copyItem()
    (我猜它只能在简单数据类型下正常工作)一定有问题。有什么问题吗?提前感谢。

    您可能需要从源文档中分离附件并将其附加到目标文档。有关示例,请参见NotesEmbeddedObject类。

    您可能需要从源文档中分离附件,然后将其附加到目标文档。有关示例,请参见NotesEmbeddedObject类。

    使用NotesItem类的CopyItemToDocument方法。下面是我在LotusScript代理中使用的一些代码,但是CopyItemToDocument方法在Java和SSJS中也可用

        If doc.Hasitem("RTF1") Then
            Set item = Nothing
            Set item = doc.getFirstItem("RTF1")
            Call item.Copyitemtodocument(targetdoc, "targetRTF")
            Call item.Remove()
        End If
    

    使用NotesItem类的CopyItemToDocument方法。下面是我在LotusScript代理中使用的一些代码,但是CopyItemToDocument方法在Java和SSJS中也可用

        If doc.Hasitem("RTF1") Then
            Set item = Nothing
            Set item = doc.getFirstItem("RTF1")
            Call item.Copyitemtodocument(targetdoc, "targetRTF")
            Call item.Remove()
        End If
    

    如果先保存B,然后处理A呢?如果先保存B,然后处理A呢?对于Domino MIME类,这可以在不分离附件的情况下完成。对于Domino MIME类,这可以在不分离附件的情况下完成。