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

Neste tutorial, vai aprender a utilizar extensões de esquema.

Imagine que é um programador numa empresa de Software de Gestão de Aprendizagem denominada Bellows College que cria cursos de formação e materiais para empresas. Utiliza a experiência de colaboração dos grupos do Microsoft 365 para fornecer conteúdos do curso e gravar exercícios entre os participantes para cursos online e cursos orientados por instrutores. Quer tornar os grupos do Microsoft 365 utilizados para cursos de formação facilmente identificáveis como cursos de formação, o que permite que outros programadores descubram os seus grupos e criem experiências avançadas sobre os seus cursos de aprendizagem.

Para este cenário, este artigo mostra-lhe como:

  • Descubra as definições de extensão de esquema disponíveis que pode utilizar.
  • 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 da extensão de esquema que registou.
  • 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 da extensão.
  • Elimine a definição da extensão de esquema e os dados da extensão.

Observação

Além dos grupos, as extensões de esquema também são suportadas e podem ser geridas para outros tipos de recursos.

Pré-requisitos

Para reproduzir os passos neste artigo, precisa dos seguintes privilégios:

  • Inicie sessão num cliente de API, como o Graph Explorer.
  • Conceda à aplicação as permissões Group.ReadWrite.All e Application.ReadWrite.All delegated para o utilizador com sessão iniciada.
  • Seja o proprietário de uma aplicação à qual atribui a propriedade da definição da extensão de esquema neste tutorial. Neste tutorial, a aplicação tem o nome extensions-application e tem appIdd1e6f196-fca3-48ad-8cd3-1a98e3bd46d2.

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

Em primeiro lugar, como programador, poderá querer que a aplicação reutilize quaisquer definições de extensão de esquema existentes, se estiverem adequadas para fins. No exemplo seguinte, vai consultar extensões de esquema com o nome (pelo ID). bellowscollege_courses Suponha que a resposta mostra que não existem extensões de esquema com o nome bellowscollege_courses no seu inquilino.

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": []
}

Também pode consultar pelo ID como um parâmetro de caminho da seguinte forma: GET https://graph.microsoft.com/v1.0/schemaExtensions/bellowscollege_courses. Se não existirem extensões de esquema que correspondam ao ID, a resposta será 404 Not Found.

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

Quer criar e registar uma nova definição de extensão para cursos de formação no recurso de grupo . Especifique as seguintes propriedades:

  • id: forneça uma cadeia para esta propriedade, seguindo uma de duas formas:
    • Opção 1: Concatenar um nome de domínio personalizado verificado para o seu inquilino com um nome para a extensão de esquema. Por exemplo, se o domínio for bellowscollege.come o nome da extensão de esquema for courses, pode utilizar o IDbellowscollege_courses.

    • Opção 2: uma forma alternativa é fornecer apenas um nome de esquema, como courses, e permitir que o Microsoft Graph gere automaticamente o ID ao adicionar o nome fornecido com uma cadeia alfanumérica aleatória.

      Este ID torna-se o nome da propriedade da extensão de esquema num grupo.

  • description
  • targetTypes: especifique os tipos de recursos aos quais a extensão de esquema pode ser aplicada. Neste exemplo, o tipo de recurso é Group. Pode adicionar mais tipos de recursos ao atualizar a definição da extensão de esquema mais tarde.
  • propriedades: especifique as propriedades personalizadas que compõem o esquema. Neste exemplo, especifique as courseIdcourseNamecourseType propriedades personalizadas e e os respetivos tipos. Só são permitidas alterações aditivas depois de criar a definição da extensão de esquema.
  • proprietário: especifique a aplicação que detém a definição da extensão de esquema. Se estiver a executar este exemplo a partir de uma aplicação que não lhe foi atribuída como proprietário, especifique o appId da aplicação que lhe foi atribuída na propriedade de 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 estado inicial predefinido da extensão de esquema é InDevelopment. Enquanto estiver a desenvolver a extensão, pode mantê-la neste estado, durante a qual apenas a aplicação que a criou pode atualizá-la com alterações de aditivos ou eliminá-la. Quando estiver pronto para partilhar a extensão para utilização por outras aplicações, defina o estado 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. Expandir um grupo com dados personalizados

Pode expandir um grupo com dados personalizados durante a criação do grupo ou ao atualizar um grupo existente.

Opção 1: Criar um novo grupo com dados expandidos

O pedido seguinte cria um novo grupo e utiliza a extensão de bellowscollege_courses esquema para expandir o grupo com dados personalizados. Se tiver um grupo existente, também pode expandi-lo com dados personalizados ao atualizar o grupo com os dados da extensão.

A resposta não reflete quaisquer extensões de dados. Tem de explicitamente $select a extensão por nome através de 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. Tem de explicitamente $select a extensão por nome através de 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 expandidos

Se tiver um grupo existente, também pode expandi-lo com dados personalizados da seguinte forma. O pedido devolve 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 num grupo

O pedido seguinte atualiza a propriedade courseType na bellowscollege_courses extensão do grupo para Hybrid. Embora pretenda atualizar apenas a propriedade courseType , também tem de incluir as outras propriedades e os respetivos valores existentes no corpo do pedido. Caso contrário, o Microsoft Graph define-os como null e remove os respetivos dados.

O pedido seguinte devolve 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 os respetivos dados de extensão

Para obter os dados personalizados num grupo, utilize $select para incluir a extensão por nome.

Para além da filtragem pelo ID da extensão de esquema, também pode filtrar pelos valores de propriedade da extensão. O exemplo seguinte procura o grupo que tem a bellowscollege_courses extensão com um courseId valor de propriedade correspondente 123e obtém os dados da 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
            }
        }
    ]
}

Passo 6: Eliminar os dados da extensão e a definição da extensão de esquema

Pode eliminar uma definição de extensão de esquema se já não precisar dela. Se as instâncias de recursos tiverem a propriedade de extensão aplicada, a eliminação da definição da extensão de esquema não elimina os dados da extensão nas instâncias de recursos. Em vez disso, os dados da extensão estão disponíveis, mas já não estão acessíveis. Pode recriar a definição da extensão de esquema com a mesma configuração – se utilizou o domínio verificado para o ID da extensão de esquema – para poder eliminar os dados da extensão.

O pedido seguinte elimina a propriedade da bellowscollege_courses extensão de esquema e os respetivos dados associados do grupo. O pedido devolve uma 204 No Content resposta.

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

{
    "bellowscollege_courses": null
}

O pedido seguinte elimina a definição da bellowscollege_courses extensão de esquema. O pedido devolve uma 204 No Content resposta.

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