
Andrew Hanna

Andrew Hanna

Reponse courte : la resolution des dependances entre packages, c'est
la facon dont Salesforce determine quels packages doivent deja etre presents, et dans
quelles versions, avant qu'un autre puisse s'installer ou se mettre a jour. Vous la
declarez dans le tableau dependencies de sfdx-project.json,
dans l'ordre d'installation. Avec le bon ordre et les bons planchers de version, les
upgrades chez les abonnes sont ennuyeux. Sinon, une org se retrouve sur une version
qu'elle ne peut plus quitter.
Il y a dependance des que des metadonnees d'un package referencent celles d'un autre : un Flow sur un objet manage, une classe Apex qui etend une classe de base, un field set sur le champ de quelqu'un d'autre. La consequence concrete est une precondition. Le package reference doit etre installe d'abord, dans une version au moins aussi recente que celle contre laquelle vous avez construit, faute de quoi l'installation echoue.
Dans l'entree de package directory de sfdx-project.json, sous l'une des
deux formes :
{ "package": "[email protected]" }
{ "package": "MyPackage", "versionNumber": "1.0.0.RELEASED" }
Trois regles comptent plus que la syntaxe.
"calculateTransitiveDependencies": true vous ne
declarez que les dependances directes, les indirectes etant calculees. Sans cela, il
faut lister chaque niveau a la main, indefiniment.
Cela contraint l'architecture : verifiez-le avant de la dessiner.
Un package de base 1GP sous une extension 2GP est la conception de dependance la plus frequemment defaite trop tard, et elle coute cher a ce stade. Lisez les combinaisons supportees avant le premier build, pas apres.
RELEASED suit votre derniere version
publiee, ce qui est pratique en developpement et surprenant dans un build de
release.
SubscriberPackageVersion indique ce qui est installe dans cette org et
dans quelle version, ce qui vaut mieux que de lire la page Installed Packages en
esperant.
Si vous ne savez pas enoncer cet ordre de memoire pour votre propre produit, votre equipe support ne le saura pas non plus au moment ou un client est bloque.
La sequence qui fonctionne quand un package de base change : publiez la nouvelle version de base, amenez-y les abonnes via une version recommandee ou un push upgrade, puis publiez le package dependant qui l'exige. Inverser ces deux etapes produit un upgrade qui echoue sur une precondition, dans une org que vous ne voyez pas et que vous ne pouvez pas reparer de votre cote.
sfdx-project.json a chaque execution du
pipeline et faire echouer le build sur un cycle.
Serpent gere la resolution des dependances entre packages, les workflows 1GP, 2GP et managed package et la gestion des versions a travers les orgs abonnees sur toutes les formules, y compris la gratuite. D'autres playbooks de packaging sont dans notre bibliotheque SF Guides.
Un package managed 2GP peut-il dependre d'un managed 1GP ?
Pas par defaut. Salesforce bloque la combinaison, et une exception individuelle se demande via une demande aupres du Salesforce Partner Support.
Dois-je lister les dependances transitives ?
Seulement si vous le souhaitez. Avec
"calculateTransitiveDependencies": true, vous declarez les dependances
directes et les indirectes sont calculees. Sans cela, chaque niveau doit etre liste a
la main.
Que se passe-t-il si deux packages dependent l'un de l'autre ?
Rien de bon, car les dependances circulaires ne sont pas supportees. Extrayez les metadonnees communes dans un package inferieur dont les deux dependent.
Quel package mettre a jour en premier dans une org abonnee ?
Le plus bas du graphe. Les dependances passent avant les packages qui les exigent, dans l'ordre meme de l'installation.
Pourquoi l'upgrade de mon client echoue-t-il avec une erreur de dependance ?
En general un plancher de version. Le package de base installe est plus ancien que ce qu'exige votre nouvelle release : mettez d'abord le package de base a jour, puis reessayez.
Sans engagement.