これは、独立したエージェントの実行順序を制御するために機能する、ほぼ確実な方法です。実際のメモ ドキュメントを疑似ロック ドキュメントとして使用します。
以前にこれを行った方法は、「ロック」を表す Notes ドキュメントを保持することです。複製/保存の競合の問題が発生しやすく、ビューで表示できないため、データベース プロファイル ドキュメントは使用しないでください。
「ロック」ドキュメントには、現在実行が許可されているかどうかを Java エージェントに通知するフラグを設定できます。Java エージェントには、次のようなコードが含まれているだけです。
Session s = NotesFactory.createSession();
Database db = s.getDatabase("This Server", "This database");
View vw = db.getView("(lockView)");
Document docControl = vw.getFirstDocument();
String sRunStatus = docControl.getItemValueString("runStatus");
boolean bContinue = false;
if (sRunStatus =="Go"){
bContinue = true;
}
if(bContinue){
//do agent code here....
// reset the status to "wait". The lotusscript agent should then set it to "Go"
// the other agent will execute on "wait" and then update the status to "Go" on
// completion to prevent simulatenous execution. Can also use different state names
// instead of go/wait, like run0, run1, run2 etc
docControl.replaceItemValue("runStatus", "wait");
docControl.save(true);
}
エージェントを使用して、コントロール ドキュメントの「runStatus」フィールドに「Go」/「wait」値を設定することに注意してください。必要なドキュメントは 1 つだけなので、ビューから最初のドキュメントを取得するだけで済みます。
同等のロジックをさらに簡単に LotusScript エージェントに追加する必要があります。私が見つけた唯一の欠点は、コントロール ドキュメントがまだ "go" に設定されておらず、ロジックを実行せずに "IF" テストが失敗したため、Java エージェントがコードを実行しない可能性があることです。 Java エージェントが lotusscript エージェントを使用して目的の順序で実行されないようにします。ただし、LotusScript エージェントがインスタンスを解放した場合は、次にスケジュールされたインスタンスで起動します。
このアイデアを拡張して、「RunAgent1」、「RunAgent2」などの特定の値を使用して、エージェントのスイートを管理したり、複数のエージェントをチェーンしたりすることもできます。別の利点は、実行開始時間、エラーなどもキャプチャできることです。あなたが必要とする....