IBM®
Skip to main content
    Country/region select      Terms of use
 
 
   
     Home      Products      Services & solutions      Support & downloads      My account     
 
developerWorks
AIX and UNIX
Information Mgmt
Lotus
New to Lotus
Products
How to buy
Downloads
Live demos
Technical library
Training
Support
Forums & community
Events
Rational
Tivoli
WebSphere
Java™ technology
Linux
Open source
SOA and Web services
Web development
XML
My developerWorks
About dW
Submit content
Feedback



developerWorks  >  Lotus  >  Technical Library
developerWorks


Notes.Net Exposed
Gathering feedback on your Web site

by
Barbara Burch
(with Murray Hurvitz)

Iris Today Archives

Level: Intermediate
Works with: Designer 4.6
Updated: 04/01/1998

Inside this article:
Categorizing feedback

Responding to the feedback

Design and setup tips


Related links:
Notes.net Webmail download

Viewing Notes.net through native Notes

Get the PDF:

EXPD.pdf(441Kb)

Get Acrobat Reader


    [Editor's note: Continuing our series exposing how the Notes.net site is run, this article gives you a look at how we gather feedback on the site, and how we go about responding to it.]

    Introduction
    There's no such thing as a captive audience on the Web -- especially when a better site could be just one click away. And, staying in touch with the needs of that audience can be tough. Just like with other types of media, you can't see the faces of your audience to gauge their reactions, and you can't hear their comments, laughs, or groans. But, you can read about those reactions. You can give users a voice on your site by allowing them to send you their feedback.

    OK, so gathering Web site feedback is not really a revolutionary thing. For several years Web sites have allowed users to e-mail comments or questions about a site to the webmaster@somesite.com. However, if you rely on only providing a webmaster mail address for your site, good luck sorting through all your e-mail!

    This article will show you how to put the power of Domino/Notes to work in gathering your Web site feedback. The feedback we gather here at Notes.net comes in as either e-mail or on our customized feedback forms. You'll learn how we collect this feedback into one central database, automatically sort the feedback into views, and use an agent to respond to several messages at once. In fact, the database is available for downloading, and you can customize it to fit your own needs. (The database requires Release 4.6 or later.)

    All into one: Collecting feedback into one database
    The way we gather feedback for Notes.net involves just one central database, which we call our "Webmaster mail" database. Actually, this database allows us to collect much more than just Webmaster mail.

    As you may have noticed, we provide several options for submitting feedback on Notes.net, including various e-mail addresses and a customized feedback form. First, users can send mail to either webmaster@notes.net or ideas@notes.net. We also include "mailto" links to these two addresses on different pages of the site. (We created the link by choosing Create - Hotspot - URL Link, and entering the mailto URL in the format "mailto:somesite.com.") Both addresses direct mail to our Webmaster mail database, which stores the mail messages using standard mail forms. To learn more about how to set up this mail-in database, see the "Design and setup tips" section later in this article.

    In addition, we provide a feedback link at the bottom of every page of our site. To do this, we again create a URL link, but this time use a shorter version of the Domino URL, http://www.notes.net/feedback. (We specified this URL redirection in the Domino Configuration database, domcfg.nsf. Then, if we need to update the URL later, we only need to change it in this one place.) For users viewing Notes.net through native Notes, we also provide the feedback link as an action link with the following formula:

    @Command([Compose]);
    "Notes1/NotesWeb":"webmail.nsf"; "Comment")

    When users click the feedback link, Domino displays the feedback form (called "Comment") in our Webmaster mail database. And when users submit the feedback, Domino uses the same form to store the feedback.

    A closer look at the feedback form
    The feedback form is the key form in our Webmaster mail database, because it's how users actually enter feedback, and it's how Domino stores the feedback. Here's the part of the form that displays to the user:

    Feedback form

    Notice that the form contains standard mail fields, such as From, Subject, and Body. Each field contains an input validation formula to make sure the user fills it in. For example, here's the formula for the Author field:

    FailureMessage:="You must type an Author name. Hit the BACK button to continue.";
    @If(Author="";@Failure(FailureMessage);@Success)


    In addition, we make sure that the user entered a valid e-mail address in the From field. Here's the input validation formula for the From field:

    domain := @RightBack(From; ".");
    @If(
    @Trim(From) = "" |
    !@Contains(From; "@") |
    @Length(domain) < 2 | @Length(domain) > 3 |
    (@Length(domain) = 3 & @Member(@LowerCase(domain); "com":"edu":"org":"net":"gov":"mil":"int") = 0) |
    @Trim(@Left(From; "@")) = "";
    @Failure("A valid Internet e-mail address is required. Please go back to the form to enter or correct the e-mail address."); @Success)


    The rest of the form is pretty straightforward. The CreatedDate field uses the formula @Created. The Category keyword field contains several options for how users can categorize their feedback. The default is "Notes.net General Questions & Comments." And, finally, there's a standard Domino Submit button with the formula @Command([FileSave]). Users click Submit, and the form is then saved in the database.

    One last field we include on the form is a hidden $$Return field. We use this field to display a custom response message that thanks users for submitting feedback and includes a link back to the Notes.net home page. Here's the formula for the $$Return field:

    REM "Thank the user, personalize based on the first name.";
    FirstName := @ProperCase(@Left(Author; " "));
    DispFirstName := @If(FirstName = ""; Author; FirstName);
    Thanks := "<h2>Thank you, "+ DispFirstName + ", for visiting Notes.net and for taking the time to send your comments. We appreciate your thoughts and concerns and consider your feedback a primary tool for improving Notes.net. </h2><hr>";


    HomePage := "<b>Click <a href=\"/\">here</a> to go back to Notes.net</b> ";

    REM "Assemble the HTML to be returned.";
    Msg := Thanks + TemporaryNotice + TopicView + SmallFont + TopicViewExpanded + TopicViewCollapsed + EndFont + CategoryView + AuthorView + DateView + HomePage + DiscussionHome ;


    So, now that we've thanked the user for their feedback, let's look at what happens next.

    Categorizing feedback
    All Notes.net feedback -- whether it's from a feedback form or mail message -- arrives in our central, mail-in database, so the team of "webmasters" can more easily manage the feedback. When submitted, the feedback is automatically categorized into views (by view selection formulas), so each team member can respond to the feedback in one or two specific views.

    An advantage of this approach is that the whole Notes.net team can readily see the "active" feedback that needs a response -- instead of feedback sitting in one person's mail file. Another advantage is that since we answer the feedback in a central place, the responses are also stored there. This way, the team can see any message, who responded to it, and what they wrote.

    Here's how the feedback is organized:

    Feedback views


    Notice that the Incoming view includes most of the categories that users can select on the feedback form. These cascaded views (Incoming\Download Problems, Incoming\General Questions & Comments, and so on) all share the same view selection formula. For example, here's the formula for the "General Questions & Comments" category:

    SELECT ((Form = "Comment") | (@IsResponseDoc)) & ((Categories != "Archive") & (Category =
    "Notes.net General Questions & Comments"))


    This view automatically contains all feedback forms submitted with the "General Questions" category selected. Only the "active" feedback that needs a response appears in this view. When we reply to a piece of feedback, the Categories field is programmatically created and set to "Archive." Then, both the feedback form and its response document move into the Answered view. (In case the archiving process doesn't work, this view also displays the responses. We'll discuss the archiving process more in the next section.)

    Feedback that users send to webmaster@notes.net automatically appears in the "Incoming\Webmaster" view. Here's the view selection formula for the Webmaster view:

    SELECT ((@Contains(@LowerCase(SendTo); "webmaster")) & (Categories != "Archive")) | @IsResponseDoc

    This view displays all incoming mail messages where the SendTo field is "webmaster." Again, when we reply to the feedback, the Categories field is programmatically created and set to "Archive." And, both the original message and its response document move into the Answered view. In case the archiving process doesn't work, this view also displays the responses.

    Feedback that is sent to ideas@notes.net works the same way as for the Webmaster mail messages, except this time, the messages appear in the "Ideas\Iris Today Article Ideas/Suggestions" view. In addition, the view also includes any feedback forms with the "Iris Today Article Ideas/Suggestions" category selected.

    Once the feedback arrives in a view, it's time for one of the Notes.net "webmasters" to respond to it.

    Responding to the feedback
    As we already mentioned, when users submit feedback to Notes.net, they automatically receive our customized response form ($$Return) that thanks them for their input. So, our first objective is to take immediate action on the feedback. We can then reply to users either on a one-by-one basis, or to several users at once. The "batch" response ensures that the same, technically accurate message gets to each person.

    Responding to users one-by-one
    To reply to users on a one-by-one basis, we can click the "Reply" or "Reply with History" buttons on the status bar, or choose Create - Reply or Reply with History.

    Webmaster Mail, Incoming\All view

    Both Reply forms work about the same as the ones in the standard mail template. We simply include additional fields for archiving purposes. Here's the Reply form:

    Reply form

    Most of the hidden fields at the top of the form handle the e-mail processing. For example, the hidden fields enable the SendTo and Subject fields to be inherited from the original message. We added the hidden formtype, docMainUNID and InheritedCategory fields so that we can archive the response along with its original message.

    Because we use a generic Webmaster ID for responding to feedback, the AnsweredBy field allows us to keep a record of the team member who actually responded to the user. The AnsweredBy field includes the name of each Notes.net "webmaster," and has an input validation formula that makes sure a name is selected. When a name is selected in the AnsweredBy field, the AnswerDate field displays with the current date (@Today). Because the AnswerDate field is a date field in a layout region, a calendar control automatically displays next to the field for selecting a different date.

    In fact, the AnsweredBy and AnswerDate fields are the main components of our archiving process. The way this works is that the AnsweredBy field also has an input translation formula that runs when the document is saved. Here's the formula:

    FIELD Categories := @If((SendTo != "ideas") & (Category != "Notes.net Design Feedback"); "Archive"; "");
    AnsweredBy


    This is where the Categories field is programmatically created and set to "Archive." (We don't create the Categories field for documents in the "Ideas/Notes.net Design Feedback" view, because we don't want this feedback to be archived.) As we talked about earlier, the view selection formulas use the Categories field as a condition. When the field is set to "Archive," the documents move to the Answered view. Otherwise, they remain in their original view.

    The other part that makes this work is that the QuerySave event on the form calls our EmailSave script library. EmailSave includes a subroutine called "Answered," which handles the actual archiving of the parent document.

    Responding to users with an agent
    To reply to several users at once, we select the documents from the view(s), and then click the Custom Auto Response button on the status bar. The following dialog box displays, prompting for the subject of the message, values for the AnsweredBy and AnsweredDate fields (which we again use in the archiving process), and the content type for the message.

    Auto Response dialog

    When we click OK, the following message is automatically created. Notice that the To and Subject fields are filled in, as well as the content for the message. (In this case, we selected the "Domino/Notes support info" content type. If we had selected the Custom content type, only the message skeleton would appear, with a space for us to type in the custom content.)

    Auto Response message

    Looking at the code for the Custom Auto Response
    The code behind the Custom Auto Response agent is mainly in its Initialize and CreateResponse events. (To view the code, open the agent from the Agents view, and look through the different events in the Agent Builder window.) Here's the Initialize event:

    Sub Initialize
    Set s = New NOTESSESSION
    Set uiwrksp = New NOTESUIWORKSPACE
    Set db = s.CURRENTDATABASE
    Set sName = New NotesName(s.UserName)

    Set collection = db.UNPROCESSEDDOCUMENTS

    For i = 1 To collection.count
    Set doc = collection.GetNthDocument(i)
    Redim Preserve userAddress(i) As String
    userAddress(i) = doc.GetItemValue("From")(0)
    Next

    CreateResponse
    End Sub


    The key part of this code is the For loop that grabs the address from each selected document (the messages to which we want to respond). Then, we call the CreateResponse subroutine. The first part of the subroutine creates the new reply, and opens the dialog box "AutoRespDiag" for gathering the values to put on the reply. (These values are the Subject, AnsweredBy, AnsweredDate, and content type.)

    Sub CreateResponse

    Set docMemo = New NOTESDOCUMENT(db)
    ret = uiwrksp.DialogBox("AutoRespDiag", True, True, False, False, False, False, "Auto Response", docMemo)
    If ret = False Then Exit Sub

    Then, we create the body of the reply. We used Case statements for the two content type choices. (The Case statements work for us right now, because we currently have only two specific messages. But, if we wanted to include more types of messages, we could instead use a separate function for the messages or even grab the responses from a database.) If the "Custom" content type is selected, we simply leave that space of the message blank.

    Dim bodyField As New NOTESRICHTEXTITEM(docMemo, "Body")

    Call docMemo.ReplaceItemValue("SendTo", userAddress)
    Call docMemo.ReplaceItemValue("From", sName.Common)
    Call docMemo.ReplaceItemValue("Form", "Reply")
    Call bodyField.ADDNEWLINE(2)
    Call bodyField.APPENDTEXT("Dear Notes.net user:")
    Call bodyField.ADDNEWLINE(2)

    Select Case docMemo.GetItemValue("RespChoice")(0)
    Case "Looking for support"
    Call bodyField.APPENDTEXT("The Notes.net Web site is a technical site that focuses on Lotus Notes and Lotus Domino." _
    & " Our site is brought to you by the developers of the software." _
    & " We are not a support site, but strongly encourage you to visit the Lotus Web site for customer support at http://support.lotus.com.")
    Case "Looking for sales"

    Call bodyField.APPENDTEXT("Thank you for your interest in purchasing Lotus Notes and Lotus Domino." _
    & " Our site is brought to you by the developers of Lotus Notes and Lotus Domino" _
    & " and we do provide free, trial versions of our software." _
    & " But to purchase an official copy of Lotus Notes and Lotus Domino," _
    & " please visit the Lotus Web site at http://www.lotus.com/home.nsf/welcome/purchasing or call 1-800-343-5414.")
    End Select

    Call bodyField .ADDNEWLINE(2)
    Call bodyField .APPENDTEXT("Thanks for using our site!" )
    Call bodyField .ADDNEWLINE(1)
    Call bodyField .APPENDTEXT(sName.Common)
    Call bodyField .ADDNEWLINE(1)
    Call bodyField .APPENDTEXT("Notes.net Team")
    Call docMemo.Save(True, True)

    After saving the document, we take care of the archiving information. Similar to what happens in the Answered subroutine for individual replies, this code sets values for the AnsweredBy and AnswerDate fields on the parent documents. In addition, we create the Categories field and set it to "Archive" on all the parent documents. This way, both the response and original message will move to the Answered view. Finally, we open the message in edit mode, so the "webmaster" can see the completed document before sending it.

    For i = 1 To collection.count
    Set doc = collection.GetNthDocument(i)
    Call doc.ReplaceItemValue("AnsweredBy", docMemo.GetItemValue("AnsweredBy")(0))
    Call doc.ReplaceItemValue("AnswerDate", docMemo.GetItemValue("AnswerDate")(0))

    Call doc.ReplaceitemValue("Categories", "Archive")
    Call doc.Save(True, True)
    Next

    Set uidoc = uiwrksp.EDITDOCUMENT(True, docMemo)
    Call uidoc.FieldSetText("Subject", docMemo.GetItemValue("Subject")(0))
    Call uidoc.Refresh
    End Sub


    Design and setup tips
    We designed our mail-in database based on the mail template, but you could use any database that contained a view and form for displaying the feedback. (The form must contain the appropriate mail fields SendTo, From, Body, and Subject.) To allow the database to receive mail, you create a Mail-In database document in the Public Address Book. This document assigns a mail-in name, such as webmaster, for addressing mail to the database, and specifies the location of the database. You can create as many alternate mail addresses as you want for the same database; you just need to specify the names in separate Mail-In database documents.

    Because users need to create the new feedback forms in the database, the default access in the ACL should be set to Depositor access. In addition, you should have a replica of the database on all the servers for your site.

    One last thing is you need to have the Domino SMTP MTA installed, so you can transfer Internet mail to/from Notes. For more information on the SMTP MTA, see Domino Administration Help.

    Conclusion
    Of course, gathering feedback is an ever-changing process because you're always tweaking things to better meet the needs of your users. For example, some of the enhancements we have planned include: updating the feedback form to include new categories, creating a view for repeat responses (when users respond to one of our responses), and more.

    The important thing is that Domino/Notes opens up all these options for gathering Web site feedback. By using a central database with forms, views, and agents for managing the feedback, you have more time for responding to the reactions to your site. Improving your Web site according to the feedback may not keep an audience captive -- but you can at least try to keep them captivated.


What do you think of this article?

    About IBM Privacy Contact