We have a Lotus Notes application and we would like to automate
creating a new document or record in that application from another web
I am not asking for the entire code. All I would like is some
direction or high level steps to accomplish the above.
Here are the details:
User action on web application triggers a PERL script to create a new
record (document) in Lotus Notes (or Domino).
How can I accomplish the above? Clearly there is no Notes Client
available to the Web Application. So do I write an agent that creates
a new document? How can I call this agent from my web application? Or
am I taking the wrong approach?
Any suggestions would be greatly appreciated!
I cd not look into details if there's another way to do it, but if you
not able to do it with agent, let me know.
As "kaps" also suggest, the agent approach is the best. I am using it myself
in several applications.
This is what I would do:
Create an agent that read the URL parameters you send to it.
Let's call the agent CreateNewDocument, and have two fields we want to fill
out when the document is created. The Perl script can then call the URL like
The agent read the arguments and populate the corresponding fields, then
save the document. I would highly recommend using a list to store the
parameters, then you have a generic function you can re-use in any
In my article in the November/December 2006 issue of The View (starting on
page 25) you have code for this.
Here is a class I just wrote to parse an incoming HTTP GET or POST. Put it
in a script library called for example "URL.class":
Public url As String
Private params List As String
Public Sub New()
Dim session As New NotesSession
Dim doc As NotesDocument
Set doc = session.DocumentContext ' Document with all CGI variables
' Check if HTTP GET or POST was used...
If Instr(doc.Query_String(0),"&") > 0 Then ' GET was used
url = doc.Query_String(0)
Elseif Instr(doc.Request_Content(0),"&") > 0 Then ' POST was used
url = "&" & doc.Request_Content(0)
Else ' No parameters
Public Function GetParams() As Variant
Dim offset As Integer
Dim startpos As Integer
Dim midpos As Integer
Dim endpos As Integer
Dim nextpos As Integer
Dim dataname As String
Dim datavalue As String
startpos = Instr(url,"&") ' Start of first parameter
Do While Not startpos = 0
nextpos = Instr(startpos+1, url, "&") ' Start of next parameter
If nextpos = 0 Then ' We reached the end
endpos = Len(url)+1
endpos = nextpos
midpos = Instr(startpos+1, url, "=") ' Position of = character
dataname = Mid$(url,startpos+1,midpos-startpos-1) ' Get name
datavalue = Mid$(url,midpos+1,endpos-midpos-1) ' Get value
params(dataname) = datavalue ' Add value to list
startpos = nextpos ' Set new start position
GetParams = params
And here is a sample agent that uses the class and print the arguments to
Dim url As New URLclass
Dim params As Variant
params = url.GetParams()
Forall x In params
Print Listtag(x) & " = " & params(Listtag(x)) & "<br>"
Just expand on that code to create the document. Good luck!
I am also posting this code to my blog at
A: Because it messes up the order in which people normally read text.
Q: Why is top-posting such a bad thing?
Q: What is the most annoying thing in e-mail?
Visit my blog at http://www.bleedyellow.com/blogs/texasswede/
> This is what I would do:
> Create an agent that read the URL parameters you send to it.
> Let's call the agent CreateNewDocument, and have two fields we want to
> fill out when the document is created.
Followup: Tim Tripcony (http://www.bleedyellow.com/blogs/trip/) posted the
following as a comment to my blog entry at
"If the Perl script issues a POST request instead of a GET, you can do this
without an agent:
That way you can just post the field/value pairs and they'll be written to
the correct fields automatically. It'll also honor any WebQuerySave agents
defined on the form, $$Return, input validations, etc."