Die alte Welt werde ich nicht vermissen. Mittels CumulusCI (Salesforce Foundation), dem Force CLI und CircleCI habe ich mich in letzter Zeit in die 'alte Welt' vertieft. Dabei viel Neues über Deployments, Namespaces und unterschiedliche Developer Org Arten gelernt. Ich habe mindestens eine Packaging Org zerschossen, zwei Namespaces verbraten und bin seither mit dem Salesforce Support beschäftigt, die neue Packaging Org zu zähmen. Die guten Nachrichten: Es funktioniert und zwar ziemlich gut - dank gilt hier dem KnowHow von Jason Lantz, dem Kopf hinter CumulusCI.
Mit diesen Erfahrungen frisch im Kopf, nimmt sich SalesforceDX aus wie der Heilige Gral bei Monty Python.
Vorgeplänkel
-
Ich hab ein Managed Package mit einigen, kleinen Lightning Components, einer App, einer Utility Bar, Custom Object, etc. gebaut. Repository findet sich hier.
-
CircleCI + CumulusCI kümmern sich um das Deployen und den Release einer neuen Version, sobald ein Commit in den Master auf Github stattfindet.
-
Da ich auch
heroku cli
nutze, hab ichsfdx
einfach zusätzlich installiert. Die Installation viaheroku plugin:install salesforcedx
hat mir nicht getaugt.--help
hat nicht funktioniert und die Länge der Kommandos war unterträglich. -
Sobald SalesforceDX öffentlich zugänglich ist, gibt es hier einen Link.
-
Ich gehe hier davon aus, daß Euer
workspace
bereits soweit eingerichtet ist. Meiner sieht so aus:
{
"PackageDirectories" : [
{ "Path" : "lwb", "Default": true}
],
"Namespace": "szLWB",
"SfdcLoginUrl": "https://login.salesforce.com",
"SourceApiVersion": "39.0",
"EnableTokenEncryption": false
}
Dummer Fehler Nummer 1: In den PackageDirectories
auch meinen Metadaten Ordner ./src
, in dem auch die package.xml
wohnt, eingetragen. Das führte zu folgendem Rätsel:
Kurzum: Zu den Packages gehören keine klassischen Metadaten.
Vorgehen:
-
drauf los,
--help
ist mein beständiger Begleiter. -
Klappe halten :-) - zum Philosophieren über DX ist noch genug Zeit
Schritt 1 - Von Metadaten und Package.xml zu SalesforceDX Source Files
-
in
./src
liegen alle Metadaten und die explizitepackage.xml
-
Ich habe mit
sfdx force:alias
undsfdx force:config
alles eingerichtet, daß ich's lesen und verstehen kann:
sfdx force:mdapi:convert --rootdir ./src
- es rödelt und dann sind meine Metadaten in das neue DX Format konvertiert und im Ordner./lwb
zu finden. Dieses neue Format unterscheidet sich nicht groß vom Original im Moment.
-
Nächster Schritt: Ich will meine App ausprobieren und in eine neue Org kleben.
-
Ab hier dann byebye, alte Welt. Statt mir eine neue Dev Org zu holen, anzumelden, Account einzurichten, Features zu enablen oder gar Salesforce Support dafür kontaktieren zu müssen, habe ich hier eine Definition Datei, die recht einleuchtend ist: Lightning aktiv und Chatter enabled.
{
"Company": "LWB",
"Country": "US",
"LastName": "Sz",
"Email": "sz@appero.com",
"Edition": "Developer",
"OrgPreferences" : {
"S1DesktopEnabled" : true,
"ChatterEnabled" : true
}
}
DX Superstars: Scratch Orgs
Anhand dieser Konfiguration wird eine sogenannte Scratch Org erstellt - oder viele. Meistens dauert das weniger als eine Minute. So eine Org ist eine richtige Salesforce Org, lebt aber nur für eine Woche. Dann wird sie automatisch gelöscht.
Der Gral: Was in der Org konfiguriert wird, wird automatisch erkannt - es findet Versionierung statt. Wie bei Github synce ich die Unterschiede und muß mich unter Umständen darum kümmern, Konflikte zu beheben.
Der Clou: Genau dieses Synchron Halten zwischen Org und lokalem Kopie war eine zentrale Herausforderung der 'alten Welt'. Mit DX geht das so:
- Code in die Scratch Org pushen:
sfdx force:source:push
sfdx force:org:open
und in meinem Browser geht die neue Org auf ohne Login. Und zwar genau die richtige. Und ich kann auch steuern, wie und wo!- Konfigurieren - in meinem Fall hab ich die App den Profilen StandardUser und System Administrator zugeordnet, damit die die App sehen können, und ein Custom Object gelöscht.
- Änderungen nachvollziehen
sfdx force:source:status
(wiegit status
)
und dann abholen sfdx force:source:pull
Dummer Fehler Nummer 2 Weiß ich nicht. Aktuell hab ich keine Ahnung, was mir der Fehler sagen soll. Der Full Name
macht mich bei den Permission Sets stutzig. Ich kann mir vorstellen, daß Profiländerungen in DX vielleicht als Permissions abgehandelt werden. Aber mit so kryptischem Namen?
In Teil II werde ich es hoffentlich herausgefunden haben.