

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Connexion à Zoho CRM
<a name="connecting-to-data-zoho-crm"></a>

Zoho CRM fait office de référentiel unique pour regrouper les activités de vente, de marketing et de support client, et rationaliser les processus, les politiques et les personnes dans une seule plateforme. Zoho CRM peut être facilement personnalisé pour répondre aux besoins spécifiques des entreprises de tout type et de toute taille.

La plateforme de développement de Zoho CRM offre la bonne combinaison d'outils low-code et pro-code pour automatiser le travail, intégrer les données businesses/enterprises au sein de l'entreprise et créer des solutions personnalisées pour le Web et le mobile.

**Topics**
+ [AWS Glue support pour Zoho CRM](zoho-crm-support.md)
+ [Politiques contenant les opérations API pour la création et l’utilisation des connexions](zoho-crm-configuring-iam-permissions.md)
+ [Configuration de Zoho CRM](zoho-crm-configuring.md)
+ [Configuration de connexions Zoho CRM](zoho-crm-configuring-connections.md)
+ [Lecture depuis les entités Zoho CRM](zoho-crm-reading-from-entities.md)
+ [Options de connexion Zoho CRM](zoho-crm-connection-options.md)
+ [Restrictions et remarques relatives au connecteur Zoho CRM](zoho-crm-connector-limitations.md)

# AWS Glue support pour Zoho CRM
<a name="zoho-crm-support"></a>

AWS Glue prend en charge Zoho CRM comme suit :

**Prise en charge en tant que source ?**  
Oui : synchrone et asynchrone. Vous pouvez utiliser les tâches AWS Glue ETL pour interroger les données de Zoho CRM.

**Prise en charge en tant que cible ?**  
Non.

**Versions d’API Zoho CRM prises en charge**  
Les versions d’API Zoho CRM suivantes sont prises en charge :
+ v7

# Politiques contenant les opérations API pour la création et l’utilisation des connexions
<a name="zoho-crm-configuring-iam-permissions"></a>

L'exemple de politique suivant décrit les autorisations AWS IAM requises pour créer et utiliser des connexions. Si vous créez un rôle, créez une politique contenant les éléments suivants :

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

Si vous ne voulez pas utiliser la méthode ci-dessus, vous pouvez également utiliser les politiques IAM gérées suivantes :
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole)— Accorde l'accès aux ressources dont AWS Glue les différents processus ont besoin pour s'exécuter en votre nom. Ces ressources incluent AWS Glue Amazon S3, IAM, CloudWatch Logs et Amazon EC2. Si vous suivez la convention de dénomination des ressources spécifiée dans cette politique, AWS Glue les processus disposent des autorisations requises. Cette politique est généralement attachée aux rôles spécifiés lorsque vous définissez les crawlers, les tâches et les points de terminaison de développement.
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess)— Accorde un accès complet aux AWS Glue ressources lorsqu'une identité à laquelle la politique est attachée utilise la console AWS de gestion. Si vous suivez la convention de dénomination pour les ressources spécifiées dans la politique, les utilisateurs bénéficient des capacités totales de la console. Cette politique s'applique généralement aux utilisateurs de la AWS Glue console.

# Configuration de Zoho CRM
<a name="zoho-crm-configuring"></a>

Avant de pouvoir AWS Glue transférer des données depuis Zoho CRM, vous devez répondre aux exigences suivantes :

## Configuration requise
<a name="zoho-crm-configuring-min-requirements"></a>

Les exigences minimales sont les suivantes :
+ Vous possédez un compte Zoho CRM.
+ Votre compte Zoho CRM est activé pour accéder à l’API.
+ Vous avez un client d'API enregistré dans la console API pour obtenir des OAuth informations d'identification.

# Configuration de connexions Zoho CRM
<a name="zoho-crm-configuring-connections"></a>

Le type de subvention détermine le mode AWS Glue de communication avec Zoho CRM pour demander l'accès à vos données. Votre choix influe sur les exigences que vous devez respecter avant de créer la connexion. Zoho CRM prend uniquement en charge le type de subvention AUTHORIZATION\$1CODE pour la version 2.0. OAuth 
+ Ce type de subvention est considéré comme « à trois étapes » OAuth car il repose sur la redirection des utilisateurs vers un serveur d'autorisation tiers pour authentifier l'utilisateur. Il est utilisé lors de la création de connexions via la AWS Glue console. La AWS Glue console redirige l'utilisateur vers Zoho CRM où il doit se connecter et accorder à Glue les autorisations demandées pour accéder à son instance Zoho CRM.
+ Les utilisateurs peuvent toujours choisir de créer leur propre application connectée dans Zoho CRM et de fournir leur propre identifiant client, URL d'authentification, URL de jeton et URL d'instance lors de la création de connexions via la AWS Glue console. Dans ce scénario, ils seront toujours redirigés vers Zoho CRM pour se connecter et autoriser l'accès AWS Glue à leurs ressources.
+ Ce type d’autorisation donne lieu à un jeton d’actualisation et à un jeton d’accès. Le jeton d’accès restera valide pendant une heure et pourra être actualisé automatiquement sans interaction de l’utilisateur à l’aide du jeton d’actualisation.
+ Pour consulter la documentation publique de Zoho CRM sur la création d'une application connectée pour le OAuth flux de code d'autorisation, consultez [Authentification](https://www.zoho.com/crm/developer/docs/api/v7/oauth-overview.html).

Pour configurer une connexion Zoho CRM :

1. Dans AWS Glue Glue Studio, créez une connexion sous **Data Connections** en suivant les étapes ci-dessous :

   1. Lorsque vous sélectionnez un **type de connexion**, sélectionnez Zoho CRM.

   1. Indiquez l’`INSTANCE_URL` de l’instance Zoho CRM à laquelle vous souhaitez vous connecter.

   1. Indiquez l’ID client de l’application du client utilisateur.

   1. Sélectionnez l’**URL d’authentification** appropriée dans le menu déroulant.

   1. Sélectionnez l’**URL du jeton** appropriée dans le menu déroulant.

   1. Sélectionnez le rôle AWS IAM qui AWS Glue peut assumer et dispose des autorisations nécessaires pour les actions suivantes :

------
#### [ JSON ]

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. Sélectionnez celui `secretName` que vous souhaitez utiliser pour cette connexion AWS Glue afin d'y placer les jetons.

   1. Sélectionnez les options réseau si vous souhaitez utiliser votre réseau.

1. Accordez au rôle IAM associé à votre AWS Glue travail l'autorisation de lire`secretName`.

1. Dans la configuration de votre AWS Glue tâche, fournissez `connectionName` une **connexion réseau supplémentaire**.

# Lecture depuis les entités Zoho CRM
<a name="zoho-crm-reading-from-entities"></a>

**Prérequis**

Objets Zoho CRM à partir desquels vous souhaitez lire. Vous aurez besoin du nom de l’objet.

**Entités prises en charge pour la source de synchronisation** :


| Entité | Peut être filtré | Limit prise en charge | Order by prise en charge | Select prise en charge\$1 | Partitionnement pris en charge | 
| --- | --- | --- | --- | --- | --- | 
| Produit (langue française non garantie) | Oui | Oui | Oui | Oui | Oui | 
| Quote | Oui | Oui | Oui | Oui | Oui | 
| Bon de commande | Oui | Oui | Oui | Oui | Oui | 
| Solution | Oui | Oui | Oui | Oui | Oui | 
| Appelez | Oui | Oui | Oui | Oui | Oui | 
| Sous-tâche | Oui | Oui | Oui | Oui | Oui | 
| Événement | Oui | Oui | Oui | Oui | Oui | 
| Invoice | Oui | Oui | Oui | Oui | Oui | 
| Compte | Oui | Oui | Oui | Oui | Oui | 
| Contact | Oui | Oui | Oui | Oui | Oui | 
| Vendor | Oui | Oui | Oui | Oui | Oui | 
| Campaign | Oui | Oui | Oui | Oui | Oui | 
| Deal | Oui | Oui | Oui | Oui | Oui | 
| Lead | Oui | Oui | Oui | Oui | Oui | 
| Custom Module | Oui | Oui | Oui | Oui | Oui | 
| Sales Order | Oui | Oui | Oui | Oui | Oui | 
| Price Books | Oui | Oui | Oui | Oui | Oui | 
| Cas | Oui | Oui | Oui | Oui | Oui | 

**Exemple :**

```
zoho_read = glueContext.create_dynamic_frame.from_options(
    connection_type="ZOHO",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "API_VERSION": "v7",
        "INSTANCE_URL": "https://www.zohoapis.in/"
    }
```

**Entités prises en charge pour la source asynchrone** :


| Entité | Peut être filtré | Limit prise en charge | Order by prise en charge | Select prise en charge\$1 | Partitionnement pris en charge | 
| --- | --- | --- | --- | --- | --- | 
| Produit (langue française non garantie) | Oui | Non | Non | Oui | Non | 
| Quote | Oui | Non | Non | Oui | Non | 
| Bon de commande | Oui | Non | Non | Oui | Non | 
| Solution | Oui | Non | Non | Oui | Non | 
| Appelez | Oui | Non | Non | Oui | Non | 
| Sous-tâche | Oui | Non | Non | Oui | Non | 
| Événement | Oui | Non | Non | Oui | Non | 
| Invoice | Oui | Non | Non | Oui | Non | 
| Compte | Oui | Non | Non | Oui | Non | 
| Contact | Oui | Non | Non | Oui | Non | 
| Vendor | Oui | Non | Non | Oui | Non | 
| Campaign | Oui | Non | Non | Oui | Non | 
| Deal | Oui | Non | Non | Oui | Non | 
| Lead | Oui | Non | Non | Oui | Non | 
| Custom Module | Oui | Non | Non | Oui | Non | 
| Sales Order | Oui | Non | Non | Oui | Non | 
| Price Books | Oui | Non | Non | Oui | Non | 
| Cas | Oui | Non | Non | Oui | Non | 

**Exemple :**

```
zoho_read = glueContext.create_dynamic_frame.from_options(
    connection_type="ZOHO",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "API_VERSION": "v7",
        "INSTANCE_URL": "https://www.zohoapis.in/",
        "TRANSFER_MODE": "ASYNC"
    }
```

**Détails du champ Zoho CRM** :

Zoho CRM fournit des points de terminaison permettant de récupérer les métadonnées de manière dynamique pour les entités prises en charge. Par conséquent, la prise en charge des opérateurs est capturée au niveau du type de données.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/zoho-crm-reading-from-entities.html)

## Requêtes de partitionnement
<a name="zoho-crm-reading-partitioning-queries"></a>

Le partitionnement n’est pas pris en charge en mode asynchrone.

**Partitionnement basé sur des filtres (mode de synchronisation)** :

Vous pouvez indiquer les options Spark supplémentaires `PARTITION_FIELD`, `LOWER_BOUND`, `UPPER_BOUND` et `NUM_PARTITIONS` si vous souhaitez utiliser la simultanéité dans Spark. Avec ces paramètres, la requête d’origine serait divisée en `NUM_PARTITIONS` nombres de sous-requêtes pouvant être exécutées simultanément par les tâches Spark.
+ `PARTITION_FIELD` : le nom du champ à utiliser pour partitionner la requête.
+ `LOWER_BOUND` : une valeur limite inférieure **inclusive** du champ de partition choisi.

  Pour le champ Datetime, nous acceptons le format d’horodatage Spark utilisé dans les requêtes SQL Spark.

  Exemples de valeurs valides :

  ```
  "2024-09-30T01:01:01.000Z"
  ```
+ `UPPER_BOUND` : une valeur limite supérieure **exclusive** du champ de partition choisi.
+ `NUM_PARTITIONS` : le nombre de partitions.

Exemple :

```
zoho_read = glueContext.create_dynamic_frame.from_options(
    connection_type="zohocrm",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "API_VERSION": "v7",
        "PARTITION_FIELD": "Created_Time"
        "LOWER_BOUND": "2022-01-01T01:01:01.000Z"
        "UPPER_BOUND": "2024-01-01T01:01:01.000Z"
        "NUM_PARTITIONS": "10"
    }
```

# Options de connexion Zoho CRM
<a name="zoho-crm-connection-options"></a>

Les options de connexion pour Zoho CRM sont les suivantes :
+ `ENTITY_NAME`(Chaîne) - (Obligatoire) Utilisé pour la lecture. Le nom de votre objet dans Zoho CRM.
+ `API_VERSION`(Chaîne) - (Obligatoire) Utilisé pour la lecture. Version d’API Rest Zoho CRM que vous souhaitez utiliser.
+ `SELECTED_FIELDS`(Liste<Chaîne>) - Par défaut : vide (SELECT \$1). Utilisé pour la lecture. Colonnes que vous souhaitez sélectionner pour l’objet.
+ `FILTER_PREDICATE`(Chaîne) - Par défaut : vide. Utilisé pour la lecture. Doit être au format SQL Spark.
+ `QUERY`(Chaîne) - Par défaut : vide. Utilisé pour la lecture. Requête Spark SQL complète.
+ `PARTITION_FIELD`(Chaîne) - Utilisé pour la lecture. Champ à utiliser pour partitionner la requête.
+ `LOWER_BOUND`(Chaîne) - Utilisé pour la lecture. Une valeur limite inférieure inclusive du champ de partition choisi.
+ `UPPER_BOUND`(Chaîne) - Utilisé pour la lecture. Une valeur limite supérieure exclusive du champ de partition choisi.
+ `NUM_PARTITIONS`(Entier) - Par défaut : 1. Utilisé pour la lecture. Nombre de partitions pour la lecture.
+ `INSTANCE_URL`(Chaîne) - (Obligatoire) Utilisé pour la lecture. URL d’instance Zoho CRM valide.
+ `TRANSFER_MODE`(Chaîne) - Utilisé pour indiquer si la requête doit être exécutée en mode asynchrone.

# Restrictions et remarques relatives au connecteur Zoho CRM
<a name="zoho-crm-connector-limitations"></a>

Voici les restrictions ou les remarques relatives au connecteur Zoho CRM :
+ Avec la version 7 de l’API, vous pouvez récupérer un maximum de 100 000 enregistrements. Consultez la [documentation Zoho](https://www.zoho.com/crm/developer/docs/api/v7/get-records.html).
+ Pour l’entité Event, l’étiquette « Meeting » s’affiche comme indiqué dans la [documentation Zoho](https://www.zoho.com/crm/developer/docs/api/v7/modules-api.html).
+ Pour la fonctionnalité Tout sélectionner :
  + Vous pouvez récupérer un maximum de 50 champs depuis SaaS pour les appels GET et POST.
  + Si vous souhaitez avoir des données pour un champ spécifique qui n’appartient pas aux 50 premiers champs, vous devez indiquer manuellement la liste des champs sélectionnés.
  + Si plus de 50 champs sont sélectionnés, tous les champs au-delà des 50 champs seront rognés et contiendront des données nulles dans Amazon S3. 
  + Dans le cas d’une expression de filtre, si la liste de 50 champs fournie par l’utilisateur n’inclut pas les champs « id » et « Created\$1Time », une exception personnalisée sera déclenchée pour inviter l’utilisateur à les inclure.
+ Les opérateurs de filtre peuvent être différents field-to-field même s'ils ont le même type de données. Par conséquent, vous devez spécifier manuellement un opérateur différent pour chaque champ qui déclenche une erreur dans la plateforme SaaS. 
+ Pour la fonctionnalité Trier par :
  + Les données ne peuvent être triées que selon un seul champ sans expression de filtre, tandis que les données peuvent être triées selon plusieurs champs lorsqu’une expression de filtre est appliquée.
  + Si aucun ordre de tri n’est spécifié pour le champ sélectionné, les données seront extraites par ordre croissant par défaut. 
+ Les régions prises en charge par le connecteur Zoho CRM sont les États-Unis, l’Europe, l’Inde, l’Australie et le Japon.
+ [Restrictions](https://www.zoho.com/crm/developer/docs/api/v7/bulk-read/limitations.html) de la fonctionnalité de lecture asynchrone :
  + Limit, Order by et le partitionnement ne sont pas pris en charge en mode asynchrone. 
  + En mode asynchrone, nous pouvons transférer jusqu’à 500 pages de données avec 200 000 enregistrements par page.
  + Pendant un intervalle d’une minute, seules 10 demandes sont autorisées à être téléchargées. Lorsque vous dépassez la limite de téléchargement, le système renvoie une erreur HTTP 429 et suspend toutes les demandes de téléchargement pendant une minute avant que le traitement ne puisse reprendre.
  + Une fois la tâche groupée terminée, vous ne pouvez accéder au fichier téléchargeable que pendant une journée. Ensuite, vous ne pouvez plus accéder au fichier via les points de terminaison.
  + Un maximum de 200 champs de sélection peuvent être fournis via un point de terminaison. Si vous spécifiez plus de 200 champs de sélection dans un point de terminaison, le système exportera automatiquement tous les champs disponibles pour ce module.
  + Les champs externes créés dans un module ne sont pas pris en charge dans Bulk Read APIs.
  + Le tri et les clauses `Group_by` ne sont pas pris en charge via ce point de terminaison d’API.
  + Les valeurs des champs contenant des données d’intégrité sensibles ne seront récupérées que lorsque l’option **Restreindre l’accès aux données via l’API** dans les paramètres de conformité est **désactivée**. Si l’option est activée, la valeur sera **vide** dans le résultat.
  + Limites de filtrage/critères
    + Le nombre maximum de critères qu’une requête peut utiliser est de 25.
    + Le filtrage/les critères sur les champs de texte à lignes multiples ne sont pas pris en charge.