SFDX : création d’une data suite

By 12/03/2020 septembre 15th, 2020 nouslestechs
4 minutes de lecture

« Feel lonely in this org..? »

Tu es un bon, alors tu veux commencer à travailler sur des scratch orgs – et je t’y encourage. L’inconvénient de ces petites merveilles, c’est que – comme leur nom l’indique – tu commences de ZÉRO.

Tel un petit laborantin fou, tu essayes, tu perfectionnes, et tu parviens à créer cette petite fonctionnalité que le client t’a demandée (du moins, celle que tu as déchiffrée de son incantation démoniaque). Mais remplit-elle tous les cas de figures possibles et imaginables ? Même ceux auxquels tu n’oserais songer, pas même dans tes rêves les plus teintés de magie obscure ? Ce doute te ronge, et ne peut subsister : alors bien brave que tu es, tu vas au bout de tes essais ; allez Becky, on se retrousse les manches et on se crée des données pour essayer le fruit de ton génie !

 

Oui c’est interminable, et tu es au bout de ta vie. Mais tu es fier d’avoir rempli tes 1000 Accounts, Contacts, Opportunities, & autres enregistrements du mal. Quoi…?! Ta scratch org expire demain et tu ne veux pas revivre cette expérience magique de création de données ? Been there my friend… Mais attache ta tuque avec d’la broche, car il existe une solution !

Got to be real..!

 

Projet SFDXSi tu possèdes déjà un projet SFDX, ou alors si tu connais l’ami d’un ami qui lui même… possède un projet SFDX, then you’re ready to go! L’arborescence que tu visualises ici doit t’être familière – ou alors tu ne suis pas mes préceptes et je serai terriblement vexé. Mais trêve de galéjades, laisse moi te présenter tes deux nouveaux meilleurs amis :

1)   ./config/soql/query.soql

Oui Becky, tu peux enregistrer des requêtes SOQL dans des fichiers. Tout l’intérêt ici est de ne pas avoir à taper ladite query dans ton terminal. Elle te permet de visualiser plus facilement les enregistrements (et les champs) désirés ; tu peux aussi les corriger en cas d’erreur, même si – de toi à moi – on sait bien que ça n’arrive jamais. Ci après, l’exemple d’une requête avec deux jointures ; si tu parles le SQL, il s’agit de deux LEFT OUTER JOIN, pour ta culture Becky.

 

SQL deux LEFT OUTER JOIN

Il est alors possible d’exécuter la commande Salesforce CLI suivante sur ton beau terminal, Becky :SFDX CLI

2) ./config/data/

 

C’est là que tu sauvegardes tout ton labeur ! Et des essais tu vas en faire, car ne me fais pas croire que ton client n’est pas le plus visionnaire que cette Terre ait jamais porté, avec des idées révolutionnaires de MCD glané, combinant 36 recursive SObjects, avec 172 Validation Rules, etc., ayant tous pour lookup le Saint-Esprit… Dans l’arborescence ci-avant — et en se basant sur la requête précédente si tu suis bien Becky — tu trouveras 3 fichiers : 1 par objet (Account, Opportuniy & Contact) dans ./config/data/data-files/ ; les 3 mêmes contenus dans le ./config/soql/query.soql ! Watch bien l’exemple de l’un d’entre eux (sur le SObject Opportunity, ci-avant).

À noter : à aucun moment il n’est question de champ Id, mais plutôt de referenceId — c’est la clé primaire du blob. Et oui : tu es en dehors de Salesforce à ce stade !

Mais quand bien même tu as les ingrédients, il manque le liant. Cette délicieuse sauce szechuan est contenue dans le fichier ./config/data/data-import-plan.json que je vais te montrer tout de suite :

data-import-plan.json

C’est ici que la magie opère Becky ; ce plan donne plusieurs information essentielles :

a) Enregistrement séquentiel

L’ordre d’apparition des SObjects est aussi l’ordre de création. Sont récupérés les Accounts, puis les Contacts, et enfin les Opportunities.

b) sobject

Il ne s’agit là que du SObjectType. Rien de plus à ajouter.

c) saveRefs

Première règle numéro un ! Tout à l’heure tu as vu ce qu’était une clé primaire *bravo* : c’est ici qu’on l’utilise. Elle n’a pas de convention précise de nommage mais elle doit être unique à travers tous les fichiers SObject.json, c’est pourquoi je te recommande vivement de ne jamais y toucher car Salesforce CLI fait très bien le travail pour toi.

Cette valeur doit être true SI ET SEULEMENT SI cette référence est utile pour d’autres blobs. Dans mon exemple, j’ai besoin des références de comptes pour pouvoir persister plus tard des contacts et des opportunités. QED.

d) resolveRefs

Deuxième règle numéro un ! Si l’objet que tu es en train de persister fait référence à un autre enregistrement (lookup) alors Salesforce CLI doit interpréter les référence du fichier.json ; et ALORS cette valeur doit être égale à true.

Ne pars pas en courant, je t’explique ! Plus haut, le fichier Opportunity.json fait mention du champ AccountId pour ses records ; ce champ fait référence à un objet compte : @AccountRef4, que tu as besoin d’interpréter avant de pouvoir poursuivre la séquence d’import lorsqu’elle sera lancée (= true). À l’inverse, les objets de compte sont (dans mon MCD) au sommet de la chaîne alimentaire, et il n’existe pas de relation récursive entre eux (= false).

e) files

Dernière règle numéro un ! Cet attribut indique l’emplacement des fichiers SObjects.json à lire pour réaliser un import à la racine du fichier ./config/data/data-import-plan.json. Il est possible que ce soit une liste — bien que je ne te le recommande pas ; mais là où il faudra être particulièrement vigilant, c’est sur le chemin du fichier. Dans la structure que je te propose, il ne faudra pas oublier le data-files/SObject.json.

C’est le moment de vérité… Vas-y Becky, tu peux taper la commande suivante, tape Becky :

Trop forte Becky…

 

In a nutshell..!

En premier lieu, si tu es arrivé jusqu’ici : merci d’avoir supporté mon humour.

Ensuite, exploiter les commandes Salesforce CLI de data tree c’est une petite gymnastique, mais qui vaut le détour dès lors que le jeu de données commence à être volumineux. Les gens te remercieront Becky.

Point(s) –

Il y aura des ratés, c’est indéniable… Et pas de checkonly ici. Ce qui passe est effectivement créé dans Salesforce, mais pas le reste. Aussi, si tu as besoin d’avoir un jeu de données portable et propre, je te recommande d’avoir un petit script de suppression comme ici :

Ce n’est pas de l’import de données en masse (en effet, il existe une limite de 200 enregistrements par requête) : pour ça, je t’invite plutôt à jeter un coup d’œil sur Salesforce CLI : data bulk.

Point(s) +

Une fois que tu as pris le pli, c’est rapide à mettre en place et demande très peu d’efforts ! Tu peux simplement insuffler la vie dans des environnements stériles de données !

Comme tout ce que tu as produit est sous format de fichiers, l’ensemble est soumis au VCS(*).

(*) VCS : Version Control System

Référence(s)

Salesforce CLI : data commands

Article rédigé par Gabriel De Sousa, Développeur Salesforce.

Contactez-nous !

Thank you!
We got your message
We will answer in the next 24h