Sommer '18 - viele kleine, gute Dinge und ein neuer Besen
Gaps und Besen
„We got gaps“, war ein markanter Satz, der auf der TrailheadX Keynote zu hören war. Wade Wagner, Senior Vice President Product Management bei Salesforce, meinte vor allem die Dinge auf der Platform, die man nur im Browser durch Klicken einstellen aber sonst überhaupt nicht anfassen kann. Die Liste der neuen und veränderten Standard Objekte hat sich im Vergleich zu den letzten Releases etwas vergrößert, was auch für die Metadata API und Change Set Bestandteile gilt. Keine Überraschungen dabei, das große Aufräumen kommt wohl erst noch - und dabei können wir zuschauen:
Ein neuer Report unter yourOrgURL/mdcoverage/report.jsp verrät, was aktuell schon abgedeckt ist oder eben noch nicht. Bereits heute schon ist das Problem aus der Welt, daß Entwickler auch vollen Zugriff auf Daten brauchten bzw. System Administratoren sein mußten, um Metadatan wie Apex Klassen verändern zu dürfen. Das ist jetzt Geschichte. DX macht weiter Fortschritte in die richtige Richtung. An selektivem Push / Pull wird ebenfalls gearbeitet.
Daß ein neuer Besen gaps kehrt, merkt man an kleinteiligen Debug Log Updates, die sicher das Erhöhen der Limits 2 auf 5 MB Log Size erklären. Mit dabei sind auch wesentlich bessere Logs für Flows. Beispiel gefällig? Flow Interviews, die nicht bulkified laufen können, werden klar markiert. Das alles ist Grundlage für eigenen, neuen Debug Modus für Flows.
Auch fürs Debuggen in LEX gibt es gute Nachrichten: Egal ob Locker Service an oder aus, es werden wieder menschlich verständliche Ausgaben produziert.
Das Sahnehäubchen auf den neuen Features: Ein Replay Debugger für VS Code ist für den Sommer als Beta versprochen. Auch dieser wird von größeren Logs profitieren.
Als nächstes empfiehlt Einstein
Eine spannende Sache scheint der Einstein Next Best Action Pilot zu sein, der von allerhand konfigurierbaren Regeln und Daten-Kenntnis getrieben, dem Nutzer (auch vorstellbar als Endkunde in einer Community) einen oder mehrere plausible nächste Schritte anzeigt - je nachdem, wo er sich befindet. Jeder Vorschlag öffnet einen hinterlegten Flow.
Kontext-abhängige Record-Actions quasi.
Das habe ich mir und andere schon lange gewünscht und auch daran gebastelt. Schade, daß das nur mit Einstein geht. Denn weniger-smart gefilterte Actions, schnöde Picklist Filter beispielsweise, wären für viele Usecases völlig ausreichend und ohne kostenaufwendigem Data Science möglich. Aber vielleicht kommt das noch.
It's the little things
Wenn ich es benennen müßte, haben Flows neben und zusammen mit den Updates im Bereich Debugging die reifesten Updates erhalten - das ist das zweite Release in Folge. Letztes mal waren es Lightning Components und Flows, die mich begeistert haben. Diesmal geht es um den Bereich Bulikfication: Das sowohl im Sinne von mehreren Records als auch mehreren Flow Interviews, die nun klüger zu einzelnen Transaktionen gebündelt werden und damit wesentlich besser mit allen möglichen Limits umgehen können. Details weiter unten. Spätestens Spring 2019 soll der neue Flow Builder fertig sein, denn da verabschiedet sich Salesforce offiziell von der Flash Technologie.
Der kontinuierliche Kampf bekannte Features in LEX zu integrieren, ist weitergegangen. Product Schedules, Case Comments und Topics (yay!) sind in diesem Release in LEX zu finden. Außerdem war auch genug Platz für sinnvolle Usability Updates, die allen zu Gute kommen: ListViews, Emails, Events, Tasks und der Kalendar haben LEX eigene Verbesserungen erhalten, die Effizienz steigern.
Spannend fand ich auch Authentication and Identity, vieles davon im Sommer '18 erst in Beta. Darunter weitere Funktionen für das Mobile Device Management oder ApexTrigger bei User Logout und besseres Reporting über Identitätschecks. Bisher hatten es interne Nutzer/innen nicht so einfach wie externe beim Login in eine Community, das läßt sich nun voneinander trennen - gerade rechtzeitig für Passwordless Community Login.
Lieblingsfeatures
- Packaging2 - alles ist besser als ChangeSets.
- Custom Metdatatypes in Formeln für Validierungen (Formeln im nächsten Release) können über eine neue globale Variable abgefragt werden. Format:
$CustomMetadata.type.record.field
. Hier die Overview mit bedingt hilfreichem Animationsschnipsel. - Muß ich
switch
erwähnen?switch on sobject { when Account a { System.debug('account ' + a); } when Contact c { System.debug('contact ' + c); } when null { System.debug('null'); } when else { System.debug('default'); } }
- Es wird ja langsam mit Berichten in Lightning Experience. Joined Reports Beta - Achtung, hat noch viele Einschränkungen - auch auf API Ebene. Vielleicht wird das verschmerzbar durch Ordner und Unterordner, in denen man nun in LEX Dashboards und Reports verstauen kann. Bitte Hinweise zum Löschen beachten
- Freue mich über viele neue Dashboard und Report Einstellungen, die zum Teil weiter unten nochmal auftauchen werden
Visualforce Templates in LEX einsetzbar. Lightning Templates bekommen Mergefields, die mit mehr als einem Objekt können. Zum BeispielUser/Contact/Lead.LastName
und HTML wird ebenfalls unterstützt. Hinweise zum Konvertieren bestehender Templates hier. - Was Admins mit einen Klick auf Delete schon lange die Nerven raubt - this component is referenced somewhere else in Salesforce - können sie nun schon vorher mit der neuen
MetaDataComponentDependency
in einer SOQL Query erfragen. Zum Beispiel: Wo werden meine Apex Klassen benutzt?
Weitere Beispiele im Repo von Andrew Fawcett: https://github.com/afawcett/dependencies-sampleSELECT MetadataComponentId, MetadataComponentName, MetadataComponentType, RefMetadataComponentId, RefMetadataComponentName, RefMetadataComponentType FROM MetadataComponentDependency WHERE RefMetadataComponentType = 'ApexClass'
- Inline Editing von gefilterten List Views, sofern derselbe RecordType gefiltert wird. Find ich gut!
- Kleines Ding, das mich besonders freut:
Schema.DescribeSObjectResult.getRecordTypeInfosByDeveloperName()
. Kein Ärger mehr mit geänderten RecordType Namen. Auch schön istSystem.Test.clearApexPageMessages()
und daßcount()
in SOQL (meistens, AusnahmeAggregateResult
) nur noch als eine Row zählt. - Ich hoffe, das Interface
QuickAction.QuickActionDefaultsHandler
gibt's auch bald auch für mehr als nur Casefeeds. Damit kann man auch in Lightning den Email Publisher vorbefüllen mit Adressen, Attachments, etc. - A propos Quick Actions, dafür gibts endlich eine API in Form einer der
lightning:quickActionAPI
Component. Kann auch Visualforce oder Custom Component basierte QuickActions ansteuernTo work with quick actions created with the Custom Visualforce or Lightning Component action type, use the
getCustomAction
method. - A propos Quick Actions II: Mass Quick Actions wünsche ich mir für die gesamte Platform und etwas programmatisch zugänglicher.
- MyDomain wieder ändern
- Trigger für External Objects (Beta)
- Ein Lightning Component Override für neues Ereignis
- Bei den Anpassungen für Platform Events wurden Tests besonders berücksichtigt.
Test.getEventBus().deliver()
feuert die Events, damit man das richtige Handeln testen kann. Außerdem neu: das Anstoßen von Flows und Processes lightning:recordForm
- das ist die Symbiose auslightning:recordViewForm
undlightning:recordEditForm
Für Entwickler
force:navigateToComponent
wird abgelöst von einer durchdachten Navigation API mit eigenem Format vonpageReference
. Anleitung zur Migration inklusive.- Der Change Data Capture Pilot ist ein weiterer Schritt hin zu einfacherer Echtzeit-Integration und versteht nun ein paar Objekte mehr und hat weitere Updates erhalten.
CreatedDate
und alle anderen DateTime Felder für Platform-Events erhalten Millisekunden imISO 8601
Standard. Subscriber brauchen API 43.0, um die Information auslesen zu können.- Kennt ihr schon
EventBus.TriggerContext.currentContext
? Siehe auch hier. - Irgendwas stimmt noch nicht ganz, Auto-Aktivieren des Critical Updates für
@AuraEnabled
Sharing wird verschoben. - Achtung, im
AuraLocalisationService
werden verschiedene Methoden abgeschaltet, auch einige früheaura
Events im Zusammenhang mit Server Callbacks und Rendering. - Statt
All or None
können mit diesem Critical Update auch partielle Inserts-Updates bei etwaigem Schluckauf in einem Flow/Process in gewissem Rahmen ausgeführt werden. Im selben Atemzug werden Flows wesentlich klüger in Batches zusammengefaßt. Hier sei an das zugehörige Critical Update erinnert. - Neue Scratch Org Funktionen:
"features": ["CascadeDelete", "ContactsToMultipleAccounts", "StateAndCountryPicklist"]
- Die
User Interface API
ist nicht neu. Man muß mit ihr auch keine eigenen UIs bauen. Sie verrät verdammt viel über das, was ein User sieht und was es damit auf sich hat, auf einen Blick. - Chatter für Apex via ´ConnectApi.ChatterFeeeds´ - schönes Ding, wirklich. Damit ist Chatter in Apex angekommen. Dürfte Community Nutzer besonders freuen.
- Allein mittels Javascript rausfinden, in welche UI der Nutzer unterwegs ist:
UITheme.getUITheme()
- Trigger Context Enum! Yay.
- Für Javascript Zauberer:
eval()
wird im globalen Scope in Locker freigegeben lightningStylesheets="true"
in Visualforce Pages kann ab API 43 auch Custom Theme and Branding.- Einstein, genauer die ehemaligen Metamind APIs, handeln das Löschen von DataSets ohne das Model anzugreifen. Sowohl für Bild als auch Text. Die Einführung eines anderswo oft gebrauchten
RefreshTokens
halte ich für eine gute Idee genauso wie die verlockenden 2000 statt 1000 freien Vorhersagen pro Monat. System.UserManagement
ist eine neue Klasse und bringt unter anderem auch was für DSVGO Freunde mit:System.UserManagement.obfuscateUser(userId)
- Der Type
Blob
schmeckt dem Aura Framework nicht ganz. - Ich wollte schon mal programmtisch Case Close Kommentare erstellen. Ging bisher nicht, nun schon über
Case.Comments
- Eher im Kleingedrucktem für Partner - und das hat mich überrascht - findet sich im Bereich der neuen Bolt Solutions die Verpflichtung, den Lightning Testing Service einzusetzen. Habe die PMs darauf angesprochen, das Bild unten könnte bald Vergangenheit sein. Für mich ein interessantes Detail.
Für Admins
- Das neue URL Format ist live
- Wußtet ihr, daß der Last Modified User derjenige ist, der Fehler von Flows als Email erhält? Das kann nun endlich besser konfiguriert werden, im Bereich, wo auch Apex Exception Mails eingestellt werden.
- DateTime in Flow verfügbar.
- Das Zeitfeld ist GA und auch in LEX verfügbar aber zum Beispiel nicht in Flow/Process Builder. Daher bitte das Kleingedruckte beachten.
- Der Instance Name verschwindet wohl bald gänzlich aus allen URLs, mit dem Critical Update zumindest schon mal aus Sandboxen.
- Systemweite Emailadressen auswählbar für Approval Mails. Leider nur ein Absender für alle Prozesse statt eine Email pro Prozeß.
- Zumindest, wenn man alle Betas dazuzählt, wird Platform Encryption mittlerweile über - Case Feeds und Emails eingeschlossen -
weite Teile der Platform unterstützt. - Keine
ContactId
mehr erforderlich für External User - Der Optimizer kann auf eine einzelne App losgelassen werden zur Analyse von Schwachstellen.
- Nach dem Datenschutz Rumms vom letzten Release sind im neuen Individual sObjekt nur ein paar Kanten glattgezogen worden, darunter Merge-Optionen.
- Kanban versteht Dependent Picklists, ditto für Path
- Files werden im Weekly Data Export unterstützt
- Noch in Beta: Sharing Sets für Communities, die knifflige Szenarien lösen können.
- Mit einem Klick den ganzen Report oder dessen Chart in ein Dashboard übernehmen.
- Statische Links von Dashboard Komponenten aus. Ja, leider nur statisch.
- OmniChannel in LEX aufsetzen und auch Case Comments sind verfügbar in der neuen UI.
- Neben Queue basiertem Routen von Cases nun auch Skill basiert - aber nicht beides gleichzeitig.
- Duplicate Management mit Einschränkungen auch für Custom Objects
Für Nutzer
- Wenn ein Admin oder Entwickler eine Lightning Component verhunzt hat, wird die Page trotzdem noch geladen. Kopfzerbrechen bereitet die Frage, wie ein Nutzer merken soll, daß etwas fehlt?
- Endlich! Aus doof wird verständlich:
- Von wegen keine neuen Features für Classic: Die File Preview wird der in LEX angepaßt.
- Verlinken von Records in Chatter Posts. Am verlinkten Datensatz ist nicht zu sehen, ob oder in welchen Posts der Record erwähnt wurde.
- Field History Reports gleichzeitig über
oldValue
undnewValue
filtern - Sauberes Gruppieren nach Datumskategorien in LEX Reports, heißt auch so viel wie der neue Report Builder ist GA
- Exportieren von Reports in hübsch
- Makros inserten Text am Cursor und in dem Zuge können QuickText mehr Nutzern via Queue zur Verfügung gestellt werden.
- Schneller eine Email schreiben in der LEX Service Cloud. Email wird man wohl doch nicht los trotz aller Unkenrufe. Daher kann man sich jetzt noch mehr Case Updates in LEX emailen lassen.
- Kopierte Links des eigenen Console Fensters (Service als auch Sales) funktionieren auch für Kollegen, die ihn erhalten.
- List Email für Campaign Members
- Filter für die Activity Timeline! und Splitview und Kanban für Aufgaben!
- Mehr Customisation der eigenen Navigationsleiste. Und mehr Möglichkeiten für Admins, diese einzuschränken.
- Comments und ListView Emails / Mass Mails werden über die Suche in LEX gefunden und die Suche schneller auf bestimmte Objekte einschränken klappt auch: