- 次の 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
- 次の 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();
}
}
}
- 次の式は、全文書が処理対象として選択されていると想定して、データベースの各文書の [TotalSales] フィールドの値に基づいて [Category] フィールドに値を書き込みます。LotusScript と Java を使用する例 1 と例 2 と比較してください。式は、式外部の条件と SELECT ステートメントを組み合わせ、各文書について 1 回実行されます。データは暗黙に宣言され、ソースコードを簡潔にするために式の構文は短くなっています。
FIELD Category := @If(TotalSales >= 200000; "Above Quota"; TotalSales >= 100000; "OK"; "Below Quota");
SELECT @All
- 次の式は、[TotalSales] フィールドの値に基づいて、選択した文書の [Category] フィールドに値を書き込みます。SELECT ステートメントが SELECT @All 以外の場合は、適用される式の最初のステートメントでなければなりません。
SELECT TotalSales >= 200000;
FIELD Category := "Above Quota"
- 次の 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