Добавление пользовательских данных в ресурсы user с помощью открытых расширений
Статья
В этой статье показано, как использовать открытые расширения.
Представьте, что вы создаете приложение, доступное на нескольких клиентских платформах, таких как настольные и мобильные. Вы хотите, чтобы пользователи могли настраивать интерфейс, чтобы он выглядел одинаково независимо от того, какое устройство они используют для входа в приложение.
Для этого сценария в этой статье показано, как:
добавить открытое расширение, представляющее данные перемещаемого профиля пользователя;
запросить данные у пользователя и вернуть перемещаемый профиль;
изменить данные перемещаемого профиля пользователя (значение открытого расширения);
удалить данные перемещаемого профиля пользователя.
Примечание.
Помимо пользователей, поддерживаются и открытые расширения, которыми можно управлять для других типов ресурсов.
1. Добавление данных перемещаемого профиля
Пользователь входит в приложение и настраивает его внешний вид. Эти параметры приложения должны перемещаться, чтобы интерфейс выглядел одинаково на любом устройстве. Приложение вызывает Microsoft Graph, выполнив следующий запрос, чтобы добавить данные перемещаемого профиля в ресурс пользователя.
// Code snippets are only available for the latest version. Current version is 5.x
var graphClient = new GraphServiceClient(requestAdapter);
var requestBody = new Extension
{
OdataType = "microsoft.graph.openTypeExtension",
AdditionalData = new Dictionary<string, object>
{
{
"extensionName" , "com.contoso.roamingSettings"
},
{
"theme" , "dark"
},
{
"color" , "purple"
},
{
"lang" , "Japanese"
},
},
};
var result = await graphClient.Me.Extensions.PostAsync(requestBody);
<?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');
$additionalData = [
'extensionName' => 'com.contoso.roamingSettings',
'theme' => 'dark',
'color' => 'purple',
'lang' => 'Japanese',
];
$requestBody->setAdditionalData($additionalData);
$result = $graphServiceClient->me()->extensions()->post($requestBody);
Import-Module Microsoft.Graph.Users
$params = @{
"@odata.type" = "microsoft.graph.openTypeExtension"
extensionName = "com.contoso.roamingSettings"
theme = "dark"
color = "purple"
lang = "Japanese"
}
# A UPN can also be used as -UserId.
New-MgUserExtension -UserId $userId -BodyParameter $params
Когда пользователь входит в приложение с другого устройства, приложение вызывает Microsoft Graph, чтобы получить сведения о профиле пользователя и развернуть свойство навигации расширений , чтобы получить параметры перемещения.
GET https://graph.microsoft.com/v1.0/me?$select=id,displayName,mail,mobilePhone&$expand=extensions
// Code snippets are only available for the latest version. Current version is 5.x
var graphClient = new GraphServiceClient(requestAdapter);
var result = await graphClient.Me.GetAsync((requestConfiguration) =>
{
requestConfiguration.QueryParameters.Select = new string []{ "id","displayName","mail","mobilePhone" };
requestConfiguration.QueryParameters.Expand = new string []{ "extensions" };
});
<?php
// THIS SNIPPET IS A PREVIEW FOR THE KIOTA BASED SDK. NON-PRODUCTION USE ONLY
$graphServiceClient = new GraphServiceClient($requestAdapter);
$requestConfiguration = new MeRequestBuilderGetRequestConfiguration();
$queryParameters = MeRequestBuilderGetRequestConfiguration::createQueryParameters();
$queryParameters->select = ["id","displayName","mail","mobilePhone"];
$queryParameters->expand = ["extensions"];
$requestConfiguration->queryParameters = $queryParameters;
$result = $graphServiceClient->me()->get($requestConfiguration);
Import-Module Microsoft.Graph.Users
# A UPN can also be used as -UserId.
Get-MgUser -UserId $userId -Property "id,displayName,mail,mobilePhone" -ExpandProperty "extensions"
// Code snippets are only available for the latest version. Current version is 5.x
var graphClient = new GraphServiceClient(requestAdapter);
var requestBody = new Extension
{
AdditionalData = new Dictionary<string, object>
{
{
"theme" , "light"
},
{
"color" , "yellow"
},
{
"lang" , "Swahili"
},
},
};
var result = await graphClient.Me.Extensions["{extension-id}"].PatchAsync(requestBody);
<?php
// THIS SNIPPET IS A PREVIEW FOR THE KIOTA BASED SDK. NON-PRODUCTION USE ONLY
$graphServiceClient = new GraphServiceClient($requestAdapter);
$requestBody = new Extension();
$additionalData = [
'theme' => 'light',
'color' => 'yellow',
'lang' => 'Swahili',
];
$requestBody->setAdditionalData($additionalData);
$result = $graphServiceClient->me()->extensions()->byExtensionId('extension-id')->patch($requestBody);
Import-Module Microsoft.Graph.Users
$params = @{
theme = "light"
color = "yellow"
lang = "Swahili"
}
# A UPN can also be used as -UserId.
Update-MgUserExtension -UserId $userId -ExtensionId $extensionId -BodyParameter $params
Пользователь решает, что ему больше не нужен перемещаемый профиль, поэтому он удаляет его, и приложение вызывает Microsoft Graph, выполнив следующий запрос.
// Code snippets are only available for the latest version. Current version is 5.x
var graphClient = new GraphServiceClient(requestAdapter);
await graphClient.Me.Extensions["{extension-id}"].DeleteAsync();
<?php
// THIS SNIPPET IS A PREVIEW FOR THE KIOTA BASED SDK. NON-PRODUCTION USE ONLY
$graphServiceClient = new GraphServiceClient($requestAdapter);
$graphServiceClient->me()->extensions()->byExtensionId('extension-id')->delete();