次の方法で共有


Power Automate フローをバイパスする

Power Automateフローは、行が追加、変更、または削除された場合またはアクションが実行されるとトリガーを使用して Dataverse イベントに応答できます。 これらのイベントが発生すると、 Dataverse はこれらのフローを実行するシステム ジョブを作成します。

プログラムまたはプラグインが一括操作を実行すると、プログラムまたはプラグインによって多数のシステム ジョブが作成される場合があります。 多数のシステム ジョブが原因で、Dataverse のパフォーマンスの問題が発生する可能性があります。 SuppressCallbackRegistrationExpanderJob オプションのパラメーターを使用して、プログラムまたはプラグインでこれらのシステム ジョブの作成をバイパスすることを選択できます。

CallbackRegistration テーブルは、フロー トリガーを管理します。 expander と呼ばれる内部操作によって、システム ジョブが作成されます。

注意

このオプションを使用すると、フローの所有者はフロー ロジックがバイパスされたことを示す通知を受け取りません。

Power Automate フローをバイパスするタイミング

重要

発生しているパフォーマンスの問題が、パラメーターによって抑制される特定のシステム ジョブの数が多いことがわかっている場合を除き、 SuppressCallbackRegistrationExpanderJob 省略可能なパラメーターを使用しないでください。

ユーザーはビジネス上の理由からフローを追加します。 慎重に考慮せずにフローをバイパスしないでください。 これら 緩和戦略 を必ず考慮してください。

SuppressCallbackRegistrationExpanderJob を活用するとよいかもしれません。

このオプションは、一括操作の後にパフォーマンスの問題が発生し、StatusCode: 0 に設定されている CallbackRegistration Expander 操作システム ジョブが多数ある場合にのみ使用します。

これらのジョブの状態に関する情報を取得するには、次のクエリを使用します。

総数が 50,000 より多い場合は、このクエリは次オンエラーを返します。

名前: AggregateQueryRecordLimitExceeded
コード: 0x8004E023
番号: -2147164125
メッセージ: The maximum record limit is exceeded. Reduce the number of records.

注意

クエリでエラーが返されない場合、キューに登録されたジョブの数が問題になる可能性はありません。 通常、キューに登録されたジョブの数が 50,000 を超える前にパフォーマンスの問題が発生します。

次の例は、状態コードによる CallbackRegistration Expander 操作 システム ジョブの数を示しています。 この種類のシステムジョブに対する 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 フローをバイパスする方法

フローをバイパスする方法は、sdk for .NET API と 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 にフロー定義を追加することで、この値を持つ URL でフロー定義を表示できます: https://make.powerautomate.com/environments/<environmentid>/flows/<flowid>/details
message フローで 行が追加、変更、または削除されたときトリガーを 使用する場合、次のオプションを使用して、 CreateUpdate、および Delete 操作のすべての組み合わせをサブスクライブできます。
- 1: 追加
- 2: 削除済み
- 3: 変更済み
- 4: Added または Modified
- 5: Added または Deleted
- 6: Modified または Deleted
- 7: Added または Modified または Deleted
sdkmessage フローが アクションが実行されるとき トリガーの場合、この列にはメッセージの名前が含まれます。
scope フローは、次のオプションを使用して定義されたユーザーによって指定されたスコープにのみ適用されます。
- 1: ユーザー
- 2: BusinessUnit
- 3: 親子ビジネスユニット (ParentChildBusinessUnit)
- 4: 組織
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},");
    }
}

アウトプット

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 フローのバイパスに関してよく寄せられる質問 (FAQ)

次の質問と回答では、SuppressCallbackRegistrationExpanderJob 省略可能なパラメーターを使用して、Power Automateフローをバイパスします。

ユーザーには特別な特権が必要ですか ?

いいえ。 カスタム Dataverse ロジックをバイパスする オプションとは異なり、特別な権限は必要ありません。

クライアント アプリケーションでこの省略可能なパラメーターを使用している場合、操作に対して登録されたプラグインも適用されますか?

いいえ。 このパラメーターは、クライアント アプリケーションからの要求によって発生するイベントに対して登録されているプラグインによって実行される操作には渡されません。 プラグインによって実行される操作のフローをバイパスする場合は、プラグイン コードで SuppressCallbackRegistrationExpanderJob オプション パラメータを使用する必要があります。

参照

カスタム Dataverse ロジックをバイパスする
オプションのパラメーターを使用する