
Andrew Hanna

Andrew Hanna

Réponse courte : la résolution des dépendances entre packages, c'est
la façon dont Salesforce détermine quels packages doivent déjà être présents, et dans
quelles versions, avant qu'un autre puisse s'installer ou se mettre à jour. Vous la
déclarez 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 abonnés sont ennuyeux. Sinon, une org se retrouve sur une version
qu'elle ne peut plus quitter.
Il y a dépendance dès que des métadonnées d'un package référencent celles d'un autre : un Flow sur un objet managé, une classe Apex qui étend une classe de base, un field set sur le champ de quelqu'un d'autre. La conséquence concrète est une précondition. Le package référencé doit être installé d'abord, dans une version au moins aussi récente que celle contre laquelle vous avez construit, faute de quoi l'installation échoue.
Dans l'entrée de package directory de sfdx-project.json, sous l'une des
deux formes :
{ "package": "[email protected]" }
{ "package": "MyPackage", "versionNumber": "1.0.0.RELEASED" }
Trois règles comptent plus que la syntaxe.
"calculateTransitiveDependencies": true vous ne
déclarez que les dépendances directes, les indirectes étant calculées. Sans cela, il
faut lister chaque niveau à la main, indéfiniment.
Cela contraint l'architecture : vérifiez-le avant de la dessiner.
Un package de base 1GP sous une extension 2GP est la conception de dépendance la plus fréquemment défaite trop tard, et elle coûte cher à ce stade. Lisez les combinaisons supportées avant le premier build, pas après.
RELEASED suit votre dernière version
publiée, ce qui est pratique en développement et surprenant dans un build de
release.
SubscriberPackageVersion indique ce qui est installé dans cette org et
dans quelle version, ce qui vaut mieux que de lire la page Installed Packages en
espérant.
Si vous ne savez pas énoncer cet ordre de mémoire pour votre propre produit, votre équipe support ne le saura pas non plus au moment où un client est bloqué.
La séquence qui fonctionne quand un package de base change : publiez la nouvelle version de base, amenez-y les abonnés via une version recommandée ou un push upgrade, puis publiez le package dépendant qui l'exige. Inverser ces deux étapes produit un upgrade qui échoue sur une précondition, dans une org que vous ne voyez pas et que vous ne pouvez pas réparer de votre côté.
sfdx-project.json à chaque exécution du
pipeline et faire échouer le build sur un cycle.
Serpent gère la résolution des dépendances entre packages, les workflows 1GP, 2GP et managed package et la gestion des versions à travers les orgs abonnées sur toutes les formules, y compris la gratuite. D'autres playbooks de packaging sont dans notre bibliothèque SF Guides.
Un package managed 2GP peut-il dépendre d'un managed 1GP ?
Pas par défaut. Salesforce bloque la combinaison, et une exception individuelle se demande via une demande auprès du Salesforce Partner Support.
Dois-je lister les dépendances transitives ?
Seulement si vous le souhaitez. Avec
"calculateTransitiveDependencies": true, vous déclarez les dépendances
directes et les indirectes sont calculées. Sans cela, chaque niveau doit être listé à
la main.
Que se passe-t-il si deux packages dépendent l'un de l'autre ?
Rien de bon, car les dépendances circulaires ne sont pas supportées. Extrayez les métadonnées communes dans un package inférieur dont les deux dépendent.
Quel package mettre à jour en premier dans une org abonnée ?
Le plus bas du graphe. Les dépendances passent avant les packages qui les exigent, dans l'ordre même de l'installation.
Pourquoi l'upgrade de mon client échoue-t-il avec une erreur de dépendance ?
En général un plancher de version. Le package de base installé est plus ancien que ce qu'exige votre nouvelle release : mettez d'abord le package de base à jour, puis réessayez.
Sans engagement.