Расширения схемы позволяют добавлять строго типизированные пользовательские данные в ресурс. Приложение, создающее расширение схемы, является приложением-владельцем. В зависимости от состояния расширения приложение-владелец и только приложение-владелец могут обновлять или удалять расширение.
Для вызова этого API требуется одно из следующих разрешений. Дополнительные сведения, включая сведения о том, как выбрать разрешения, см. в статье Разрешения.
Тип разрешения
Разрешения (в порядке повышения привилегий)
Делегированные (рабочая или учебная учетная запись)
Application.ReadWrite.All
Делегированные (личная учетная запись Майкрософт)
Не поддерживается.
Приложение
Application.ReadWrite.All и Directory.ReadWrite.All
Примечание.
Кроме того, для делегированного потока пользователь, вошедший в систему, должен быть владельцем вызывающего приложения ИЛИ владельцем (приложения с) appId, используемого для установки свойства владельца.
В теле запроса должно быть представление объекта schemaExtension в формате JSON.
В приведенной ниже таблице показаны свойства, которые обязательно указывать при создании расширения схемы.
Параметр
Тип
Описание
description
String
Описание расширения схемы.
id
String
Уникальный идентификатор для определения расширения схемы. Значение можно присвоить одним из двух способов:
Сцепить имя одного из проверенных доменов с именем расширения схемы, чтобы сформировать уникальную строку в этом формате, {domainName}_{schemaName}. Пример: contoso_mySchema. ПРИМЕЧАНИЕ. Поддерживаются только проверенные домены в следующих доменах верхнего уровня: .com,.net, .gov, .edu или .org.
Укажите имя схемы и позвольте Microsoft Graph использовать это имя схемы для завершения назначения идентификатора в следующем формате: ext{8-random-alphanumeric-chars}_{schema-name}. Примером может быть extkvbmkofy_mySchema.
После создания это свойство невозможно изменить.
owner
String
(Необязательный параметр) Идентификатор appId приложения, которое является владельцем расширения схемы. По умолчанию владельцем становится appId вызывающего приложения. Однако это свойство можно указать при создании, чтобы задать в качестве владельца appId другого приложения (не вызывающего). Во всех случаях в делегированном потоке вошедший в систему пользователь должен быть владельцем приложения, которое задается в качестве владельца расширения схемы. Таким образом, например, при создании определения расширения схемы с помощью песочницы Graph вам потребуется указать свойство владельца. После задания свойства оно будет доступно только для чтения, и вам не удастся изменить его.
Коллекция типов и имен свойств, составляющих определение расширения схемы.
targetTypes
Коллекция String
Набор типов ресурсов Microsoft Graph, поддерживающих расширения схемы, к которым может быть применимо данное определение расширения схемы.
Отклик
При успешном выполнении этот метод возвращает код отклика 201 Created и объект schemaExtension в теле отклика.
Пример
Пример 1. Создание расширения схемы с помощью проверенного домена
Запрос
В этом примере мы создаем уникальную строку со свойством id для определения расширения схемы, используя проверенное доменное имя (graphlearn) и имя схемы (courses). Уникальная строка основана на этом формате: {domainName}_{schemaName}.
// Code snippets are only available for the latest version. Current version is 5.x
// Dependencies
using Microsoft.Graph.Models;
var requestBody = new SchemaExtension
{
Id = "graphlearn_courses",
Description = "Graph Learn training courses extensions",
TargetTypes = new List<string>
{
"Group",
},
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://learn.microsoft.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 version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
SchemaExtension schemaExtension = new SchemaExtension();
schemaExtension.setId("graphlearn_courses");
schemaExtension.setDescription("Graph Learn training courses extensions");
LinkedList<String> targetTypes = new LinkedList<String>();
targetTypes.add("Group");
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);
Пример 2. Создание расширения схемы с помощью одного имени
Запрос
В следующем примере показано указание только имени схемы , courses, в свойстве id в запросе вместе с представлением JSON остальных свойств объекта schemaExtension . Microsoft Graph назначит и вернет в отклике уникальное строковое значение.
// Code snippets are only available for the latest version. Current version is 5.x
// Dependencies
using Microsoft.Graph.Models;
var requestBody = new SchemaExtension
{
Id = "courses",
Description = "Graph Learn training courses extensions",
TargetTypes = new List<string>
{
"Group",
},
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://learn.microsoft.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 version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
SchemaExtension schemaExtension = new SchemaExtension();
schemaExtension.setId("courses");
schemaExtension.setDescription("Graph Learn training courses extensions");
LinkedList<String> targetTypes = new LinkedList<String>();
targetTypes.add("Group");
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);
Отклик включает уникальную строку в свойстве id, созданную на основе имени схемы, предоставленном в запросе, и прочее содержимое созданного определения схемы.
Значение в идентификаторе в ответе основано на формате ext{8-random-alphanumeric-chars}_{schema-name}.
Примечание. Объект отклика, показанный здесь, может быть сокращен для удобочитаемости.
Пример 3. Создание расширения схемы путем задания владельца
Запрос
В следующем примере показано, как создать расширение схемы, задав свойство owner. В этом случае пользователь приложения может и быть владельцем приложения (например, при использовании песочницы Microsoft Graph). В этом случае необходимо задать appId приложения, которым вы владеете, в качестве значения свойства owner, иначе у вас не будет прав на создание расширения схемы. Задайте свойство owner в запросе, а также остальные свойства в объекте schemaExtension как данные JSON.
// Code snippets are only available for the latest version. Current version is 5.x
// Dependencies
using Microsoft.Graph.Models;
var requestBody = new SchemaExtension
{
Id = "courses",
Description = "Graph Learn training courses extensions",
TargetTypes = new List<string>
{
"Group",
},
Owner = "50897f70-a455-4adf-87bc-4cf17091d5ac",
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://learn.microsoft.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 version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
SchemaExtension schemaExtension = new SchemaExtension();
schemaExtension.setId("courses");
schemaExtension.setDescription("Graph Learn training courses extensions");
LinkedList<String> targetTypes = new LinkedList<String>();
targetTypes.add("Group");
schemaExtension.setTargetTypes(targetTypes);
schemaExtension.setOwner("50897f70-a455-4adf-87bc-4cf17091d5ac");
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);
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделе https://aka.ms/ContentUserFeedback.