例: Agents

  1. 次の LotusScript コードは、データベースの各文書の [TotalSales] フィールドの値に基づいて [Category] フィールドに値を書き込みます。Java と式を使用する例 2 と例 3 と比較してください。スクリプトを使用するこの例では、コードの行数は式を使用する場合より多くなりますが、処理する文書を検索するアルゴリズムが含まれています。
    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. 次の Java エージェントは、データベースの各文書の [TotalSales] フィールドの値に基づいて [Category] フィールドに値を書き込みます。LotusScript と式を使用する例 1 と例 3 と比較してください。LotusScript の場合と同様に、Java コードにも処理する文書を検索するアルゴリズムが含まれています。
    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. 次の式は、全文書が処理対象として選択されていると想定して、データベースの各文書の [TotalSales] フィールドの値に基づいて [Category] フィールドに値を書き込みます。LotusScript と Java を使用する例 1 と例 2 と比較してください。式は、式外部の条件と SELECT ステートメントを組み合わせ、各文書について 1 回実行されます。データは暗黙に宣言され、ソースコードを簡潔にするために式の構文は短くなっています。
    FIELD Category := @If(TotalSales >= 200000; "Above Quota"; TotalSales >= 100000; "OK"; "Below Quota");
    SELECT @All
  4. 次の式は、[TotalSales] フィールドの値に基づいて、選択した文書の [Category] フィールドに値を書き込みます。SELECT ステートメントが SELECT @All 以外の場合は、適用される式の最初のステートメントでなければなりません。
    SELECT TotalSales >= 200000;
    FIELD Category := "Above Quota"
  5. 次の LotusScript コードは、データベースのすべての [OrderTotal] フィールドの 1 日の合計を検索し、1 日の合計を保存するデータベースに新しいレコードを書き込みます。データベースの各レコードには、[OrderNumber]、[Date]、[OrderTotal] の各フィールドがあります。このスクリプトは、データベースのすべての文書を検索し、ループ処理で日付を比較し、処理の対象を当日の文書だけに制限します。各文書について、このスクリプトは [OrderTotal] フィールドの値を dailyTotal 変数に加算します。このスクリプトは、書き込み先の文書の [OrderNumber] フィールドに文字列「DAILY TOTAL」を書き込み、[OrderTotal] フィールドに dailyTotal の値を書き込みます。
    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