J.Doe
J.Doe

Reputation: 179

How do I transfer rich text attachments from one document to another

I have 2 documents which are supposed work in such a way to be able to transfer files between them. However, it doesn't work. The exception I get is Exception occurred calling method NotesDocument.save() Notes error: One or more of the source document's attachment are missing. Run Fixup to delete the document in the source database. This happens after I try to call save() function on the document to which I've just transfered files from the first.

The functions are below:

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);
    } 

}

According to plain logic, I need to do the following in order to make it work:

  1. Get attachments from the document A
  2. Copy them to the document B
  3. Remove attachments from the document A
  4. Call save() on A
  5. Call save() on B

I did exactly the same, but nevertheless get this nasty exception. Also, I've tried to solve the problem by setting OLEDisableFX to 1, but with no luck. I assume that something must be wrong with the method copyItem() (I guess it can only work properly with simple datatypes). What's the problem? Thanks in advance.enter image description here

Upvotes: 1

Views: 1404

Answers (2)

Peter Della-Nebbia
Peter Della-Nebbia

Reputation: 827

Use the CopyItemToDocument method of the NotesItem class. The following is some code I used in a LotusScript agent but the CopyItemToDocument method is also available in Java and SSJS.

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

Upvotes: 2

umeli
umeli

Reputation: 1068

You'll probably need to detach the attachment from the source document and attach it to the target document. See the NotesEmbeddedObject class for examples.

Upvotes: 3

Related Questions