次の方法で共有


サンプル: IsSystemAdmin カスタム API

このサンプルでは、sample_IsSystemAdmin という名前のカスタム API をサポートするプラグインの作成方法を示します。

このサンプルでは、sample_IsSystemAdmin カスタム API の主な操作のためのプラグインを作成します。 このカスタム API は、ユーザーがシステム管理者セキュリティ ロールを持っているかどうかを検出します。

ユーザーがシステム管理者のセキュリティロールを持っているかどうかを検出するには、ユーザーにセキュリティ ロールが直接割り当てられているかどうか、または所属するチームにセキュリティ ロールが割り当てられているかどうかに応じて、2 つの個別のクエリが必要になる場合があります。 このカスタム API は、これらのクエリをブール値を返す単一の API 呼び出しにカプセル化します。 これにより、操作を Dataverse サーバーに委任することで使いやすくなります。

このサンプルを実行する方法

このサンプルにあるコードを実行するには、最初に組織でカスタム API を作成する必要があります。 これを行うには 2 つの方法があります。

マネージド ソリューション ファイルのインポート

このフォルダーの IsSystemAdminFunction_1_0_0_0_managed.zip には、このコードを使用する sample_IsSystemAdmin カスタム API が含まれます。 このソリューション ファイルをインポートするだけで、組織でカスタム API を作成できます。 手順については、ソリューションのインポートを参照してください。

テストが終了したら、マネージド ソリューションを削除してカスタム API を削除します。

カスタム API の作成

カスタム API を自分で作成し、このコードで作成されたプラグイン アセンブリを設定できます。 カスタム API を作成するにはいくつかの方法があり、カスタム API の作成と使用 で文書化されています

このカスタム API は、次のデータで定義されています。

{
  "uniquename": "sample_IsSystemAdmin",
  "allowedcustomprocessingsteptype": 0,
  "bindingtype": 1,
  "boundentitylogicalname": "systemuser",
  "description": "Returns whether the user has the System Administrator security role",
  "name": "Is System Administrator",
  "displayname": "Is System Administrator",
  "executeprivilegename": null,
  "isfunction": true,
  "isprivate": false,
  "workflowsdkstepenabled": false,
  "iscustomizable": {
    "Value": false
  },
  "CustomAPIResponseProperties": [
    {
      "uniquename": "HasRole",
      "name": "Has Role",
      "description": "Whether the user has the System Administrator security role",
      "displayname": "Has Role",
      "type": 0,
      "logicalentityname": null,
      "iscustomizable": {
        "Value": false
      }
    }
  ]
}

このデータを使用して、次の例に従い Insomnia と Web API を使用してカスタム API を作成できます: コードでカスタム API を作成する

渡される値については、次のトピックを参照してください: CustomAPI テーブル

このカスタム API は、ユーザー (SystemUser) テーブル にバインドされた機能です。 これには単一のブール応答プロパティ HasRole があり、ユーザーがシステム管理者のセキュリティロールを持っている場合は true を返します。

上記で定義したカスタム API を作成したら、この .NET クラス ライブラリ プロジェクトをビルドして、IsSystemAdminCustomAPI.dll という名前のプラグイン アセンブリを生成します。 このアセンブリには、PowerApps.Samples.IsSystemAdmin という名前の単一のプラグイン タイプがあります。

プラグインの登録で説明するように、プラグイン登録ツールを使用して作成されたプラグイン アセンブリを登録する必要があります。

プラグインを登録すると、カスタム API のプラグイン タイプとして設定できるようになります。

作成する sample_IsSystemAdmin カスタム API は、環境内のアンマネージド カスタマイズの一部になります。 これを削除するには、カスタム API とプラグイン アセンブリを削除する必要があります。

このサンプルの概要

この sample_IsSystemAdmin カスタム API は、このコードを使用してシステムをクエリして、ユーザーがシステム管理者セキュリティ ロールを持っているかどうかを検出します。

このサンプルの動作方法

sample_IsSystemAdmin カスタム API を使用するには、Web API または Dataverse .NET Framework SDK アセンブリのいずれかを使用できます。

Web API の使用

コードを記述する必要がないため、Web API を試すのが最も簡単です。 ブラウザを使用してテストできます。

  1. 開発者リソース ページから Web API URL を取得します。 開発者リソースの表示を参照してください。 値は、次のように表示されます: https://yourorgname.api.crm.dynamics.com/api/data/v9.2
  2. Web API URL をコピーして、ブラウザーのアドレス バーに貼り付けます。 以前にモデル駆動型アプリケーションを実行したことがない場合は、認証を求められることがあります。
  3. Web API URL を編集して、システム ユーザーに関する情報を返します。 以下を Web API URL に追加します: /systemusers?$select=fullname ブラウザーで JSON データを表示できるようになります。
  4. ユーザーの systemuserid 値のいずれかを選択し、別のブラウザー タブを開きます。
  5. このブラウザー タブで、Web API URL と systemuserid 値を使用して、次の URL を構成します。
    https://<your org url>/api/data/v9.2/systemusers(<The systemuserid value>)/Microsoft.Dynamics.CRM.sample_IsSystemAdmin
    これはバインドされた関数であるため、Microsoft.Dynamics.CRM の名前空間を含める必要があります。 詳細情報: バインドされた関数
  6. リクエストを送信すると、次のような結果が表示されます。
{
  "@odata.context": "https://yourorgname.api.crm.dynamics.com/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.sample_IsSystemAdminResponse",
  "HasRole": false
}

HasRole 値は、ユーザーがシステム管理者セキュリティ ロールを持っているかどうかを示します。

.NET 用 SDK の使用

  1. .NET 用 SDK のクイック スタートのサンプル手順を使用して、C# で .NET Framework コンソール アプリケーションを作成できます。 クイックスタート: .NET 用 SDK のサンプル (C#)

  2. 次の静的メソッドを、プログラム クラスに追加します。 これは、再利用可能なメソッドを作成します。

    static bool IsSystemAdmin(IOrganizationService svc, Guid systemuserid)
    {
    
        var req = new OrganizationRequest("sample_IsSystemAdmin")
        {
            ["Target"] = new EntityReference("systemuser", systemuserid)
        };
    
        var resp = svc.Execute(req);
    
        var hasRole = (bool)resp["HasRole"];
    
        return hasRole;
    }
    
  3. WhoAmIRequest を呼び出すコードを次に置き換えます。

     //Compose a query to retrieve top 10 users
    QueryExpression query = new QueryExpression("systemuser");
    query.ColumnSet = new ColumnSet("fullname");
    query.TopCount = 10;
    
     //Execute the query to retrieve the data
    EntityCollection users = svc.RetrieveMultiple(query);
    
    foreach (Entity user in users.Entities)
    {
         //Test each record returned using  the custom API
        bool isAdmin = IsSystemAdmin(svc, user.Id);
    
         //Show the results in the console
        Console.WriteLine($"{user["fullname"]} is{(isAdmin? string.Empty: " not")} an administrator");
    }
    

    このコードは 10 人のユーザーを取得し、各ユーザーをループして、ユーザーがシステム管理者であるかどうかをテストし、結果をコンソールに書き込みます。

実際にやってみます

  1. ユーザーがシステム管理者であるかどうかを検出するためのクエリ方法
  2. カスタム API をサポートするプラグインの記述方法
  3. Web API を使用してカスタム API 関数を呼び出す方法
  4. .NET 用 SDK を使用してカスタム API を呼び出す方法

参照

カスタム API の作成と使用
プラグインを記述する
プラグインの登録

注意

ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)

この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。