Tip

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 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

There are Comments. Add yours.

 
TIP: Want to include a code block in your comment? Use <pre> or <code> tags around the desired text. Ex: <code>insert code</code>

REGISTER or login:

Forgot Password?
By submitting you agree to receive email from TechTarget and its partners. If you reside outside of the United States, you consent to having your personal data transferred to and processed in the United States. Privacy
Sort by: OldestNewest

Forgot Password?

No problem! Submit your e-mail address below. We'll send you an email containing your password.

Your password has been sent to:

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.