Hinzufügen von benutzerdefinierten Daten zu Ressourcen mithilfe von Erweiterungen
Artikel
Microsoft Graph bietet einen einzigen API-Endpunkt für den Zugriff auf umfangreiche personenbezogene Daten und Erkenntnisse durch Ressourcen wie user und message. Sie können Microsoft Graph auch erweitern, indem Sie benutzerdefinierte Eigenschaften zu Ressourceninstanzen hinzufügen, ohne dass ein externer Datenspeicher erforderlich ist.
In diesem Artikel wird beschrieben, wie Microsoft Graph die Erweiterung seiner Ressourcen unterstützt, welche Optionen zum Hinzufügen benutzerdefinierter Eigenschaften verfügbar sind und wann diese verwendet werden sollen.
Wichtig
Verwenden Sie Erweiterungen nicht zur Speicherung vertraulicher personenbezogener Informationen wie Kontoanmeldeinformationen, Behördenkennnummern, Karteninhaberdaten, Bankkontonummern, Krankendaten oder vertraulichen Hintergrundinformationen.
Die in diesem Artikel erwähnten Erweiterungen ähneln nicht den folgenden Features:
Gründe für das Hinzufügen benutzerdefinierter Daten zu Microsoft Graph
Als ISV-Entwickler*in möchten Sie möglicherweise Ihre App schlank halten und app-spezifische Profildaten in Microsoft Graph speichern, indem Sie die Ressource user erweitern.
Alternativ können Sie den vorhandenen Benutzerprofilspeicher Ihrer App beibehalten und der Benutzerressource einen app-spezifischen Bezeichner hinzufügen.
Als Unternehmensentwickler*in können die von Ihnen entwickelten internen Anwendungen auf Personaldaten Ihres Unternehmens zurückgreifen. Die Integration in mehrere Anwendungen kann vereinfacht werden, indem diese benutzerdefinierten Daten in Microsoft Graph gespeichert werden.
Benutzerdefinierte Datenoptionen in Microsoft Graph
Microsoft Graph bietet vier Arten von Erweiterungen zum Hinzufügen von benutzerdefinierten Daten.
Erweiterungsattribute
Verzeichniserweiterungen (Microsoft Entra ID)
Schemaerweiterungen
Offene Erweiterungen
Erweiterungsattribute
Microsoft Entra ID bietet einen Satz von 15 Erweiterungsattributen mit vordefinierten Namen für die Benutzer- und Geräteressourcen. Diese Eigenschaften waren ursprünglich benutzerdefinierte Attribute, die in lokalen Active Directory (AD) und Microsoft Exchange bereitgestellt wurden. Sie können jetzt jedoch nicht nur für die Synchronisierung von lokalen AD- und Microsoft Exchange-Daten mit Microsoft Entra ID über Microsoft Graph verwendet werden.
Sie können die 15 Erweiterungsattribute verwenden, um String-Werte auf die Ressourceninstanzen user oder device zu speichern, und zwar über die Eigenschaften onPremisesExtensionAttributes und extensionAttributes. Sie können die Werte beim Erstellen einer neuen Ressource instance oder beim Aktualisieren einer vorhandenen Ressource instance zuweisen. Sie können auch nach den Werten filtern.
Daten in Erweiterungsattributen hinzufügen oder aktualisieren
Das folgende Beispiel zeigt, wie Daten in extensionAttribute1 gespeichert und vorhandene Daten aus extensionAttribute13 über einen Aktualisierungsvorgang mit einer PATCH-Methode gelöscht werden.
// Code snippets are only available for the latest version. Current version is 5.x
// Dependencies
using Microsoft.Graph.Models;
var requestBody = new User
{
OnPremisesExtensionAttributes = new OnPremisesExtensionAttributes
{
ExtensionAttribute1 = "skypeId.adeleVance",
ExtensionAttribute13 = null,
},
};
// To initialize your graphClient, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
var result = await graphClient.Users["{user-id}"].PatchAsync(requestBody);
// Code snippets are only available for the latest major version. Current major version is $v1.*
// Dependencies
import (
"context"
msgraphsdk "github.com/microsoftgraph/msgraph-sdk-go"
graphmodels "github.com/microsoftgraph/msgraph-sdk-go/models"
//other-imports
)
requestBody := graphmodels.NewUser()
onPremisesExtensionAttributes := graphmodels.NewOnPremisesExtensionAttributes()
extensionAttribute1 := "skypeId.adeleVance"
onPremisesExtensionAttributes.SetExtensionAttribute1(&extensionAttribute1)
extensionAttribute13 := null
onPremisesExtensionAttributes.SetExtensionAttribute13(&extensionAttribute13)
requestBody.SetOnPremisesExtensionAttributes(onPremisesExtensionAttributes)
// To initialize your graphClient, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=go
users, err := graphClient.Users().ByUserId("user-id").Patch(context.Background(), requestBody, nil)
// Code snippets are only available for the latest version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
User user = new User();
OnPremisesExtensionAttributes onPremisesExtensionAttributes = new OnPremisesExtensionAttributes();
onPremisesExtensionAttributes.setExtensionAttribute1("skypeId.adeleVance");
onPremisesExtensionAttributes.setExtensionAttribute13(null);
user.setOnPremisesExtensionAttributes(onPremisesExtensionAttributes);
User result = graphClient.users().byUserId("{user-id}").patch(user);
<?php
use Microsoft\Graph\GraphServiceClient;
use Microsoft\Graph\Generated\Models\User;
use Microsoft\Graph\Generated\Models\OnPremisesExtensionAttributes;
$graphServiceClient = new GraphServiceClient($tokenRequestContext, $scopes);
$requestBody = new User();
$onPremisesExtensionAttributes = new OnPremisesExtensionAttributes();
$onPremisesExtensionAttributes->setExtensionAttribute1('skypeId.adeleVance');
$onPremisesExtensionAttributes->setExtensionAttribute13(null);
$requestBody->setOnPremisesExtensionAttributes($onPremisesExtensionAttributes);
$result = $graphServiceClient->users()->byUserId('user-id')->patch($requestBody)->wait();
# Code snippets are only available for the latest version. Current version is 1.x
from msgraph import GraphServiceClient
from msgraph.generated.models.user import User
from msgraph.generated.models.on_premises_extension_attributes import OnPremisesExtensionAttributes
# To initialize your graph_client, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=python
request_body = User(
on_premises_extension_attributes = OnPremisesExtensionAttributes(
extension_attribute1 = "skypeId.adeleVance",
extension_attribute13 = None,
),
)
result = await graph_client.users.by_user_id('user-id').patch(request_body)
GET https://graph.microsoft.com/v1.0/users?$select=id,displayName,onPremisesExtensionAttributes
// Code snippets are only available for the latest version. Current version is 5.x
// To initialize your graphClient, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
var result = await graphClient.Users.GetAsync((requestConfiguration) =>
{
requestConfiguration.QueryParameters.Select = new string []{ "id","displayName","onPremisesExtensionAttributes" };
});
// Code snippets are only available for the latest major version. Current major version is $v1.*
// Dependencies
import (
"context"
msgraphsdk "github.com/microsoftgraph/msgraph-sdk-go"
graphusers "github.com/microsoftgraph/msgraph-sdk-go/users"
//other-imports
)
requestParameters := &graphusers.UsersRequestBuilderGetQueryParameters{
Select: [] string {"id","displayName","onPremisesExtensionAttributes"},
}
configuration := &graphusers.UsersRequestBuilderGetRequestConfiguration{
QueryParameters: requestParameters,
}
// To initialize your graphClient, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=go
users, err := graphClient.Users().Get(context.Background(), configuration)
// Code snippets are only available for the latest version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
UserCollectionResponse result = graphClient.users().get(requestConfiguration -> {
requestConfiguration.queryParameters.select = new String []{"id", "displayName", "onPremisesExtensionAttributes"};
});
# Code snippets are only available for the latest version. Current version is 1.x
from msgraph import GraphServiceClient
from msgraph.generated.users.users_request_builder import UsersRequestBuilder
from kiota_abstractions.base_request_configuration import RequestConfiguration
# To initialize your graph_client, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=python
query_params = UsersRequestBuilder.UsersRequestBuilderGetQueryParameters(
select = ["id","displayName","onPremisesExtensionAttributes"],
)
request_configuration = RequestConfiguration(
query_parameters = query_params,
)
result = await graph_client.users.get(request_configuration = request_configuration)
Überlegungen zur Verwendung von Erweiterungsattributeigenschaften
Das onPremisesExtensionAttributes-Objekt kann nur für Objekte aktualisiert werden, die nicht aus dem lokalen AD synchronisiert werden.
Die 15 Erweiterungsattribute sind bereits in Microsoft Graph vordefiniert, und ihre Eigenschaftennamen können nicht geändert werden. Daher können Sie keine benutzerdefinierten Namen wie SkypeId für die Erweiterungsattribute verwenden. Ihre organization müssen daher die verwendeten Erweiterungsattributeigenschaften nachverfolgen, um zu vermeiden, dass ihre Daten versehentlich überschrieben werden.
Verzeichniserweiterungen (Microsoft Entra ID)
Verzeichniserweiterungen bieten Entwicklern eine stark typisierte, auffindbare und filterbare Erweiterungserfahrung für Verzeichnisobjekte.
Verzeichniserweiterungen werden zuerst über den Vorgang Erweiterungseigenschaften erstellen in einer Anwendung registriert und müssen explizit auf bestimmte und unterstützte Verzeichnisobjekte ausgerichtet sein. Nachdem ein Benutzer oder Administrator der Anwendung im Mandanten zugestimmt hat, kann sofort auf die Erweiterungseigenschaften im Mandanten zugegriffen werden. Alle autorisierten Anwendungen im Mandanten können Daten für alle Erweiterungseigenschaften lesen und schreiben, die für eine Instanz des Zielverzeichnisobjekts definiert sind.
Eine Liste der Ressourcentypen, die als Zielobjekte für eine Verzeichniserweiterung angegeben werden können, finden Sie unter Vergleich von Erweiterungstypen.
Entwickleroberfläche
Verzeichniserweiterungsdefinitionen werden über die Ressource extensionProperty und die zugehörigen Methoden verwaltet. Die Daten werden über die REST-API-Anforderungen verwaltet, die Sie zum Verwalten der Ressource instance verwenden.
Definieren der Verzeichniserweiterung
Bevor Sie einer Ressource instance eine Verzeichniserweiterung hinzufügen können, müssen Sie zuerst die Verzeichniserweiterung definieren.
Anforderung
In der folgenden Anforderung ist die Objekt-ID der Anwendung, 30a5435a-1871-485c-8c7b-65f69e287e7b die besitzer der Verzeichniserweiterung ist. Sie können Verzeichniserweiterungen erstellen, die eine Sammlung von Werten speichern.
// Code snippets are only available for the latest version. Current version is 5.x
// Dependencies
using Microsoft.Graph.Models;
var requestBody = new ExtensionProperty
{
Name = "jobGroupTracker",
DataType = "String",
TargetObjects = new List<string>
{
"User",
},
};
// To initialize your graphClient, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
var result = await graphClient.Applications["{application-id}"].ExtensionProperties.PostAsync(requestBody);
// Code snippets are only available for the latest major version. Current major version is $v1.*
// Dependencies
import (
"context"
msgraphsdk "github.com/microsoftgraph/msgraph-sdk-go"
graphmodels "github.com/microsoftgraph/msgraph-sdk-go/models"
//other-imports
)
requestBody := graphmodels.NewExtensionProperty()
name := "jobGroupTracker"
requestBody.SetName(&name)
dataType := "String"
requestBody.SetDataType(&dataType)
targetObjects := []string {
"User",
}
requestBody.SetTargetObjects(targetObjects)
// To initialize your graphClient, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=go
extensionProperties, err := graphClient.Applications().ByApplicationId("application-id").ExtensionProperties().Post(context.Background(), requestBody, nil)
// Code snippets are only available for the latest version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
ExtensionProperty extensionProperty = new ExtensionProperty();
extensionProperty.setName("jobGroupTracker");
extensionProperty.setDataType("String");
LinkedList<String> targetObjects = new LinkedList<String>();
targetObjects.add("User");
extensionProperty.setTargetObjects(targetObjects);
ExtensionProperty result = graphClient.applications().byApplicationId("{application-id}").extensionProperties().post(extensionProperty);
# Code snippets are only available for the latest version. Current version is 1.x
from msgraph import GraphServiceClient
from msgraph.generated.models.extension_property import ExtensionProperty
# To initialize your graph_client, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=python
request_body = ExtensionProperty(
name = "jobGroupTracker",
data_type = "String",
target_objects = [
"User",
],
)
result = await graph_client.applications.by_application_id('application-id').extension_properties.post(request_body)
Eine Verzeichniserweiterungseigenschaft namens extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker wird mit einem Erweiterungsnamen erstellt, der der folgenden Benennungskonvention folgt: extension_{appId-without-hyphens}_{extensionProperty-name}.
Einem Zielobjekt eine Verzeichniseigenschaft hinzufügen
Nachdem Sie die Verzeichniserweiterung definiert haben, können Sie sie nun einem instance eines Zielobjekttyps hinzufügen. Sie können Daten in der Verzeichniserweiterung speichern, wenn Sie eine neue instance des Zielobjekts erstellen oder ein vorhandenes Objekt aktualisieren. Das folgende Beispiel zeigt, wie Beim Erstellen eines neuen Benutzerobjekts Daten in der Verzeichniserweiterung gespeichert werden.
// Code snippets are only available for the latest version. Current version is 5.x
// Dependencies
using Microsoft.Graph.Models;
var requestBody = 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"
},
},
};
// To initialize your graphClient, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
var result = await graphClient.Users.PostAsync(requestBody);
// Code snippets are only available for the latest version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
User user = new User();
user.setAccountEnabled(true);
user.setDisplayName("Adele Vance");
user.setMailNickname("AdeleV");
user.setUserPrincipalName("AdeleV@contoso.com");
PasswordProfile passwordProfile = new PasswordProfile();
passwordProfile.setForceChangePasswordNextSignIn(false);
passwordProfile.setPassword("xWwvJ]6NMw+bWH-d");
user.setPasswordProfile(passwordProfile);
HashMap<String, Object> additionalData = new HashMap<String, Object>();
additionalData.put("extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker", "JobGroupN");
user.setAdditionalData(additionalData);
User result = graphClient.users().post(user);
# Code snippets are only available for the latest version. Current version is 1.x
from msgraph import GraphServiceClient
from msgraph.generated.models.user import User
from msgraph.generated.models.password_profile import PasswordProfile
# To initialize your graph_client, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=python
request_body = User(
account_enabled = True,
display_name = "Adele Vance",
mail_nickname = "AdeleV",
user_principal_name = "AdeleV@contoso.com",
password_profile = PasswordProfile(
force_change_password_next_sign_in = False,
password = "xWwvJ]6NMw+bWH-d",
),
additional_data = {
"extension_b7d8e648520f41d3b9c0fdeb91768a0a_job_group_tracker" : "JobGroupN",
}
)
result = await graph_client.users.post(request_body)
Die Anforderung gibt einen Antwortcode 201 Created und ein user-Objekt im Antworttext zurück.
Abrufen einer Verzeichniserweiterung
Das folgende Beispiel zeigt, wie die Verzeichniserweiterungen und die zugehörigen Daten in einer Ressource instance dargestellt werden. Die Erweiterungseigenschaft wird standardmäßig über den beta Endpunkt zurückgegeben, aber nur über $select den v1.0 Endpunkt ein.
GET https://graph.microsoft.com/beta/users?$select=id,displayName,extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker,extension_b7d8e648520f41d3b9c0fdeb91768a0a_permanent_pensionable
// Code snippets are only available for the latest version. Current version is 5.x
// To initialize your graphClient, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
var result = await graphClient.Users.GetAsync((requestConfiguration) =>
{
requestConfiguration.QueryParameters.Select = new string []{ "id","displayName","extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker","extension_b7d8e648520f41d3b9c0fdeb91768a0a_permanent_pensionable" };
});
mgc-beta users list --select "id,displayName,extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker,extension_b7d8e648520f41d3b9c0fdeb91768a0a_permanent_pensionable"
// Code snippets are only available for the latest major version. Current major version is $v0.*
// Dependencies
import (
"context"
msgraphsdk "github.com/microsoftgraph/msgraph-beta-sdk-go"
graphusers "github.com/microsoftgraph/msgraph-beta-sdk-go/users"
//other-imports
)
requestParameters := &graphusers.UsersRequestBuilderGetQueryParameters{
Select: [] string {"id","displayName","extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker","extension_b7d8e648520f41d3b9c0fdeb91768a0a_permanent_pensionable"},
}
configuration := &graphusers.UsersRequestBuilderGetRequestConfiguration{
QueryParameters: requestParameters,
}
// To initialize your graphClient, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=go
users, err := graphClient.Users().Get(context.Background(), configuration)
// Code snippets are only available for the latest version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
UserCollectionResponse result = graphClient.users().get(requestConfiguration -> {
requestConfiguration.queryParameters.select = new String []{"id", "displayName", "extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker", "extension_b7d8e648520f41d3b9c0fdeb91768a0a_permanent_pensionable"};
});
# Code snippets are only available for the latest version. Current version is 1.x
from msgraph_beta import GraphServiceClient
from msgraph_beta.generated.users.users_request_builder import UsersRequestBuilder
from kiota_abstractions.base_request_configuration import RequestConfiguration
# To initialize your graph_client, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=python
query_params = UsersRequestBuilder.UsersRequestBuilderGetQueryParameters(
select = ["id","displayName","extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker","extension_b7d8e648520f41d3b9c0fdeb91768a0a_permanent_pensionable"],
)
request_configuration = RequestConfiguration(
query_parameters = query_params,
)
result = await graph_client.users.get(request_configuration = request_configuration)
Aktualisieren oder Löschen von Verzeichniserweiterungen
Verwenden Sie die PATCH-Methode, um den Wert der Verzeichniserweiterung für eine Ressource instance zu aktualisieren oder zu löschen. Um die Erweiterungseigenschaft und den zugehörigen Wert zu löschen, legen Sie ihren Wert auf fest null.
Die folgende Anforderung aktualisiert den Wert einer Verzeichniserweiterung und löscht eine weitere Erweiterungseigenschaft.
// Code snippets are only available for the latest version. Current version is 5.x
// Dependencies
using Microsoft.Graph.Models;
var requestBody = new User
{
AdditionalData = new Dictionary<string, object>
{
{
"extension_b7d8e648520f41d3b9c0fdeb91768a0a_permanent_pensionable" , null
},
{
"extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker" , "E4"
},
},
};
// To initialize your graphClient, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
var result = await graphClient.Users["{user-id}"].PatchAsync(requestBody);
// Code snippets are only available for the latest major version. Current major version is $v1.*
// Dependencies
import (
"context"
msgraphsdk "github.com/microsoftgraph/msgraph-sdk-go"
graphmodels "github.com/microsoftgraph/msgraph-sdk-go/models"
//other-imports
)
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)
// To initialize your graphClient, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=go
users, err := graphClient.Users().ByUserId("user-id").Patch(context.Background(), requestBody, nil)
// Code snippets are only available for the latest version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
User user = new User();
HashMap<String, Object> additionalData = new HashMap<String, Object>();
additionalData.put("extension_b7d8e648520f41d3b9c0fdeb91768a0a_permanent_pensionable", null);
additionalData.put("extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker", "E4");
user.setAdditionalData(additionalData);
User result = graphClient.users().byUserId("{user-id}").patch(user);
# Code snippets are only available for the latest version. Current version is 1.x
from msgraph import GraphServiceClient
from msgraph.generated.models.user import User
# To initialize your graph_client, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=python
request_body = User(
additional_data = {
"extension_b7d8e648520f41d3b9c0fdeb91768a0a_permanent_pensionable" : None,
"extension_b7d8e648520f41d3b9c0fdeb91768a0a_job_group_tracker" : "E4",
}
)
result = await graph_client.users.by_user_id('user-id').patch(request_body)
Die Anforderung gibt einen 204 No Content Antwortcode zurück.
Überlegungen zur Verwendung von Verzeichniserweiterungen
Wenn Sie versehentlich eine Verzeichniserweiterungsdefinition löschen, können alle in der zugeordneten Eigenschaft gespeicherten Daten nicht mehr wiederhergestellt werden. Um die Daten wiederherzustellen, erstellen Sie in derselben Besitzer-App eine neue Verzeichniserweiterungsdefinition mit demselben Namen wie die gelöschte Definition.
Wenn ein Definitionsobjekt gelöscht wird, bevor die entsprechende Erweiterungseigenschaft auf nullaktualisiert wird, zählt die Eigenschaft auf den Grenzwert von 100 für das Objekt.
Wenn die Definition gelöscht wird, bevor Daten in der zugehörigen Erweiterungseigenschaft gelöscht werden, gibt es keine Möglichkeit, das Vorhandensein der Erweiterungseigenschaft über Microsoft Graph zu ermitteln, obwohl die nicht wiederherstellbare Eigenschaft auf den Grenzwert von 100 angerechnet wird.
Durch das Löschen einer Besitzer-App im Basismandanten können die zugehörigen Verzeichniserweiterungen und ihre Daten nicht mehr wiederhergestellt werden. Wenn Sie eine Besitzer-App wiederherstellen, werden die Verzeichniserweiterungsdefinitionen wiederhergestellt , aber die Verzeichniserweiterungseigenschaften oder ihre Daten werden nicht sofort auffindbar. da beim Wiederherstellen einer App nicht automatisch der zugeordnete Dienstprinzipal im Mandanten wiederhergestellt wird. Um die Eigenschaften der Verzeichniserweiterung und deren Daten auffindbar zu machen, erstellen Sie entweder einen neuen Dienstprinzipal, oder stellen Sie den gelöschten Dienstprinzipal wieder her. Es werden KEINE Änderungen an anderen Mandanten vorgenommen, für die die App zugestimmt wurde.
Schemaerweiterungen
Microsoft Graph-Schemaerweiterungen ähneln konzeptuell Verzeichniserweiterungen. Zunächst definieren Sie Ihre Schemaerweiterung. Verwenden Sie ihn dann, um unterstützte Ressourceninstanzen mit stark typisierten benutzerdefinierten Eigenschaften zu erweitern. Sie können auch den Status Ihrer Schemaerweiterung steuern und sie so für andere Apps erkennbar machen.
Beim Erstellen einer Schemaerweiterungsdefinition müssen Sie einen eindeutigen Namen für die ID angeben. Es stehen zwei Benennungsoptionen zur Verfügung:
Wenn Sie bereits über eine Vanity .com,.net, .gov, , .eduoder eine .org Domäne verfügen, die mit Ihrem Mandanten überprüft wurde, können Sie den Domänennamen zusammen mit dem Schemanamen verwenden, um einen eindeutigen Namen in diesem Format {domainName}_{schemaName} zu definieren. Wenn Ihre Vanity-Domäne zum Beispiel contoso.com lautet, können Sie eine ID von contoso_mySchema definieren. Diese Option wird dringend empfohlen.
Alternativ können Sie die ID auf einen Schemanamen (ohne Domänennamenpräfix) festlegen. Beispiel: mySchema. Microsoft Graph weist Ihnen basierend auf dem angegebenen Namen eine Zeichenfolgen-ID im folgenden Format zu: ext{8-random-alphanumeric-chars}_{schema-name}. Beispiel: extkvbmkofy_mySchema.
Die ID ist der Name des komplexen Typs, der Ihre Daten in der erweiterten Ressource instance speichert.
Nachdem Sie eine Schemaerweiterung registriert haben, ist sie für alle Anwendungen im selben Mandanten wie die zugeordnete Besitzeranwendung (im InDevelopment Zustand) oder für alle Anwendungen in einem beliebigen Mandanten (im Available Zustand) verfügbar. Wie Verzeichniserweiterungen haben autorisierte Apps die Möglichkeit, Daten für alle Erweiterungen zu lesen und zu schreiben, die für das Zielobjekt definiert sind.
Sie verwalten die Schemaerweiterungsdefinitionen und die Daten in der entsprechenden Schemaerweiterungseigenschaft mithilfe separater API-Vorgänge. Verwenden Sie zum Verwalten der Schemaerweiterungsdaten in der erweiterten Ressourceninstanz dieselbe REST-Anforderung, die Sie zum Verwalten der Ressourceninstanz verwenden.
Verwenden Sie POST, um Daten in der Schemaerweiterungseigenschaft zu speichern, wenn Sie einen neuen Benutzer erstellen.
Verwenden Sie PATCH, um Entweder Daten in der Schemaerweiterungseigenschaft zu speichern oder die gespeicherten Daten zu aktualisieren oder zu löschen.
Um Daten aus einer Eigenschaft zu löschen, legen Sie ihren Wert auf fest null.
Um Daten aus allen Eigenschaften zu löschen, legen Sie jede Eigenschaft auf fest null. Wenn alle Eigenschaften sind null, wird auch das Schemaerweiterungsobjekt gelöscht.
Um eine beliebige Eigenschaft zu aktualisieren, geben Sie nur die geänderten Eigenschaften im Anforderungstext an. Ausgelassene Eigenschaften werden nicht aktualisiert und behalten ihren vorherigen Wert bei.
Verwenden Sie GET, um die Schemaerweiterungseigenschaften für alle Benutzer oder einzelne Benutzer im Mandanten zu lesen.
// Code snippets are only available for the latest version. Current version is 5.x
// Dependencies
using Microsoft.Graph.Models;
var requestBody = 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",
},
},
};
// To initialize your graphClient, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
var result = await graphClient.SchemaExtensions.PostAsync(requestBody);
// Code snippets are only available for the latest major version. Current major version is $v1.*
// Dependencies
import (
"context"
msgraphsdk "github.com/microsoftgraph/msgraph-sdk-go"
graphmodels "github.com/microsoftgraph/msgraph-sdk-go/models"
//other-imports
)
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)
// To initialize your graphClient, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=go
schemaExtensions, err := graphClient.SchemaExtensions().Post(context.Background(), requestBody, nil)
// Code snippets are only available for the latest version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
SchemaExtension schemaExtension = new SchemaExtension();
schemaExtension.setId("graphLearnCourses");
schemaExtension.setDescription("Graph Learn training courses extensions");
LinkedList<String> targetTypes = new LinkedList<String>();
targetTypes.add("user");
schemaExtension.setTargetTypes(targetTypes);
LinkedList<ExtensionSchemaProperty> properties = new LinkedList<ExtensionSchemaProperty>();
ExtensionSchemaProperty extensionSchemaProperty = new ExtensionSchemaProperty();
extensionSchemaProperty.setName("courseId");
extensionSchemaProperty.setType("Integer");
properties.add(extensionSchemaProperty);
ExtensionSchemaProperty extensionSchemaProperty1 = new ExtensionSchemaProperty();
extensionSchemaProperty1.setName("courseName");
extensionSchemaProperty1.setType("String");
properties.add(extensionSchemaProperty1);
ExtensionSchemaProperty extensionSchemaProperty2 = new ExtensionSchemaProperty();
extensionSchemaProperty2.setName("courseType");
extensionSchemaProperty2.setType("String");
properties.add(extensionSchemaProperty2);
schemaExtension.setProperties(properties);
SchemaExtension result = graphClient.schemaExtensions().post(schemaExtension);
# Code snippets are only available for the latest version. Current version is 1.x
from msgraph import GraphServiceClient
from msgraph.generated.models.schema_extension import SchemaExtension
from msgraph.generated.models.extension_schema_property import ExtensionSchemaProperty
# To initialize your graph_client, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=python
request_body = SchemaExtension(
id = "graphLearnCourses",
description = "Graph Learn training courses extensions",
target_types = [
"user",
],
properties = [
ExtensionSchemaProperty(
name = "courseId",
type = "Integer",
),
ExtensionSchemaProperty(
name = "courseName",
type = "String",
),
ExtensionSchemaProperty(
name = "courseType",
type = "String",
),
],
)
result = await graph_client.schema_extensions.post(request_body)
Schemaerweiterung zu einer Ressourceninstanz hinzufügen
Nachdem Sie die Schemaerweiterung definiert haben, können Sie die Erweiterungseigenschaft nun einem instance eines Zielobjekttyps hinzufügen. Sie können Daten in der Schemaerweiterung speichern, wenn Sie eine neue Instanz des Zielobjekts erstellen oder ein bestehendes Objekt aktualisieren. Das folgende Beispiel zeigt, wie Sie beim Erstellen eines neuen User-Objekts Daten in der Eigenschaft Schemaerweiterung speichern.
// Code snippets are only available for the latest version. Current version is 5.x
// Dependencies
using Microsoft.Graph.Beta.Models;
using Microsoft.Kiota.Abstractions.Serialization;
var requestBody = 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>
{
{
"extkmpdyld2_graphLearnCourses" , new UntypedObject(new Dictionary<string, UntypedNode>
{
{
"courseId", new UntypedString("100")
},
{
"courseName", new UntypedString("Explore Microsoft Graph")
},
{
"courseType", new UntypedString("Online")
},
})
},
},
};
// To initialize your graphClient, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
var result = await graphClient.Users.PostAsync(requestBody);
// Code snippets are only available for the latest version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
User user = new User();
user.setAccountEnabled(true);
user.setDisplayName("Adele Vance");
user.setMailNickname("AdeleV");
user.setUserPrincipalName("AdeleV@contoso.com");
PasswordProfile passwordProfile = new PasswordProfile();
passwordProfile.setForceChangePasswordNextSignIn(false);
passwordProfile.setPassword("xWwvJ]6NMw+bWH-d");
user.setPasswordProfile(passwordProfile);
HashMap<String, Object> additionalData = new HashMap<String, Object>();
extkmpdyld2GraphLearnCourses = new ();
extkmpdyld2GraphLearnCourses.setCourseId(100);
extkmpdyld2GraphLearnCourses.setCourseName("Explore Microsoft Graph");
extkmpdyld2GraphLearnCourses.setCourseType("Online");
additionalData.put("extkmpdyld2_graphLearnCourses", extkmpdyld2GraphLearnCourses);
user.setAdditionalData(additionalData);
User result = graphClient.users().post(user);
# Code snippets are only available for the latest version. Current version is 1.x
from msgraph_beta import GraphServiceClient
from msgraph_beta.generated.models.user import User
from msgraph_beta.generated.models.password_profile import PasswordProfile
# To initialize your graph_client, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=python
request_body = User(
account_enabled = True,
display_name = "Adele Vance",
mail_nickname = "AdeleV",
user_principal_name = "AdeleV@contoso.com",
password_profile = PasswordProfile(
force_change_password_next_sign_in = False,
password = "xWwvJ]6NMw+bWH-d",
),
additional_data = {
"extkmpdyld2_graph_learn_courses" : {
"course_id" : 100,
"course_name" : "Explore Microsoft Graph",
"course_type" : "Online",
},
}
)
result = await graph_client.users.post(request_body)
Die Anforderung gibt einen 201 Created Antwortcode und ein schemaExtension-Objekt im Antworttext zurück
Schemaerweiterungseigenschaften aktualisieren oder löschen
Verwenden Sie den PATCH-Vorgang, um eine Schemaerweiterung zu aktualisieren oder eine vorhandene Schemaerweiterung zu löschen. Um die Erweiterungseigenschaft und den zugehörigen Wert aus der Ressourceninstanz zu löschen, legen Sie den Wert auf null.
Das folgende Beispiel löscht den Wert der Eigenschaft courseId und aktualisiert die Eigenschaft courseType. Um die extkmpdyld2_graphLearnCourses Erweiterungseigenschaft vollständig zu löschen, setzen Sie ihren Wert auf null.
// Code snippets are only available for the latest version. Current version is 5.x
// Dependencies
using Microsoft.Graph.Beta.Models;
using Microsoft.Kiota.Abstractions.Serialization;
var requestBody = new User
{
AdditionalData = new Dictionary<string, object>
{
{
"extkmpdyld2_graphLearnCourses" , new UntypedObject(new Dictionary<string, UntypedNode>
{
{
"courseType", new UntypedString("Instructor-led")
},
{
"courseId", new UntypedNull()
},
})
},
},
};
// To initialize your graphClient, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
var result = await graphClient.Users["{user-id}"].PatchAsync(requestBody);
// Code snippets are only available for the latest major version. Current major version is $v0.*
// Dependencies
import (
"context"
msgraphsdk "github.com/microsoftgraph/msgraph-beta-sdk-go"
graphmodels "github.com/microsoftgraph/msgraph-beta-sdk-go/models"
//other-imports
)
requestBody := graphmodels.NewUser()
additionalData := map[string]interface{}{
extkmpdyld2_graphLearnCourses := graph.New()
courseType := "Instructor-led"
extkmpdyld2_graphLearnCourses.SetCourseType(&courseType)
courseId := null
extkmpdyld2_graphLearnCourses.SetCourseId(&courseId)
requestBody.SetExtkmpdyld2_graphLearnCourses(extkmpdyld2_graphLearnCourses)
}
requestBody.SetAdditionalData(additionalData)
// To initialize your graphClient, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=go
users, err := graphClient.Users().ByUserId("user-id").Patch(context.Background(), requestBody, nil)
// Code snippets are only available for the latest version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
User user = new User();
HashMap<String, Object> additionalData = new HashMap<String, Object>();
extkmpdyld2GraphLearnCourses = new ();
extkmpdyld2GraphLearnCourses.setCourseType("Instructor-led");
extkmpdyld2GraphLearnCourses.setCourseId(null);
additionalData.put("extkmpdyld2_graphLearnCourses", extkmpdyld2GraphLearnCourses);
user.setAdditionalData(additionalData);
User result = graphClient.users().byUserId("{user-id}").patch(user);
# Code snippets are only available for the latest version. Current version is 1.x
from msgraph_beta import GraphServiceClient
from msgraph_beta.generated.models.user import User
# To initialize your graph_client, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=python
request_body = User(
additional_data = {
"extkmpdyld2_graph_learn_courses" : {
"course_type" : "Instructor-led",
"course_id" : None,
},
}
)
result = await graph_client.users.by_user_id('user-id').patch(request_body)
GET https://graph.microsoft.com/beta/users/0668e673-908b-44ea-861d-0661297e1a3e?$select=id,displayName,extkmpdyld2_graphLearnCourses
// Code snippets are only available for the latest version. Current version is 5.x
// To initialize your graphClient, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
var result = await graphClient.Users["{user-id}"].GetAsync((requestConfiguration) =>
{
requestConfiguration.QueryParameters.Select = new string []{ "id","displayName","extkmpdyld2_graphLearnCourses" };
});
// Code snippets are only available for the latest major version. Current major version is $v0.*
// Dependencies
import (
"context"
msgraphsdk "github.com/microsoftgraph/msgraph-beta-sdk-go"
graphusers "github.com/microsoftgraph/msgraph-beta-sdk-go/users"
//other-imports
)
requestParameters := &graphusers.UserItemRequestBuilderGetQueryParameters{
Select: [] string {"id","displayName","extkmpdyld2_graphLearnCourses"},
}
configuration := &graphusers.UserItemRequestBuilderGetRequestConfiguration{
QueryParameters: requestParameters,
}
// To initialize your graphClient, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=go
users, err := graphClient.Users().ByUserId("user-id").Get(context.Background(), configuration)
// Code snippets are only available for the latest version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
User result = graphClient.users().byUserId("{user-id}").get(requestConfiguration -> {
requestConfiguration.queryParameters.select = new String []{"id", "displayName", "extkmpdyld2_graphLearnCourses"};
});
# Code snippets are only available for the latest version. Current version is 1.x
from msgraph_beta import GraphServiceClient
from msgraph_beta.generated.users.item.user_item_request_builder import UserItemRequestBuilder
from kiota_abstractions.base_request_configuration import RequestConfiguration
# To initialize your graph_client, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=python
query_params = UserItemRequestBuilder.UserItemRequestBuilderGetQueryParameters(
select = ["id","displayName","extkmpdyld2_graphLearnCourses"],
)
request_configuration = RequestConfiguration(
query_parameters = query_params,
)
result = await graph_client.users.by_user_id('user-id').get(request_configuration = request_configuration)
Überlegungen zur Verwendung von Schemaerweiterungen
Eine Schemaerweiterung muss über eine Besitzer-App verfügen. Der Besitz der Schemaerweiterung kann nicht einer anderen App zugewiesen werden.
Durch das Löschen einer Schemaerweiterungsdefinition ohne Festlegen der Schemaerweiterung auf null können die Eigenschaft und die zugehörigen Benutzerdaten nicht mehr auffindbar sein.
Durch das Löschen einer Besitzer-App im Basismandanten werden weder die zugeordnete Schemaerweiterungsdefinition noch die Eigenschaft und die darin gespeicherten Daten gelöscht. Die Schemaerweiterungseigenschaft kann für Benutzer weiterhin gelesen, gelöscht oder aktualisiert werden. Die Schemaerweiterungsdefinition kann jedoch nicht aktualisiert werden.
Offene Erweiterungen
Microsoft Graph Open Extensions sind offene Typen, die eine einfache und flexible Möglichkeit bieten, nicht typisierte Daten direkt zu einer Ressourceninstanz hinzuzufügen. Diese Erweiterungen sind nicht stark typisiert, nicht erkennbar oder filterbar.
Eine Liste der Ressourcentypen, die offene Microsoft Graph-Erweiterungen unterstützen, finden Sie unter Vergleich von Erweiterungstypen.
Entwickleroberfläche
Auf offene Erweiterungen und ihre Daten können Sie über die Navigationseigenschaft extensions der Ressourceninstanz zugreifen. So können Sie verwandte Eigenschaften gruppieren, um den Zugriff und die Verwaltung zu erleichtern.
Sie definieren und verwalten offene Erweiterungen on the fly für Ressourceninstanzen. Sie gelten als eindeutig für jedes Objekt, und Sie müssen kein universell konsistentes Muster für alle Objekte anwenden. Beispiel: Im selben Mandanten:
Das Benutzerobjekt für Adele kann über eine offene Erweiterung namens socialSettings verfügen, die über drei Eigenschaften verfügt: linkedInProfile, skypeId und xboxGamertag.
Das Benutzerobjekt für Bruno darf keine offene Erweiterungseigenschaft aufweisen.
Das Benutzerobjekt für Alex kann eine offene Erweiterung namens socialSettings mit fünf Eigenschaften haben: theme, color, language, font und fontSize.
Darüber hinaus können offene Erweiterungseigenschaften eine beliebige gültige JSON-Struktur aufweisen.
Offene Erweiterung erstellen
Das folgende Beispiel zeigt eine offene Erweiterungsdefinition mit drei Eigenschaften und wie die benutzerdefinierten Eigenschaften und zugeordneten Daten für eine Ressource instance dargestellt werden.
// 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.socialSettings",
Id = "com.contoso.socialSettings",
AdditionalData = new Dictionary<string, object>
{
{
"skypeId" , "skypeId.AdeleV"
},
{
"linkedInProfile" , "www.linkedin.com/in/testlinkedinprofile"
},
{
"xboxGamerTag" , "AwesomeAdele"
},
},
};
// To initialize your graphClient, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
var result = await graphClient.Users["{user-id}"].Extensions.PostAsync(requestBody);
// Code snippets are only available for the latest major version. Current major version is $v1.*
// Dependencies
import (
"context"
msgraphsdk "github.com/microsoftgraph/msgraph-sdk-go"
graphmodels "github.com/microsoftgraph/msgraph-sdk-go/models"
//other-imports
)
requestBody := graphmodels.NewExtension()
extensionName := "com.contoso.socialSettings"
requestBody.SetExtensionName(&extensionName)
id := "com.contoso.socialSettings"
requestBody.SetId(&id)
additionalData := map[string]interface{}{
"skypeId" : "skypeId.AdeleV",
"linkedInProfile" : "www.linkedin.com/in/testlinkedinprofile",
"xboxGamerTag" : "AwesomeAdele",
}
requestBody.SetAdditionalData(additionalData)
// To initialize your graphClient, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=go
extensions, err := graphClient.Users().ByUserId("user-id").Extensions().Post(context.Background(), requestBody, nil)
// 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.socialSettings");
extension.setId("com.contoso.socialSettings");
HashMap<String, Object> additionalData = new HashMap<String, Object>();
additionalData.put("skypeId", "skypeId.AdeleV");
additionalData.put("linkedInProfile", "www.linkedin.com/in/testlinkedinprofile");
additionalData.put("xboxGamerTag", "AwesomeAdele");
extension.setAdditionalData(additionalData);
Extension result = graphClient.users().byUserId("{user-id}").extensions().post(extension);
# Code snippets are only available for the latest version. Current version is 1.x
from msgraph import GraphServiceClient
from msgraph.generated.models.open_type_extension import OpenTypeExtension
# To initialize your graph_client, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=python
request_body = OpenTypeExtension(
odata_type = "#microsoft.graph.openTypeExtension",
extension_name = "com.contoso.socialSettings",
id = "com.contoso.socialSettings",
additional_data = {
"skype_id" : "skypeId.AdeleV",
"linked_in_profile" : "www.linkedin.com/in/testlinkedinprofile",
"xbox_gamer_tag" : "AwesomeAdele",
}
)
result = await graph_client.users.by_user_id('user-id').extensions.post(request_body)
Die Anforderung gibt einen 201 Created Antwortcode und ein openTypeExtension-Objekt im Antworttext zurück.
Eine bestehende offene Erweiterung aktualisieren
Um eine offene Erweiterung zu aktualisieren, müssen Sie alle ihre Eigenschaften im Anforderungstext angeben. Andernfalls werden die nicht angegebenen Eigenschaften aus der geöffneten Erweiterung gelöscht. Sie können eine Eigenschaft jedoch explizit auf festlegen, um null sie in der geöffneten Erweiterung beizubehalten.
Die folgende Anforderung gibt nur die Eigenschaften linkedInProfile und xboxGamerTag an. Der Wert der Eigenschaft xboxGamerTag wird aktualisiert, während die Eigenschaft linkedInProfile gleich bleibt. Diese Anforderung löscht auch die nicht spezifizierte Eigenschaft skypeId.
// 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>
{
{
"xboxGamerTag" , "FierceAdele"
},
{
"linkedInProfile" , "www.linkedin.com/in/testlinkedinprofile"
},
},
};
// To initialize your graphClient, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
var result = await graphClient.Users["{user-id}"].Extensions["{extension-id}"].PatchAsync(requestBody);
// Code snippets are only available for the latest major version. Current major version is $v1.*
// Dependencies
import (
"context"
msgraphsdk "github.com/microsoftgraph/msgraph-sdk-go"
graphmodels "github.com/microsoftgraph/msgraph-sdk-go/models"
//other-imports
)
requestBody := graphmodels.NewExtension()
additionalData := map[string]interface{}{
"xboxGamerTag" : "FierceAdele",
"linkedInProfile" : "www.linkedin.com/in/testlinkedinprofile",
}
requestBody.SetAdditionalData(additionalData)
// To initialize your graphClient, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=go
extensions, err := graphClient.Users().ByUserId("user-id").Extensions().ByExtensionId("extension-id").Patch(context.Background(), requestBody, nil)
// 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("xboxGamerTag", "FierceAdele");
additionalData.put("linkedInProfile", "www.linkedin.com/in/testlinkedinprofile");
extension.setAdditionalData(additionalData);
Extension result = graphClient.users().byUserId("{user-id}").extensions().byExtensionId("{extension-id}").patch(extension);
# Code snippets are only available for the latest version. Current version is 1.x
from msgraph import GraphServiceClient
from msgraph.generated.models.extension import Extension
# To initialize your graph_client, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=python
request_body = Extension(
additional_data = {
"xbox_gamer_tag" : "FierceAdele",
"linked_in_profile" : "www.linkedin.com/in/testlinkedinprofile",
}
)
result = await graph_client.users.by_user_id('user-id').extensions.by_extension_id('extension-id').patch(request_body)
// 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",
Id = "com.contoso.socialSettings",
AdditionalData = new Dictionary<string, object>
{
{
"@odata.context" , "https://graph.microsoft.com/beta/$metadata#users('3fbd929d-8c56-4462-851e-0eb9a7b3a2a5')/extensions/$entity"
},
{
"xboxGamerTag" , "FierceAdele"
},
{
"linkedInProfile" , "www.linkedin.com/in/testlinkedinprofile"
},
},
};
// To initialize your graphClient, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
var result = await graphClient.Users["{user-id}"].Extensions["{extension-id}"].GetAsync(requestBody);
// Code snippets are only available for the latest major version. Current major version is $v1.*
// Dependencies
import (
"context"
msgraphsdk "github.com/microsoftgraph/msgraph-sdk-go"
graphmodels "github.com/microsoftgraph/msgraph-sdk-go/models"
//other-imports
)
requestBody := graphmodels.NewExtension()
id := "com.contoso.socialSettings"
requestBody.SetId(&id)
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",
}
requestBody.SetAdditionalData(additionalData)
// To initialize your graphClient, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=go
extensions, err := graphClient.Users().ByUserId("user-id").Extensions().ByExtensionId("extension-id").Get(context.Background(), requestBody, nil)
// 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.setId("com.contoso.socialSettings");
HashMap<String, Object> additionalData = new HashMap<String, Object>();
additionalData.put("@odata.context", "https://graph.microsoft.com/beta/$metadata#users('3fbd929d-8c56-4462-851e-0eb9a7b3a2a5')/extensions/$entity");
additionalData.put("xboxGamerTag", "FierceAdele");
additionalData.put("linkedInProfile", "www.linkedin.com/in/testlinkedinprofile");
extension.setAdditionalData(additionalData);
Extension result = graphClient.users().byUserId("{user-id}").extensions().byExtensionId("{extension-id}").get(extension);
# Code snippets are only available for the latest version. Current version is 1.x
from msgraph import GraphServiceClient
from msgraph.generated.models.open_type_extension import OpenTypeExtension
# To initialize your graph_client, see https://video2.skills-academy.com/en-us/graph/sdks/create-client?from=snippets&tabs=python
request_body = OpenTypeExtension(
odata_type = "#microsoft.graph.openTypeExtension",
id = "com.contoso.socialSettings",
additional_data = {
"@odata_context" : "https://graph.microsoft.com/beta/$metadata#users('3fbd929d-8c56-4462-851e-0eb9a7b3a2a5')/extensions/$entity",
"xbox_gamer_tag" : "FierceAdele",
"linked_in_profile" : "www.linkedin.com/in/testlinkedinprofile",
}
)
result = await graph_client.users.by_user_id('user-id').extensions.by_extension_id('extension-id').get(request_body)
Überlegungen zur Verwendung von offenen Erweiterungen
Das Löschen einer Ersteller-App wirkt sich nicht auf die geöffnete Erweiterung und die gespeicherten Daten aus.
Vergleich von Erweiterungstypen
In der folgenden Tabelle werden die Erweiterungstypen verglichen, mit denen Sie entscheiden können, welche Option für Ihr Szenario am besten geeignet ist.
1 Aufgrund einer bestehenden Diensteinschränkung können Delegierte keine offenen, mit einer Erweiterung versehenen Termine in gemeinsamen Postfach-Kalendern erstellen. Versuche, dies zu tun, führen zu einer ErrorAccessDenied Antwort.
2 Diese Grenzwerte für offene Erweiterungen gelten für die folgenden Verzeichnisressourcen: Benutzer, Gruppe, Gerät und organization.
3 Jede geöffnete Erweiterung wird in einer MAPI benannten Eigenschaft gespeichert, die eine begrenzte Ressource im Postfach eines Benutzers ist. Diese Einschränkung gilt für die folgenden Outlook-Ressourcen: message, event und contact
Sie können alle Erweiterungen verwalten, wenn Sie sich mit einem Arbeits- oder Schulkonto angemeldet haben. Außerdem können Sie offene Erweiterungen für die folgenden Ressourcen verwalten, wenn Sie sich mit einem persönlichen Microsoft Account anmelden: event, post, group, message, contact und user.
Berechtigungen und Berechtigungen
Die gleichen Berechtigungen, die Ihre App benötigt, um aus einer Ressource zu lesen oder in eine Ressource zu schreiben instance sind auch erforderlich, um Alle Erweiterungsdaten für diese Ressource instance zu verwalten. In einem delegierten Szenario kann eine App beispielsweise nur die Erweiterungsdaten eines Benutzers aktualisieren, wenn ihr die Berechtigung User.ReadWrite.All erteilt wurde und der angemeldete Benutzer über eine unterstützte Microsoft Entra Administratorrolle verfügt.