Créer une extension ouverteCreate open extension

Créez une extension d’ouverture (objet openTypeExtension) et ajoutez des propriétés personnalisées dans une instance nouvelle ou existante d’une ressource.Create an open extension (openTypeExtension object) and add custom properties in a new or existing instance of a resource.

Remarque : si vous créez des extensions ouvertes sur ressources Outlook, voirconsidérations relatives à Outlook spécifiques dans type de ressource openTypeExtension.Note: If you're creating open extensions on Outlook resources, see Outlook-specific considerations in openTypeExtension resource type.

AutorisationsPermissions

En fonction de la ressource que vous créez l’extension dans et l’autorisation de type (délégué ou application) demandé, l’autorisation spécifiée dans le tableau suivant est moins requise privilégiée pour appeler cette API.Depending on the resource you're creating the extension in and the permission type (delegated or application) requested, the permission specified in the following table is the least privileged required to call this API. Pour plus d’informations, notamment sur la façon de choisir les autorisations, voir Autorisations.To learn more, including how to choose permissions, see Permissions.

Ressource prise en chargeSupported resource Déléguée (compte professionnel ou scolaire)Delegated (work or school account) Déléguée (compte Microsoft personnel)Delegated (personal Microsoft account) ApplicationApplication
appareildevice Directory.AccessAsUser.AllDirectory.AccessAsUser.All Non pris en chargeNot supported Device.ReadWrite.AllDevice.ReadWrite.All
eventevent Calendars.ReadWriteCalendars.ReadWrite Calendars.ReadWriteCalendars.ReadWrite Calendars.ReadWriteCalendars.ReadWrite
groupgroup Group.ReadWrite.AllGroup.ReadWrite.All Non pris en chargeNot supported Group.ReadWrite.AllGroup.ReadWrite.All
group eventgroup event Group.ReadWrite.AllGroup.ReadWrite.All Non pris en chargeNot supported Non pris en chargeNot supported
group postgroup post Group.ReadWrite.AllGroup.ReadWrite.All Non pris en chargeNot supported Group.ReadWrite.AllGroup.ReadWrite.All
messagemessage Mail.ReadWriteMail.ReadWrite Mail.ReadWriteMail.ReadWrite Mail.ReadWriteMail.ReadWrite
organizationorganization Directory.AccessAsUser.AllDirectory.AccessAsUser.All Non pris en chargeNot supported Non pris en chargeNot supported
personal contactpersonal contact Contacts.ReadWriteContacts.ReadWrite Contacts.ReadWriteContacts.ReadWrite Contacts.ReadWriteContacts.ReadWrite
utilisateuruser User.ReadWrite.AllUser.ReadWrite.All User.ReadWriteUser.ReadWrite User.ReadWrite.AllUser.ReadWrite.All

Requête HTTPHTTP request

Créer une extension dans une nouvelle instance de la ressourceCreate an extension in a new resource instance

Utilisez la même requête REST qui vous permet de créer l’instance.Use the same REST request that you use to create the instance.

POST /users/{id|userPrincipalName}/events
POST /users/{id|userPrincipalName}/messages
POST /groups/{id}/events
POST /groups/{id}/threads/{id}/posts/{id}/reply
POST /users/{id|userPrincipalName}/contacts

Remarque: La syntaxe ci-dessus présente quelques techniques courantes pour créer les instances de ressource prises en charge.Note: This syntax shows some common ways to create the supported resource instances. Toutes les autres syntaxes POST qui vous permettent de créer ces instances de ressource prennent en charge la création des extensions d’ouverture dans celles-ci de façon similaire.All other POST syntaxes that allows you to create these resource instances supports creating open extensions in them in a similar way.

Reportez-vous à la section Corps de la demande concernant l’inclusion des propriétés de la nouvelle instance de la ressource et de l’extension dans le corps de la demande.See the Request body section about including the properties of the new resource instance and the extension in the request body.

Créer une extension dans une instance de la ressource existantsCreate an extension in an existing resource instance

Identifiez l’instance de la ressource dans la demande et effectuez unePOST sur la propriété de navigation extensions.Identify the resource instance in the request and do a POST to the extensions navigation property.

POST /devices/{id}/extensions
POST /users/{id|userPrincipalName}/events/{id}/extensions
POST /groups/{id}/extensions
POST /groups/{id}/events/{id}/extensions
POST /groups/{id}/threads/{id}/posts/{id}/extensions
POST /users/{id|userPrincipalName}/messages/{id}/extensions
POST /organization/{id}/extensions
POST /users/{id|userPrincipalName}/contacts/{id}/extensions
POST /users/{id|userPrincipalName}/extensions

Remarque: La syntaxe ci-dessus présente quelques techniques courantes d’identification d’une instance de ressource, afin de créer une extension dans celle-ci.Note: This syntax shows some common ways to identify a resource instance, in order to create an extension in it. Toutes les autres syntaxes qui vous permettent d’identifier ces instances de ressource prennent en charge la création des extensions d’ouverture dans celles-ci de façon similaire.All other syntaxes that allows you to identify these resource instances supports creating open extensions in them in a similar way.

Reportez-vous à la section Corps de la demande concernant l’inclusion de l’extension dans le corps de la demande.See the Request body section about including the extension in the request body.

Paramètres du chemin d’accèsPath parameters

ParamètreParameter TypeType DescriptionDescription
idid stringstring Identificateur unique pour un objet dans la collection correspondante. Obligatoire.A unique identifier for an object in the corresponding collection. Required.

En-têtes de demandeRequest headers

NomName ValeurValue
AutorisationAuthorization Porteur {token}. Obligatoire.Bearer {token}. Required.
Content-TypeContent-Type application/jsonapplication/json

Corps de la demandeRequest body

Fournissez un corps JSON d’un objet openTypeExtension, avec les paires nom-valeur requises suivantes et toutes les données personnalisées supplémentaires. Les données de la charge utile JSON peuvent être des types primitifs ou des tableaux de types primitifs.Provide a JSON body of an openTypeExtension, with the following required name-value pairs, and any additional custom data. The data in the JSON payload can be primitive types, or arrays of primitive types.

NomName ValeurValue
@odata.type@odata.type microsoft.graph.openTypeExtensionmicrosoft.graph.openTypeExtension
extensionNameextensionName % unique_string %%unique_string%

Lorsque vous créez une extension dans une nouvelle instance de la ressource, outre le nouvel objet openTypeExtension, fournissez une représentation JSON des propriétés applicables pour créer cette instance de la ressource.When creating an extension in a new resource instance, in addition to the new openTypeExtension object, provide a JSON representation of the relevant properties to create such a resource instance.

RéponseResponse

Code de réponseResponse code

En fonction de l’opération, le code de réponse peut être 201 Created ou 202 Accepted.Depending on the operation, the response code can be 201 Created or 202 Accepted.

Lorsque vous créez une extension à l’aide de la même opération qui vous permet de créer une instance de la ressource, l’opération renvoie le même code réponse qu’elle renvoie lorsque vous utilisez l’opération pour créer l’instance de la ressource sans l’extension.When you create an extension using the same operation that you use to create a resource instance, the operation returns the same response code that it returns when you use the operation to create the resource instance without the extension. Consultez les rubriques relatives à la création de l’instance, comme indiqué ci-dessus.Refer to the corresponding topics for creating the instance, as listed above.

Corps de la réponseResponse body

ScénarioScenario RessourceResource Corps de la réponseResponse body
Création d’une extension lors de la création explicite d’une nouvelle instance de la ressourceCreating an extension while explicitly creating a new resource instance contact, event, messagecontact, event, message Inclut la nouvelle instance développée avec l’objet openTypeExtension.Includes the new instance expanded with the openTypeExtension object.
Création d’une extension lors de la création implicite d’une instance de la ressourceCreating an extension while implicitly creating a resource instance postpost La réponse inclut uniquement un code de réponse, et n’a pas de corps.The response includes only a response code but not a response body.
Création d’une extension dans une instance de la ressource existanteCreating an extension in an existing resource instance Toutes les ressources prises en chargeAll supported resources Inclut l’objet openTypeExtension.Includes the openTypeExtension object.

ExempleExample

Demande 1Request 1

Le premier exemple crée un message et une extension dans le même appel. Le corps de la demande inclut les éléments suivants :The first example creates a message and an extension in the same call. The request body includes the following:

  • Les propriétés subject, body et toRecipients par défaut d’un nouveau message.The subject, body, and toRecipients properties typical of a new message.

  • Pour l’extension :And for the extension:

    • Le type microsoft.graph.openTypeExtension.The type microsoft.graph.openTypeExtension.
    • Le nom de l’extension « Com.Contoso.Referral ».The extension name "Com.Contoso.Referral".
    • Les données supplémentaires à stocker sous la forme de trois propriétés personnalisées dans la charge utile JSON : companyName, expirationDate et dealValue.Additional data to be stored as three custom properties in the JSON payload: companyName, expirationDate, and dealValue.
POST https://graph.microsoft.com/v1.0/me/messages

{
  "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
    }
  ]
}

Réponse 1Response 1

Voici la réponse pour le premier exemple. Le corps de la réponse inclut les propriétés du nouveau message et les informations suivantes sur la nouvelle extension :Here is the response for the first example. The response body includes properties of the new message, and the following for the new extension:

  • La propriété id avec le nom complet de microsoft.graph.openTypeExtension.Com.Contoso.Referral.The id property with the fully qualified name of microsoft.graph.openTypeExtension.Com.Contoso.Referral.
  • La propriété par défaut extensionName spécifiée dans la demande.The default property extensionName specified in the request.
  • Les données personnalisées spécifiées dans la demande stockée sous la forme de 3 propriétés personnalisées.The custom data specified in the request stored as 3 custom properties.

Remarque : l’objet de la réponse illustré ici peut être tronqué à des fins de concision. Toutes les propriétés sont renvoyées à partir d’un appel réel.Note: The response object shown here may be truncated for brevity. All of the properties will be returned from an actual call.

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

{
  "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#Me/messages/$entity",
  "@odata.id": "https://graph.microsoft.com/v1.0/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.context": "https://graph.microsoft.com/v1.0/$metadata#Me/messages
('AAMkAGEbs88AAB84uLuAAA%3D')/extensions",
  "extensions": [
    {
      "@odata.type": "#microsoft.graph.openTypeExtension",
      "@odata.id": "https://graph.microsoft.com/v1.0/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
    }
  ]
}

Demande 2Request 2

Le deuxième exemple crée une extension dans le message spécifié. Le corps de la demande inclut les informations suivantes sur l’extension :The second example creates an extension in the specified message. The request body includes the following for the extension:

  • Le type microsoft.graph.openTypeExtension.The type microsoft.graph.openTypeExtension.
  • Le nom de l’extension « Com.Contoso.Referral ».The extension name "Com.Contoso.Referral".
  • Les données supplémentaires à stocker sous la forme de 3 propriétés personnalisées dans la charge utile JSON : companyName, dealValue et expirationDate.Additional data to be stored as 3 custom properties in the JSON payload: companyName, dealValue, and expirationDate.
POST https://graph.microsoft.com/v1.0/me/messages/AAMkAGE1M2IyNGNmLTI5MTktNDUyZi1iOTVl===/extensions

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

Réponse 2Response 2

Voici la réponse pour le deuxième exemple. Le corps de la réponse inclut les informations suivantes sur la nouvelle extension :Here is the response for the second example. The response body includes the following for the new extension:

  • La propriété par défaut extensionName.The default property extensionName.
  • La propriété id avec le nom complet de microsoft.graph.openTypeExtension.Com.Contoso.Referral.The id property with the fully qualified name of microsoft.graph.openTypeExtension.Com.Contoso.Referral.
  • Les données personnalisées à stocker.The custom data to be stored.
HTTP/1.1 201 Created
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#Me/messages('AAMkAGE1M2IyNGNmLTI5MTktNDUyZi1iOTVl===')/extensions/$entity",
    "@odata.type": "#microsoft.graph.openTypeExtension",
    "@odata.id": "https://graph.microsoft.com/v1.0/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"
}

Demande 3Request 3

Le troisième exemple crée une extension dans l’événement de groupe spécifié. Le corps de la demande inclut les informations suivantes sur l’extension :The third example creates an extension in the specified group event. The request body includes the following for the extension:

  • Le type microsoft.graph.openTypeExtension.The type microsoft.graph.openTypeExtension.
  • Le nom de l’extension « Com.Contoso.Deal ».The extension name "Com.Contoso.Deal".
  • Les données supplémentaires à stocker sous la forme de 3 propriétés personnalisées dans la charge utile JSON : companyName, dealValue et expirationDate.Additional data to be stored as 3 custom properties in the JSON payload: companyName, dealValue, and expirationDate.
POST https://graph.microsoft.com/v1.0/groups/f5480dfd-7d77-4d0b-ba2e-3391953cc74a/events/AAMkADVl17IsAAA=/extensions

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

Réponse 3Response 3

Voici la réponse pour la troisième demande.Here is the response from the third example request.

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

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$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"
}

Demande 4Request 4

Le quatrième exemple crée une extension dans un nouveau billet de groupe, à l’aide de la même action reply d’un billet de groupe existant. L’action reply crée un nouveau billet, et une nouvelle extension incorporée dans le billet. Le corps de la demande inclut la propriété post, qui à son tour contient le corps du nouveau billet, ainsi que les informations suivantes sur la nouvelle extension :The fourth example creates an extension in a new group post, using the same reply action call to an existing group post. The reply action creates a new post, and a new extension embedded in the post. The request body includes a post property, which in turn contains the body of the new post, and the following data for the new extension:

  • Le type microsoft.graph.openTypeExtension.The type microsoft.graph.openTypeExtension.
  • Le nom de l’extension « Com.Contoso.HR ».The extension name "Com.Contoso.HR".
  • Les données supplémentaires à stocker sous la forme de 3 propriétés personnalisées dans la charge utile JSON : companyName, expirationDate et le tableau de chaînes topPicks.Additional data to be stored as 3 custom properties in the JSON payload: companyName, expirationDate, and the array of strings topPicks.
POST https://graph.microsoft.com/v1.0/groups/37df2ff0-0de0-4c33-8aee-75289364aef6/threads/AAQkADJizZJpEWwqDHsEpV_KA==/posts/AAMkADJiUg96QZUkA-ICwMubAAC1heiSAAA=/reply

{
  "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"
      ]
    }
  ]
  }
}

Réponse 4Response 4

Voici la réponse pour le quatrième exemple. La création réussie d’une extension dans un nouveau billet de groupe génère uniquement le code de réponse HTTP 202.Here is the response from the fourth example. Successfully creating an extension in a new group post results in only the HTTP 202 response code.

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

Demande 5Request 5

Le cinquième exemple crée une extension dans un nouveau billet de groupe à l’aide de la même opération POST pour créer une conversation. L’opération POST crée une nouvelle conversation, un nouveau thread, un nouveau billet, et une nouvelle extension incorporée dans le billet. Le corps de la demande inclut les propriétés Topic et Threads, et un objet enfant post pour la nouvelle conversation. L’objet post contient à son tour le corps du nouveau billet et les informations suivantes sur l’extension :The fifth example creates an extension in a new group post using the same POST operation to create a conversation. The POST operation creates a new conversation, thread and post, and a new extension embedded in the post. The request body includes the Topic and Threads properties, and a child post object for the new conversation. The post object in turn contains the body of the new post, and the following data for the extension:

  • Le type microsoft.graph.openTypeExtension.The type microsoft.graph.openTypeExtension.
  • Le nom de l’extension « Com.Contoso.HR ».The extension name "Com.Contoso.HR".
  • Les données supplémentaires à stocker sous la forme de 3 propriétés personnalisées dans la charge utile JSON : companyName, expirationDate et le tableau de chaînes topPicks.Additional data to be stored as 3 custom properties in the JSON payload: companyName, expirationDate, and the array of strings topPicks.
POST https://graph.microsoft.com/v1.0/groups/37df2ff0-0de0-4c33-8aee-75289364aef6/conversations

{
  "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"
              ]
            }
          ]
        }
      ]
    }
  ]
}

Réponse 5Response 5

Voici la réponse pour le cinquième exemple qui contient la nouvelle conversation et l’ID d’un thread. Ce nouveau thread contient un billet créé automatiquement, qui contient à son tour la nouvelle extension.Here is the response from the fifth example which contains the new conversation and a thread ID. This new thread contains an automatically created post, which in turn contains the new extension.

Remarque : l’objet de la réponse illustré ici peut être tronqué à des fins de concision. Toutes les propriétés sont renvoyées à partir d’un appel réel.Note: The response object shown here may be truncated for brevity. All of the properties will be returned from an actual call.

Pour obtenir la nouvelle extension, vous devez d’abord obtenir tous les billets de ce thread. Au moins un billet doit se trouver dans ce thread. Appliquez ensuite l’ID du billet et le nom de l’extension Com.Contoso.Benefits pour obtenir l’extension.To get the new extension, first get all the posts in this thread, and initially there should be only one. Then apply the post ID and the extension name Com.Contoso.Benefits to get the extension.

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

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