拡張機能を使用してカスタム データをリソースに追加する
[アーティクル]
01/27/2023
13 人の共同作成者
フィードバック
この記事の内容
Microsoft Graph は、ユーザー やメッセージ などのリソースを通じて、多様なユーザー中心のデータと分析情報にアクセスするための単一の API エンドポイントを提供します。 外部のデータ ストアを必要とせずに、リソース インスタンスにカスタム プロパティを追加することで、Microsoft Graph を拡張することもできます。
この記事では、Microsoft Graph がリソースの拡張をサポートする方法、カスタム プロパティの追加に使用できるオプション、およびそれらを使用するタイミングについて説明します。
Microsoft Graph にカスタム データを追加する理由
ISV 開発者は、ユーザー リソースを拡張することによって、アプリを軽量に保ちながら、アプリ固有のユーザー プロファイル データを Microsoft Graph に格納することを決定する場合があります。
または、アプリの既存のユーザー プロファイル ストアを保持し、ユーザー リソースにアプリ固有の識別子を追加することもできます。
エンタープライズ開発者の場合、構築する社内アプリケーションは、組織の人事固有のデータに依存する可能性があります。 このカスタム データを Microsoft Graph に格納することで、複数のアプリケーション内の統合を簡略化できます。
Microsoft Graph のカスタム データ オプション
Microsoft Graph には、カスタム データを追加するための 4 種類の拡張機能が用意されています。
拡張属性
ディレクトリ (Azure AD) 拡張機能
スキーマ拡張機能
オープン拡張機能
拡張属性
Azure AD には、 ユーザー と デバイス のリソースに定義済みの名前を持つ 15 個の拡張機能属性のセットが用意されています。 これらのプロパティは、最初はオンプレミスの Active Directory (AD) と Microsoft Exchange で提供されたカスタム属性でした。 ただし、オンプレミスの AD および Microsoft Exchange データを Microsoft Graph を通じて Azure AD に同期する以外にも使用できるようになりました。
開発者のエクスペリエンス
15 個の拡張属性は、それぞれ onPremisesExtensionAttributes プロパティと extensionAttributes プロパティを通じて、ユーザー またはデバイス のリソース インスタンスに文字列値を格納するために使用することができます。 値は、新しいリソース インスタンスを作成するとき、または既存のリソース インスタンスを更新するときに割り当てることができます。 フィルター処理することもできます。
拡張属性のデータを追加または更新する
次の例は、extensionAttribute1 にデータを格納し、PATCH メソッドを使用した更新操作を通じて extensionAttribute12 から既存のデータを削除する方法を示しています。
PATCH https://graph.microsoft.com/v1.0/users/071cc716-8147-4397-a5ba-b2105951cc0b
{
"onPremisesExtensionAttributes": {
"extensionAttribute1": "skypeId.adeleVance",
"extensionAttribute13": null
}
}
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
var user = new User
{
OnPremisesExtensionAttributes = new OnPremisesExtensionAttributes
{
ExtensionAttribute1 = "skypeId.adeleVance",
ExtensionAttribute13 = null
}
};
await graphClient.Users["{user-id}"]
.Request()
.UpdateAsync(user);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
const options = {
authProvider,
};
const client = Client.init(options);
const user = {
onPremisesExtensionAttributes: {
extensionAttribute1: 'skypeId.adeleVance',
extensionAttribute13: null
}
};
await client.api('/users/071cc716-8147-4397-a5ba-b2105951cc0b')
.update(user);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
GraphServiceClient graphClient = GraphServiceClient.builder().authenticationProvider( authProvider ).buildClient();
User user = new User();
OnPremisesExtensionAttributes onPremisesExtensionAttributes = new OnPremisesExtensionAttributes();
onPremisesExtensionAttributes.extensionAttribute1 = "skypeId.adeleVance";
onPremisesExtensionAttributes.extensionAttribute13 = null;
user.onPremisesExtensionAttributes = onPremisesExtensionAttributes;
graphClient.users("071cc716-8147-4397-a5ba-b2105951cc0b")
.buildRequest()
.patch(user);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
//THE GO SDK IS IN PREVIEW. NON-PRODUCTION USE ONLY
graphClient := msgraphsdk.NewGraphServiceClient(requestAdapter)
requestBody := graphmodels.NewUser()
onPremisesExtensionAttributes := graphmodels.NewOnPremisesExtensionAttributes()
extensionAttribute1 := "skypeId.adeleVance"
onPremisesExtensionAttributes.SetExtensionAttribute1(&extensionAttribute1)
extensionAttribute13 := null
onPremisesExtensionAttributes.SetExtensionAttribute13(&extensionAttribute13)
requestBody.SetOnPremisesExtensionAttributes(onPremisesExtensionAttributes)
result, err := graphClient.UsersById("user-id").Patch(context.Background(), requestBody, nil)
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
<?php
// THIS SNIPPET IS A PREVIEW FOR THE KIOTA BASED SDK. NON-PRODUCTION USE ONLY
$graphServiceClient = new GraphServiceClient($requestAdapter);
$requestBody = new User();
$onPremisesExtensionAttributes = new OnPremisesExtensionAttributes();
$onPremisesExtensionAttributes->setExtensionAttribute1('skypeId.adeleVance');
$OnPremisesExtensionAttributes->setExtensionAttribute13(null);
$requestBody->setOnPremisesExtensionAttributes($onPremisesExtensionAttributes);
$requestResult = $graphServiceClient->usersById('user-id')->patch($requestBody);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
要求は 204 No Content
応答オブジェクトを返します。
拡張属性 1 ~ 15 からデータを取得する
要求
GET https://graph.microsoft.com/v1.0/users?$select=id,displayName,onPremisesExtensionAttributes
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
var users = await graphClient.Users
.Request()
.Select("id,displayName,onPremisesExtensionAttributes")
.GetAsync();
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
const options = {
authProvider,
};
const client = Client.init(options);
let users = await client.api('/users')
.select('id,displayName,onPremisesExtensionAttributes')
.get();
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
GraphServiceClient graphClient = GraphServiceClient.builder().authenticationProvider( authProvider ).buildClient();
UserCollectionPage users = graphClient.users()
.buildRequest()
.select("id,displayName,onPremisesExtensionAttributes")
.get();
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
//THE GO SDK IS IN PREVIEW. NON-PRODUCTION USE ONLY
graphClient := msgraphsdk.NewGraphServiceClient(requestAdapter)
requestParameters := &graphconfig.UsersRequestBuilderGetQueryParameters{
Select: [] string {"id","displayName","onPremisesExtensionAttributes"},
}
configuration := &graphconfig.UsersRequestBuilderGetRequestConfiguration{
QueryParameters: requestParameters,
}
result, err := graphClient.Users().Get(context.Background(), configuration)
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
Import-Module Microsoft.Graph.Users
Get-MgUser -Property "id,displayName,onPremisesExtensionAttributes"
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
<?php
// THIS SNIPPET IS A PREVIEW FOR THE KIOTA BASED SDK. NON-PRODUCTION USE ONLY
$graphServiceClient = new GraphServiceClient($requestAdapter);
$requestConfiguration = new UsersRequestBuilderGetRequestConfiguration();
$queryParameters = new UsersRequestBuilderGetQueryParameters();
$queryParameters->select = ["id","displayName","onPremisesExtensionAttributes"];
$requestConfiguration->queryParameters = $queryParameters;
$requestResult = $graphServiceClient->users()->get($requestConfiguration);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
応答
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users(id,displayName,onPremisesExtensionAttributes)",
"value": [
{
"id": "071cc716-8147-4397-a5ba-b2105951cc0b",
"displayName": "Adele Vance",
"onPremisesExtensionAttributes": {
"extensionAttribute1": "Contractor",
"extensionAttribute2": "50",
"extensionAttribute3": null,
"extensionAttribute4": "1478354",
"extensionAttribute5": "10239390",
"extensionAttribute6": null,
"extensionAttribute7": null,
"extensionAttribute8": null,
"extensionAttribute9": null,
"extensionAttribute10": "11",
"extensionAttribute11": null,
"extensionAttribute12": "/o=ExchangeLabs/ou=Exchange Administrative Group (FYDIBOHF47SPDLT)/cn=Recipients/cn=5ee781fc7egc7aa0b9394bddb44e7f04-Adele Vance",
"extensionAttribute13": null,
"extensionAttribute14": null,
"extensionAttribute15": null
}
}
]
}
ディレクトリ (Azure AD) 拡張機能
ディレクトリ拡張機能 は、ディレクトリ オブジェクトに対して厳密に型指定され、検出可能でフィルター可能な拡張機能エクスペリエンスを開発者に提供します。
ディレクトリ拡張機能は、まず ExtensionProperty の作成 操作を通じてアプリケーションに登録され、特定のディレクトリ オブジェクトを明示的にターゲットにする必要があります。 アプリケーションがユーザーまたは管理者によって同意されると、拡張機能のプロパティはテナントですぐにアクセスできるようになります。 テナント内のすべての承認されたアプリケーションは、ターゲット ディレクトリ オブジェクトのインスタンスで定義されている拡張プロパティに関するデータの読み取りと書き込みを行うことができます。
ディレクトリ拡張機能のターゲット オブジェクトとして指定できるリソースの種類の一覧については、「アプリケーションの拡張機能の種類を選択する 」を参照してください。
開発者のエクスペリエンス
ディレクトリ拡張機能の定義は、extensionProperty リソースとそれに関連するメソッドを使用して管理されます。 データは、リソース インスタンスの管理に使用するのと同じ REST 要求を使用して管理されます。
ディレクトリ拡張機能の定義を作成する
リソース インスタンスにディレクトリ拡張機能を追加するには、まずディレクトリ拡張機能の定義を作成する必要があります。
要求
POST https://graph.microsoft.com/v1.0/applications/30a5435a-1871-485c-8c7b-65f69e287e7b/extensionProperties
{
"name": "jobGroupTracker",
"dataType": "String",
"targetObjects": [
"User"
]
}
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
var extensionProperty = new ExtensionProperty
{
Name = "jobGroupTracker",
DataType = "String",
TargetObjects = new List<String>()
{
"User"
}
};
await graphClient.Applications["{application-id}"].ExtensionProperties
.Request()
.AddAsync(extensionProperty);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
const options = {
authProvider,
};
const client = Client.init(options);
const extensionProperty = {
name: 'jobGroupTracker',
dataType: 'String',
targetObjects: [
'User'
]
};
await client.api('/applications/30a5435a-1871-485c-8c7b-65f69e287e7b/extensionProperties')
.post(extensionProperty);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
GraphServiceClient graphClient = GraphServiceClient.builder().authenticationProvider( authProvider ).buildClient();
ExtensionProperty extensionProperty = new ExtensionProperty();
extensionProperty.name = "jobGroupTracker";
extensionProperty.dataType = "String";
LinkedList<String> targetObjectsList = new LinkedList<String>();
targetObjectsList.add("User");
extensionProperty.targetObjects = targetObjectsList;
graphClient.applications("30a5435a-1871-485c-8c7b-65f69e287e7b").extensionProperties()
.buildRequest()
.post(extensionProperty);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
//THE GO SDK IS IN PREVIEW. NON-PRODUCTION USE ONLY
graphClient := msgraphsdk.NewGraphServiceClient(requestAdapter)
requestBody := graphmodels.NewExtensionProperty()
name := "jobGroupTracker"
requestBody.SetName(&name)
dataType := "String"
requestBody.SetDataType(&dataType)
targetObjects := []string {
"User",
}
requestBody.SetTargetObjects(targetObjects)
result, err := graphClient.ApplicationsById("application-id").ExtensionProperties().Post(context.Background(), requestBody, nil)
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
<?php
// THIS SNIPPET IS A PREVIEW FOR THE KIOTA BASED SDK. NON-PRODUCTION USE ONLY
$graphServiceClient = new GraphServiceClient($requestAdapter);
$requestBody = new ExtensionProperty();
$requestBody->setName('jobGroupTracker');
$requestBody->setDataType('String');
$requestBody->setTargetObjects(['User', ]);
$requestResult = $graphServiceClient->applicationsById('application-id')->extensionProperties()->post($requestBody);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
応答
extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker
という名前のディレクトリ拡張プロパティは、extension_{appId-without-hyphens}_{extensionProperty-name} という名前付け規則に従った拡張機能名で作成されます。
HTTP/1.1 201 Created
Content-type: application/json
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#applications('30a5435a-1871-485c-8c7b-65f69e287e7b')/extensionProperties/$entity",
"id": "4e3dbc8f-ca32-41b4-825a-346215d7d20f",
"deletedDateTime": null,
"appDisplayName": "HR-sync-app",
"dataType": "String",
"isSyncedFromOnPremises": false,
"name": "extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker",
"targetObjects": [
"User"
]
}
ディレクトリ拡張プロパティをターゲット オブジェクトに追加する
ディレクトリ拡張定義を作成したら、それをターゲット オブジェクト型のインスタンスに追加することができます。 ターゲット オブジェクトの新しいインスタンスを作成するとき、または既存のオブジェクトを更新するときに、ディレクトリ拡張プロパティにデータを格納できます。 次の例は、新しいユーザー オブジェクトを作成するときに、ディレクトリ拡張プロパティにデータを格納する方法を示しています。
POST https://graph.microsoft.com/v1.0/users
{
"accountEnabled": true,
"displayName": "Adele Vance",
"mailNickname": "AdeleV",
"userPrincipalName": "AdeleV@contoso.com",
"passwordProfile": {
"forceChangePasswordNextSignIn": false,
"password": "xWwvJ]6NMw+bWH-d"
},
"extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker": "JobGroupN"
}
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
var user = new User
{
AccountEnabled = true,
DisplayName = "Adele Vance",
MailNickname = "AdeleV",
UserPrincipalName = "AdeleV@contoso.com",
PasswordProfile = new PasswordProfile
{
ForceChangePasswordNextSignIn = false,
Password = "xWwvJ]6NMw+bWH-d"
},
AdditionalData = new Dictionary<string, object>()
{
{"extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker", "JobGroupN"}
}
};
await graphClient.Users
.Request()
.AddAsync(user);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
const options = {
authProvider,
};
const client = Client.init(options);
const user = {
accountEnabled: true,
displayName: 'Adele Vance',
mailNickname: 'AdeleV',
userPrincipalName: 'AdeleV@contoso.com',
passwordProfile: {
forceChangePasswordNextSignIn: false,
password: 'xWwvJ]6NMw+bWH-d'
},
extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker: 'JobGroupN'
};
await client.api('/users')
.post(user);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
//THE GO SDK IS IN PREVIEW. NON-PRODUCTION USE ONLY
graphClient := msgraphsdk.NewGraphServiceClient(requestAdapter)
requestBody := graphmodels.NewUser()
accountEnabled := true
requestBody.SetAccountEnabled(&accountEnabled)
displayName := "Adele Vance"
requestBody.SetDisplayName(&displayName)
mailNickname := "AdeleV"
requestBody.SetMailNickname(&mailNickname)
userPrincipalName := "AdeleV@contoso.com"
requestBody.SetUserPrincipalName(&userPrincipalName)
passwordProfile := graphmodels.NewPasswordProfile()
forceChangePasswordNextSignIn := false
passwordProfile.SetForceChangePasswordNextSignIn(&forceChangePasswordNextSignIn)
password := "xWwvJ]6NMw+bWH-d"
passwordProfile.SetPassword(&password)
requestBody.SetPasswordProfile(passwordProfile)
additionalData := map[string]interface{}{
"extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker" : "JobGroupN",
}
requestBody.SetAdditionalData(additionalData)
result, err := graphClient.Users().Post(context.Background(), requestBody, nil)
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
<?php
// THIS SNIPPET IS A PREVIEW FOR THE KIOTA BASED SDK. NON-PRODUCTION USE ONLY
$graphServiceClient = new GraphServiceClient($requestAdapter);
$requestBody = new User();
$requestBody->setAccountEnabled(true);
$requestBody->setDisplayName('Adele Vance');
$requestBody->setMailNickname('AdeleV');
$requestBody->setUserPrincipalName('AdeleV@contoso.com');
$passwordProfile = new PasswordProfile();
$passwordProfile->setForceChangePasswordNextSignIn(false);
$passwordProfile->setPassword('xWwvJ]6NMw+bWH-d');
$requestBody->setPasswordProfile($passwordProfile);
$additionalData = [
'extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker' => 'JobGroupN',
];
$requestBody->setAdditionalData($additionalData);
$requestResult = $graphServiceClient->users()->post($requestBody);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
要求は、201 Created
応答コードと、応答本文で user オブジェクトを返します。
ディレクトリ拡張プロパティを取得する
次の例は、ディレクトリ拡張プロパティと関連データがリソース インスタンスにどのように表示されるかを示しています。 拡張プロパティは、beta
エンドポイントを通じて既定で返されますが、v1.0
エンドポイントを通じた $select
でのみ返されます。
要求
GET https://graph.microsoft.com/beta/users?$select=id,displayName,extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker,extension_b7d8e648520f41d3b9c0fdeb91768a0a_permanent_pensionable
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
var users = await graphClient.Users
.Request()
.Select("id,displayName,extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker,extension_b7d8e648520f41d3b9c0fdeb91768a0a_permanent_pensionable")
.GetAsync();
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
const options = {
authProvider,
};
const client = Client.init(options);
let users = await client.api('/users')
.version('beta')
.select('id,displayName,extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker,extension_b7d8e648520f41d3b9c0fdeb91768a0a_permanent_pensionable')
.get();
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
GraphServiceClient graphClient = GraphServiceClient.builder().authenticationProvider( authProvider ).buildClient();
UserCollectionPage users = graphClient.users()
.buildRequest()
.select("id,displayName,extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker,extension_b7d8e648520f41d3b9c0fdeb91768a0a_permanent_pensionable")
.get();
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
//THE GO SDK IS IN PREVIEW. NON-PRODUCTION USE ONLY
graphClient := msgraphsdk.NewGraphServiceClient(requestAdapter)
requestParameters := &graphconfig.UsersRequestBuilderGetQueryParameters{
Select: [] string {"id","displayName","extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker","extension_b7d8e648520f41d3b9c0fdeb91768a0a_permanent_pensionable"},
}
configuration := &graphconfig.UsersRequestBuilderGetRequestConfiguration{
QueryParameters: requestParameters,
}
result, err := graphClient.Users().Get(context.Background(), configuration)
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
Import-Module Microsoft.Graph.Users
Get-MgUser -Property "id,displayName,extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker,extension_b7d8e648520f41d3b9c0fdeb91768a0a_permanent_pensionable"
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
<?php
// THIS SNIPPET IS A PREVIEW FOR THE KIOTA BASED SDK. NON-PRODUCTION USE ONLY
$graphServiceClient = new GraphServiceClient($requestAdapter);
$requestConfiguration = new UsersRequestBuilderGetRequestConfiguration();
$queryParameters = new UsersRequestBuilderGetQueryParameters();
$queryParameters->select = ["id","displayName","extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker","extension_b7d8e648520f41d3b9c0fdeb91768a0a_permanent_pensionable"];
$requestConfiguration->queryParameters = $queryParameters;
$requestResult = $graphServiceClient->users()->get($requestConfiguration);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
応答
HTTP/1.1 200 OK
Content-type: application/json
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users(id,displayName,extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker,extension_b7d8e648520f41d3b9c0fdeb91768a0a_permanent_pensionable)",
"value": [
{
"id": "63384f56-42d2-4aa7-b1d6-b10c78f143a2",
"displayName": "Adele Vance",
"extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker": "E4",
"extension_b7d8e648520f41d3b9c0fdeb91768a0a_permanent_pensionable": true
}
]
}
ディレクトリ拡張機能のプロパティを更新または削除する
リソース インスタンスのディレクトリ拡張プロパティの値を更新または削除するには、PATCH メソッドを使用します。 拡張機能プロパティとそれに関連付けられている値をリソース インスタンスから削除するには、その値を null
に設定します。
次の要求は、あるディレクトリ拡張プロパティの値を更新し、別の拡張プロパティを削除します。
PATCH https://graph.microsoft.com/v1.0/users/63384f56-42d2-4aa7-b1d6-b10c78f143a2
{
"extension_b7d8e648520f41d3b9c0fdeb91768a0a_permanent_pensionable": null,
"extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker": "E4"
}
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
var user = new User
{
AdditionalData = new Dictionary<string, object>()
{
{"extension_b7d8e648520f41d3b9c0fdeb91768a0a_permanent_pensionable", "null"},
{"extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker", "E4"}
}
};
await graphClient.Users["{user-id}"]
.Request()
.UpdateAsync(user);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
const options = {
authProvider,
};
const client = Client.init(options);
const user = {
extension_b7d8e648520f41d3b9c0fdeb91768a0a_permanent_pensionable: null,
extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker: 'E4'
};
await client.api('/users/63384f56-42d2-4aa7-b1d6-b10c78f143a2')
.update(user);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
//THE GO SDK IS IN PREVIEW. NON-PRODUCTION USE ONLY
graphClient := msgraphsdk.NewGraphServiceClient(requestAdapter)
requestBody := graphmodels.NewUser()
additionalData := map[string]interface{}{
extension_b7d8e648520f41d3b9c0fdeb91768a0a_permanent_pensionable := null
requestBody.SetExtension_b7d8e648520f41d3b9c0fdeb91768a0a_permanent_pensionable(&extension_b7d8e648520f41d3b9c0fdeb91768a0a_permanent_pensionable)
"extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker" : "E4",
}
requestBody.SetAdditionalData(additionalData)
result, err := graphClient.UsersById("user-id").Patch(context.Background(), requestBody, nil)
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
<?php
// THIS SNIPPET IS A PREVIEW FOR THE KIOTA BASED SDK. NON-PRODUCTION USE ONLY
$graphServiceClient = new GraphServiceClient($requestAdapter);
$requestBody = new User();
$additionalData = [
'extension_b7d8e648520f41d3b9c0fdeb91768a0a_permanent_pensionable' => null,
'extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker' => 'E4',
];
$requestBody->setAdditionalData($additionalData);
$requestResult = $graphServiceClient->usersById('user-id')->patch($requestBody);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
要求は、204 No Content
応答コードを返します。
スキーマ拡張機能
Microsoft Graph スキーマ拡張機能 は、概念的にはディレクトリ拡張機能と似ています。 最初に、スキーマ拡張機能の定義を作成します。 次に、それを使用して、サポートされているリソース インスタンスを、厳密に型指定されたカスタム プロパティで拡張します。 さらに、スキーマ拡張機能の状態 を制御し、他のアプリで検出できるようにすることができます。
スキーマ拡張機能をサポートするリソースの種類の一覧については、「アプリケーションの拡張機能の種類を選択する 」を参照してください。
開発者のエクスペリエンス
スキーマ拡張機能定義を作成する場合、その id の一意の名前を指定する必要があります。次の 2 つの名前付けオプションがあります。
ご使用のテナントで検証済みのバニティ .com
、.net
、.gov
、.edu
、.org
ドメインのいずれかが既にある場合、ドメイン名とスキーマ名を一緒に使用して一意の名前を定義できます (形式: {domainName} _{schemaName} )。 たとえば、バニティ ドメインが contoso.com
の場合、id を contoso_mySchema
と定義できます。 このオプションを強くお勧めします。
または、 ID をスキーマ名 (ドメイン名プレフィックスなし) に設定することもできます。 たとえば、「 mySchema
」のように入力します。 Microsoft Graph によって、指定した名前に基づいて文字列 ID が割り当てられます (形式: ext{8-random-alphanumeric-chars}_{schema-name}
)。 例: extkvbmkofy_mySchema
。
id は、拡張リソース インスタンスにデータを格納する複合型の名前になります。
スキーマ拡張機能が登録されると、関連付けられた所有者アプリケーションと同じテナント内のすべてのアプリケーション (InDevelopment
状態の場合) または任意のテナント内のすべてのアプリケーション (Available
状態の場合) で使用できます。 ディレクトリ拡張機能と同様に、承認されたアプリには、ターゲット オブジェクトで定義されている拡張機能に関するデータの読み取りと書き込みを行う機能があります。
オープン拡張機能とは異なり、拡張リソース インスタンスのスキーマ拡張機能の定義 とそのデータは、個別の API 操作セットとして管理します。 拡張リソース インスタンスのスキーマ拡張データを管理するには、リソース インスタンスの管理に使用するのと同じ REST 要求を使用します。
POST を使用して、新しいユーザーを作成するときにスキーマ拡張プロパティにデータを格納します。
PATCH を使用して、スキーマ拡張プロパティにデータを格納するか、格納されているデータを更新または削除します。
プロパティからデータを削除するには、その値を に設定します null
。
すべての プロパティからデータを削除するには、その値を に設定しますnull
。 すべてのプロパティが の場合、 null
スキーマ拡張オブジェクトも削除されます。
プロパティを更新するには、要求本文のすべてのプロパティを指定する必要があります。 それ以外の場合、Microsoft Graph は指定されていないプロパティを に null
更新します。
GET を使用して、テナント内のすべてのユーザーまたは個々のユーザーのスキーマ拡張プロパティを読み取ります。
スキーマ拡張機能の定義を作成する
要求
POST https://graph.microsoft.com/v1.0/schemaExtensions
{
"id": "graphLearnCourses",
"description": "Graph Learn training courses extensions",
"targetTypes": [
"user"
],
"properties": [
{
"name": "courseId",
"type": "Integer"
},
{
"name": "courseName",
"type": "String"
},
{
"name": "courseType",
"type": "String"
}
]
}
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
var schemaExtension = new SchemaExtension
{
Id = "graphLearnCourses",
Description = "Graph Learn training courses extensions",
TargetTypes = new List<String>()
{
"user"
},
Properties = new List<ExtensionSchemaProperty>()
{
new ExtensionSchemaProperty
{
Name = "courseId",
Type = "Integer"
},
new ExtensionSchemaProperty
{
Name = "courseName",
Type = "String"
},
new ExtensionSchemaProperty
{
Name = "courseType",
Type = "String"
}
}
};
await graphClient.SchemaExtensions
.Request()
.AddAsync(schemaExtension);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
const options = {
authProvider,
};
const client = Client.init(options);
const schemaExtension = {
id: 'graphLearnCourses',
description: 'Graph Learn training courses extensions',
targetTypes: [
'user'
],
properties: [
{
name: 'courseId',
type: 'Integer'
},
{
name: 'courseName',
type: 'String'
},
{
name: 'courseType',
type: 'String'
}
]
};
await client.api('/schemaExtensions')
.post(schemaExtension);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
GraphServiceClient graphClient = GraphServiceClient.builder().authenticationProvider( authProvider ).buildClient();
SchemaExtension schemaExtension = new SchemaExtension();
schemaExtension.id = "graphLearnCourses";
schemaExtension.description = "Graph Learn training courses extensions";
LinkedList<String> targetTypesList = new LinkedList<String>();
targetTypesList.add("user");
schemaExtension.targetTypes = targetTypesList;
LinkedList<ExtensionSchemaProperty> propertiesList = new LinkedList<ExtensionSchemaProperty>();
ExtensionSchemaProperty properties = new ExtensionSchemaProperty();
properties.name = "courseId";
properties.type = "Integer";
propertiesList.add(properties);
ExtensionSchemaProperty properties1 = new ExtensionSchemaProperty();
properties1.name = "courseName";
properties1.type = "String";
propertiesList.add(properties1);
ExtensionSchemaProperty properties2 = new ExtensionSchemaProperty();
properties2.name = "courseType";
properties2.type = "String";
propertiesList.add(properties2);
schemaExtension.properties = propertiesList;
graphClient.schemaExtensions()
.buildRequest()
.post(schemaExtension);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
//THE GO SDK IS IN PREVIEW. NON-PRODUCTION USE ONLY
graphClient := msgraphsdk.NewGraphServiceClient(requestAdapter)
requestBody := graphmodels.NewSchemaExtension()
id := "graphLearnCourses"
requestBody.SetId(&id)
description := "Graph Learn training courses extensions"
requestBody.SetDescription(&description)
targetTypes := []string {
"user",
}
requestBody.SetTargetTypes(targetTypes)
extensionSchemaProperty := graphmodels.NewExtensionSchemaProperty()
name := "courseId"
extensionSchemaProperty.SetName(&name)
type := "Integer"
extensionSchemaProperty.SetType(&type)
extensionSchemaProperty1 := graphmodels.NewExtensionSchemaProperty()
name := "courseName"
extensionSchemaProperty1.SetName(&name)
type := "String"
extensionSchemaProperty1.SetType(&type)
extensionSchemaProperty2 := graphmodels.NewExtensionSchemaProperty()
name := "courseType"
extensionSchemaProperty2.SetName(&name)
type := "String"
extensionSchemaProperty2.SetType(&type)
properties := []graphmodels.ExtensionSchemaPropertyable {
extensionSchemaProperty,
extensionSchemaProperty1,
extensionSchemaProperty2,
}
requestBody.SetProperties(properties)
result, err := graphClient.SchemaExtensions().Post(context.Background(), requestBody, nil)
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
<?php
// THIS SNIPPET IS A PREVIEW FOR THE KIOTA BASED SDK. NON-PRODUCTION USE ONLY
$graphServiceClient = new GraphServiceClient($requestAdapter);
$requestBody = new SchemaExtension();
$requestBody->setId('graphLearnCourses');
$requestBody->setDescription('Graph Learn training courses extensions');
$requestBody->setTargetTypes(['user', ]);
$propertiesExtensionSchemaProperty1 = new ExtensionSchemaProperty();
$propertiesExtensionSchemaProperty1->setName('courseId');
$propertiesExtensionSchemaProperty1->setType('Integer');
$propertiesArray []= $propertiesExtensionSchemaProperty1;
$propertiesExtensionSchemaProperty2 = new ExtensionSchemaProperty();
$propertiesExtensionSchemaProperty2->setName('courseName');
$propertiesExtensionSchemaProperty2->setType('String');
$propertiesArray []= $propertiesExtensionSchemaProperty2;
$propertiesExtensionSchemaProperty3 = new ExtensionSchemaProperty();
$propertiesExtensionSchemaProperty3->setName('courseType');
$propertiesExtensionSchemaProperty3->setType('String');
$propertiesArray []= $propertiesExtensionSchemaProperty3;
$requestBody->setProperties($propertiesArray);
$requestResult = $graphServiceClient->schemaExtensions()->post($requestBody);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
応答
{
"@odata.context": "https://graph.microsoft.com/beta/$metadata#schemaExtensions/$entity",
"id": "extkmpdyld2_graphLearnCourses",
"description": "Graph Learn training courses extensions",
"targetTypes": [
"user"
],
"status": "InDevelopment",
"properties": [
{
"name": "courseId",
"type": "Integer"
},
{
"name": "courseName",
"type": "String"
},
{
"name": "courseType",
"type": "String"
}
]
}
リソース インスタンスにスキーマ拡張機能を追加する
スキーマ拡張機能の定義を作成したら、拡張プロパティをターゲット オブジェクト型のインスタンスに追加することができます。 ターゲット オブジェクトの新しいインスタンスを作成するとき、または既存のオブジェクトを更新するときに、スキーマ拡張機能にデータを格納できます。 次の例は、新しいユーザー オブジェクトを作成するときに、スキーマ拡張プロパティにデータを格納する方法を示しています。
POST https://graph.microsoft.com/beta/users
{
"accountEnabled": true,
"displayName": "Adele Vance",
"mailNickname": "AdeleV",
"userPrincipalName": "AdeleV@m365x72712789.onmicrosoft.com",
"passwordProfile": {
"forceChangePasswordNextSignIn": false,
"password": "xWwvJ]6NMw+bWH-d"
},
"extkmpdyld2_graphLearnCourses": {
"courseId": 100,
"courseName": "Explore Microsoft Graph",
"courseType": "Online"
}
}
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
var user = new User
{
AccountEnabled = true,
DisplayName = "Adele Vance",
MailNickname = "AdeleV",
UserPrincipalName = "AdeleV@m365x72712789.onmicrosoft.com",
PasswordProfile = new PasswordProfile
{
ForceChangePasswordNextSignIn = false,
Password = "xWwvJ]6NMw+bWH-d"
},
AdditionalData = new Dictionary<string, object>()
{
{"extkmpdyld2_graphLearnCourses", "{\"courseId\":100,\"courseName\":\"Explore Microsoft Graph\",\"courseType\":\"Online\"}"}
}
};
await graphClient.Users
.Request()
.AddAsync(user);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
const options = {
authProvider,
};
const client = Client.init(options);
const user = {
accountEnabled: true,
displayName: 'Adele Vance',
mailNickname: 'AdeleV',
userPrincipalName: 'AdeleV@m365x72712789.onmicrosoft.com',
passwordProfile: {
forceChangePasswordNextSignIn: false,
password: 'xWwvJ]6NMw+bWH-d'
},
extkmpdyld2_graphLearnCourses: {
courseId: 100,
courseName: 'Explore Microsoft Graph',
courseType: 'Online'
}
};
await client.api('/users')
.version('beta')
.post(user);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
//THE GO SDK IS IN PREVIEW. NON-PRODUCTION USE ONLY
graphClient := msgraphsdk.NewGraphServiceClient(requestAdapter)
requestBody := graphmodels.NewUser()
accountEnabled := true
requestBody.SetAccountEnabled(&accountEnabled)
displayName := "Adele Vance"
requestBody.SetDisplayName(&displayName)
mailNickname := "AdeleV"
requestBody.SetMailNickname(&mailNickname)
userPrincipalName := "AdeleV@m365x72712789.onmicrosoft.com"
requestBody.SetUserPrincipalName(&userPrincipalName)
passwordProfile := graphmodels.NewPasswordProfile()
forceChangePasswordNextSignIn := false
passwordProfile.SetForceChangePasswordNextSignIn(&forceChangePasswordNextSignIn)
password := "xWwvJ]6NMw+bWH-d"
passwordProfile.SetPassword(&password)
requestBody.SetPasswordProfile(passwordProfile)
additionalData := map[string]interface{}{
extkmpdyld2_graphLearnCourses := graphmodels.New()
courseId := int32(100)
extkmpdyld2_graphLearnCourses.SetCourseId(&courseId)
courseName := "Explore Microsoft Graph"
extkmpdyld2_graphLearnCourses.SetCourseName(&courseName)
courseType := "Online"
extkmpdyld2_graphLearnCourses.SetCourseType(&courseType)
requestBody.SetExtkmpdyld2_graphLearnCourses(extkmpdyld2_graphLearnCourses)
}
requestBody.SetAdditionalData(additionalData)
result, err := graphClient.Users().Post(context.Background(), requestBody, nil)
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
<?php
// THIS SNIPPET IS A PREVIEW FOR THE KIOTA BASED SDK. NON-PRODUCTION USE ONLY
$graphServiceClient = new GraphServiceClient($requestAdapter);
$requestBody = new User();
$requestBody->setAccountEnabled(true);
$requestBody->setDisplayName('Adele Vance');
$requestBody->setMailNickname('AdeleV');
$requestBody->setUserPrincipalName('AdeleV@m365x72712789.onmicrosoft.com');
$passwordProfile = new PasswordProfile();
$passwordProfile->setForceChangePasswordNextSignIn(false);
$passwordProfile->setPassword('xWwvJ]6NMw+bWH-d');
$requestBody->setPasswordProfile($passwordProfile);
$additionalData = [
'extkmpdyld2_graphLearnCourses' => $requestBody = new Extkmpdyld2_graphLearnCourses();
$requestBody->setCourseId(100);
$ requestBody->setCourseName('Explore Microsoft Graph');
$ requestBody->setCourseType('Online');
$requestBody->setExtkmpdyld2_graphLearnCourses($extkmpdyld2_graphLearnCourses);
];
$requestBody->setAdditionalData($additionalData);
$requestResult = $graphServiceClient->users()->post($requestBody);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
要求は、201 Created
応答コードと、応答本文で schemaExtension オブジェクトを返します
スキーマ拡張プロパティを更新または削除する
PATCH 操作を使用して、スキーマ拡張プロパティを更新するか、既存のスキーマ拡張オブジェクトを削除します。 拡張機能プロパティとそれに関連付けられている値をリソース インスタンスから削除するには、その値を null
に設定します。
次の例では、courseId プロパティの値を削除し、courseType プロパティを更新します。 extkmpdyld2_graphLearnCourses
拡張プロパティ全体を削除するには、その値を null
に設定します。
PATCH https://graph.microsoft.com/beta/users/0668e673-908b-44ea-861d-0661297e1a3e
{
"extkmpdyld2_graphLearnCourses": {
"courseType": "Instructor-led",
"courseId": null
}
}
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
var user = new User
{
AdditionalData = new Dictionary<string, object>()
{
{"extkmpdyld2_graphLearnCourses", "{\"courseType\":\"Instructor-led\",\"courseId\":null}"}
}
};
await graphClient.Users["{user-id}"]
.Request()
.UpdateAsync(user);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
const options = {
authProvider,
};
const client = Client.init(options);
const user = {
extkmpdyld2_graphLearnCourses: {
courseType: 'Instructor-led',
courseId: null
}
};
await client.api('/users/0668e673-908b-44ea-861d-0661297e1a3e')
.version('beta')
.update(user);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
//THE GO SDK IS IN PREVIEW. NON-PRODUCTION USE ONLY
graphClient := msgraphsdk.NewGraphServiceClient(requestAdapter)
requestBody := graphmodels.NewUser()
additionalData := map[string]interface{}{
extkmpdyld2_graphLearnCourses := graphmodels.New()
courseType := "Instructor-led"
extkmpdyld2_graphLearnCourses.SetCourseType(&courseType)
courseId := null
extkmpdyld2_graphLearnCourses.SetCourseId(&courseId)
requestBody.SetExtkmpdyld2_graphLearnCourses(extkmpdyld2_graphLearnCourses)
}
requestBody.SetAdditionalData(additionalData)
result, err := graphClient.UsersById("user-id").Patch(context.Background(), requestBody, nil)
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
<?php
// THIS SNIPPET IS A PREVIEW FOR THE KIOTA BASED SDK. NON-PRODUCTION USE ONLY
$graphServiceClient = new GraphServiceClient($requestAdapter);
$requestBody = new User();
$additionalData = [
'extkmpdyld2_graphLearnCourses' => $requestBody = new Extkmpdyld2_graphLearnCourses();
$ requestBody->setCourseType('Instructor-led');
$requestBody->setCourseId(null);
$requestBody->setExtkmpdyld2_graphLearnCourses($extkmpdyld2_graphLearnCourses);
];
$requestBody->setAdditionalData($additionalData);
$requestResult = $graphServiceClient->usersById('user-id')->patch($requestBody);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
要求は 204 No Content
応答オブジェクトを返します。
スキーマ拡張プロパティを取得する
リソース インスタンスのスキーマ拡張プロパティを読み取るには、$select
要求で拡張機能名を指定します。
要求
GET https://graph.microsoft.com/beta/users/0668e673-908b-44ea-861d-0661297e1a3e?$select=id,displayName,extkmpdyld2_graphLearnCourses
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
var user = await graphClient.Users["{user-id}"]
.Request()
.Select("id,displayName,extkmpdyld2_graphLearnCourses")
.GetAsync();
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
const options = {
authProvider,
};
const client = Client.init(options);
let user = await client.api('/users/0668e673-908b-44ea-861d-0661297e1a3e')
.version('beta')
.select('id,displayName,extkmpdyld2_graphLearnCourses')
.get();
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
GraphServiceClient graphClient = GraphServiceClient.builder().authenticationProvider( authProvider ).buildClient();
User user = graphClient.users("0668e673-908b-44ea-861d-0661297e1a3e")
.buildRequest()
.select("id,displayName,extkmpdyld2_graphLearnCourses")
.get();
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
//THE GO SDK IS IN PREVIEW. NON-PRODUCTION USE ONLY
graphClient := msgraphsdk.NewGraphServiceClient(requestAdapter)
requestParameters := &graphconfig.UserItemRequestBuilderGetQueryParameters{
Select: [] string {"id","displayName","extkmpdyld2_graphLearnCourses"},
}
configuration := &graphconfig.UserItemRequestBuilderGetRequestConfiguration{
QueryParameters: requestParameters,
}
result, err := graphClient.UsersById("user-id").Get(context.Background(), configuration)
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
Import-Module Microsoft.Graph.Users
Get-MgUser -UserId $userId -Property "id,displayName,extkmpdyld2_graphLearnCourses"
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
<?php
// THIS SNIPPET IS A PREVIEW FOR THE KIOTA BASED SDK. NON-PRODUCTION USE ONLY
$graphServiceClient = new GraphServiceClient($requestAdapter);
$requestConfiguration = new UserRequestBuilderGetRequestConfiguration();
$queryParameters = new UserRequestBuilderGetQueryParameters();
$queryParameters->select = ["id","displayName","extkmpdyld2_graphLearnCourses"];
$requestConfiguration->queryParameters = $queryParameters;
$requestResult = $graphServiceClient->usersById('user-id')->get($requestConfiguration);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
応答
HTTP/1.1 200 OK
Content-type: application/json
{
"@odata.context": "https://graph.microsoft.com/beta/$metadata#users(id,displayName,extkmpdyld2_graphLearnCourses)/$entity",
"id": "63384f56-42d2-4aa7-b1d6-b10c78f143a2",
"displayName": "Adele Vance",
"extkmpdyld2_graphLearnCourses": {
"@odata.type": "#microsoft.graph.ComplexExtensionValue",
"courseType": "Instructor-led",
"courseName": "Explore Microsoft Graph",
"courseId": null
}
}
スキーマ拡張機能を使用してカスタム プロパティと関連データを追加する方法の詳細については、「schemaExtension リソースの種類 」および「スキーマ拡張機能を使用してグループにカスタム プロパティを追加する 」を参照してください。
オープン拡張機能
Microsoft Graph オープン拡張機能 は、オープン タイプ であり、型指定されていないデータを直接リソース インスタンスに追加するためのシンプルで柔軟な方法を提供します。 これらの拡張機能は、厳密に型指定されたもの、検出可能、またはフィルター可能ではありません。
Microsoft Graph オープン拡張機能をサポートするリソースの種類の一覧については、「アプリケーションの拡張機能の種類を選択する 」を参照してください。
開発者のエクスペリエンス
オープン拡張機能は、データとともに、リソース インスタンスの拡張機能 ナビゲーション プロパティを通じてアクセスできます。 これらを使用すると、関連するプロパティをグループ化して、アクセスと管理を容易にすることができます。
開いている拡張定義は、ユーザー オブジェクト上でその場で作成および管理されます。 ユーザーごとに一意と見なされ、すべてのユーザーに普遍的に一貫性のあるパターンを適用する必要はありません。 たとえば、同じテナントでは次のようになります。
Adele のユーザー オブジェクトには 、socialSettings という名前のオープン拡張機能があり、 linkedInProfile 、 skypeId 、 xboxGamertag の 3 つのプロパティがあります。
Bruno のユーザー オブジェクトは、開いている拡張プロパティを持つことができません。
Alex のユーザー オブジェクトには 、socialSettings という名前のオープン拡張機能があり、 テーマ 、 色 、 言語 、 フォント 、 fontSize の 5 つのプロパティがあります。
オープン拡張機能で事前に定義される 書き込み可能なプロパティは、extensionName プロパティだけです。 オープン拡張機能を作成する場合、extensionName プロパティにテナント内で一意の名前を割り当てる必要があります。 これを行う方法の 1 つは、独自のドメイン に依存する逆引きドメイン ネーム システム (DNS) 形式 (例: Com.Contoso.ContactInfo
) を使用することです。 拡張機能名に Microsoft ドメイン (Com.Microsoft
または Com.OnMicrosoft
) を使用しないでください 。
オープン拡張機能を作成する
次の例は、3 つのプロパティを持つオープン拡張機能の定義と、カスタム プロパティと関連データがリソース インスタンスにどのように表示されるかを示しています。
POST https://graph.microsoft.com/v1.0/users/3fbd929d-8c56-4462-851e-0eb9a7b3a2a5/extensions
{
"@odata.type": "#microsoft.graph.openTypeExtension",
"extensionName": "com.contoso.socialSettings",
"skypeId": "skypeId.AdeleV",
"linkedInProfile": "www.linkedin.com/in/testlinkedinprofile",
"xboxGamerTag": "AwesomeAdele",
"id": "com.contoso.socialSettings"
}
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
var extension = new OpenTypeExtension
{
ExtensionName = "com.contoso.socialSettings",
Id = "com.contoso.socialSettings",
AdditionalData = new Dictionary<string, object>()
{
{"skypeId", "skypeId.AdeleV"},
{"linkedInProfile", "www.linkedin.com/in/testlinkedinprofile"},
{"xboxGamerTag", "AwesomeAdele"}
}
};
await graphClient.Users["{user-id}"].Extensions
.Request()
.AddAsync(extension);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
const options = {
authProvider,
};
const client = Client.init(options);
const extension = {
'@odata.type': '#microsoft.graph.openTypeExtension',
extensionName: 'com.contoso.socialSettings',
skypeId: 'skypeId.AdeleV',
linkedInProfile: 'www.linkedin.com/in/testlinkedinprofile',
xboxGamerTag: 'AwesomeAdele',
id: 'com.contoso.socialSettings'
};
await client.api('/users/3fbd929d-8c56-4462-851e-0eb9a7b3a2a5/extensions')
.post(extension);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
//THE GO SDK IS IN PREVIEW. NON-PRODUCTION USE ONLY
graphClient := msgraphsdk.NewGraphServiceClient(requestAdapter)
requestBody := graphmodels.NewExtension()
id := "com.contoso.socialSettings"
requestBody.SetId(&id)
additionalData := map[string]interface{}{
"extensionName" : "com.contoso.socialSettings",
"skypeId" : "skypeId.AdeleV",
"linkedInProfile" : "www.linkedin.com/in/testlinkedinprofile",
"xboxGamerTag" : "AwesomeAdele",
}
requestBody.SetAdditionalData(additionalData)
result, err := graphClient.UsersById("user-id").Extensions().Post(context.Background(), requestBody, nil)
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
<?php
// THIS SNIPPET IS A PREVIEW FOR THE KIOTA BASED SDK. NON-PRODUCTION USE ONLY
$graphServiceClient = new GraphServiceClient($requestAdapter);
$requestBody = new Extension();
$requestBody->set@odatatype('#microsoft.graph.openTypeExtension');
$requestBody->setId('com.contoso.socialSettings');
$additionalData = [
'extensionName' => 'com.contoso.socialSettings',
'skypeId' => 'skypeId.AdeleV',
'linkedInProfile' => 'www.linkedin.com/in/testlinkedinprofile',
'xboxGamerTag' => 'AwesomeAdele',
];
$requestBody->setAdditionalData($additionalData);
$requestResult = $graphServiceClient->usersById('user-id')->extensions()->post($requestBody);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
要求は、201 Created
応答コードと、応答本文で openTypeExtension オブジェクトを返します。
既存のオープン拡張機能を更新する
オープン拡張機能を更新するには、要求本文ですべてのプロパティを指定する必要があります。 それ以外の場合、未指定のプロパティは null
に更新され、オープン拡張機能から削除されます。
次の要求では、linkedInProfile プロパティと xboxGamerTag プロパティのみを指定します。 linkedInProfile プロパティは同じままですが、xboxGamerTag プロパティの値は更新されています。 この要求は、指定されていない skypeId プロパティも削除します。
PATCH https://graph.microsoft.com/v1.0/users/3fbd929d-8c56-4462-851e-0eb9a7b3a2a5/extensions/com.contoso.socialSettings
{
"xboxGamerTag": "FierceAdele",
"linkedInProfile": "www.linkedin.com/in/testlinkedinprofile"
}
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
var extension = new Extension
{
AdditionalData = new Dictionary<string, object>()
{
{"xboxGamerTag", "FierceAdele"},
{"linkedInProfile", "www.linkedin.com/in/testlinkedinprofile"}
}
};
await graphClient.Users["{user-id}"].Extensions["{extension-id}"]
.Request()
.UpdateAsync(extension);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
const options = {
authProvider,
};
const client = Client.init(options);
const extension = {
xboxGamerTag: 'FierceAdele',
linkedInProfile: 'www.linkedin.com/in/testlinkedinprofile'
};
await client.api('/users/3fbd929d-8c56-4462-851e-0eb9a7b3a2a5/extensions/com.contoso.socialSettings')
.update(extension);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
//THE GO SDK IS IN PREVIEW. NON-PRODUCTION USE ONLY
graphClient := msgraphsdk.NewGraphServiceClient(requestAdapter)
requestBody := graphmodels.NewExtension()
additionalData := map[string]interface{}{
"xboxGamerTag" : "FierceAdele",
"linkedInProfile" : "www.linkedin.com/in/testlinkedinprofile",
}
requestBody.SetAdditionalData(additionalData)
result, err := graphClient.UsersById("user-id").ExtensionsById("extension-id").Patch(context.Background(), requestBody, nil)
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
<?php
// THIS SNIPPET IS A PREVIEW FOR THE KIOTA BASED SDK. NON-PRODUCTION USE ONLY
$graphServiceClient = new GraphServiceClient($requestAdapter);
$requestBody = new Extension();
$additionalData = [
'xboxGamerTag' => 'FierceAdele',
'linkedInProfile' => 'www.linkedin.com/in/testlinkedinprofile',
];
$requestBody->setAdditionalData($additionalData);
$requestResult = $graphServiceClient->usersById('user-id')->extensionsById('extension-id')->patch($requestBody);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
この要求は、204 No Content
応答コードを返します。
オープン拡張機能を取得する
GET https://graph.microsoft.com/v1.0/users/3fbd929d-8c56-4462-851e-0eb9a7b3a2a5/extensions/com.contoso.socialSettings
{
"@odata.context": "https://graph.microsoft.com/beta/$metadata#users('3fbd929d-8c56-4462-851e-0eb9a7b3a2a5')/extensions/$entity",
"@odata.type": "#microsoft.graph.openTypeExtension",
"xboxGamerTag": "FierceAdele",
"linkedInProfile": "www.linkedin.com/in/testlinkedinprofile",
"id": "com.contoso.socialSettings"
}
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
var extension = await graphClient.Users["{user-id}"].Extensions["{extension-id}"]
.Request()
.GetAsync();
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
const options = {
authProvider,
};
const client = Client.init(options);
let extension = await client.api('/users/3fbd929d-8c56-4462-851e-0eb9a7b3a2a5/extensions/com.contoso.socialSettings')
.get();
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
GraphServiceClient graphClient = GraphServiceClient.builder().authenticationProvider( authProvider ).buildClient();
Extension extension = graphClient.users("3fbd929d-8c56-4462-851e-0eb9a7b3a2a5").extensions("com.contoso.socialSettings")
.buildRequest()
.get();
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
//THE GO SDK IS IN PREVIEW. NON-PRODUCTION USE ONLY
graphClient := msgraphsdk.NewGraphServiceClient(requestAdapter)
requestBody := graphmodels.NewExtension()
additionalData := map[string]interface{}{
"@odata.context" : "https://graph.microsoft.com/beta/$metadata#users('3fbd929d-8c56-4462-851e-0eb9a7b3a2a5')/extensions/$entity",
"xboxGamerTag" : "FierceAdele",
"linkedInProfile" : "www.linkedin.com/in/testlinkedinprofile",
"id" : "com.contoso.socialSettings",
}
requestBody.SetAdditionalData(additionalData)
result, err := graphClient.UsersById("user-id").ExtensionsById("extension-id").Get(context.Background(), requestBody, nil)
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
<?php
// THIS SNIPPET IS A PREVIEW FOR THE KIOTA BASED SDK. NON-PRODUCTION USE ONLY
$graphServiceClient = new GraphServiceClient($requestAdapter);
$requestBody = new Extension();
$additionalData = [
'@odata.context' => 'https://graph.microsoft.com/beta/$metadata#users(\'3fbd929d-8c56-4462-851e-0eb9a7b3a2a5\')/extensions/$entity',
'@odata.type' => '#microsoft.graph.openTypeExtension',
'xboxGamerTag' => 'FierceAdele',
'linkedInProfile' => 'www.linkedin.com/in/testlinkedinprofile',
'id' => 'com.contoso.socialSettings',
];
$requestBody->setAdditionalData($additionalData);
$requestResult = $graphServiceClient->usersById('user-id')->extensionsById('extension-id')->get($requestBody);
SDK をプロジェクトに追加し、authProvider インスタンスを作成する方法の詳細については、SDK のドキュメントを参照 してください。
オープン拡張機能を使用してカスタム プロパティと関連データを追加する方法の詳細については、「openTypeExtension リソースの種類 」および「オープン拡張機能を使用してユーザーにカスタム プロパティを追加する 」を参照してください。
アプリケーションの拡張機能の種類を選択する
次の表は、拡張機能の種類を比較したものです。これは、シナリオに最も適したオプションを決定するのに役立ちます。
注:
1 既存のサービスの制限により、代理人は共有メールボックス 予定表でオープン拡張追加イベントを作成することはできません。 これを試みると、ErrorAccessDenied
応答が返されます。
2 開いている拡張機能の制限は、 ユーザー 、 グループ 、 デバイス 、 組織 のディレクトリ リソースに適用されます。
3 オープン拡張機能 は、MAPI 名前付きプロパティ に格納されます。これは、ユーザーのメールボックスの限られたリソースです。 この制限は、次の Outlook リソースに適用されます: message 、event 、contact
職場または学校のアカウントでサインインした場合は、すべての拡張機能を管理できます。 また、個人用 Microsoft アカウントでサインインすると、次のリソースのオープン拡張機能を管理できます: event 、post 、group 、message 、contact 、user 。
拡張属性プロパティの使用に関する考慮事項
onPremisesExtensionAttributes オブジェクトは、オンプレミス AD から同期されていないオブジェクトに対してのみ更新できます。
15 個の拡張属性は Microsoft Graph で既に定義済みであり、そのプロパティ名は変更できません。 そのため、拡張属性に SkypeId などのカスタム名を使用することはできません。 これにより、他のアプリによって値が誤って上書きされないように、使用中の拡張機能属性プロパティを自分と組織が認識する必要があります。
ディレクトリ拡張機能の使用に関する考慮事項
ディレクトリ拡張機能の定義を誤って削除した場合、関連付けられているプロパティに格納されているデータはすべて検出できなくなります。 これを解決するには、同じ所有者アプリで、削除された定義とまったく同じ名前の新しいディレクトリ拡張機能定義を作成します。
対応する拡張プロパティが に更新される前に null
定義オブジェクトが削除された場合、プロパティはオブジェクトの 100 制限に対してカウントされます。
関連付けられている拡張プロパティのデータが削除される前に定義が削除された場合、検出できないプロパティが 100 制限に対してカウントされていても、Microsoft Graph を使用して拡張機能プロパティの存在を知る方法はありません。
ホーム テナントで所有者アプリを削除すると、関連付けられているディレクトリ拡張機能のプロパティとそのデータが検出できなくなります。 所有者アプリを復元すると、ディレクトリ拡張機能の定義が復元 されますが、 ディレクトリ拡張機能のプロパティやそのデータはすぐに検出できなくなります。 これは、アプリを復元しても、テナント内の関連付けられているサービス プリンシパルが自動的に復元されないためです。 ディレクトリ拡張機能のプロパティとそのデータを検出できるようにするには、新しいサービス プリンシパルを作成するか、削除されたサービス プリンシパルを復元します。 アプリが同意されている他のテナントに変更は行われません。
スキーマ拡張機能の使用に関する考慮事項
スキーマ拡張機能には所有者アプリが必要です。 スキーマ拡張機能の所有権を別のアプリに再割り当てすることはできません。
スキーマ拡張機能を設定せずにスキーマ拡張 null
定義を削除すると、プロパティとそれに関連付けられているユーザー データが検出できなくなります。
ホーム テナントで所有者アプリを削除しても、関連付けられているスキーマ拡張機能の定義やプロパティと、そのアプリが格納するデータは削除されません。 スキーマ拡張プロパティは、ユーザーに対して引き続き読み取り、削除、または更新できます。 ただし、スキーマ拡張機能の定義を更新することはできません。
オープン拡張機能の使用に関する考慮事項
作成者アプリを削除しても、開いている拡張機能と保存されるデータには影響しません。
アクセス許可
特定のリソース上の拡張機能データに対して読み書きするには、そのリソースに対して読み書きするときに必要となるのと同じアクセス許可 が必要になります。 たとえば、アプリがユーザーのプロファイルをカスタム アプリ データで更新できるようにするには、アプリに User.ReadWrite.All アクセス許可を付与しておく必要があります。
既知の制限
拡張機能の使用に関する既知の制限については、既知の問題に関する記事の「拡張機能」セクション を参照してください。
次の手順