Go with the Winter 19 Flow

Ich bin nicht spät dran, es kam bloß eine Dreamforce dazwischen. Zusammenfassung bei Factory42.

Winter also: Salesforce hat die letzten Ecken und Kanten bei Flows geschliffen. Seit einigen Releases erwähne ich Flows als baldige full citizens of the lightning platform. Dabei gibt es zwei Seiten: Automatisierung mit Clicks aufsetzen. Das klappt bis zu einer gewissen Größe/Komplexität. Die zweite Seite sind schlaue (siehe unten) und dynamisch gestaltbare Schritt-Für-Schritt Daten-Eingabe-Formulare, die auch noch hübsch aussehen und dem Nutzer alle möglichen Tips geben können. Das klappt für alle und immer, die auf Lightning setzen.
Der Einstein Next Best Actions Pilot setzt dann noch Machine Learning obenauf und kann Vorschläge für den 'richtigen' Flow bzw. Action liefern. Machbar auch in Visualforce mit lightning:out, Apex wird via ConnectAPI unterstützt.

Viele der bisher von Community Mitgliedern erstellten-gepflegten-erdachten Lightning Components zum Verbessern von Flow Screens sind als eigene Elemente ins Release gewandert, was Flows mit Design und Validierungsmöglichkeiten aufwertet. Wer die nicht-offizielle Flow Seite noch nicht kennt, wo die Components schon seit einer Weile verfügbar sind, wird hier fündig. Außerdem verträgt sich Flow ab jetzt mit CI (bitte lesen, bevor man mit CI auf v44.0 geht) und ab dem Winter gibt es sogar Test Coverage Daten für Flows, denn: Wer Flows mit CI als aktiv deployen will, muß Coverage nachweisen.
Guided Actions finden den Weg in die Standard Navigation und bekommen Usability Updates. Als Channel ist aktuell lediglich Other irgendwie sinnvoll, ich hoffe das ändert sich. Zu guter letzt dürfen sich Community Besitzer freuen, da es Flows auch für Guest User gibt.

Flows werden immer stärker als Business Process Modelling Tool vorgestellt. Es gibt jetzt eine Rubrik auf AppExchange FlowSolutions, damit ist dann zum Beispiel Kredikartenzahlung via Chargent schnell eingerichtet. Das fällt für mich unter die Kategorie 'Safe Harbor / Forward Looking Statement'. So eine Rubrik gibt's auch für Lightning Components, aber die ist ziemlich tot. Wie es mit IP für die Anbieter aussieht? Eher mau, wobei das sicher nicht der Fokus ist. Ich glaube, bis wir mit Flows wirklich Business Prozesse flexibel bearbeiten können, vergehen noch ein paar Releases und MuleSoft muß weiter integriert werden.

Was mir in Sachen Flows nach wie vor fehlt, sind klare Aussagen und Benchmarks zu Bulkification und CPU Time und das nicht allein für Flow sondern bitte anhand von Beispielen, die Process Builder und Flows kombinieren. Ich will Bottlenecks identifizieren können, bevor der 203. Record oder die n. Action einen Flow oder Process explodieren läßt. Trial und Error ist keine skalierbare Antwort für große Orgs.

Fragen zur Usability, ob der Flow Builder intuitiv ist und ob man mit Code (trotz Tests) nicht am Ende schneller zu bessern Ergebnissen bekommt, weil Code auf lange Sicht besser zu maintainen ist, werde ich erst wieder mit dem neuen Cloud Flow Builder evaluieren. Der ist für Spring 19 angekündigt.

Was mir dieses Release nicht so gut gefällt, sind - wenn auch kleine - Einschränkungen für Classic Nutzer im Bereich Files und Libraries. Und dann gab's dann noch diesen Security Incident: Security vulnerability impact on Salesforce Sites & Communities, womöglich auch im Zusammenhang mit dem "View Your Community Like a Guest" Feature, das aus den Release Notes entfernt wurde. Hier, was die Notes aktuell dazu sagen. Der Weg zur öffentlichen Community - beispielsweise mit sofort sichtbaren Knowledge Artikeln ohne Anmeldung - ist trotz dieses Sicherheits-Heckmecks der richtige.

Vor dem Hintergrund der öffentlichen Community sind auch die starken Updates erklärbar, die hauptsächlich hinter den Kulissen aufräumen und sowohl GDPR und Sicherheitsthemen verbessern - zum Beispiel mittles IP Anonymisierung, die man vor Winter 19 selber basteln mußte. Genutzt wird hierzu Google - aus meiner Sicht ein Ergebnis, der im letzten Jahr angekündigten Kooperation. Features wie die Anbindung von Content Management Systemen (Beta) für Communities freuen mich besonders.

Auch auf API Ebene (RecordAction, PlatformAction, Consent API) tut sich kontinuierlich mehr über die Releases als noch vor zwei Jahren und besondere Erwähnung verdient hier die kontinuierliche Arbeit am Metdata Coverage Report, der auch noch Known Issues anzeigt. Hier lernt man auch die neue Packaging Nomenklatur kennen.

Lieblingsfeatures

  • Eine neue REST API (hoffentlich bald auch nativ in Apex) kann anhand einer Id (z. B. Lead oder Contact) oder einer Email die zugehörigen Privacy Settings nachschlagen und liefert die jeweils restriktivsten Einstellungen zurück. Die API schaut hierfür an allen Stellen nach. In der Doku wesentlich mehr Details.

    /v44.0/consent/action/
    Determine the actions to which your customer has (or hasn’t) consented, regardless of which objects in Salesforce recorded the consent.

  • Im Winter kommt das Change Data Capture Event in die Developer Preview. Unterstützt werden Custom Objects und ein Subset an Standard Objekten. Mit diesem neuen Event Typ lassen sich granular Datenveränderungen in Echtzeit kommunizieren. Massiver Zugewinn und vielleicht eine Alternative für manchen Integrationsansatz. Wird noch etwas dauern, bis es GA geht und billig wird es sicher auch nicht.
  • Eine ganze Latte neuer Scratch Org Features - darunter IOT und Chatbots. Außerdem lassen sich einzelne Features leichter anknipsen.
  • Bisher mußte man eine richtige Org haben oder eine spezielle Org besorgen, um mit DX loszulegen. Das ist nun Geschichte - normale Dev Orgs können auch DX, sie kommen mit 3 Scratch Orgs. Reicht ja auch.
  • Großartig: DX Source Files mittels sfdx force:source:deploy in eine richtige Org heben oder mit sfdx force:source:retrieve aus einer Org direkt in DX Source umlegen.
  • Wow, wow, wurde ja auch Zeit: Aus Custom Lightning Components heraus auf die konfigurierten QuickActions zugreifen, nicht nur die Action selbst, sondern auch alle Felder. Ich glaube, das ist die Parität zur Case Feed Publisher API aus Classic Zeiten.
  • Nochmal Components und zwar unsichtbare in die Utility Bar legen.
  • Validiere Deinen Flow mittels Lightning Components.
  • Akamais CDN wird für CSS und statische Javascript Resourcen unterstützt. Muß eigens eingeschaltet werden.
  • Der Nachfolger von Content Packs: Public Links für Files. Außerdem höhere Content Delivery Limits.

    To download files from a folder in Safari, first disable your browser’s popup blocker.

  • Kein Lieblingsfeature aber wichtig: Byebye Koa und Kokua und Byebye Connect for Office (Feb 2019)
  • Makros und QickText bekommen Ordnerstrukturen
  • Ein bißchen unscharf, mindestens in der Service Cloud bzw. dessen Case Feed Publishers sind Visualforce Email Templates jetzt einsetzbar. Allerdings nicht über Makros.
  • Email Relay via SMTP
  • Enterprise Territory Management: Forceasts nach Region GA, selbiges für Collaborative Forecasts.

Für Entwickler

  • empAPI
  • Wer nicht genug Platform Events haben kann, kann sich für High Volume anmelden.
  • Instanz URLs (also URLS mit EU6, NA12 im Namen) werden am 16. März 2019 abgeschaltet. Bitte aufpassen, sofern ihr hardcoded URLs benutzt. Wenn alle Stricke reißen, gibt es einen Opt out
  • So findet man die Dependencies eines Unlocked Packages:
sfdx force:data:soql:query -u myAlias -t 
-q "SELECT Dependencies FROM SubscriberPackageVersion 
   WHERE Id='04txx000000082hAAA'" --json
  • inherited sharing macht das Leben leichter, weil eindeutiger. Es gewährleistet die Sharing Rules der Caller Klasse.
  • Eine Lücke wird bei DCPs geschlossen. Man konnte auf Komponenten im Paket zugreifen trotz Passwort - jetzt schützt das Passwort so effektiv wie für packaging1 Pakete.
    Das BatchApexErrorEvent wird helfen, Batches besser zu debuggen. Bei Fehlern wird ein ErrorEvent rausgehauen, leider erst in Beta.
  • Ich wüßte zwar nicht, warum ich eine unsichere HTML als statisch Resource hochladen sollte, aber mit $IFrameResource.<resource_name> kann ich die nun in einem sicheren - weil von anderer Domain bereitgestellten - iFrame anzeigen. Ähnliche Sicherheitsverbesserung gibts beim Laden von externen Bildern in Visualforce mittels IMAGEPROXYURL

  • Eine weitere Lücke geschlossen: Javascript Prototypes können in Lightning Components nicht mehr angefaßt werden.
  • Habt ihr Icons in lightning:tab mittels label dargestellt? Geht nun nicht mehr. Nur noch plain text wird supported.
  • Das Callable Interface ist für lose coupling gedacht. Es gilt lediglich call(String action, Map<String, Object> args) zu implementieren.
  • Achtung I: Ab API Version 44 ist setStorable() für Apex Actions clientseitig obsolet, stattdessen kann man Apex Methoden als cacheable deklarieren:
@AuraEnabled(cacheable=true)
public static Account getAccount(Id accountId) {
    // your code here
}
  • Achtung II: die Flags zum Formattieren von Datumswerten mittels AuraLocalizationService werden geändert.
  • Mit SOSL direkt innerhalb von ListViews suchen. Eine Volltextsuche auf einen vorgefilterte Liste an Records zu jagen, ist fast als ob man SOQL mit SOSL kreuzt. In der UI kommt das mit searchable ListViews zum Tragen im Winter.
  • Eine Falle weniger, in die man als Neuling läuft: Den System-Visualforce-URL Parameter ist Groß/Kleinschreibung bald egal. Dafür aber den lightning:isUrlAddressable Interface und der lightning:navigation Component nicht mehr. VF URL Parameter? Zur Erinnerung: retURL, startURL, cancelURL, saveURL
  • Es ist zwar noch kein Pappenstil, aber das Verschieben von Metadaten aus DCP1 in DCP2 ist einfacher geworden. In diesen Kontext gehört auch, daß nun 'besser' gelöscht wird. Mehr Metadaten Komponenten werden hard deleted als bisher. Spart manuelles Aufräumen. (Auch QickActions können gelöscht werden).
  • Eine Package.xml einfach mit DX zu erstellen, war bisher nicht möglich. Jetzt schon.
  • Gehört hier eigentlich nicht rein, weil es ein VS Code Feature ist, aber es ist so schön: Besseres Test Coverage Handling - wer bei 1) (dem Assert in der Liste) klickt, kommt bei 2) wieder raus.

  • Ob synchron oder asynchron, mit myDomain oder ohne, System.UserInfo.getSessionId() und Url.getOrgDomainUrl().toExternalForm() geben immer eine verwertbare Antwort zurück.
  • Vorbei mit den Umwegen, um Test Coverage für Custom Metadata Types zu erreichen, weil man bisher zur Laufzeit nichts an den MDT verändern konnte. Apex kann das nun ganz direkt.
  • Das ja mal spannend, da Salesforce OpenID Connect (wie z.B. auch Google) unterstützt, kann man nun Connected Apps programmatisch erstellen (lassen):

    Dynamic client registration allows OpenID Connect client apps to automatically create child OAuth 2.0 connected apps with Salesforce.

  • onNavigationChange() in der Open CTI API funktioniert jetzt wie erwartet.
  • Auf Chatter REST API Ebene ist viel passiert, v.a. rund um Social Engagement.
  • Ein Blick auf die neuen Metadaten Objekte lohnt sich, um Bots, Audience und LEX Themes besser zu verstehen.
  • Next Best Action Pilot Teilnehmer aufgepaßt - es wird viel umgestellt.
  • Cache-Only Keys (Beta) für besonders empfindliche Ent- und Verschlüsselungen, die belegen können müssen, daß ein Key nicht in einem Fremdsystem persistiert wird.
  • Ein eignes DX-CLI Plugin erlaubt leichteres Arbeiten mit Analytics Scratch Orgs. Nice. sfdx plugins:install @salesforce/analytics

Für Admins

  • Achtung. Permission Änderung in Standard Profilen für Manage Customer User.
  • Die Nutzer werden danken: Quick Actions für Tasks mit Erinnerungsfunktion versehen.
  • Endlich konfigurierbare Attachments für Lightning Email Templates.
  • Component Sichtbarkeit auf Lightning Pages über (Custom) Permissions steuern.
  • Wer Metdaten deployt, mußte bisher die Modify All Data Permission besitzen. Das ist läßt sich mit einer neuen (Beta-) Permission namens Modify Metadata vermeiden.
  • GDPR sei Dank: IP Anonymisierung in Communities. Außerdem: Mehr CSP.
  • Ein Critical Update erlaubt bessere DKIM Einstellungen.
  • Asset Files - Sachen wie Bilder für Communities und ähnliches - kommen in Sandboxen an. Wer keine Full Sandbox hat, muß Content Body im Template für die Partial Sandbox mit angeben.
  • Custom Metadata Types in Formel Feldern. Nice!
  • IOT Admins profitieren von besseren Fehlermeldungen und einfacherer Handhabe bei Validierungsfehlern zwischen Kontexten und Orchestration. Auch Event Zustellung kann besser überwacht werden. Hab ich jemand Platform Events husten hören? Die können versendet werden.
  • Neue Community Lizenztypen: Lightning External Apps und Lightning External Apps Plus. Gefühlt gibt's alle zwei Wochen neue, das ist echt verwirrend.
  • Custom Fields beim File Upload auch für Community Members
  • Wenn ich das richtig verstehe, bekommt das RecordAction Objekt demnächst die Möglichkeit, auch was anderes als Flow für Guided Actions einzusetzen, denn das Feld ActionDefinition wird FlowDefinition ersetzen. Find ich super.
  • Mit dem UserEmailPreferredPerson Objekt können wir endlich unterschiedliche Emailpräferenzen tracken. Sicher auch ein Segen aus der DSVGO Arbeit genauso wie das neue ListEmailIndividualRecipient, mit dem nachvollziehbar wird, wer alles eine Email erhalten hat, die über eine ListView versendet wurde.
  • LEX Themes nun deploybar.
  • Nice: REST API Deployments (kann man auch im DX CLI einstellen: sfdx force:config:set restDeploy=true) sind nicht dem 39 MB Zip File Limit unterworfen.
  • Actions auch auf Knowledge Artikeln (Beta). Ditto für Mass Edit via ListView
  • Clickjack Protection mit granularen Einstellungen für iFrames in Communities sind eine gute Sache. Wieso gibt's dasselbe nicht mit Visualforce?
  • Unterstütztung von Skill + Queue basiertem Routing für Omnichannel
  • Eine Beta zum automatischen Migrieren von Knowledge zu Lightning Knowledge
  • FieldSets in Lightning Experience erstellen/konfigurieren. Doof nur, daß es für Lightning Components kein Pendant zum aus Visualforce bekannnten {!$ObjectType.Account.FieldSets.myFieldSetName} gibt.
  • Wenn ihr wollt, könnt ihr das haben:
  • Encryption Settings jetzt deploybar und eine neue Permission steuert, wer da überhaupt von den Admins ran darf/soll.
  • Wer möchte, daß seine Community Nutzer sich per SMS zusätzlich authentifizieren, kann das einkaufen. Für Communities kann ein eigenes Login Bild eingerichet werden. Außerdem zahlreiche neue Login-Optionen (die neuen Login Möglichkeiten für Communities.
  • Neue Setup Seite: Import und Integration mit API, Change Data Capture (Pilot), Data Import Wizard, Data Loader, Dataloader.io, External Data Sources, External Objects, External Services, Platform Events.
  • Lookup Fields von Standard Objekten zu Knowledge. Ich habe den Eindruck, das wird unter der Haube über External Objects erreicht.
  • Ich bin jetzt nicht so schwer begeistert wie andere: Aber mit der Dependency API und dem 'Where is this used'-Button braucht man nicht mehr auf Löschen zu klicken, um herauszufinden, ob ein Feld refernziert ist.
  • Individual und Duplicate Rules haben zueinandergefunden
  • Recognition Badges für Communities. Trailhead-Feeling.
  • Yes! Joined Reports werden in Dashboards unterstützt.
  • Höhere (und voneinander getrennte) Limits für Process Builder Prozesse und Flows. Wer mehr will oder braucht, wird zahlen dürfen. 2000 aktive Flows/Processes muß man aber erstmal vollkriegen.
  • Gott sei Dank, jetzt gibt's wenigstens eine Warnung:

Für Nutzer