Simple solution to most Domino issues

Simple solution to most Domino issues

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.

    By submitting your registration information to SearchDomino.com you agree to receive email communications from TechTarget and TechTarget partners. We encourage you to read our Privacy Policy which contains important disclosures about how we collect and use your registration and other information. If you reside outside of the United States, by submitting this registration information you consent to having your personal data transferred to and processed in the United States. Your use of SearchDomino.com is governed by our Terms of Use. You may contact us at webmaster@TechTarget.com.

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

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.