Compartilhar via


Criar openTypeExtension

Namespace: microsoft.graph

Importante

As APIs na versão /beta no Microsoft Graph estão sujeitas a alterações. Não há suporte para o uso dessas APIs em aplicativos de produção. Para determinar se uma API está disponível na v1.0, use o seletor Versão.

Cuidado

As aplicações existentes que utilizam esta funcionalidade com baseTask ou baseTaskList devem ser atualizadas, uma vez que o conjunto de API a fazer incorporado nestes recursos é preterido a partir de 31 de maio de 2022. Esse conjunto de API deixará de retornar dados em 31 de agosto de 2022. Utilize o conjunto de API criado no todoTask.

Crie uma extensão aberta (objeto openTypeExtension) e adicione propriedades personalizadas em uma instância nova ou existente de um recurso. Você pode criar uma extensão aberta em uma instância de recurso e armazenar dados personalizados para tudo isso na mesma operação, exceto para recursos específicos.

A tabela na seção Permissões lista os recursos que oferecem suporte a extensões abertas.

Observação: Se você estiver criando extensões abertas em recursos do Outlook, confira considerações específicas do Outlook no tipo de recurso openTypeExtension.

Esta API está disponível nas seguintes implementações de cloud nacionais.

Serviço global US Government L4 US Government L5 (DOD) China operada pela 21Vianet

Permissões

Dependendo do recurso para o qual você está criando a extensão e o tipo de permissão (delegado ou aplicativo) solicitado, a permissão especificada na tabela a seguir é a menos privilegiada necessária para fazer chamadas a esta API. Para saber mais, incluindo tomar cuidado antes de escolher as permissões mais privilegiadas, pesquise as seguintes permissões em Permissões.

Recurso com suporte Delegada (conta corporativa ou de estudante) Delegada (conta pessoal da Microsoft) Application
device Directory.AccessAsUser.All Sem suporte. Device.ReadWrite.All
driveItem Files.ReadWrite Files.ReadWrite Sem suporte.
evento Calendars.ReadWrite Calendars.ReadWrite Calendars.ReadWrite
grupo Group.ReadWrite.All Sem suporte. Group.ReadWrite.All
evento de grupo Group.ReadWrite.All Sem suporte. Sem suporte.
postagem de grupo Group.ReadWrite.All Sem suporte. Group.ReadWrite.All
mensagem Mail.ReadWrite Mail.ReadWrite Mail.ReadWrite
organization Organization.ReadWrite.All Sem suporte. Organization.ReadWrite.All
contato pessoal Contacts.ReadWrite Contacts.ReadWrite Contacts.ReadWrite
site Sites.ReadWrite.All Sem suporte. Sem suporte.
todoTask Tasks.ReadWrite Tasks.ReadWrite Sem suporte.
todoTaskList Tasks.ReadWrite Tasks.ReadWrite Sem suporte.
user User.ReadWrite Sem suporte. User.ReadWrite.All
baseTask (preterido) Tasks.ReadWrite Tasks.ReadWrite Sem suporte.
baseTaskList (preterido) Tasks.ReadWrite Tasks.ReadWrite Sem suporte.

Solicitação HTTP

Crie uma extensão em uma nova instância de recurso

Use a mesma solicitação REST usada para criar a instância.

POST /users/{userId|userPrincipalName}/events
POST /users/{userId|userPrincipalName}/messages
POST /groups/{userId}/events
POST /groups/{userId}/threads/{threadId}/posts/{postId}/reply
POST /users/{userId|userPrincipalName}/contacts
POST /users/{userId|userPrincipalName}/todo/lists/{listId}/tasks
POST /users/{userId|userPrincipalName}/todo/lists
POST /users/{userId|userPrincipalName}/tasks/lists/{listId}/tasks
POST /users/{userId|userPrincipalName}/tasks/lists
POST /drive/items/{itemId}/children

Observação: Esta sintaxe acima mostra algumas maneiras comuns de criar as instâncias de recursos com suporte. Todas as outras sintaxes POST que permitem criar essas instâncias de recursos dão suporte à criação de extensões abertas nelas de maneira semelhante.

Confira a seção Solicitar corpo sobre a inclusão de propriedades da nova instância do recurso e a extensão no corpo da solicitação.

Crie uma extensão em uma instância de recurso existente

Identifique a instância do recurso na solicitação e faça um POST para a propriedade de navegação extensions.

POST /administrativeunits/{administrativeUnitId}/extensions
POST /devices/{deviceId}/extensions
POST /users/{userId|userPrincipalName}/events/{eventId}/extensions
POST /groups/{groupId}/extensions
POST /groups/{groupId}/events/{eventId}/extensions
POST /groups/{groupId}/threads/{threadId}/posts/{postId}/extensions
POST /users/{userId|userPrincipalName}/messages/{messageId}/extensions
POST /organization/{organizationId}/extensions
POST /users/{userId|userPrincipalName}/contacts/{contactId}/extensions
POST /users/{userId|userPrincipalName}/extensions
POST /users/{userId|userPrincipalName}/todo/lists/{listId}/tasks/{taskId}/extensions
POST /users/{userId|userPrincipalName}/todo/lists/{listId}/extensions
POST /users/{userId|userPrincipalName}/tasks/lists/{listId}/tasks/{taskId}/extensions
POST /users/{userId|userPrincipalName}/tasks/lists/{listId}/extensions
POST /drive/items/{itemId}/extensions
POST /sites/{siteId}/extensions

Observação: Esta sintaxe mostra algumas maneiras comuns de identificar uma instância do recurso, para criar uma extensão nele. Todas as outras sintaxes que permitem identificar essas instâncias de recursos dão suporte à criação de extensões abertas nelas de maneira semelhante.

Confira a seção Solicitar corpo sobre como incluir a extensão no corpo da solicitação.

Cabeçalhos de solicitação

Nome Valor
Autorização {token} de portador. Obrigatório. Saiba mais sobre autenticação e autorização.
Content-Type application/json

Corpo da solicitação

Forneça um corpo JSON de openTypeExtension, com os seguintes pares name-value necessários e quaisquer dados personalizados adicionais. Os dados na carga JSON podem ser tipos primitivos ou matrizes de tipos primitivos.

Name Valor
@odata.type microsoft.graph.openTypeExtension
extensionName Cadeia exclusiva

Ao criar uma extensão em uma nova instância de recursos, além de novos objetos openTypeExtension, fornecem uma representação JSON das propriedades relevantes para criar uma instância de recurso deste tipo.

Resposta

Código da resposta

Dependendo da operação, o código de resposta pode ser 201 Created ou 202 Accepted.

Quando você cria uma extensão usando a mesma operação usada para criar uma instância de recurso, a operação retorna o mesmo código de resposta retornado quando você usa a operação para criar a instância do recurso sem a extensão. Consulte os tópicos correspondentes para criar a instância conforme listado cima.

Corpo da resposta

Cenário Recurso Corpo da resposta
Criar uma extensão ao criar explicitamente uma nova instância de recurso contact, event, message Inclui a nova instância expandida com o objeto openTypeExtension.
Criando uma extensão ao criar implicitamente uma instância de recursos postagem A resposta inclui somente um código de resposta, mas não um corpo de resposta.
Criar uma extensão em uma instância de recurso existente Todos os recursos com suporte Inclui o objeto openTypeExtension.

Exemplo

Solicitação 1

O primeiro exemplo cria uma mensagem e uma extensão na mesma chamada. O corpo da solicitação inclui o seguinte:

  • As propriedades subject, body e toRecipients típicas de uma nova mensagem.

  • E para a extensão:

    • O tipo microsoft.graph.openTypeExtension.
    • O nome da extensão "Com.Contoso.Referral".
    • Dados adicionais a serem armazenados como três propriedades personalizadas no conteúdo JSON: companyName, expirationDate e dealValue.
POST https://graph.microsoft.com/beta/me/messages
Content-Type: application/json

{
  "subject": "Annual review",
  "body": {
    "contentType": "HTML",
    "content": "You should be proud!"
  },
  "toRecipients": [
    {
      "emailAddress": {
        "address": "rufus@contoso.com"
      }
    }
  ],
  "extensions": [
    {
      "@odata.type": "microsoft.graph.openTypeExtension",
      "extensionName": "Com.Contoso.Referral",
      "companyName": "Wingtip Toys",
      "expirationDate": "2015-12-30T11:00:00.000Z",
      "dealValue": 10000
    }
  ]
}

Resposta 1

Veja a seguir a resposta para o primeiro exemplo. O corpo da resposta inclui propriedades da nova mensagem e o seguinte para a nova extensão:

  • A propriedade id com o nome totalmente qualificado de microsoft.graph.openTypeExtension.Com.Contoso.Referral.
  • A propriedade padrão extensionName especificada na solicitação.
  • Os dados personalizados especificados na solicitação, armazenados como 3 propriedades personalizadas.

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/beta/$metadata#Me/messages/$entity",
  "@odata.id": "https://graph.microsoft.com/beta/users('ddfc984d-b826-40d7-b48b-57002df800e5@1717f226-49d1-4d0c-9d74-709fad664b77')/messages
('AAMkAGEbs88AAB84uLuAAA=')",
  "@odata.etag": "W/\"CQAAABYAAACY4MQpaFz9SbqUDe4+bs88AAB88LOj\"",
  "id": "AAMkAGEbs88AAB84uLuAAA=",
  "createdDateTime": "2015-10-30T03:03:43Z",
  "lastModifiedDateTime": "2015-10-30T03:03:43Z",
  "changeKey": "CQAAABYAAACY4MQpaFz9SbqUDe4+bs88AAB88LOj",
  "categories": [ ],
  "receivedDateTime": "2015-10-30T03:03:43Z",
  "sentDateTime": "2015-10-30T03:03:43Z",
  "hasAttachments": false,
  "subject": "Annual review",
  "body": {
    "contentType": "HTML",
    "content": "<html>\r\n<head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\r
\n<meta content=\"text/html; charset=us-ascii\">\r\n</head>\r\n<body>\r\nYou should be proud!\r\n</body>\r
\n</html>\r\n"
  },
  "bodyPreview": "You should be proud!",
  "importance": "Normal",
  "parentFolderId": "AQMkAGEwAAAIBDwAAAA==",
  "sender": null,
  "from": null,
  "toRecipients": [
    {
      "emailAddress": {
        "address": "rufus@contoso.com",
        "name": "John Doe"
      }
    }
  ],
  "ccRecipients": [ ],
  "bccRecipients": [ ],
  "replyTo": [ ],
  "conversationId": "AAQkAGEFGugh3SVdMzzc=",
  "isDeliveryReceiptRequested": false,
  "isReadReceiptRequested": false,
  "isRead": true,
  "isDraft": true,
  "webLink": "https://outlook.office.com/owa/?
ItemID=AAMkAGEbs88AAB84uLuAAA%3D&exvsurl=1&viewmodel=ReadMessageItem",
  "inferenceClassification": "Focused",
  "extensions": [
    {
      "@odata.type": "#microsoft.graph.openTypeExtension",
      "@odata.id": "https://graph.microsoft.com/beta/users('ddfc984d-b826-40d7-b48b-57002df800e5@1717f226-49d1-4d0c-9d74-709fad664b77')/messages
('AAMkAGEbs88AAB84uLuAAA=')/extensions('microsoft.graph.openTypeExtension.Com.Contoso.Referral')",
      "id": "microsoft.graph.openTypeExtension.Com.Contoso.Referral",
      "extensionName": "Com.Contoso.Referral",
      "companyName": "Wingtip Toys",
      "expirationDate": "2015-12-30T11:00:00.000Z",
      "dealValue": 10000
    }
  ]
}

Solicitação 2

O segundo exemplo cria uma extensão na mensagem especificada. O corpo da solicitação inclui o seguinte para essa extensão:

  • O tipo microsoft.graph.openTypeExtension.
  • O nome da extensão "Com.Contoso.Referral".
  • Dados adicionais a serem armazenados como 3 propriedades personalizadas na carga JSON: companyName, dealValue e expirationDate.
POST https://graph.microsoft.com/beta/me/messages/AAMkAGE1M2IyNGNmLTI5MTktNDUyZi1iOTVl===/extensions
Content-Type: application/json

{
  "@odata.type" : "microsoft.graph.openTypeExtension",
  "extensionName" : "Com.Contoso.Referral",
  "companyName" : "Wingtip Toys",
  "dealValue" : 500050,
  "expirationDate" : "2015-12-03T10:00:00.000Z"
}

Resposta 2

Veja a seguir a resposta para o segundo exemplo. O corpo da solicitação inclui o seguinte para a nova extensão:

  • A propriedade padrão extensionName.
  • A propriedade id com o nome totalmente qualificado de microsoft.graph.openTypeExtension.Com.Contoso.Referral.
  • Os dados personalizados a serem armazenados.
HTTP/1.1 201 Created
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/beta/$metadata#Me/messages('AAMkAGE1M2IyNGNmLTI5MTktNDUyZi1iOTVl===')/extensions/$entity",
    "@odata.type": "#microsoft.graph.openTypeExtension",
    "@odata.id": "https://graph.microsoft.com/beta/users('ddfc984d-b826-40d7-b48b-57002df85e00@1717f226-49d1-4d0c-9d74-709fad6677b4')/messages('AAMkAGE1M2IyNGNmLTI5MTktNDUyZi1iOTVl===')/extensions
('microsoft.graph.openTypeExtension.Com.Contoso.Referral')",
    "extensionName": "Com.Contoso.Referral",
    "id": "microsoft.graph.openTypeExtension.Com.Contoso.Referral",
    "companyName": "Wingtip Toys",
    "dealValue": 500050,
    "expirationDate": "2015-12-03T10:00:00.000Z"
}

Solicitação 3

O terceiro exemplo cria uma extensão no evento de grupo especificado. O corpo da solicitação inclui o seguinte para essa extensão:

  • O tipo microsoft.graph.openTypeExtension.
  • O nome da extensão "Com.Contoso.Deal".
  • Dados adicionais a serem armazenados como 3 propriedades personalizadas na carga JSON: companyName, dealValue e expirationDate.
POST https://graph.microsoft.com/beta/groups/f5480dfd-7d77-4d0b-ba2e-3391953cc74a/events/AAMkADVl17IsAAA=/extensions
Content-type: application/json

{
  "@odata.type" : "microsoft.graph.openTypeExtension",
  "extensionName" : "Com.Contoso.Deal",
  "companyName" : "Alpine Skis",
  "dealValue" : 1010100,
  "expirationDate" : "2015-07-03T13:04:00.000Z"
}

Resposta 3

Veja a seguir a resposta da terceira solicitação de exemplo.

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

{
    "@odata.context": "https://graph.microsoft.com/beta/$metadata#groups('f5480dfd-7d77-4d0b-ba2e-3391953cc74a')/events('AAMkADVl7IsAAA%3D')/extensions/$entity",
    "@odata.type": "#microsoft.graph.openTypeExtension",
    "id": "microsoft.graph.openTypeExtension.Com.Contoso.Deal",
    "extensionName": "Com.Contoso.Deal",
    "companyName": "Alpine Skis",
    "dealValue": 1010100,
    "expirationDate": "2015-07-03T13:04:00Z"
}

Solicitação 4

O quarto exemplo cria uma extensão em uma nova postagem de grupo, usando a mesma chamada de ação reply para uma postagem de grupo existente. A ação reply cria uma nova postagem e uma nova extensão inserida nessa postagem. O corpo da solicitação inclui uma propriedade post que, por sua vez, contém o corpo da nova postagem e os seguintes dados para a nova extensão:

  • O tipo microsoft.graph.openTypeExtension.
  • O nome da extensão "Com.Contoso.HR".
  • Dados adicionais a serem armazenados como 3 propriedades personalizadas na carga JSON: companyName, expirationDate e a matriz de cadeias de caracteres topPicks.
POST https://graph.microsoft.com/beta/groups/37df2ff0-0de0-4c33-8aee-75289364aef6/threads/AAQkADJizZJpEWwqDHsEpV_KA==/posts/AAMkADJiUg96QZUkA-ICwMubAAC1heiSAAA=/reply
Content-type: application/json

{
  "post": {
    "body": {
      "contentType": "html",
      "content": "<html><body><div><div><div><div>When and where? </div></div></div></div></body></html>"
    },
  "extensions": [
    {
      "@odata.type": "microsoft.graph.openTypeExtension",
      "extensionName": "Com.Contoso.HR",
      "companyName": "Contoso",
      "expirationDate": "2015-07-03T13:04:00.000Z",
      "topPicks": [
        "Employees only",
        "Add spouse or guest",
        "Add family"
      ]
    }
  ]
  }
}

Resposta 4

Veja a seguir a resposta do quarto exemplo. Criar uma extensão com êxito em uma nova postagem de grupo resulta apenas no código de resposta HTTP 202.

HTTP/1.1 202 Accepted
Content-type: text/plain
Content-Length: 0

Solicitação 5

O quinto exemplo cria uma extensão em uma nova postagem de grupo usando a mesma operação POST para criar uma conversa. A operação POST cria uma nova conversa, thread ou postagem e uma nova extensão inserida na postagem. O corpo da solicitação inclui as propriedades Topic e Threads e o objeto filho post para a nova conversa. O objeto post, por sua vez, contém o corpo da nova postagem e os seguintes dados para a extensão:

  • O tipo microsoft.graph.openTypeExtension.
  • O nome da extensão "Com.Contoso.HR".
  • Dados adicionais a serem armazenados como 3 propriedades personalizadas na carga JSON: companyName, expirationDate e a matriz de cadeias de caracteres topPicks.
POST https://graph.microsoft.com/beta/groups/37df2ff0-0de0-4c33-8aee-75289364aef6/conversations
Content-type: application/json

{
  "Topic": "Does anyone have a second?",
  "Threads": [
    {
      "Posts": [
        {
          "Body": {
            "ContentType": "HTML",
            "Content": "This is urgent!"
          },
          "Extensions": [
            {
              "@odata.type": "microsoft.graph.openTypeExtension",
              "extensionName": "Com.Contoso.Benefits",
              "companyName": "Contoso",
              "expirationDate": "2016-08-03T11:00:00.000Z",
              "topPicks": [
                "Employees only",
                "Add spouse or guest",
                "Add family"
              ]
            }
          ]
        }
      ]
    }
  ]
}

Resposta 5

Veja a seguir a resposta do quinto exemplo, que contém a nova conversa e uma ID de thread. Esse novo thread contém uma postagem criada automaticamente que, por sua vez, contém a nova extensão.

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

Para obter a nova extensão, obtenha primeiro todas as publicações neste tópico e, inicialmente, deverá existir apenas uma. Em seguida, aplique o ID da publicação e o nome Com.Contoso.Benefits da extensão para obter a extensão.

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

{
    "@odata.context": "https://graph.microsoft.com/beta/$metadata#groups('37df2ff0-0de0-4c33-8aee-75289364aef6')/conversations/$entity",
    "id": "AAQkADJToRlbJ5Mg7TFM7H-j3Y=",
    "threads": [
        {
            "id": "AAQkADJDtMUzsf_PdhAAswJOhGVsnkyDtMUzsf_Pdg=="
        }
    ]
}


Pedido 6

O exemplo seguinte mostra como criar uma extensão num driveItem existente.

POST https://graph.microsoft.com/beta/drive/items/01FWCEC553UUOHTOAGBVE2IXBQTIZY3JZQ/extensions
Content-type: application/json

{
  "extensionName": "myCustomExtension",
  "myCustomString": "Contoso data",
  "myCustomBool": false
}

Resposta 6

O exemplo seguinte mostra a resposta, incluindo as seguintes propriedades para a nova extensão:

  • A propriedade ID com o nome completamente qualificado.
  • A propriedade padrão extensionName especificada na solicitação.
  • Os dados personalizados especificados no pedido armazenados como duas propriedades personalizadas.

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

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

{
  "id": "myCustomExtension",
  "extensionName": "myCustomExtension",
  "myCustomString": "Contoso data",
  "myCustomBool": false
}

Pedido 7

O exemplo seguinte mostra como criar um driveItem e uma extensão aberta para o driveItem.

POST https://graph.microsoft.com/beta/drive/items/01FWCEC553UUOHTOAGBVE2IXBQTIZY3JZQ/children
Content-type: application/json

{
  "name": "New Item",
  "@microsoft.graph.conflictBehavior": "rename",
  "extensions": [
    {
      "extensionName": "myCustomExtension",
      "myCustomString": "Contoso data",
      "myCustomBool": false
    }
  ]
}

Resposta 7

O exemplo seguinte mostra a resposta, incluindo as propriedades do novo driveItem e o seguinte para a nova extensão:

  • A propriedade ID com o nome completamente qualificado.
  • A propriedade padrão extensionName especificada na solicitação.
  • Os dados personalizados especificados no pedido armazenados como duas propriedades personalizadas.

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

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

{
  "id": "ACEA49D1-1444-45A9-A1CB-68B1B28AE491",
  "createdDateTime": "2022-08-30T22:55:29Z",
  "name": "New Folder",
  "extensions": [
    {
      "id": "myCustomExtension",
      "extensionName": "myCustomExtension",
      "myCustomString": "Contoso data",
      "myCustomBool": false
    }
  ]
}

Pedido 8

O exemplo seguinte mostra como criar uma extensão aberta num site existente.

POST https://graph.microsoft.com/beta/sites/8f52f9ad-4f4f-4739-b682-7c0283207937/extensions

{
  "extensionName": "myCustomExtension",
  "myCustomString": "Contoso data",
  "myCustomBool": false
}

Resposta 8

O exemplo seguinte mostra a resposta, incluindo as propriedades da nova extensão:

  • A propriedade ID com o nome completamente qualificado.
  • A propriedade padrão extensionName especificada na solicitação.
  • Os dados personalizados especificados no pedido armazenados como duas propriedades personalizadas.

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

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

{
  "id": "myCustomExtension",
  "extensionName": "myCustomExtension",
  "myCustomString": "Contoso data",
  "myCustomBool": false
}