Stellen Sie sich vor, Sie erstellen eine Anwendung, die auf mehreren Clientplattformen verfügbar ist, z. B. desktop- und mobil. Sie möchten es Benutzern ermöglichen, ihre Benutzeroberfläche so zu konfigurieren, dass sie konsistent ist, unabhängig davon, welches Gerät sie für die Anmeldung bei Ihrer App verwenden.
Für dieses Szenario wird in diesem Artikel Folgendes beschrieben:
Stellen Einige Roamingprofilinformationen über den Benutzer mithilfe von offenen Erweiterungen dar.
Abfragen des Benutzers und Zurückgeben des Roamingprofils.
Ändern Sie die Roamingprofilinformationen des Benutzers, die in der geöffneten Erweiterung gespeichert sind.
Löschen der Roamingprofilinformationen des Benutzers.
Hinweis
Neben Benutzern werden auch offene Erweiterungen unterstützt und können für andere Ressourcentypen verwaltet werden.
Voraussetzungen
Um die Schritte in diesem Artikel zu reproduzieren, benötigen Sie die folgenden Berechtigungen:
Melden Sie sich bei einem API-Client wie Graph Explorer und dem Benutzer an, für den Sie das Roamingprofil speichern möchten.
Erteilen Sie der App die delegierte Berechtigung User.ReadWrite für den angemeldeten Benutzer.
Schritt 1. Hinzufügen von Roamingprofilinformationen
Der Benutzer meldet sich bei der App an und konfiguriert das Aussehen und Verhalten der App. Diese App-Einstellungen sind roamingfähig, der Benutzer erhält also dieselbe Oberfläche, ganz gleich, mit welchem Gerät er sich bei der App anmeldet. Die App ruft Microsoft Graph auf, indem sie die folgende Anforderung ausführt, um die Roamingprofilinformationen zum Ressourcenobjekt des angemeldeten Benutzers hinzuzufügen.
// Code snippets are only available for the latest version. Current version is 5.x
// Dependencies
using Microsoft.Graph.Models;
var requestBody = new OpenTypeExtension
{
OdataType = "microsoft.graph.openTypeExtension",
ExtensionName = "com.contoso.roamingSettings",
AdditionalData = new Dictionary<string, object>
{
{
"theme" , "dark"
},
{
"color" , "purple"
},
{
"lang" , "Japanese"
},
},
};
// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
var result = await graphClient.Me.Extensions.PostAsync(requestBody);
// THE CLI IS IN PREVIEW. NON-PRODUCTION USE ONLY
mgc users extensions create --user-id {user-id} --body '{\
"@odata.type":"microsoft.graph.openTypeExtension",\
"extensionName":"com.contoso.roamingSettings",\
"theme":"dark",\
"color":"purple",\
"lang":"Japanese"\
}\
'
// Code snippets are only available for the latest version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
OpenTypeExtension extension = new OpenTypeExtension();
extension.setOdataType("microsoft.graph.openTypeExtension");
extension.setExtensionName("com.contoso.roamingSettings");
HashMap<String, Object> additionalData = new HashMap<String, Object>();
additionalData.put("theme", "dark");
additionalData.put("color", "purple");
additionalData.put("lang", "Japanese");
extension.setAdditionalData(additionalData);
Extension result = graphClient.me().extensions().post(extension);
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
Wenn sich der Benutzer von einem anderen Gerät aus bei der App anmeldet, ruft die App Microsoft Graph auf, um die Profildetails des Benutzers abzurufen und die Erweiterungsnavigationseigenschaft zu erweitern, um die Roamingeinstellungen abzurufen. Anschließend werden diese Daten verwendet, um die gleiche Benutzererfahrung wie auf dem anderen Gerät bereitzustellen.
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
// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
var result = await graphClient.Me.GetAsync((requestConfiguration) =>
{
requestConfiguration.QueryParameters.Select = new string []{ "id","displayName","mail","mobilePhone" };
requestConfiguration.QueryParameters.Expand = new string []{ "extensions" };
});
// Code snippets are only available for the latest version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
User result = graphClient.me().get(requestConfiguration -> {
requestConfiguration.queryParameters.select = new String []{"id", "displayName", "mail", "mobilePhone"};
requestConfiguration.queryParameters.expand = new String []{"extensions"};
});
Import-Module Microsoft.Graph.Users
# A UPN can also be used as -UserId.
Get-MgUser -UserId $userId -Property "id,displayName,mail,mobilePhone" -ExpandProperty "extensions"
HTTP/1.1 200 OK
Content-Type: application/json
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users(id,displayName,mail,mobilePhone,extensions())/$entity",
"@microsoft.graph.tips": "Use $select to choose only the properties your app needs, as this can lead to performance improvements. For example: GET me?$select=signInActivity,accountEnabled",
"id": "376bdbfc-e41f-4082-a8cf-b31731465eeb",
"displayName": "Raul Razo",
"mail": null,
"mobilePhone": null,
"extensions@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('376bdbfc-e41f-4082-a8cf-b31731465eeb')/extensions",
"extensions": [
{
"@odata.type": "#microsoft.graph.openTypeExtension",
"extensionName": "com.contoso.roamingSettings",
"theme": "dark",
"color": "purple",
"lang": "Japanese",
"id": "com.contoso.roamingSettings"
}
]
}
Schritt 3: Ändern von Roamingprofilinformationen
Der Benutzer kann seine Roamingprofilinformationen ändern. Die App ruft Microsoft Graph auf, indem die folgende Abfrage ausgeführt wird. Die Anforderung gibt einen 204 No Content Antwortcode zurück.
Sie müssen auch alle Eigenschaften in den Anforderungstext einschließen, auch wenn Sie nur eine Teilmenge davon aktualisieren möchten. Andernfalls entfernt Microsoft Graph die Eigenschaften, die Sie nicht übergeben. Um Daten zu löschen, aber eine Eigenschaft beizubehalten, legen Sie den Eigenschaftswert auf fest null.
// Code snippets are only available for the latest version. Current version is 5.x
// Dependencies
using Microsoft.Graph.Models;
var requestBody = new Extension
{
AdditionalData = new Dictionary<string, object>
{
{
"theme" , "light"
},
{
"color" , "yellow"
},
{
"lang" , "Swahili"
},
},
};
// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
var result = await graphClient.Me.Extensions["{extension-id}"].PatchAsync(requestBody);
// THE CLI IS IN PREVIEW. NON-PRODUCTION USE ONLY
mgc users extensions patch --user-id {user-id} --extension-id {extension-id} --body '{\
"theme":"light",\
"color":"yellow",\
"lang":"Swahili"\
}\
'
// Code snippets are only available for the latest version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
Extension extension = new Extension();
HashMap<String, Object> additionalData = new HashMap<String, Object>();
additionalData.put("theme", "light");
additionalData.put("color", "yellow");
additionalData.put("lang", "Swahili");
extension.setAdditionalData(additionalData);
Extension result = graphClient.me().extensions().byExtensionId("{extension-id}").patch(extension);
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
Schritt 4. Löschen des Roamingprofils eines Benutzers
Der Benutzer entscheidet, dass er kein Roamingprofil mehr möchte. Um die Erweiterungseigenschaft zu löschen, ruft die App Microsoft Graph auf, indem sie die folgende Anforderung ausführt. Die Anforderung gibt einen 204 No Content Antwortcode zurück.
// Code snippets are only available for the latest version. Current version is 5.x
// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
await graphClient.Me.Extensions["{extension-id}"].DeleteAsync();
// Code snippets are only available for the latest version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
graphClient.me().extensions().byExtensionId("{extension-id}").delete();
<?php
use Microsoft\Graph\GraphServiceClient;
$graphServiceClient = new GraphServiceClient($tokenRequestContext, $scopes);
$graphServiceClient->me()->extensions()->byExtensionId('extension-id')->delete()->wait();
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unter https://aka.ms/ContentUserFeedback.