Automatisation des tâches dans Xactly Connect

Xactly Connect est un des modules d’Xactly. C’est dans celui-ci que nous pouvons automatiser des processus que nous gérions, auparavant, manuellement au sein d’Xactly Incent. Dans ce document, nous allons dans un premier temps présenter le fonctionnement global de ce module, puis les étapes majeures à suivre afin d’automatiser le traitement des orders, la saisie des quotas, ainsi que le remplissage de la partie Organization.

Bien entendu, chaque projet est différent, il faudra donc adapter ces étapes en fonction de vos besoins.

Présentation d'Xactly Connect

Le module Xactly Connect est constitué de différents onglets, que nous allons présenter un par un.

Le dashboard Xactly Connect

L'onglet Dashboard correspond à la page d’accueil du module qui, comme son nom l’indique, est un tableau de bord. Celui-ci est composé de trois boutons cliquables et de quatre pods, que nous allons brièvement décrire.

Automatisation des tâches dans Xactly Connect

Le bouton « Welcome » (en haut à droite) est composé de 4 menus :

  • "Help" permet d'être dirigé vers le portail d'aide Xactly Community où vous aurez accès à de la documentation concernant le fonctionnement d’Xactly.
  • "Tour" /strong>permet de lancer un tutoriel présentant les différents onglets de Connect.
  • "Logout" permet de se déconnecter.
  • "New Navigation" permet de passer à la nouvelle version d’Xactly. Le contenu reste le même mais l’affichage se veut plus moderne, de manière analogue à ce qui est proposé dans Xactly Incent. Voici un aperçu de ce nouvel affichage :

Automatisation des tâches dans Xactly Connect

Le bouton "Connect" permet de passer du module Connect à un autre module d’Xactly.

Le bouton "Command Editor" permet d’ouvrir une console dans laquelle nous pouvons exécuter des commandes en SQL, avec la possibilité d’ouvrir plusieurs onglets de scripts. À noter tout de même qu’Xactly a son propre langage et ne reconnaît pas toutes les commandes SQL. Ci-après, un exemple de la console après l’exécution d’une requête :

Automatisation des tâches dans Xactly Connect

En haut à droite de l’écran, le bouton "XSQL and XCL Documentation"permet d’être redirigé vers l’espace "Knowledge Base > Connect"du portail d’aide Xactly Community. Nous retrouvons également le bouton "Saved Tabs" qui permet de retrouver et ouvrir les scripts précédemment sauvegardés.

En haut à gauche de l’écran, le logo surligné en jaune permet d’afficher la liste des différents répertoires disponibles au sein d’Xactly :

Automatisation des tâches dans Xactly Connect

Nous allons nous attarder sur trois répertoires de tables, que nous utiliserons dans nos processus d’automatisation :

  • Le répertoire "delta" : Initialement, ce répertoire est vide. Il servira donc à stocker les tables créées par l’utilisateur. Nous allons, en guise d’exemple, vous expliquer comment nous procédons à titre personnel, mais rien ne vous empêche de procéder différemment.
    En règle générale, nous recevons nos données dans un fichier avec des noms de colonnes propres à chaque société/projet : c’est ce qu’on appelle des données au format source. Nous allons, dans le répertoire delta, créer une table tampon afin de stocker à l’identique les informations contenues dans ce fichier. Nous allons donc avoir une table delta.<NomFichier>_tmp avec le même nombre de lignes, le même nombre de colonnes, les mêmes noms de colonnes, les mêmes informations, etc, que le fichier reçu.
    Notre objectif est alors de manipuler ces données afin qu’elles correspondent au format attendu par Xactly : c’est ce qu’on appelle des données au format destination. Nous détaillerons ultérieurement la manière de connaître l’allure du format destination pour chaque partie traitée (orders, quotas et organization). Nous allons, dans le répertoire delta, créer une table destination afin de stocker les données au format attendu par Xactly, que nous appellerons delta.<NomFichier>_dest.
  • Le répertoire "xactly" : Ce répertoire contient une multitude de tables recensant l’ensemble des informations contenues au sein d’Xactly Incent. Ces tables sont consultables mais ne sont pas modifiables.
  • Le répertoire "staging": Ce répertoire contient de nombreuses tables, dans lesquelles nous devons insérer les informations à pousser dans Xactly Incent. Ce sont ces tables qui vont nous fournir le format destination pour les orders et l’organization (détaillé ultérieurement). Ce sont ces tables qui, en quelque sorte, forment le lien entre nos tables delta et nos tables xactly.

Le pod "Overview" donne un aperçu de l’état des différentes invocations lancées au cours d’une période donnée (dernière heure, dernières 24 heures, dernières 72 heures), et nous indique si celles-ci ont été un succès (en vert), un abandon (en orange) ou un échec (en rouge). Dans notre cas, une invocation correspond au lancement d’un programme composé d’une ou plusieurs étapes. Les éléments constituant ces programmes seront présentés dans l’onglet suivant (Assets). Un détail des invocations effectuées est obtenu en cliquant sur "View All Invocations".

Le pod "Timeline", comme le pod Overview, donne un aperçu de l’état des différentes invocations lancées au cours d’une période donnée (dernière heure, dernières 24 heures, dernières 72 heures), par date, et nous indique si celles-ci ont été un succès (en vert), un abandon (en orange) ou un échec (en rouge).

Le pod "Recent Failed Invocations" donne une liste des invocations ayant échoué au cours d’une période donnée (dernière heure, dernières 24 heures, dernières 72 heures), ainsi que la raison pour laquelle l’invocation en question a échoué. Un détail des invocations ayant échouées est obtenu en cliquant sur "View All Recent Failes Invocations".

Le pod "Current and Upcoming Schedules" donne la liste des invocations programmées à venir. Tous les schedules sont accessibles en cliquant sur "View All Schedules".

Les assets Xactly

C’est dans cet onglet que nous allons pouvoir créer et retrouver tous les objets dont nous aurons besoin. Il existe 7 types d’objets au sein de Connect, que nous allons présenter dans l’ordre qui nous semble le plus cohérent.

Les steps

Dans la pratique, et pour faire le lien avec ce qui a été dit précédemment, c’est ici que nous allons créer les étapes permettant :

  • La création de nos tables tmp et dest dans le répertoire delta
  • L’insertion dans nos tables tmp des données contenues dans les fichiers sources
  • L’insertion dans nos tables dest des données transformées au format destination à partir de nos tables tmp
  • L’insertion dans nos tables staging des données contenues dans nos tables dest
  • La suppression des données contenues dans une table tmp, dest, staging …
  • Etc.

Une fois votre step créé, il suffit de cliquer dessus pour pouvoir le supprimer (panneau sens interdit), le modifier (crayon bleu) ou l’invoquer (triangle vert). Vous obtiendrez également quelques informations sur ce step, notamment l’état de ses dernières invocations.

Automatisation des tâches dans Xactly Connect

La signification des icônes ci-dessus ainsi que les informations fournies sont également valables pour les objets suivants.

Les pipelines

Un pipeline est tout simplement une suite d’étapes. Une fois que vous avez créé tous les steps dont vous avez besoin, il suffit de créer un pipeline afin d’ordonner et d’exécuter vos différents steps les uns à la suite des autres, en cliquant sur le bouton "Add/Edit Members". Naturellement, il est possible de mettre un pipeline au sein d’un autre pipeline, car par définition, un pipeline n’est rien d’autre qu’une suite de steps. De plus, vous avez la possibilité d’ajouter dans "On Error Object" un objet à exécuter en cas d’échec du pipeline et dans "Finally Object" un objet à exécuter en cas de succès du pipeline.

Les iterators

Un iterator, comme son nom l’indique, correspond à une boucle. Vous devez, pour créer un iterator, choisir un step ou un pipeline à répéter dans "Object", mais également saisir une requête dans "Command". Cette requête renverra un certain nombre de résultats / lignes qui correspondra au nombre d’itérations qu’effectuera notre iterator.

Pour inclure un iterator dans un pipeline, il faudra alors créer un step permettant d’invoquer cet iterator à l’aide de la commande "invoke iterator".

Les Emails

C’est ici que nous allons paramétrer des emails, en précisant les destinataires du mail dans la rubrique "To", l’objet (optionnel) du mail dans la rubrique "Subject", et le corps du mail dans la rubrique "Email body". Il est également possible de directement créer un step pour paramétrer et envoyer un mail, que nous retrouverons dans cet onglet.

Les files

C’est ici que nous allons retrouver les fichiers sources que nous pouvons utiliser dans notre environnement. À noter que chaque environnement (Implement, Sandbox, Production) contient ses propres fichiers.

Les variables

C’est ici que nous pouvons définir des variables. Le principal avantage d’utiliser des variables est de construire des scripts dynamiques, en faisant changer la valeur d’une variable selon le besoin. Par exemple, si nous utilisons une date précise dans de nombreux scripts, mieux vaut stocker celle-ci dans une variable, car en cas de changement, il suffit de modifier uniquement la valeur de la variable plutôt que chacun des scripts un par un.

Les schedules

C’est ici que nous allons programmer la répétition d’un objet (step, pipeline ou iterator) de manière quotidienne, hebdomadaire, mensuelle ou annuelle, en précisant l’heure à laquelle déclencher celui-ci. Vous avez, avec le bouton "Status", le choix d’activer ou de suspendre votre schedule à n’importe quel moment. Vous avez, de manière optionnelle, la possibilité de spécifier une condition à respecter pour que votre schedule se déclenche.

Les invocations dans Xactly

Dans cet onglet, nous avons accès à différentes informations sur les invocations :

  • "Name" : le nom et le statut de l’objet invoqué (vert pour succès, orange pour abandon et rouge pour échec).
  • "Description"
  • "Created by": adresse mail de l’utilisateur ayant invoqué l’objet.
  • "Type" : type de l’objet invoqué (step, pipeline, …).
  • "Created / Modified / Completed time" : date et heure de lancement / de fin de l’invocation.
  • "State"

Vous avez la possibilité de chercher une invocation spécifique grâce à la barre de recherche, de filtrer sur le statut des invocations, et indiquer la plage sur laquelle rechercher les invocations.

Deployments

Dans cet onglet, nous avons la liste des déploiements effectués d’un environnement à un autre. En cliquant sur un déploiement, vous aurez le détail des différents objets exportés.

Dans la console "Command Editor", la liste des environnements disponibles est accessible via la commande "show deploy targets". Pour le déploiement, il faut utiliser la commande "deploy to (username=’’,password=’’)".

Audits et snapshots

L’onglet Audits permet d’accéder à la liste des actions effectuées par l’utilisateur et l’onglet Snapshot permet d’effectuer une capture des objets présents dans Xactly Connect à l’instant T.

Automatisation du traitements des orders dans Xactly Connect

Dans notre cas pratique, le client souhaitait une mise à jour quotidienne des données. Nous avons donc programmé un schedule quotidien "S_Orders » sur le pipeline « P_Orders", en fonctionnant par "annule et remplace". Libre à vous de personnaliser cette automatisation selon vos besoins. Nous allons ici lister les principales étapes à suivre pour mettre en place ce dont nous avons besoin. Pour imager ce processus, nous allons nommer le fichier fourni par le client "Ventes.csv", en partant du principe qu’il est disponible dans l’environnement sur lequel nous travaillons. Dans notre situation, le client souhaite avoir le montant du CA réalisé trimestriellement par chaque collaborateur, en fonctionnant par "annule et remplace". De plus, nous avons pris l’habitude d’écrire nos scripts sur Notepad ++ en parallèle, pour avoir un affichage plus limpide et une sauvegarde dans un autre outil.

1) Créer la table tampon : delta.ventes_tmp

Nous allons créer un step C_DELTA_VENTES_TMP dont le rôle sera de créer une table identique au fichier source, c’est-à-dire avec les mêmes variables. Ce step est à exécuter une unique fois.

Exemple :

Automatisation des tâches dans Xactly Connect

2) Remplir la table tampon à l’aide du fichier source

Nous allons créer un step I_DELTA_VENTES_TMP dont le rôle sera d’insérer les données du fichier source dans la table tampon. Pour accéder aux données d’un fichier présent dans notre environnement, nous utilisons la fonction ReadFile(). Nous ne détaillerons pas ici les paramètres de cette fonction, mais de la documentation est disponible sur le portail d’aide Xactly Community.

Exemple :

Automatisation des tâches dans Xactly Connect

3) Créer la table destination : delta.ventes_dest

Nous allons créer un step C_DELTA_VENTES_DEST dont le rôle sera de créer une table au format destination, c’est-à-dire avec les variables nécessaires au remplissage des tables staging.order_item et staging.order_item_assignment. Ce step est à exécuter une unique fois.

Exemple :

Automatisation des tâches dans Xactly Connect

Pour rappel, l’ORDER_CODE doit être unique. Nous partons du principe que les paramétrages type BatchType ont été configurés en amont dans Xactly Incent.

4) Remplir la table destination à l’aide de la table tampon

Nous allons créer un step I_DELTA_VENTES_DEST dont le rôle sera d’insérer des données au format destination à partir des données au format source contenues dans la table tampon. Nous aurions pû remplir directement les tables staging.order_item et staging.order_item_assignment avec les informations nécessaires mais nous préférons ajouter cette étape de sécurité, car nous pouvons manipuler une table delta autant que souhaité.

Exemple :

Automatisation des tâches dans Xactly Connect

5) Remplir les tables staging.order_item et staging.order_item_assignment à l’aide de la table destination

Nous allons créer deux steps dont le rôle sera d’insérer les données depuis la table destination dans les tables du répertoire staging: I_STAGING_ORDER_ITEM_ASSIGNMENT et I_STAGING_ORDER_ITEM.

Exemple :

Automatisation des tâches dans Xactly Connect

Automatisation des tâches dans Xactly Connect

6) Insérer ces données dans Xactly Incent

Comme nous fonctionnons par « annule et remplace », il faut tout d’abord créer un premier step dont le rôle sera de purger les anciens orders puis de créer un second step afin de charger les nouveaux orders présents dans les tables staging.

Exemple :

Automatisation des tâches dans Xactly Connect

Voici les étapes principales pour charger des orders dans Xactly en utilisant Xactly Connect, à adapter à votre projet. Par exemple, nous ne l’avons pas précisé, mais il faudra penser à vider nos tables delta et staging au début du pipeline, en créant des steps dont la commande sera "delete from" .

Autre exemple, nous utilisons une variable pour le nom de fichier, car cela nous servira à effectuer une itération en cas de réception de plusieurs fichiers, ou bien de permettre l’archivage de nos fichiers à la fin du pipeline.

Automatisation du remplisssage de la partie organisation

Dans cette partie, nous allons voir comment créer ou mettre à jour des Users, des versions People, Positions et Hierarchy. Pour cela, nous avons besoin d’un fichier recensant différentes informations sur les employés :

Automatisation des tâches dans Xactly Connect

Nous stockerons ces informations dans une table tampon, que nous allons nommer delta.bdd_tmp par exemple. A noter que les Business Groups, les Rôles et les Titres doivent déjà être paramétrés au sein d’Xactly Incent.

Users

Dans la partie Users, nous allons devoir remplir 3 tables staging. La première est la table staging.user, qui contient les colonnes :

  • action : prendra la valeur « save », et permettra de créer ou mettre à jour un utilisateur.
  • name : généralement le nom complet, Vincent Guitteny par exemple.
  • email_adress
  • enabled (optionnel) : booléen spécifiant l’activation (VRAI) ou non (FAUX) d’un compte. Par défaut, si rien n’est renseigné (=NULL), la valeur sera mise à FAUX.
  • login_profile : mode de connexion à l’application.
  • locale (optionnel) : sert à choisir la langue de l’application (‘French (France)’ par exemple), qui par défaut est à ‘English (United States)’.
  • ip_address (optionnel) : adresse ip depuis laquelle l’utilisateur peut accéder à Incent. Par défaut, si rien n’est renseigné (=NULL), l’utilisateur peut utiliser n’importe quelle adresse.

La seconde est la table staging.user_business_group (optionnelle), qui contient les colonnes :

  • email_adress
  • business_group

La troisième est la table staging.user_role (optionnelle), qui contient les colonnes :

  • email_adress
  • user_role

Nous allons donc créer une table delta.users_dest contenant toutes ces colonnes. A partir de la table delta.bdd_tmp, nous allons remplir la table delta.users_dest, qui servira elle à remplir les 3 tables staging. Une fois nos tables staging renseignées, nous utilisons la commande incent upload users au sein du step "UPLOAD_USERS", afin de créer ou mettre à jour nos utilisateurs au sein d’Xactly Incent.

People

Dans la partie People, nous allons devoir remplir la table staging.person qui contient les colonnes :

  • action. Prendra la valeur « create » dans le cas de la création de la première version, la valeur « add version » dans le cas de l’ajout d’une nouvelle version ou la valeur « save version » dans le cas de la modification d’une version existante.
  • employee_id (matricule)
  • effective_start_date. Date de début de la version. Ce champ restera vide pour la création de la première version.
  • description (optionnel)
  • prefix (optionnel)
  • first_name (Prénom)
  • middle_name (optionnel)
  • last_name (Nom)
  • region (optionnel)
  • employee_status (optionnel)
  • hire_date (optionnel)
  • termination_date (optionnel)
  • personal_target (Objectif personnel)
  • personal_currency (Devise)
  • salary (optionnel)
  • salary_currency (optionnel)
  • payment_currency (devise)
  • email_adress
  • business_group (optionnel)
  • Custom_fields (optionnels) : champs personnalisés paramétrés au sein d’Xactly Incent

Nous allons donc créer une table delta.people_dest contenant toutes les colonnes souhaitées. A partir de la table delta.bdd_tmp, nous allons remplir la table delta.people_dest, qui servira elle à remplir la table staging. Une fois notre table staging renseignée, nous utilisons la commande "incent upload people"au sein du step "UPLOAD_PEOPLE", afin de créer ou mettre à jour nos version People au sein d’Xactly Incent.

Dans un souci de logique, nous chargeons dans un premier temps les créations de premières versions, puis dans un second temps, les ajouts ou modifications de versions. 

Positions

Dans la partie Positions, nous allons devoir remplir la table staging.position qui contient les colonnes :

  • action. Prendra la valeur « create » dans le cas de la création de la première version, la valeur « add version » dans le cas de l’ajout d’une nouvelle version ou la valeur « save version » dans le cas de la modification d’une version existante
  • name (Position)
  • description (optionnel)
  • effective_start_date
  • incentive_start_date (optionnel)
  • incentive_end_date (optionnel)
  • business_group
  • employee_id (optionnel, Matricule)
  • title

Nous allons donc créer une table delta.position_dest contenant toutes les colonnes souhaitées. A partir de la table delta.bdd_tmp, nous allons remplir la table delta.position_dest, qui servira elle à remplir la table staging. Une fois notre table staging renseignée, nous utilisons la commande "incent upload positions" au sein du step "UPLOAD_POSITIONS", afin de créer ou mettre à jour nos version Positions au sein d’Xactly Incent.

Dans un souci de logique, nous procédons de la même manière que pour la partie People.

Hierarchy

Dans notre cas, nous possédons ce que nous pouvons qualifier de hiérarchie initiale (peu importe son contenu ici) ainsi qu’une seconde hiérarchie, contenant la hiérarchie valide à l’heure actuelle. Nous faisons le choix de procéder par "annule et remplace" : Nous supprimons la dernière version de la hiérarchie pour la remplacer par une nouvelle.

Nous allons alors devoir remplir 2 tables staging. La première est la table staging.position_hierarchy_version. Elle contient des informations sur les différentes versions de hiérarchie, mais pas sur leur contenu. Elle contient les colonnes :

  • action. Prendra la valeur « delete version » pour supprimer une version d’une hiérarchie ou la valeur « add version » pour ajouter une version à une hiérarchie
  • name (nom de la version)
  • description (optionnel).
  • effective_start_date (date de début de la version)

La seconde est la table staging.position_hierarchy. Elle contient les informations sur les relations contenues dans une version. Elle contient les colonnes :

  • action. Prendra la valeur save pour ajouter les relations à notre nouvelle version
  • version_name (à faire correspondre avec name de la table précédente)
  • position_name (Position)
  • parent_position_name (optionnel / Position N+1)

Nous allons donc créer une table delta.hierarchy_dest contenant toutes les colonnes souhaitées. A partir de la table delta.bdd_tmp, nous allons remplir la table delta.hierarchy_dest, qui servira elle à remplir les tables staging.

Dans un premier temps, nous insérons uniquement la ligne avec "delete version" dans la table staging.position_hierarchy_version afin de supprimer l’ancienne version de la hiérarchie, en utilisant la commande "incent upload hierarchy" au sein du step "UPLOAD_HIERARCHY".

Ensuite, nous insérons uniquement la ligne avec "add version" dans la table staging.position_hierarchy_version ainsi que toutes les lignes représentant les relations dans la table staging.position_hierarchy afin de créer la nouvelle version de la hiérarchie, en utilisant la commande "incent upload hierarchy" au sein du step "UPLOAD_HIERARCHY" une seconde fois.

En organisant toutes ces différentes étapes au sein d’un pipeline (sans oublier de vider les tables, ici aussi), vous pouvez rapidement charger au sein d’Xactly Incent une grande partie des informations concernant vos utilisateurs !

Automatisation de l'import des quotas dans Xactly

Dans notre cas d'uage, le client souhaitait que les objectifs du nouveau trimestre soient ajoutés dans les 15 premiers jours de celui-ci. Nous allons lister ici les principales étapes à suivre pour mettre en place ce dont nous avons besoin.

Pour imager ce processus, nous allons nommer le fichier fourni par le client "Objectifs_Ventes.csv", en partant du principe qu’il est disponible dans l’environnement sur lequel nous travaillons. Dans notre situation, le client souhaite avoir le montant de l’objectif trimestriel pour chaque collaborateur, en fonctionnant par "annule et replace". Ici, même si nous ne recevons pas ce fichier de façon quotidienne comme pour les orders, si plusieurs fichiers sont envoyés et concernent la même période, ce sont les valeurs du dernier fichier traité qui sont conservées. De même, tous nos scripts sont au préalable rédigés sur Notepad ++.

1) Créer la table tampon : delta.objectifs_tmp

Nous allons créer un step C_DELTA_OBJECTIFS_TMP dont le rôle sera de créer une table identique au fichier source, c’est-à-dire avec les mêmes variables. Ce step est à exécuter une unique fois.

Exemple :

Automatisation des tâches dans Xactly Connect

2) Remplir la table tampon à l’aide du fichier source

Nous allons créer un step I_DELTA_OBJECTIFS_TMP dont le rôle sera d’insérer les données du fichier source dans la table tampon.

Exemple :

Automatisation des tâches dans Xactly Connect

3) Créer la table destination : delta.objectifs_dest

Nous allons créer un step C_DELTA_OBJECTIFS_DEST dont le rôle sera de créer une table au format destination. Contrairement aux orders ou à la partie Organization, le format n’est pas défini par des tables de staging. Ici, nous devons respecter le format d’un fichier csv, que nous allons créer à partir de cette table. Ce step est à exécuter une unique fois.

Exemple :

Automatisation des tâches dans Xactly Connect

4) Remplir la table destination à l’aide de la table tampon

Nous allons créer un step I_DELTA_OBJECTIFS_DEST dont le rôle sera d’insérer des données au format destination à partir des données au format source contenues dans la table tampon.

Exemple :

Automatisation des tâches dans Xactly Connect

5) Créer notre fichier csv

Nous allons créer un step F_OBJECTIFS_DEST dont le rôle sera de créer le fichier csv depuis la table destination, à l’aide de la fonction WriteFile().

Exemple :

Automatisation des tâches dans Xactly Connect

6) Charger notre fichier csv

Une fois notre fichier présent dans notre environnement, nous allons créer un step U_OBJECTIFS_DEST dont le rôle sera d’upload ce fichier de quotas, à l’aide de la fonction "incent upload file".

Exemple :

Automatisation des tâches dans Xactly Connect

Voici les principales étapes à respecter pour construire votre pipeline et insérer des quotas dans Xactly Incent. Encore une fois, il faut adapter ces étapes à votre projet (nom du quota, période concernée, assignement à un titre ou une position, etc).

Ressources utiles sur Xactly Community

• incent upload orders
• incent upload users
• incent upload people
• incent upload positions
• incent upload hierarchy
• ReadExcelFile()
• ReadFile()
• WriteFile()
• incent upload file
• à vous de compléter cette liste !

 

Vous souhaitez bénéficier d'experts, de développeurs, ou d'une formation sur Xactly ? Rendez vous sur la page Contact