| The sample functions below contain functionality needed to take the "current" document and send or forward it similarly to @Forward @Command or the UIDocument.Forward method. The plus with these functions, is that they do not require a mail file. The first is written for front-side, current document forwarding. The second is meant to be kicked off via agent/link on the web. The first one can work from the web if the uiworkspace components are switched to back-end, and the pop-up selection w/in the click sub is replaced with some other graphical interface (GUI) that brings back the list.
 
 Solution 1:
 This version of a forward function, forwards the current opened document by clicking a Forward or Send button on the current document when in read mode.
 
 Options
 Option Declare
 
 Sub Click(Source As Button)
 Dim s As New NotesSession
 Dim w As New NotesUIWorkspace								' needed for picklist
 Dim db As NotesDatabase									' current db
 Dim uiDoc As NotesUIDocument								' current doc front-end
 Dim doc As NotesDocument								' current doc
 Dim sendtoLst As Variant									' array of string values of names selected in picklist for sendto values
 Dim newssearchstr As String								' search string for newsCol to get 0 docs
 Dim newsCol As NotesDocumentCollection						' collection to hold the current document ultimately, so we can make a forward of the doc
 
 Dim msubject As String									' subject field of mDoc
 Dim mreplyto As String									' reply to e-mail of mDoc
 
 ' update custom variables below
 msubject = "put custom subject here"
 mreplyto = "mye-mailaddress@mydomain.com"
 ' ________________________
 ' setup environment
 Set db = s.CurrentDatabase
 Set uiDoc = w.CurrentDocument
 Set doc = s.DocumentContext
 If (doc Is Nothing) Then
 ' get via uiDoc
 Set doc = uiDoc.Document
 End If
 If (doc Is Nothing) Then
 ' could not get doc - has it been saved?
 Print "Aborted. Could not get the current saved document. Has document been saved?"
 Exit Sub
 End If
 
 ' get list of names for SendTo
 sendtoLst = w .PickListStrings(0, True ) 			' PICKLIST_NAMES (0)
 ' check the list
 If ( Isempty( sendtoLst ) ) Then
 ' abort, done
 Messagebox "Canceled" , , "No names selected"
 Exit Sub
 Else
 ' create newsletter collection
 newssearchstr = {Form = "asdfasdf12535asdf" }				' bogus search just to get empty collection
 Set newsCol = db .Search( newssearchstr , Nothing , 1 )
 If (newsCol.Count>0) Then
 ' error, search should not return anything
 Print "Cancelled. Starting forward collection not empty for forward (newsletter)."
 Exit Sub
 End If
 ' add the current doc to collection
 Call newsCol.AddDocument(doc)
 If Not (newsCol.Count = 1) Then
 ' error, collection should now contain the current doc
 Print "Cancelled: Current document could not be added to forward (newsletter)."
 Exit Sub
 End If
 
 ' forward current doc
 Call ForwardDocAsNews(db, newsCol, msubject, mreplyto, sendtoLst)
 
 Exit Sub
 End If
 
 SErrorHandler:
 Print "Error: " & Cstr(Err) & ", " & Error$ & ", one line: " & Cstr(Erl) & "."
 Exit Sub
 End Sub
 
 
 Function ForwardDocAsNews(db As NotesDatabase, newsCol As NotesDocumentCollection, msubject As String, mreplyto As String, msendtoLst As Variant) As Integer
 ' function sends one document in a collection as a "newsletter" (similar to @Forward vs table if multiple docs in collection)
 ' returns 1 = success sent, 0 = failure sending, also prints error message if one occurs
 ' db - current app
 ' newsCol - collection containing one doc to forward
 ' msubject - subject of memo being sent
 ' mreplyto - override reply to address (optional)
 ' msendtoLst - can be string or string list (typically a list)
 Dim nNews As NotesNewsletter								' the doc to forward in newsCol
 Dim mDoc As NotesDocument								' memo document
 
 On Error Goto FErrorHandler
 
 ' start function with status = 0
 ForwardDocAsNews = 0
 
 ' create newsletter/forward from 1 collection doc
 Set nNews = New NotesNewsletter( newsCol )
 Set mDoc = nNews.FormatDocument( db, 1 )
 mDoc.SaveMessageOnSend = False
 Call mDoc.ReplaceItemValue("Form", "Memo")
 Call mDoc.ReplaceItemValue("Subject", msubject)
 Call mDoc.ReplaceItemValue("ReplyTo", mreplyto)
 Call mDoc.ReplaceItemValue("SendTo", msendtoLst)
 ' send completed newsletter
 Call mDoc.Send( False, msendtoLst )
 Print "Message Sent."
 ForwardDocAsNews = 1
 FExit:
 Set mDoc = Nothing
 Exit Function
 
 FErrorHandler:
 Print "Error forwarding document: " & Cstr(Err) & " " & Error$ & ", line: " & Cstr(Erl) & "."
 Resume FExit
 End Function
 
 
 
 
 
 
 Solution 2:
 This version of a forward function, assumes you are passing in two documents, one contains the SendTo field, and one contains the document to snapshot and forward.
 (agent is called as wqs agent from pop-up form)
 
 Options
 Option Public
 Option Declare
 
 Sub Initialize
 Dim s As New NotesSession
 Dim db As NotesDatabase									' current db
 Dim popDoc As NotesDocument									' current popup doc
 Dim edocunid As String										' current doc unid from popDoc's DocUNID field
 Dim eDoc As NotesDocument									' current doc to forward, obtained using edocunid
 
 On Error Goto SErrorHandler
 
 ' setup
 Set popDoc = s.DocumentContext
 Set db = s.CurrentDatabase
 edocunid = popDoc.DocUNID(0)
 
 If (edocunid="") Then
 Print "Error: Missing document to forward. Cannot continue. (No DocUNID)."
 Exit Sub
 End If
 Set eDoc = db.GetDocumentByUNID(edocunid)
 If (eDoc Is Nothing) Then
 Print "Error: Cannot locate document to forward. Cannot continue. (Doc UNID: " & edocunid & ")."
 Exit Sub
 End If
 
 ' have doc, start printout and forward (DoForward will print whether or not there is an error.)
 Print "<strong>Sending Document . . . </strong><br/><br/>"
 Call DoForward(db, popDoc, eDoc, "tmpSendto", s.EffectiveUserName)
 Print "<br/><br/>"
 Print |<a href="javascript: window.close();" onClick="window.close();"> Close Window </a>|
 
 SExit:
 Exit Sub
 
 SErrorHandler:
 Print "Unexpected Error: " & Cstr(Err) & " " & Error$ & ", line: " Cstr(Erl) & "."
 Resume SExit
 End Sub
 
 Function DoForward(db As NotesDatabase, popDoc As NotesDocument, eDoc As NotesDocument, sendtofldnm As String, fromnm As String) As Integer
 ' db - current db
 ' popDoc - pop up name selection forwarding dialog (contains sendto field)
 ' eDoc - document being forwarded
 ' sendtofldnm - sendto field name
 ' fromnm - from NotesName or e-mail address
 
 Dim sendToItem As NotesItem						' sento field in popDoc
 Dim tmpCol As NotesDocumentCollection				' temp collection to hold eDoc from which to create newsletter
 Dim tmpNDT As NotesDateTime						' temp date/time for the bogus search
 Dim enewsletter As NotesNewsletter					' the snapshot document to forward
 Dim mDoc As NotesDocument						' memo doc that contains the newsletter doc
 
 On Error Goto FErrorHandler
 
 ' start failure
 DoForward = 0
 
 ' get send to
 Set sendToItem = popDoc.GetFirstItem(sendtofldnm)
 If (sendToItem Is Nothing) Then
 'give up
 Exit Function
 End If
 If (sendToItem.Text = "") Then
 'give up
 Exit Function
 End If
 
 ' have at least one person to send to, continue . . .
 ' . . .  create temp collection
 Set tmpNDT = New NotesDateTime("01/01/1991")
 Set tmpCol = db.Search( "@Contains( Subject; ""asdf1235asdfa31251235asdf1235"" )", tmpNDT, 1 )					' we don't want success
 Call tmpCol.AddDocument(eDoc)
 
 ' create newsletter from eDoc
 Set enewsletter = New NotesNewsletter( tmpCol)
 Set mDoc = enewsletter.FormatDocument( db, 1)
 Call mDoc.ReplaceItemValue("Form", "Memo")
 Call mDoc.CopyItem(sendToItem, "SendTo")
 mDoc.SaveMessageOnSend = False
 Call mDoc.Send(False)
 
 Print "Message Forwarded"
 DoForward = 1
 FExit:
 Exit Function
 
 FErrorHandler:
 Print "Error Forwarding Mail: " & Cstr(Err) & " " & Error$ & ", line: " Cstr(Erl) & "."
 DoForward = 0
 Resume FExit
 End Function
 
 ______________________________________________
 
 Solution 2:
 This version of a forward function, forwards one or more selected documents in a Notes client view by clicking a Forward or Send button on the current document when in read mode.
 
 
 
 Function ForwardDocsSelected(db As NotesDatabase, dc As NotesDocumentCollection, msubject As String, mreplyto As String, msendtoLst As Variant) As Integer
 ' function sends one or more documents in a collection as a "picture" (similar to @Forward vs table if multiple docs in collection)
 ' returns 1 = success sent, 0 = failure sending, also prints error message if one occurs
 ' db - current app
 ' dc - collection containing one or more docs to forward
 ' msubject - subject of memo being sent
 ' mreplyto - override reply to address (optional)
 ' msendtoLst - can be string or string list (typically a list)
 Dim tmpDoc As NotesDocument										' current doc in dc being snapshot
 Dim tmpItem As NotesRichTextItem									' temp item for taking snapshot picture of current document
 Dim tmpsuccess As Variant												' flag whether rendering to RTF tmpItem works each time
 Dim mDoc As NotesDocument										' memo being sent
 Dim mBody As NotesRichTextItem									' body field of new memo, mDoc
 
 On Error Goto FErrorHandler
 
 ' start function with status = 0
 ForwardDocsSelected = 0
 
 ' create new memo
 Set mDoc = db.CreateDocument()
 Call mDoc.ReplaceItemValue("Form", "Memo")
 mDoc.SaveMessageOnSend = False
 Call mDoc.ReplaceItemValue("Subject", msubject)
 If Not (mreplyto = "") Then
 Call mDoc.ReplaceItemValue("ReplyTo", mreplyto)
 End If
 Call mDoc.ReplaceItemValue("SendTo", msendtoLst)
 Set mBody = New NotesRichTextItem(mDoc, "Body")
 
 ' loop and add docs to body of e-mail
 Set tmpDoc = dc.GetFirstDocument()
 While Not (tmpDoc Is Nothing)
 ' copy current doc to temp item in new doc
 Set tmpItem = New NotesRichTextItem(mDoc, "TmpRTF")
 success = tmpDoc.RenderToRTItem( tmpItem )
 If (success) Then
 ' add contents
 Call mBody.AppendRTItem( tmpItem )
 ' add delineator
 Call mBody.AppendText("_____________________________________________")
 Call mBody.AddNewLine(1)
 Set tmpItem = Nothing
 Else
 Print "Error adding document, " & tmpDoc.UniversalID & ", to new e-mail. Skipped."
 End If
 
 ' loop
 Set tmpDoc = dc.GetNextDocument(tmpDoc)
 Wend
 ' clear tmpitem so not in new memo
 Set tmpItem = Nothing
 
 ' send completed e-mail/forward collection
 Call mDoc.Send( False, msendtoLst )
 Print "Message Sent."
 ForwardDocsSelected = 1
 FExit:
 Set mDoc = Nothing
 Exit Function
 
 FErrorHandler:
 Print "(ForwardDocsSelected) Error forwarding document(s): " & Cstr(Err) & " " & Error$ & ", line: " & Cstr(Erl) & "."
 Resume FExit
 End Function
 
 previous page
 
 
 |