ビジネス ルールでの current.update() の使用を回避する推奨プラクティスIssue current.update() 関数は、パフォーマンスに影響を与えるため、ビジネスルール内では避ける必要があります。update() 関数を呼び出すと、update() 関数のオブジェクトに関連付けられたビジネス ルールも呼び出され、同じビジネス ルールに対する一連の再帰呼び出しが発生する可能性があります。 システムにはこれに対する内部検出機能があり、そのようなビジネス ルールの無限の実行を防止しますが、これが検出されると、そのインスタンスでパフォーマンスの問題が発生することが知られています。 update() 関数を呼び出すと、通常、関数の対象であるオブジェクトに関連するビジネスルールが呼び出されることにも注意してください。したがって、場合によっては、別のオブジェクトを更新すると、元のオブジェクトも再度更新され、同様の問題が発生する可能性があります。繰り返しますが、システムはこれを検出するように設計されていますが、これらのビジネスルールを実行するとパフォーマンスの問題が発生する可能性があります。したがって、ビジネスルール内のスクリプトに追加された更新関数を確認する必要があります。 詳細 ビジネス ルールで必要なタスクを実行するには、current.update() を使用する代わりに、ほとんどの場合、別の方法があります。 「前」ビジネスルールでは、最上位のビジネスルールの完了時にレコードが保存されるため、現在のレコードの更新は必要ありません。さらに、場合によっては、(setAbortAction 関数を使用して) ビジネスルールのチェーン内で保存を停止する必要があり、レコードが既に更新されている場合は、データは既に保存されている可能性がありますが、これは通常、ビジネス ルールのロジックにより無効な保存となります。 「後」ビジネスルールでは、 current.update() も使用しないでください。後ビジネスルールで実行されるアクションは通常、順序の高い前ビジネスルールに追加できるため、明示的な update() 関数呼び出しは必要ありません。さらに、後ビジネスルールで更新すると、すべての前ビジネスルールが再度実行されるため、前述のように、パフォーマンス処理の問題が発生する可能性があります。 「非同期」ビジネスルールは、この説明では、基本的には変更後のビジネスルールと同じです。これは、実際のレコードが保存された後に実行されるビジネスルールですが、ユーザーの現在のセッションでは実行されません。標準の「後」ビジネスルールと同様に、このビジネスルールで呼び出す必要がある現在のレコードのフィールドに対する更新または変更は、current.update() 関数を必要とせずに「前」ビジネスルールで呼び出すことができる必要があります。 current.update() 関数は、「クエリ」タイプのビジネスルールで使用できないだけでなく、実際には呼び出すことができず、このタイプのビジネスルールで呼び出すとエラーが発生します。この理由は、このビジネスルールが呼び出された時点では、レコードのリストまたはコレクションの最初のクエリ時に「現在の」レコードの概念がないためです。 「表示」ビジネスルールは、レコードが最初に画面に表示されたときに実行され、通常、一時的な内部変数に値を入力するために使用されます。ロードされました原則として、レコードが表示されたらすぐにレコードを保存する必要はありません。保存すると、そのレコードに関連付けられたビジネスルールの通常のチェーンが呼び出されます。 したがって、ビジネスルールで current.update() 関数呼び出しを実際に使用する必要はほとんどありません。これは、ビジネスルールを通じて呼び出される可能性があるクライアントスクリプトにも適用されます。必要なことを達成するために別のメソッドを優先して current.update() の使用を回避できる場合は、あらゆるビジネスルールでこの関数の使用時にパフォーマンス上の問題が発生する可能性が知られているため、通常は代替オプションを使用する必要があります。 場合によっては、current.update() 関数を使用する既存のビジネスルールが見つかることがあります。Out Of The Box のオブジェクトである場合もあります。これらはまれな例外であり、同じタスクを実行する別のメソッドが見つかった場合は、代わりにそのメソッドを使用する必要があります。 最後に "current" は GlideRecord オブジェクトへの参照であり、そのオブジェクトは単一のレコードではなく複数のレコードを含む結果セットをカプセル化する場合があります。 current.setWorkflow(false) が current.update の使用前に呼び出された場合、結果セットで現在選択されているレコードだけでなく、後続の処理中のすべてのレコードに対してもビジネス ルールの実行と監査が無効になります。Resolutionまれに、current.update() を回避できず、必要に応じて更新を実行するための他のメソッドが見つからないために使用する必要がある場合は、パフォーマンスの問題を引き起こす可能性のある再帰を防ぐために current.update () は、setWorkflow(false) 関数と組み合わせて使用する必要があります。例として、次のコード スニペットは、レコードの非常に基本的な更新と setWorkflow() 関数の使用を示しています。 current.status = 1;current.setWorkflow(false);current.update();current.setWorkflow(true); ただし、これにより、ビジネスルールがトリガーされなくなり、更新が監査されなくなります。上記の説明を参照してください。