This morning I was working on a web application, and I came up with a pretty neat and simple little solution. So I just wanted to share it, in case anyone else need something similar.
I have a webpage with an HTML form. Each input tag has an attribute called notesfield, matching the name of the field in Notes where the value is stored:
<div class="col-md-3">
<label>First Name</label>
<input class="form-control" type="text" notesfield="FirstName" value="" />
</div>
<div class="col-md-2">
<label>Initial</label>
<input class="form-control" type="text" notesfield="MiddleInitial" value="" />
</div>
<div class="col-md-3">
<label>Last Name</label>
<input class="form-control" type="text" notesfield="LastName" value="" />
</div>
Then I created a simple function that will call an agent on the Domino server, which will return all the fields on the specified document as JSON. This function is called after the HTML page is fully loaded.
function loadNotesFields(docunid) {
var notesfieldname = "";
$.ajax({
url: "/database.nsf/ajax_GetNotesFieldFields?OpenAgent",
data: {"NotesUNID":docunid},
cache: false
}).done(function(data) {
$('input[notesfield]').each(function() {
notesfieldname = $(this).attr("notesfield");
$(this).val(data[notesfieldname]);
});
});
}The function is actually extremely simple, and here you can see the power of jQuery. What I do is to perform an Ajax call to a Domino URL, passing a UNID to the agent to use in the lookup. I set cache to false, to avoid the browser from reusing previously retrieved data (this is a good thing to do if the data retrieved can be suspected to change frequently).
The jQuery .ajax() functions returns the JSON in the data object, and when the call is done, the callback function loops through each input element with an attribute of notesfield, reads the value of said attribute and then sets the value of the input element to the corresponding Notes value.
The only thing left is to write the agent that will return the JSON. It could look something like this:
Dim urldata List As String
Sub Initialize
Dim session As New NotesSession
Dim webform As NotesDocument
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim urlstring As String
Dim urlarr As Variant
Dim urlvaluename As Variant
Dim i As Integer
Dim json As String
Set webform = session.DocumentContext
'*** Remove leading "OpenAgent" from Query_String
urlstring = StrRight(webform.Query_String_Decoded(0),"&")
'*** Create list of arguments passed to agent
urlarr = Split(urlstring,"&")
For i = LBound(urlarr) To UBound(urlarr)
urlvaluename = Split(urlarr(i),"=")
urldata(urlvaluename(0)) = urlvaluename(1)
Next
Set thisdb = session.CurrentDatabase
'*** Create content header for return data
Print "content-type: application/json"
'*** Get Notes document baed on NotesUIND argument
Set doc = db.GetDocumentByUNID(urldata("NotesUNID"))
'*** Build JSON for all fields in document except $fields
json = "{" + Chr$(13)
ForAll item In doc.Items
If Left$(item.Name,1)<>"$" Then
json = json + |"| + item.Name + |":"| + item.Text + |",|+ Chr$(13)
End If
End ForAll
'*** Remove trailing comma and line break
json = Left$(json,Len(json)-2)
json = json + "}"
'*** Return JSON
Print json
End SubHappy coding!














