ワークフロースクラッチパッドのトラブルシューティング |欠損値または予期しない値の診断Issue ワークフロースクラッチパッドは、ワークフローの実行中にデータを保存するために使用されます。スクラッチパッドの値は、ワークフロー内の任意のアクティビティで設定および/またはアクセスできます。 ワークフローコンテキストを実行するためのスクラッチパッドの表示 ServiceNow のメインウィンドウで、ワークフローアプリケーションから Active Context モジュールを選択します。調査中の実行中のワークフローコンテキストを選択して、 ワークフローコンテキスト フォームを開きます。スクラッチパッドフィールドが表示されない場合は、フォームレイアウトをカスタマイズして、フォームにフィールドを追加します。このフィールドには、スクラッチパッドの内容の JSON シリアル化が表示されます。 注: 大きなスクラッチパッドの場合、シリアル化された JSON データが読みにくい場合があります。フィールドのコンテンツを切り取ってオンラインの JSON パーサー (http://json.parser.online.fr など) に貼り付け、データのナビゲート可能なツリービューを取得します。 ワークフローログへのワークフロースクラッチパッドのログ記録 多くの場合、スクラッチパッドの内容とワークフロー内の特定のステップを表示すると便利です。そのようなときにコンテキストフォームを手動で表示することは困難または不可能です。ただし、ログアクティビティを追加するか、既存のアクティビティのスクリプトブロックにスクリプト行を挿入することで、スクラッチパッドの内容を簡単に記録できます。次に、後でコンテキストログを表示して、その時点でスクラッチパッドが存在していたかどうかを確認します。 ログアクティビティを使用したスクラッチパッドのログ記録 ログアクティビティをアクティビティツリーからワークフロー内の任意の移行にドラッグします。開いた Activity フォームで、アクティビティの一意の名前とメッセージの次の行を入力します。${activity.name} では、スクラッチパッドは ${workflow.scratchpad} です。 既存のアクティビティのスクリプトブロックからスクラッチパッドをログ記録する 既存のアクティビティのスクリプトブロックの先頭に次の行を追加して、スクラッチパッドの内容をログに記録します。workflow.info('at ' + activity.name + ' スクラッチパッドは '+ new JSON().encode(workflow.scratchpad)); ワークフローでスクラッチパッドデータの問題が発生しているかどうかの判断 ワークフロースクラッチパッドに欠落または変更された値がある場合は、上記の手法を使用して、影響を受けるワークフローの関連ポイントでスクラッチパッドの内容を記録し、スクラッチパッドデータが予期せず変更されている場所を特定します。データが変更されている場所を把握すると、ワークフローロジックの欠陥を特定するのに役立つ場合があります。それでもスクラッチパッドデータが変更される理由が説明されない場合は、以下の問題が問題の原因である可能性があります。 大きなスクラッチパッドデータが切り捨てられる スクラッチパッドは 8,000 文字に制限されており、その制限に達すると切り捨てられます。これは、実行コンテキストフォームでスクラッチパッドを表示するか、スクラッチパッドをログ記録することで確認できます。 ソリューション: wf_context.scratchpad フィールドの辞書エントリをカスタマイズすることで、この制限を増やすことができます。ただし、ワークフローを再設計することが推奨される解決策です。スクラッチパッドは、ワークフローの実行中に必要な一時データのみを保持することを目的としています。永続的に保存する予定のデータは、できるだけ早く他のレコードに移動する必要があります。 スクラッチパッドにデータがないか、予期しない値が含まれています Dublin リリースより前は、マルチブランチワークフローで 2 つのアクティビティを同時に実行でき、一方のアクティビティで行われたスクラッチパッドの変更が他方のアクティビティによって上書きされることがありました。この問題は、影響を受けるワークフローコンテキストの アクティビティインデックス を確認することで確認できます。コンテキストフォームで、アクティビティ履歴関連リストを見つけます。アクティビティインデックス列が表示されない場合は、リストをカスタマイズして追加します。アクティビティインデックスでソートします。同じインデックス値を持つ 2 つのアクティビティがある場合、ワークフローでこの問題が発生しています。 ソリューション: Dublin リリースにアップグレードします。ワークフローをより連続的にします。この問題は、マルチブランチワークフローが異なる移行パスを同時に実行している場合にのみ発生します。ワークフローを再設計し、分岐を 1 つの移行パスに統合することで分岐の数を減らします。 スクラッチパッドにデータがないか、予期しない値が含まれています ワークフローの実行中にワークフローコンテキストを変更すると、スクラッチパッドのデータが失われる可能性があります。これは、ワークフローの実行中にコンテキストレコードを表示し、[ 更新 ボタンをクリックしたときに発生する可能性があります。実行中のワークフローがスクラッチパッドに加えた変更は、フォームがロードされたときにスクラッチパッドの内容で上書きされます。この問題は、ワークフローコンテキストレコードの 更新済み および 更新者 フィールドを調べて、予期しない値を探すことで調査できます。 ソリューション: ワークフローコンテキストフォームの 更新 ボタンを使用する必要はほとんどありません。Eureka リリースでは、 更新 ボタンが削除されました。そのフォームを表示する権限を持つすべてのユーザーを教育します。ACL を追加して、 wf_context テーブルの更新アクセスを制限することを検討してください。カスタムビジネスルールまたはその他のカスタムスクリプトによって、コンテキストレコードやスクラッチパッドが予期せず更新されている可能性があります。これは悪い習慣であり、強くお勧めしません。ワークフローエンジンのみがワークフローコンテキストレコードを変更する必要があります。この問題が発生した場合は、[ ビジネスルールのデバッグ をオンにして、問題の原因となっているビジネスルールを特定します。ワークフローコンテキストを変更する必要がないようにスクリプトを再設計します。 スクラッチパッドにデータがないか、予期しない値が含まれています ユーザーは、 送信 ボタンを複数回クリックするなどの UI アクションを繰り返すことで、複数のワークフローコンテキストを誤って開始する可能性があります。これが発生すると、一部のスクラッチパッドデータが失われたように見えることがあります。この問題は、通常、ワークフロー アプリケーションの すべてのコンテキスト リストを確認することで確認できます。ほとんどの場合、同じワークフローの複数のコンテキストが非常に短い時間で起動します。また、この問題が長期間にわたって発生する可能性もあります。これは識別するのがより困難です。同じ current レコードに対して同じワークフローの複数のコンテキストが実行されていないか探します。コンテキストの開始時刻と、ユーザーがワークフローを開始したと考えている時刻を比較することも役立ちます。 ソリューション: ユーザーを教育します。より早くユーザーに制御が戻るようにワークフローを変更します。ユーザーがワークフローを開始すると、フローのすべての遷移パスが待機状態になるまで ( Approval、 Task、 Timer、 Orchestration アクティビティなど) になるまで、ワークフローがユーザーのスレッドで実行されます。その時点で、制御はユーザーに戻ります。制御がユーザーに戻った後に時間のかかる作業が行われるように、フローを再設計してみてください。ワークフローを非同期で (通常はクライアント側の Ajax リクエストを介して) 開始し、ユーザーに制御を戻すまでの時間が短くなるように UI アクションを変更します。