
Andrew Hanna

Andrew Hanna

Kurze Antwort: Legen Sie vor dem ersten Release fest, wem jedes Feld gehört, denn diese Entscheidung lässt sich kaum zurücknehmen. Machen Sie Werte, die Kunden anpassen werden, subscriber editable, halten Sie Werte, von denen Ihr Code abhängt, upgradeable, behandeln Sie Picklist-Werte und Namen geschützter Datensätze als dauerhaft und testen Sie jedes Upgrade gegen eine Org, die bereits Kundenänderungen enthält.
Ein Custom-Metadata-Upgrade bricht einen Subscriber auf eine von drei Arten:
Alle drei gehen auf Packaging-Entscheidungen vor dem ersten Release zurück, nicht auf den Deploy-Befehl. Der sichere Weg beginnt deshalb bei der Typdefinition.
Jedes Feld eines paketierten Custom Metadata Types trägt eine von drei Einstellungen, wie Salesforces Trailhead-Einheit zum Schutz von Custom Metadata erklärt:
Faustregel: Wenn ein Kunde den Wert jemals anpassen möchte, machen Sie ihn subscriber editable und akzeptieren Sie, dass Sie ihn in seiner Org nicht mehr korrigieren können. Wenn der Wert das Verhalten Ihres Codes bestimmt, lassen Sie ihn upgradeable. Locked ist nur für Werte gedacht, die sich nie ändern dürfen. Beachten Sie: Subscriber-editable-Felder auf geschützten Datensätzen sind nach dem Release gesperrt, also planen Sie Schutz und Feldverwaltung gemeinsam.
In Second-Generation Managed Packages werden entfernte Custom-Metadata-Datensätze als veraltet (deprecated) markiert, wenn sie für die Subscriber-Org sichtbar sind, und andernfalls endgültig gelöscht, so Salesforces Leitfaden zum Entfernen von Metadatenkomponenten aus 2GP-Paketen. Veraltete Komponenten bleiben, bis ein Subscriber-Admin sie löscht, und der Setup Audit Trail protokolliert, was das Upgrade entfernt hat. Zwei Folgen:
Wenn Sie Ihr Paketmodell neu aufsetzen, zeigt unser Leitfaden zum Wechsel des Salesforce-DevOps-Tools, ohne die Pipeline zu brechen, wie die Paket-Historie bei einem Toolwechsel erhalten bleibt.
Metadata.Operations.enqueueDeployment und einer
Metadata.DeployCallback-Klasse, und Salesforce begrenzt, wie viele
solcher Deployments gleichzeitig in der Warteschlange stehen dürfen.
Wenn zwei Branches denselben .md-meta.xml-Datensatz ändern, folgen Sie
unserem Leitfaden zum
Lösen von Salesforce-Metadaten-Merge-Konflikten, ohne dass jemand seine Arbeit
verliert.
Ja, in kleinerem Maß. Auch interne Teams deployen Custom-Metadata-Datensätze zwischen Sandboxes und Produktion, und das Deployment eines Datensatzes aus der Quelle überschreibt die Kopie in der Ziel-Org. Wenn Admins Datensätze direkt in der Produktion anpassen, setzt das nächste Deployment aus Git sie stillschweigend zurück. Machen Sie Git zum einzigen Ort, an dem sich diese Datensätze ändern, oder halten Sie von Admins verwaltete Datensätze aus dem Deployment heraus. Unser Leitfaden dazu, wie Admins deployen, ohne Git anzufassen, zeigt, wie Sie ihnen einen nachverfolgten Weg statt direkter Änderungen geben.
Serpent ist die Salesforce-DevOps-Plattform von Tekunda. Sie deployt Custom Metadata über dieselbe geprüfte Pipeline wie Ihre übrigen Metadaten, mit KI-Code-Review und menschlicher Freigabe vor der Produktion, sodass eine Änderung an Feldverwaltung oder Picklists ein zweites Paar Augen bekommt, bevor sie ausgeliefert wird. Vergleichen Sie die Serpent-Pläne oder stöbern Sie in weiteren SF Guides zu Packaging und CI/CD.
Überschreibt ein Paket-Upgrade die Custom-Metadata-Werte von Subscribern?
Nur bei upgradeable Feldern. Paket-Upgrades überschreiben nie Werte, die ein Subscriber in einem Subscriber-editable-Feld geändert hat.
Kann ich einen Picklist-Wert aus einem paketierten Custom Metadata Type löschen?
Nein. Nach dem Release können Sie Picklist-Werte hinzufügen, aber bestehende weder löschen noch deaktivieren.
Kann Apex Custom-Metadata-Datensätze aktualisieren?
Ja, aber nicht per DML. Verwenden Sie
Metadata.Operations.enqueueDeployment, das asynchron deployt und über
eine Callback-Klasse zurückmeldet.
Wer entwickelt Serpent?
Tekunda entwickelt Serpent, eine Salesforce-DevOps-Plattform mit CI/CD, KI-Code-Review und von Menschen genehmigten Deployments.
Unverbindlich.