API
@-Formulas
JavaScript
LotusScript
Reg Exp
Web Design
Notes Client
XPages
 
Move Web Attachment To Rich Text Field
The file upload control feature provided in Notes is used to attach files to a document from the web. But it ends up placing the attachment at the bottom of your document instead of in a rich text field. (Those of us who have been using Notes for a long time know this as a "V2 Attachment"). Here is some script that will take the attachment and place it into a rich text field. Place this code into your web query save agent for the form being created.

Sub Initialize
   Dim s As New notesSession
   Dim doc As notesDocument
   Set doc = s.documentContext
   Call WebMoveAttachment(Doc, "<Your Rich Text Field Name>")
End Sub

The subroutine "WebMoveAttachment" does the work of moving the attachment to the rich text field.

Function WebMoveAttachment(doc As notesDocument, Byval moveToFieldName As String)
   ' This function moves a file attached via the Web with the File Upload Control to a rich text field.
   Dim s As New notesSession
   Dim tempDir As String
   Dim v2FileNames As Variant
   Dim i As Integer
   Dim attachedFile As notesEmbeddedObject
   Dim filePath As String
   Dim rtItem As notesRichTextItem
   
   tempDir = s.getEnvironmentString("Directory", True)
   ' Put a trailing slash at the end of the directory if it is needed
   If Instr(tempDir, "/") <> 0 And Right(tempDir, 1) <> "/" Then tempDir = tempDir & "/"
   If Instr(tempDir, "\") <> 0 And Right(tempDir, 1) <> "\" Then tempDir = tempDir & "\"
   ' Get the names of all the attachments (1 or more)
   v2FileNames = Evaluate("@AttachmentNames", doc)
   For i = Lbound(v2FileNames) To Ubound(v2FileNames)
      If v2FileNames(i) <> "" Then   ' Make sure it's a valid file name
         Set attachedFile = doc.getAttachment(v2FileNames(i))
         filePath = tempDir & v2FileNames(i)
         ' Save the file on the server
         Call attachedFile.extractFile(filePath)
         ' Create the rich text item and re-attach the file
         If doc.hasItem(moveToFieldName) Then
            Set rtItem = doc.getFirstItem(moveToFieldName)
            ' Add a couple of lines to the rich text field before re-attaching the file
            Call rtItem.addNewLine(2)
         Else
            Set rtItem = New notesRichTextItem(doc, moveToFieldName)
         End If
         Call rtItem.embedObject(1454, "", filePath)
         ' Delete the file(s) from the server file system
         Kill filePath
      End If
   Next   ' Move on to the next file name
End Function

Important: This function requires the ability to run UNRESTRICTED agents on the server. This is because the agent interfaces with the file system, which required unrestricted access.