Examples: Agents

  1. This LotusScript code writes a value to the Category field based on the value of the TotalSales field of each document in the database. Compare with Examples 2 and 3, which use Java and formula solutions. The script example requires more lines of code than the formula solution but includes the algorithm for finding the documents being processed.
    Sub Initialize
         Dim session As New NotesSession
         Dim db As NotesDatabase
         Dim dc As NotesDocumentCollection
         Dim doc As NotesDocument
         Set db = session.CurrentDatabase
         Set dc = db.AllDocuments
         Set doc = dc.GetFirstDocument
         While Not(doc Is Nothing)
              category = doc.Category
              totalSales = doc.TotalSales
              Select Case totalSales(0)
              Case Is >= 200000 : category(0) = "Above Quota"
              Case Is >= 100000 : category(0) = "OK"
              Case Else : category(0) = "Below Quota"
              End Select
              doc.Category = category
              Call doc.Save(True, False)
              Set doc = dc.GetNextDocument(doc)
         Wend
    End Sub
  2. This Java agent writes a value to the Category field based on the value of the TotalSales field of each document in the database. Compare with Examples 1 and 3, which use LotusScript and formula solutions. As with LotusScript, the Java code includes the algorithm for finding the documents being processed.
    import lotus.domino.*;
    public class JavaAgent extends AgentBase {
      public void NotesMain() {
        try {
          Session session = getSession();
          AgentContext agentContext = session.getAgentContext();
          // (Your code goes here) 
          Database db = agentContext.getCurrentDatabase();
          DocumentCollection dc = db.getAllDocuments();
          Document doc = dc.getFirstDocument();
          while (doc != null) {
            double totalSales = doc.getItemValueDouble("TotalSales");
            if (totalSales >= 200000)
              doc.replaceItemValue("Category", "Above quota");
            else if (totalSales >= 100000)
              doc.replaceItemValue("Category", "OK");
            else
              doc.replaceItemValue("Category", "Below quota");
            doc.save(true, false);
            doc = dc.getNextDocument();
            }
        } catch(Exception e) {
          e.printStackTrace();
        }
      }
    }
  3. This formula writes a value to the Category field based on the value of the TotalSales field of each document in the database, assuming that all documents are selected for processing. Compare with Examples 1 and 2, which use LotusScript and Java solutions. The formula executes once on each document selected by combining outside criteria with the SELECT statement. Data declarations are implicit and formula syntax is cryptic making for compact source code.
    FIELD Category := @If(TotalSales >= 200000; "Above Quota"; TotalSales >= 100000; "OK"; "Below Quota");
    SELECT @All
  4. This formula writes a value to the Category of selected documents based on the value of the TotalSales field. The SELECT statement, if it is not SELECT @All, must precede the statements in the formula that it applies to.
    SELECT TotalSales >= 200000;
    FIELD Category := "Above Quota"
  5. This LotusScript code finds the sum of all OrderTotal fields in a database for one day, and writes a new record to the database containing the daily total. Each record in the database has OrderNumber, Date, and OrderTotal fields. The script finds all the documents in the database, then uses a loop and a comparison of dates to limit processing to today's documents. For each document, the script adds the OrderTotal to a dailyTotal variable. The script places the words "DAILY TOTAL" in the OrderNumber field for the document that it writes, and places the dailyTotal value in the OrderTotal field.
    Sub Initialize
         Dim session As New NotesSession
         Dim db As NotesDatabase
         Dim dc As NotesDocumentCollection
         Dim doc As NotesDocument
         Dim dateDate As New NotesDateTime("")
         Dim dateToday As New NotesDateTime("Today")
         Set db = session.CurrentDatabase
         Set dc = db.AllDocuments
         dailyTotal = 0
         Set doc = dc.GetFirstDocument
         While Not(doc Is Nothing)
              odate = doc.Date
              dn = Datenumber(Year(odate(0)), _
              Month(odate(0)), Day(odate(0)))
              orderNumber = doc.OrderNumber
              If dn = Today _
              And orderNumber(0) <> "DAILY TOTAL" Then
                   orderTotal = doc.OrderTotal
                   dailyTotal = dailyTotal + orderTotal(0)
              End If
              Set doc = dc.GetNextDocument(doc)
         Wend
         Dim docNew As New NotesDocument(db)
         Set itm = _
         docNew.AppendItemValue("OrderNumber", "DAILY TOTAL")
         Set itm = _
         docNew.AppendItemValue("OrderTotal", dailyTotal)
         Set itm = _
         docNew.AppendItemValue("Date", Date$)
         Call docNew.Save(True, False)
    End Sub