Home > Domino Tips > Developer > LotusScript > Copy attachments in LotusScript without detaching
Domino Tips:
EMAIL THIS
 TIPS & NEWSLETTERS TOPICS 

LOTUSSCRIPT

Copy attachments in LotusScript without detaching


Brad Balassaitis
12.27.2004
Rating: -3.98- (out of 5)


Digg This!    StumbleUpon Toolbar StumbleUpon    Bookmark with Delicious Del.icio.us   


View member feedback to this tip.

This procedure copies file attachments from the current Web document to an existing document (but it can be modified to work for the Notes client as well just by changing the docSource object).

There is no direct way to copy file attachments -- copying the $FILE item with CopyItemToDocument and using doc.ReplaceItemValue do not work on $FILE items. Using doc.CopyAllItems works, but that is not desirable, as I only want to copy the attachments.

The normal workaround is to detach attachments from the source document to the hard drive and re-attach them to a rich text field on the target document. However, that's often restricted on a server, so I'd like to avoid it.

Here is a better strategy:

  1. Call the function below, passing in the database handle along with the source document and target document objects.

  2. Create new docTemp as blank document.

  3. Copy all items from docSource to docTemp.

  4. Loop through docTemp and delete all items not named $File. Now you have a docSource that only has the attachment(s) on it!

  5. RemoveItem($File) from docTarget (to clear existing attachments).

  6. Call docTemp CopyAllItems to docTarget (this should only copy the attachment).

  7. Save docTarget.

Sub CopyAttachments 
(db As NotesDatabase, docSource As 
NotesDocument, docTarget As 
NotesDocument)
 Dim docTemp As NotesDocument 
 
 'Remove all attachments from existing document
 Call docTarget.RemoveItem ("$FILE")
 
 'Create a temporary document and 
use CopyAllItems from the current 
document
 'because I know that will include the attachment
 Set docTemp = db.CreateDocument
 Call docSource.CopyAllItems (docTemp)
 
 'Clear all items not named $File 
from the temp docSource, so that all 
that's left is the attachment
 Forall item In docTemp.Items
  If Not (Ucase(item.Name) = "$FILE") Then
   docTemp.RemoveItem (item.Name)
  End If  
 End Forall
 
 'Now, docTemp only has the attachments left on it
 'CopyAllItems will copy the attachment, 
so use it to copy to docTarget
 Call docTemp.CopyAllItems (docTarget)
 Call docTarget.Save (True, False)
End Sub

MEMBER FEEDBACK TO THIS TIP

This is a very easy way to do a very useful thing.

—Alejandro M.

******************************************

This is a great tip. However, I was trying to e-mail attachments to another person using a new document I created in LotusScript, but the attachments did not send.

—Annonymous

******************************************

I'm pretty sure you would need to save the document for the attachments to be stored on it. This isn't necessary with most types of fields, but it is usually the case with rich text data. (You just don't normally save documents that are created in the background only to be e-mailed out.)

—Brad Balassaitis, tip author

******************************************

Thanks for the tip. I'm using R5, and have no chance of testing whether this is required for other versions, but in my case I also had to copy the rich text field in which the file was originally attached to have it work properly. Without it the docTemp that contained only the $FILE field lost its Items-property entirely.

—Jukka D.

******************************************

When I created this code, I tested it in a web application, where attachments are not tied to specific rich text fields. This user probably used it in a Notes client application where the attachment was stored in a specific field, so this makes sense.

—Brad Balassaitis, tip author

Do you have comments on this tip? Let us know.

Please let others know how useful it is via the rating scale below. Do you have a useful Notes/Domino tip or code to share? Submit it to our monthly tip contest and you could win a prize and a spot in our Hall of Fame.

Rate this Tip
To rate tips, you must be a member of SearchDomino.com.
Register now to start rating these tips. Log in if you are already a member.


Submit a Tip




Digg This!    StumbleUpon Toolbar StumbleUpon    Bookmark with Delicious Del.icio.us   


RELATED CONTENT
LotusScript
Display a custom message box using a LotusScript-generated button
Debug Lotus Notes documents using extracted data
Extracting attachments from a Lotus Notes rich-text field
Programmatically replace the design of Lotus Notes databases
Reading a binary field in an Oracle database with LotusScript
LotusScript equivalent of @Picklist for Lotus Notes
Launch large attachments within an email from a Notes database
How to find files on a hard drive or mapped network with LotusScript
Update the ACL from the Roles view with LotusScript
LotusScript agent moves tagged spam email to junk mail folder

LotusScript
Display a custom message box using a LotusScript-generated button
Can I use LotusScript to merge cells in a Microsoft Word table?
Debug Lotus Notes documents using extracted data
Extracting attachments from a Lotus Notes rich-text field
Programmatically replace the design of Lotus Notes databases
Reading a binary field in an Oracle database with LotusScript
LotusScript equivalent of @Picklist for Lotus Notes
Launch large attachments within an email from a Notes database
How to find files on a hard drive or mapped network with LotusScript
Update the ACL from the Roles view with LotusScript

RELATED RESOURCES
2020software.com, trial software downloads for accounting software, ERP software, CRM software and business software systems
Search Bitpipe.com for the latest white papers and business webcasts
Whatis.com, the online computer dictionary

DISCLAIMER: Our Tips Exchange is a forum for you to share technical advice and expertise with your peers and to learn from other enterprise IT professionals. TechTarget provides the infrastructure to facilitate this sharing of information. However, we cannot guarantee the accuracy or validity of the material submitted. You agree that your use of the Ask The Expert services and your reliance on any questions, answers, information or other materials received through this Web site is at your own risk.

HomeNewsTopicsITKnowledge ExchangeTipsAsk the ExpertsMultimediaWhite PapersDomino IT Downloads
About Us  |  Contact Us  |  For Advertisers  |  For Business Partners  |  Site Index  |  RSS
SEARCH 
TechTarget provides enterprise IT professionals with the information they need to perform their jobs - from developing strategy, to making cost-effective IT purchase decisions and managing their organizations' IT projects - with its network of technology-specific Web sites, events and magazines.

TechTarget Corporate Web Site  |  Media Kits  |  Reprints  |  Site Map




All Rights Reserved, Copyright 1999 - 2008, TechTarget | Read our Privacy Policy
  TechTarget - The IT Media ROI Experts