0

Lotus Notes データベースの 1 つで、スケジュールされたエージェントとドキュメントで同時に作業しているユーザーが原因で、複製/保存の競合が頻繁に発生します。

これを回避する方法はありますか。

ありがとう、HP

4

5 に答える 5

2

競合のマージに加えて、いくつかのオプションがあります。

スケジュールを変更するこれを回避する最善の方法は、スケジュールされたエージェントを、ユーザーがシステムにアクセスする可能性が低い時間帯に実行することです。クライアント ドキュメントの LastContact フィールドが、すべての連絡先ドキュメントをチェックするエージェントによって 1 時間ごとに更新される場合、代わりにエージェントを夜間に実行する必要があります。

ユーザー アクションでエージェントを実行する スケジュールに従ってエージェントを実行するのではなく、ユーザーが何らかのアクションを実行したときにエージェントを実行する必要がある場合もあります。たとえば、ユーザーがサポートする連絡先ドキュメントを保存するときに、エージェントを実行してクライアント ドキュメントを更新します。

フォームをより小さなビットに分割する 考慮すべき 3 番目のことは、すべてのデータがメイン フォームに表示されないようにフォームを再設計することです。たとえば、クライアントとの最近の連絡に関するコメントが現在クライアント ドキュメントのフィールドに保持されている場合、設計を変更して別の ClientMeeting フォームを作成し、そこから会議に関するコメントを埋め込みビューまたは計算されたテキスト (または Xpages を使用して設計されています)。

私は開発者ですが、rep/save は、何よりも設計上の決定の結果であることがはるかに多いと思います。

于 2012-07-26T16:51:38.660 に答える
0

これがミッション クリティカルなアプリケーションである場合は、lock-documents を使用してデータベースを作成することを検討してください。つまり、ユーザーがドキュメントを開くたびに、個別のロック ドキュメントが作成されます。

次に、エージェントをコーディングして、エージェントが変更したいすべての文書に対してロック文書が存在するかどうかを確認します。その場合は、そのドキュメントをスキップしてください。

ドキュメントを閉じると、ドキュメント ロックが解除されます。

lock-doc は、ドキュメントを読むだけでなく、開いたときに作成する必要があります。このようにして、ユーザーがドキュメントを読み取りモードで開いている場合、エージェントも変更できなくなります。これは、ユーザーが後で編集モードに変更して変更を加えることを禁止するためです。

エージェントの変更時間が長い場合は、lock-docs も作成する必要があります。

于 2012-08-15T22:25:57.553 に答える
0

私見ですが、ユーザーとエージェントの間の競合に対する最善の答えは、それらが異なるドキュメントで操作していることを確認することです。つまり、共通のキーを持つ 2 つのドキュメントがあります。ビューでそのように表示することが便利な場合は、それらを親と子にすることができますが、そうである必要はありません。この説明では、単に DocA と DocB と呼んでください。

DocA はユーザーによって読み取られ、更新されます。ユーザーが DocA を表示している場合、計算フィールド式は DbLookup または GetDocField を介して DocB から情報を取得できます。ユーザーが DocB を更新することはありません。

一方、DocB はエージェントによって読み取られ、更新されますが、エージェントは DocA のみを読み取ります。それらは更新されません。

アプリケーションを他の方法で設計する場合は、ロックを使用する必要があります。これにより、必要なときに何かを更新できない可能性が生じるか、競合が時折発生する可能性があり、解決する必要があるという事実を受け入れることができます。 .

この戦略を使用しても、データベースのレプリカが複数ある場合は競合が発生する可能性があることに注意してください。@Per Henrik Laustenの回答に従って、フォームプロパティの「競合処理」セクションを使用してレプリケーションの競合を最小限に抑えることができますが、既存のものについて話しているので、彼の回答に対する私のコメントも参照してください。この機能を使用するには、次のことを行う必要があります。

于 2012-07-26T15:43:06.003 に答える
0

問題のフォームで [競合処理] オプションを使用し、[競合をマージ] または [競合をマージ] を選択して、編集競合のマージを Notes に処理させることができます。

ヘルプ データベースから:

At the "Conflict Handling" section of the Form Info tab, choose one of the following options for the form:
Create Conflicts -- Creates conflicts so that a replication conflict appears as a response document to the main document. The main document is selected based on the time and date of the changes and an internal document sequence number.
Merge Conflicts -- If a replication conflict occurs, saves the edits to each field in a single document. However, if two users edit the same field in the same document, Notes saves one document as a main document and the other document as a response document marked as a replication conflict. The main document is selected based on the criteria listed in the bullet above.
Merge/No Conflicts -- If replication occurs, saves the edits to each field in a single document.  If two users edit the same field in the same document, Notes selects the field from the main document, based on time and date, and an internal document sequence number. No conflict document is generated, instead conflicting documents are merged into a single document at the field level.
Do Not Create Conflicts -- No merge occurs. IBM® Lotus® Domino(TM) simply chooses one document over another. The other document is lost.
于 2012-07-26T10:40:46.367 に答える
0

それ以降のバージョンの Notes では、ドキュメント ロックの概念があり、適切に使用することで競合を防ぐことができます (ただし、複雑さも増します)。

通常、ほとんどの競合は、ユーザーがシステムを使用していない深夜にエージェントを実行するように計画することで回避できます。それができない場合は、ロックが最善の解決策かもしれません。競合がそれほど多くない場合は、競合のみを表示するようにフィルター処理されたビューを追加すると、競合の検索と解決が容易になります。

于 2012-07-26T11:08:00.900 に答える