Power Automate フローのバイパス
Power Automate フローは、Dataverse イベントが 行が追加、変更、または削除されたとき トリガーまたは アクションが実行されたとき トリガーを使用して、 イベントに応答できます。 これらのイベントが発生すると、 Dataverse はこれらのフローを実行するシステム ジョブを作成します。
プログラムまたはプラグインが一括操作を実行すると、大量のシステム ジョブが作成される場合があります。 多数のシステム ジョブは、 Dataverse のパフォーマンスの問題を引き起こす可能性があります。 SuppressCallbackRegistrationExpanderJob
オプションのパラメーターを使用して、プログラムまたはプラグインでこれらのシステム ジョブの作成をバイパスすることを選択できます。
CallbackRegistration テーブル はフロートリガーを管理し、システム ジョブを作成する エキスパンダー 呼ばれる内部操作があります。
注意
このオプションを使用すると、フローの所有者は、フロー ロジックがバイパスされたという通知を受け取りません。
Power Automate フローをバイパスする場合
重要
SuppressCallbackRegistrationExpanderJob
オプション パラメータは、作成された多数の特定のシステム ジョブが原因でパフォーマンスの問題が発生していることがわかっている場合を除き、使用しないでください。
ユーザーがフローを追加するのはビジネス上の理由からであるため、慎重な考慮なしにフローをバイパスすべきではありません。 これら 緩和戦略 を必ず考慮してください。
SuppressCallbackRegistrationExpanderJob
を活用するとよいかもしれません。
このオプションは、一括操作の実行後にパフォーマンスの問題が発生し、StatusCode が 0
: 応答の待機中 に設定されている、多数のCallbackRegistration エクスパンダ―操作 がある場合に使用します。
次のクエリを使用して、これらのジョブのステータスに関する情報を取得できます。
総数が 50,000 より多い場合は、このクエリは次オンエラーを返します。
名前:
AggregateQueryRecordLimitExceeded
コード:0x8004E023
番号:-2147164125
メッセージ:The maximum record limit is exceeded. Reduce the number of records.
注意
クエリがエラーを返さない場合、キューに入れられたジョブの数が問題である可能性は低いです。 通常、パフォーマンスの問題が発生する前に、キューに入れられたジョブの数が 50,000 レコードを超えます。
次の例では、状態コードによって多数の CallbackRegistration 展開操作 システム ジョブを出力します。 この種類のシステムジョブに対する operationtype
値は、79
です。
static void RetrieveCallbackRegistrationExpanderStatus(IOrganizationService service)
{
string fetchXml = @"<fetch aggregate='true'>
<entity name='asyncoperation'>
<attribute name='statuscode' alias='statuscode' groupby='true' />
<attribute name='statuscode' alias='count' aggregate='count' />
<filter>
<condition attribute='operationtype' operator='eq' value='79' />
</filter>
</entity>
</fetch>";
FetchExpression fetchExpression = new(fetchXml);
EntityCollection response = service.RetrieveMultiple(fetchExpression);
foreach (Entity result in response.Entities)
{
string statusCode = result.FormattedValues["statuscode"];
int count = (int)((AliasedValue)result["count"]).Value;
Console.WriteLine($"{statusCode}: {count}");
}
}
出力:
Canceled: 4101
Failed: 13
Waiting for Resources: 50,000
Power Automate フローをバイパスする方法
これらのバイパス フローは、.NET 用 SDK と Web API のどちらを使用しているかによって異なります。
注意
プラグイン内で開始されるデータ操作には、.NET 用 SDK を使用する必要があります。
以下の例では、Power Automate をトリガーしないアカウント レコードを作成しています。
static void DemonstrateSuppressCallbackRegistrationExpanderJob(IOrganizationService service)
{
Entity account = new("account");
account["name"] = "Sample Account";
CreateRequest request = new()
{
Target = account
};
request.Parameters.Add("SuppressCallbackRegistrationExpanderJob", true);
service.Execute(request);
}
軽減戦略
フロー所有者は、ロジックが実行されることを期待しています。 このオプションを使用すると、フロー所有者にはロジックがバイパスされたことが通知されません。 フローの所有者に、ロジックが適用されなかった時期と理由を理解できるように、ロジックが適用されなかったことを伝えることが重要です。 その後、ロジックを適用するかどうか、または適用する方法を決定できます。
複数のトリガーによって呼び出されるロジックを含む子フローを手動でも作成できます。 ロジックが子フロー内に含まれている場合、後で他の手段によってトリガーされる可能性があります。 詳細: 子フローの作成
バイパスされるフローを特定する
どのフローがバイパスされるかを正確に特定できない可能性があります。 CallbackRegistration テーブル テーブルをクエリして、どの程度の影響があるか、およびフローが実行されていないことについて誰に連絡するかを評価します。 次のテーブルは、便利な CallbackRegistration
テーブル列を表示します;
Column | Description |
---|---|
name |
この値が GUID 値である場合は、これは、flowid 値と一致し、URL: https://make.powerautomate.com/environments/<environmentid>/flows/<flowid>/details に追加することで、この値を持つ URL でフロー定義を表示できるはずです。 |
message |
フローが 行が追加、変更、削除された場合 トリガーを使用する場合、これらのオプションを持つ Create 、Update 、Delete 操作の全ての組み合わせを購読する可能性があります:- 1: Added - 2: Deleted - 3: Modified - 4: Added または Modified - 5: Added または Deleted - 6: Modified または Deleted - 7: Added または Modified または Deleted |
sdkmessage |
フローが アクションが実行されるとき トリガーの場合、この列にはメッセージの名前が含まれます。 |
scope |
フローは、次のオプションを使用して定義された、ユーザーが指定したスコープにのみ適用されます。 - 1: User - 2: BusinessUnit - 3: ParentChildBusinessUnit - 4: Organization |
ownerid |
コールバック登録とフローの所有者。 |
softdeletestatus |
フローが削除されかどうか。 0 は削除されていません。 1 は削除済みです。 |
次のクエリの例では、次の値が返されます。
static void RetrieveCallbackOperations(IOrganizationService service)
{
QueryExpression callbackRegistrationQuery = new("callbackregistration")
{
ColumnSet = new ColumnSet("name", "entityname", "message", "sdkmessagename", "scope", "ownerid"),
Criteria = new FilterExpression(LogicalOperator.And)
{
Conditions = {
{ new ConditionExpression("softdeletestatus",ConditionOperator.Equal,0) },
// Add more conditions here to filter the results
}
}
};
EntityCollection callbackRegistrations = service.RetrieveMultiple(callbackRegistrationQuery);
foreach (Entity callbackRegistration in callbackRegistrations.Entities)
{
string ownerid = callbackRegistration.FormattedValues["ownerid"];
string scope = callbackRegistration.FormattedValues["scope"];
string name = callbackRegistration.GetAttributeValue<string>("name");
string message = callbackRegistration.FormattedValues["message"];
string entityname = callbackRegistration.GetAttributeValue<string>("entityname");
string sdkmessage = callbackRegistration.GetAttributeValue<string>("sdkmessagename");
Console.WriteLine($"{ownerid},{scope},{name},{message},{entityname},{sdkmessage},");
}
}
Output
FirstName LastName,Organization,de7153ba-9221-4079-82cc-c884bbd05dc0,Modified,account,,
FirstName LastName,Organization,Callback Registration Id: b44090aa-adde-4866-ac2e-d68fbcbe7d5a,Added,account,,
FirstName LastName,Organization,Callback Registration Id: dabfa1a1-b794-44d0-ad34-cd49ea650606,Added,none,sample_BusinessEvent,
Power Automate フローのバイパスに関してよく寄せられる質問
以下は、SuppressCallbackRegistrationExpanderJob
オプション パラメータを使用して Power Automate フローをバイパスすることに関してよく寄せられる質問です。
ユーザーには特別な特権が必要ですか ?
いいえ Dataverseカスタム ロジックをバイパスするオプションとは異なり、特別な権限は必要ありません。
クライアント アプリケーションがこのオプション パラメータを使用する場合、操作に対して登録されたプラグインによって実行される操作も適用されますか?
いいえ。 このパラメーターは、クライアント アプリケーションからの要求によって発生するイベントに対して登録されているプラグインによって実行される操作には渡されません。 プラグインによって実行される操作のフローをバイパスする場合は、プラグイン コードで SuppressCallbackRegistrationExpanderJob
オプション パラメータを使用する必要があります。
参照
カスタム Dataverse ロジックのバイパス
オプションのパラメーターを使用する
注意
ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)
この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。