Adicionar dados personalizados a grupos usando as extensões do esquema

Neste tutorial, você aprenderá a usar extensões de esquema.

Imagine que você é um desenvolvedor em uma empresa de Software de Gerenciamento de Aprendizagem chamada Bellows College que cria cursos de treinamento e materiais para empresas. Você usa a experiência colaborativa dos grupos do Microsoft 365 para fornecer conteúdo do curso e exercícios de registro entre os participantes para cursos online e cursos ministrados por instrutores. Você deseja tornar os grupos do Microsoft 365 usados para cursos de treinamento facilmente identificáveis como cursos de treinamento, o que permite que outros desenvolvedores descubram seus grupos e criem experiências avançadas em cima de seus cursos de aprendizagem.

Para este cenário, este artigo mostra como:

  • Descubra as definições de extensão de esquema disponíveis que você poderia usar.
  • Registrar uma definição de extensão de esquema direcionada a grupos de cursos de treinamento.
  • Crie um novo grupo com dados personalizados com base na definição de extensão de esquema que você registrou.
  • Adicionar, atualizar ou remover dados personalizados em um grupo existente com base em uma definição de extensão de esquema.
  • Leia um grupo e os dados de extensão.
  • Exclua a definição de extensão de esquema e os dados de extensão.

Observação

Além dos grupos, as extensões de esquema também têm suporte e podem ser gerenciadas para outros tipos de recursos.

Pré-requisitos

Para reproduzir as etapas deste artigo, você precisa dos seguintes privilégios:

  • Entre em um cliente de API, como o Graph Explorer.
  • Conceda ao aplicativo as permissões Group.ReadWrite.All e Application.ReadWrite.All delegadas para o usuário conectado.
  • Seja o proprietário de um aplicativo que você atribui a propriedade da definição de extensão de esquema neste tutorial. Neste tutorial, o aplicativo é chamado de extensions-application e tem appIdd1e6f196-fca3-48ad-8cd3-1a98e3bd46d2.

Etapa 1. Exibir extensões de esquema disponíveis

Primeiro, como desenvolvedor, talvez você queira que o aplicativo reutilize todas as definições de extensão de esquema existentes se elas estiverem adequadas para a finalidade. No exemplo a seguir, você consulta extensões de esquema nomeadas (pela id) bellowscollege_courses. Suponha que a resposta mostre que não há extensões de esquema nomeadas bellowscollege_courses em seu locatário.

Solicitação

GET https://graph.microsoft.com/v1.0/schemaExtensions?$filter=id eq 'bellowscollege_courses'

Resposta

HTTP/1.1 200 OK
Content-Type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#schemaExtensions",
    "@microsoft.graph.tips": "Use $select to choose only the properties your app needs, as this can lead to performance improvements. For example: GET schemaExtensions?$select=description,owner",
    "value": []
}

Você também pode consultar pela id como um parâmetro de caminho da seguinte maneira: GET https://graph.microsoft.com/v1.0/schemaExtensions/bellowscollege_courses. Se não houver extensões de esquema que correspondam à ID, a resposta será 404 Not Found.

Etapa 2. Registrar uma definição de extensão de esquema

Você deseja criar e registrar uma nova definição de extensão para cursos de treinamento no recurso de grupo . Especifique as seguintes propriedades:

  • id: forneça uma cadeia de caracteres para esta propriedade seguindo uma das duas maneiras:
    • Opção 1: concatene um nome de domínio de vaidade verificado para seu locatário com um nome para a extensão de esquema. Por exemplo, se o domínio for bellowscollege.com, e o nome da extensão de esquema for courses, você poderá usar a idbellowscollege_courses.

    • Opção 2: uma maneira alternativa é fornecer apenas um nome de esquema, como courses, e permitir que o Microsoft Graph gere automaticamente a ID para você prefixando o nome fornecido com uma cadeia de caracteres alfanumérica aleatória.

      Essa id se torna o nome da propriedade de extensão de esquema em um grupo.

  • description
  • targetTypes: especifique os tipos de recurso aos quais a extensão de esquema pode ser aplicada. Neste exemplo, o tipo de recurso é Group. Você pode adicionar mais tipos de recurso atualizando a definição de extensão de esquema posteriormente.
  • propriedades: especifique as propriedades personalizadas que compõem o esquema. Neste exemplo, especifique as courseIdpropriedades , courseName e courseType personalizadas e seus tipos. Somente alterações aditivas são permitidas depois que você cria a definição de extensão de esquema.
  • proprietário: especifique o aplicativo que possui a definição de extensão de esquema. Se você estiver executando este exemplo de um aplicativo que não está atribuído como proprietário, especifique o appId do aplicativo atribuído na propriedade proprietário .

Solicitação

POST https://graph.microsoft.com/v1.0/schemaExtensions
Content-type: application/json

{
    "id": "bellowscollege_courses",
    "description": "Bellows College training courses extensions",
    "targetTypes": [
        "Group"
    ],
    "owner": "d1e6f196-fca3-48ad-8cd3-1a98e3bd46d2",
    "properties": [
        {
            "name": "courseId",
            "type": "Integer"
        },
        {
            "name": "courseName",
            "type": "String"
        },
        {
            "name": "courseType",
            "type": "String"
        }
    ]
}

Resposta

O exemplo a seguir mostra a resposta.

Na resposta, o status inicial padrão da extensão de esquema é InDevelopment. Enquanto estiver desenvolvendo a extensão, você pode mantê-la neste status, durante a qual apenas o aplicativo que a criou pode atualizá-la com alterações aditivas ou excluí-la. Quando estiver pronto para compartilhar a extensão para uso por outros aplicativos, defina status como Disponível.

HTTP/1.1 201 Created
Content-Type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#schemaExtensions/$entity",
    "id": "bellowscollege_courses",
    "description": "Bellows College training courses extensions",
    "targetTypes": [
        "Group"
    ],
    "status": "InDevelopment",
    "owner": "d1e6f196-fca3-48ad-8cd3-1a98e3bd46d2",
    "properties": [
        {
            "name": "courseId",
            "type": "Integer"
        },
        {
            "name": "courseName",
            "type": "String"
        },
        {
            "name": "courseType",
            "type": "String"
        }
    ]
}

Etapa 3. Estender um grupo com dados personalizados

Você pode estender um grupo com dados personalizados durante a criação do grupo ou atualizando um grupo existente.

Opção 1: criar um novo grupo com dados estendidos

A solicitação a seguir cria um novo grupo e usa a extensão de bellowscollege_courses esquema para estender o grupo com dados personalizados. Se você tiver um grupo existente, também poderá estendê-lo com dados personalizados atualizando o grupo com os dados de extensão.

A resposta não espelho nenhuma extensão de dados. Você precisa explicitamente $select a extensão pelo nome usando uma GET /group/{id} operação.

Solicitação

POST https://graph.microsoft.com/v1.0/groups
Content-type: application/json

{
    "displayName": "New Managers March 2024",
    "description": "New Managers training course for March 2024",
    "groupTypes": [
        "Unified"
    ],
    "mailEnabled": true,
    "mailNickname": "newMan202403",
    "securityEnabled": false,
    "bellowscollege_courses": {
        "courseId": "123",
        "courseName": "New Managers",
        "courseType": "Online"
    }
}

Resposta

O exemplo a seguir mostra a resposta. A resposta não inclui a nova extensão. Você precisa explicitamente $select a extensão pelo nome usando uma GET /group/{id} operação.

Observação: o objeto de resposta mostrado aqui pode ser encurtado para legibilidade.

HTTP/1.1 201 Created
Content-Type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#groups/$entity",
    "id": "8fb45944-4085-449f-b95d-f7dd74a1b081",
    "createdDateTime": "2024-01-24T09:09:03Z",
    "description": "New Managers training course for March 2024",
    "displayName": "New Managers March 2024",
    "groupTypes": [
        "Unified"
    ],
    "mail": "newMan202403@bellowscollege.com",
    "mailEnabled": true,
    "mailNickname": "newMan202403"
}

Opção 2: atualizar um grupo existente com dados estendidos

Se você tiver um grupo existente, também poderá estendê-lo com dados personalizados da seguinte maneira. A solicitação retorna uma 204 No Content resposta.

PATCH https://graph.microsoft.com/v1.0/groups/dfc8016f-db97-4c47-a582-49cb8f849355
Content-type: application/json

{
    "bellowscollege_courses": {
        "courseId": "123",
        "courseName": "New Managers",
        "courseType": "Online"
    }
}

Etapa 4. Atualizar dados personalizados em um grupo

A solicitação a seguir atualiza a propriedade courseType na bellowscollege_courses extensão do grupo para Hybrid. Embora você queira atualizar apenas a propriedade courseType , você deve incluir as outras propriedades e seus valores existentes no corpo da solicitação também. Caso contrário, o Microsoft Graph os define como null e remove seus dados.

A solicitação a seguir retorna uma 204 No Content resposta.

PATCH https://graph.microsoft.com/v1.0/groups/dfc8016f-db97-4c47-a582-49cb8f849355
Content-type: application/json

{
    "bellowscollege_courses": {
        "courseId": "123",
        "courseName": "New Managers",
        "courseType": "Hybrid"
    }
}

Etapa 5. Obter um grupo e seus dados de extensão

Para obter os dados personalizados em um grupo, use $select para incluir a extensão pelo nome.

Além da filtragem pela id da extensão de esquema, você também pode filtrar pelos valores da propriedade de extensão. O exemplo a seguir procura o grupo que tem a bellowscollege_courses extensão com um courseId valor de propriedade correspondente 123e obtém os dados de extensão e as propriedades displayName, id e description do grupo.

Solicitação

GET https://graph.microsoft.com/v1.0/groups?$filter=bellowscollege_courses/courseId eq '123'&$select=displayName,id,description,bellowscollege_courses

Resposta

HTTP/1.1 200 OK
Content-Type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#groups(displayName,id,description,bellowscollege_courses)",
    "value": [
        {
            "displayName": "New Managers March 2024",
            "id": "8fb45944-4085-449f-b95d-f7dd74a1b081",
            "description": "New Managers training course for March 2024",
            "bellowscollege_courses": {
                "@odata.type": "#microsoft.graph.ComplexExtensionValue",
                "courseType": "Hybrid",
                "courseName": "New Managers",
                "courseId": 123
            }
        }
    ]
}

Etapa 6: excluir dados de extensão e definição de extensão de esquema

Você pode excluir uma definição de extensão de esquema se não precisar mais dela. Se as instâncias de recurso tiverem a propriedade de extensão aplicada, excluir a definição de extensão de esquema não excluirá os dados de extensão nas instâncias de recurso. Em vez disso, os dados de extensão estão disponíveis, mas não estão mais acessíveis. Você pode recriar a definição de extensão de esquema com a mesma configuração - se você usou o domínio verificado para a id de extensão de esquema - para poder excluir os dados de extensão.

A solicitação a seguir exclui a bellowscollege_courses propriedade de extensão de esquema e seus dados associados do grupo. A solicitação retorna uma 204 No Content resposta.

PATCH https://graph.microsoft.com/v1.0/groups/8fb45944-4085-449f-b95d-f7dd74a1b081

{
    "bellowscollege_courses": null
}

A solicitação a seguir exclui a definição de bellowscollege_courses extensão de esquema. A solicitação retorna uma 204 No Content resposta.

DELETE https://graph.microsoft.com/v1.0/schemaExtensions/bellowscollege_courses