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 clinutze, hab ichsfdxeinfach zusätzlich installiert. Die Installation viaheroku plugin:install salesforcedxhat mir nicht getaugt.--helphat 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
workspacebereits 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,
--helpist 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
./srcliegen alle Metadaten und die explizitepackage.xml -
Ich habe mit
sfdx force:aliasundsfdx force:configalles 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./lwbzu 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:openund 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.