機械翻訳について

条件付きで値を割り当てることによってしきい値の転記エラーを回避

推奨事項にもかかわらず、「データベースへの変更後の投稿」トリガーを引き続き使用する必要がある場合は、これがオブジェクトのいわゆる「ポスト・サイクル」にどのように影響するかを認識する必要があります。

たとえば、カスタム・ロジックで、現在のトランザクションで更新されるデータをフィルタ処理する問合せを実行する必要がある場合に、フィールド値の割当を実行するために使用できます。 トリガーによってフィールドの値が変更されると、オブジェクトに再度「ダーティ」とマークされます。 これにより、ADFは、定義されたすべての検証ルールにオブジェクトを再度適用し、新しい変更によって無効なオブジェクトが生成されないようにします。 オブジェクトが検証に合格した場合は、トリガーの最新のフィールド値の変更をデータベースに再度投稿する必要があります。 オブジェクトの変更を再ポストする処理では、トリガーが再度起動する可能性があります。 トリガーが1つ以上のフィールド値を無条件に再び変更した場合、このプロセスによって無限ループのように見えるサイクルが発生する可能性があります。 ADFは、特定のオブジェクトに転記サイクルを10回制限することで、この可能性を回避します。 10回(再)検証されたオブジェクトをデータベースにポストしようとすると、オブジェクトがトリガー・ロジックによって継続的に変更されているため、そのオブジェクトが"ダーティ"のままである場合は、ADFはポストしきい値を超えたことを示す例外をスローします:

Postしきい値制限に達しました。 まだpostedになっていないエンティティがあります

これが起こらない簡単な方法は、スクリプトで割り当てようとしているフィールドの値をテストし、割り当てようとしている値が現在の値から「異なる」である場合にのみ、フィールド割当て(または値を変更するためのsetAttribute()コール)を実行するようにすることです。 このアプローチを使用するスクリプトの例は次のようになります:

// After Changes Posted in Database Trigger
// If total score is 100 or more, set status to WON.
def totalScore = calculateTotalScoreUsingQuery()
if (totalScore >= 100) {
  // Only set the status to WON if it's not already that value
  if (Status != 'WON') {
    Status = 'WON'
  }
}