Sometimes the Domino engine causes you to do more work than normal by requiring or imposing restrictions to tasks. You can bypass the Domino engine with a LotusScript agent and get exactly what you want every time.
These examples are meant to show what's possible and with how much code. They make use of an extensive class I've written to simplify the job -- but it's the concept that is important here.
Here's an example of an agent I use to open HTML documents that I store in my database. One agent opens any HTML document.
Dim Session As New NotesSession
Dim db As NotesDatabase
Dim Request As NotesDocument
Dim HTMLView As NotesView
Dim ScriptView As NotesView
Dim HTMLDoc As NotesDocument
Dim ScriptDoc As NotesDocument
Dim WebPage As New Web
Dim Index As Integer
Dim HTML As String
Dim Script As String
Dim Title As String
Dim URL As String
Dim Parsed As Variant
Set db = Session.CurrentDatabase
Set HTMLView = db.GetView("HTML")
Set ScriptView = db.GetView("Script")
Parsed=WebPage.checkCGI("")
'Lets go get whatever was sent to use
from the browser
'==============================
================================
================
===
' Go through all of the variables we got in
the URL and take some action.
' This routine is only ready to process the
URL, PAGE variable and the
DOCTYPE Variable.
' PAGE opens a database stored HTML
& Associated Script document
' URL opens whatever URL it is sent.
' DOCTYPE Opens
Requires Free Membership to View
Register today to access targeted resources from our editorial writers and independent industry experts focused on Lotus Domino, Notes, Workplace and other related technologies.
the specified page
in the Application you specified. It
will currently supports WORD & EXCEL
'=================================
==================================
===========
===
For Index = 1 To Ubound(Parsed)
Select Case Ucase(Parsed(Index, 1))
Case "URL"
URL = Mid$(Parsed(Index,2), 2,
Len(Parsed(Index,2))-2) 'Strip the
beginnign
& End Quotes that had to be there
Print "[" & URL & "]"
'Navigate directly to the URL
specified (just put the complete URL in [])
Exit Sub 'We're done here
Case "PAGE"
Title = WebPage.ParseReplace(Parsed
(Index,2), "+", " ") 'Replace any HTML +
characters with spaces ready for the view
lookup. Set TITLE variable as our
doc name
Case "DOCTYPE"
Select Case Ucase(Parsed(Index, 2))
Case "WORD"
WebPage.Contenttype="WORD"
'Tell the WebClass that we're opening
this page in MS Word
Case "EXCEL"
WebPage.Contenttype="Excel"
'Tell the WebClass that we're opening
this page in Excel
End Select
End Select
Next
'=================================
================================
=============
===
Set HTMLDoc = HTMLView.
GetDocumentByKey(Title)
'Go Get the HTML Page
Set ScriptDoc = ScriptView.
GetDocumentByKey(Title)
'I name the script
pages the same so go get that too
If Not (ScriptDoc Is Nothing) Then
Script = ScriptDoc.Script(0)
'If there was script, put it in a
nice string variable
End If
HTML = HTMLDoc.HTML(0)
'Same goes for the HTML. You dont have to
but I like to
WebPage.Title = Title
'Set the Webpage title to the Name of the
HTML doc I was told to get
WebPage.Head = Script
'If there was some script or CSS, send it
to the WebPage class for the page
Call WebPage.StoreHTML(HTML)
'Send the HTML we got from the
Document to the Webpage class
Call WebPage.PrintHTML()
'Create the page and send it to the
browser
Now, all the calls to the WebPage class are calls to a very large custom class that I've created entirely in LotusScript that packages everything very nicely for me and parses out all the data elements.
If you read through the comments, you'll notice that I can open any page in the database, open any URL from any other database or site and even launch Microsoft Word or Excel on the visitors machine and send them the file for the program formatted in HTML.
Such agents can be used as Brokers and to retrieve data from multiple records to form a single HTML page or to selectively retrieve Web safe data from databases not available on the Web. The agent runs on the agent signer's rights and the code decides what it will access and what it won't.
Another cool agent is one for my PayPal credit card transactions. Paypal sends me purchase details to which I need to respond. This is all done on the backend through HTTP post methods. Again, this uses my Web class to parse out the data for me, and read it from the Web without the need for a Notes form or view of any kind.
Sub Initialize
Dim Session As New NotesSession
Dim db As Notesdatabase
Dim Doc As NotesDocument
Dim Webpage As New Web
Dim Index As Integer
Dim field As String
Dim html As String
Dim Parsed As Variant
Set db = session.currentdatabase
Set Doc = New Notesdocument(db)
Msgbox "IPN Initiated..............................
........................................
...............................................................................
...............................................................................
............................................................"
Doc.Form="IPN"
Webpage.ContentType = "POST"
Parsed=WebPage.CheckCGI("")
HTML=HTML+|<Form Method="Post"
Action="http://www.sandbox.PayPal.com/cgi-
bin/webscr">|
For index = Lbound(Parsed) To
Ubound(Parsed)
Call Doc.AppendItemValue(Parsed(Index,1),
Parsed(Index,2))
HTML=HTML+|<input type="hidden"
name="| & Parsed(Index,1) & |" Value="| &
Parsed(index,2) & |">"|
Next
HTML=HTML+|<input type="hidden"
name="cmd" value="_notify-validate">|
HTML=HTML+"</Form>"
Call Webpage.storeHTML(HTML)
Call Webpage.PrintHTML()
Call Doc.save(True, True)
End Sub
Do you have comments on this tip? Let us know.
This tip was submitted to the SearchDomino.com tip exchange by member John Goodwin. 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.
This was first published in November 2004