Présentation

Effectué

Les connecteurs personnalisés vous permettent de mettre en place des connecteurs pour les services indisponibles dans les connecteurs préfabriqués de la Microsoft Power Platform. Les développeurs peuvent utiliser du code personnalisé pour implémenter une transformation avancée des éléments d’entrée et de sortie des actions d’un connecteur.

Une définition de connecteur personnalisé de base définit les déclencheurs et les actions disponibles pour les créateurs qui utilisent ce connecteur. Lorsqu’un créateur utilise l’action à partir d’une application ou d’un flux, l’opération de l’API est appelée en transmettant la charge utile de la requête définie dans la définition du connecteur personnalisé. La charge utile de la réponse du service doit correspondre à la définition de la réponse d’action du connecteur personnalisé. Aucune transformation de la charge utile de la requête et de la réponse n’a lieu.

Modèles de stratégie

Les définitions d’actions de connecteur permettent d’implémenter une transformation de base no-code de la requête et de la réponse au service en appliquant des modèles de stratégie de connecteur personnalisé. Par exemple, les modèles de stratégie peuvent effectuer les types de transformations suivants :

  • Convertir les données de requête ou de réponse d’un objet en tableau.

  • Convertir les données de requête ou de réponse d’un tableau en objet.

  • Définir l’URL de l’hôte pour la requête.

  • Définir des valeurs d’en-tête de requête HTTP.

  • Définir une valeur de propriété dans la requête ou la réponse.

  • Définir des paramètres de chaîne de requête.

Vous pouvez utiliser plusieurs modèles de stratégie ensemble pour transformer la requête et la réponse. Lorsque vous configurez plusieurs modèles, vous en modifiez également l’ordre pour contrôler la séquence d’application de la stratégie.

Les développeurs peuvent implémenter du code personnalisé pour aller au-delà de ce dont les modèles de stratégie sont capables. De fait, lorsque vous implémentez du code personnalisé, la logique prend le contrôle total de la transformation de la requête et de la réponse, y compris la tâche d’invocation de l’opération sur le service sous-jacent.

Implémenter du code personnalisé

Pour implémenter du code personnalisé, vous devez créer une classe nommée Script, qui doit hériter de la classe de base abstraite ScriptBase. La classe ScriptBase définit une méthode abstraite, ExecuteAsync, que vous devez mettre en œuvre dans la classe Script pour implémenter avec succès le code personnalisé dans un connecteur. La méthode ExecuteAsync doit représenter la mise en œuvre complète d’une transformation et d’un appel du service sous-jacent.

L’exemple suivant montre une classe qui implémente les éléments requis :

public class Script : ScriptBase
{
    public override Task<HttpResponseMessage> ExecuteAsync()
    {
        // Your code here
    }
}

La méthode ExecuteAsync doit fournir la mise en œuvre complète d’une transformation et d’un appel du service sous-jacent. Dans l’exemple suivant, le service sous-jacent n’est pas appelé et chaque réponse sera un objet contenant une propriété greeting définie sur « Hello World! »

public override async Task<HttpResponseMessage> ExecuteAsync()
{
    // Create a new response
    var response = new HttpResponseMessage();

    // Set the content
    // Initialize a new JObject and call .ToString() to get the serialized JSON
    response.Content = CreateJsonContent(new JObject
    {
        ["greeting"] = "Hello World!",
    }.ToString());

    return response;
}

Pour appeler le service sous-jacent, vous utiliserez la méthode SendAsync sur l’objet context. La méthode ExecAsync suivante n’effectue aucune transformation, mais transmet la requête au service sous-jacent, puis renvoie la réponse sans y toucher.

public override async Task<HttpResponseMessage> ExecuteAsync()
{
    HttpResponseMessage response = await this.Context.SendAsync(this.Context.Request, this.CancellationToken).ConfigureAwait(continueOnCapturedContext: false);
    return response;
}

L’utilisation la plus courante du code personnalisé consiste à fournir une transformation de la requête avant l’appel de la méthode SendAsync. Vous pouvez également transformer la réponse de la méthode SendAsync avant de revenir de la méthode ExecuteAsync.

Créer du code personnalisé pour les opérations

Vous pouvez activer du code personnalisé pour un connecteur, puis charger un fichier .cs ou .csx valide contenant ce code. Vous ne pouvez fournir qu’une seule classe de script pour le connecteur et celle-ci doit gérer les actions configurées pour ce connecteur. Pour cela, vérifiez l’OperationId de l’objet Context pour déterminer si vous souhaitez transformer le code ou le transférer au service sous-jacent. L’exemple suivant montre cette étape en situation.

  if (this.Context.OperationId != "CreateProduct")
  {
     return await this.HandleForwardOperation().ConfigureAwait(false);
  } 

Dans cet exemple, toute action autre que CreateProduct sera transmise sans transformation. Grâce à cette approche, si des actions inattendues sont configurées pour exécuter le code, elles sont transférées sans être transformées.

Vous pouvez également contrôler les opérations sur lesquelles le code personnalisé s’exécute en configurant celui-ci de façon à ce qu’il s’exécute pour des opérations spécifiques. Par défaut, une fois le code activé, toutes les opérations exécuteront le code personnalisé. L’image suivante montre que seuls AddInvoice et GetInvoice exécutent le code personnalisé.

Si vous recherchez ces valeurs dans un connecteur exporté, vous les trouverez stockées dans le fichier apiProperties.json.

"scriptOperations": [
      "AddInvoice”,
      "GetInvoice”
    ],

Vérifiez que votre sélection d’opérations qui exécutent le code personnalisé correspond aux attentes des vérifications conditionnelles qui figurent dans votre code. Si elles sont désynchronisées, il est courant que le code personnalisé ne s’exécute pas ou rencontre des erreurs inattendues. Si votre connecteur a rencontré des erreurs, vérifiez que la définition du connecteur et le code du script prévoient que les mêmes opérations seront traitées.

Dans le reste du module, vous découvrirez comment créer des transformations de code personnalisé implémentables avec vos connecteurs personnalisés.