FirstSpirit Third-Party-Preview API Integration with Salesforce Lightning Community
Author: astember
Publication Date: 9/10/2019 11:18
Hallo zusammen,
wir prüfen aktuell, ob eine Integration des Omnichannel Managers über den CaaS in eine Salesforce Lightening Community möglich ist und sind dabei auf technische Hürden gestoßen.
Hautproblem ist, dass das snap.js CSS Objekte als eingebettete Blob-URIs nachlädt und dies offensichtlich zumindest aktuell nicht von den Salesforce CSPs unterstützt wird.
The CSP Trusted Sites configuration of Salesforce does not accept just blob: as a trusted site URL. So the Blob support cannot be added like a usual external domain
Eine mögliche Lösung für das Problem, könnte sein, dass das von OCM benötigte CSS über einen anderen Weg (z.B. externe URI) in die Salesforce Seite geladen wird. (z.B. per CMS Connect Funktion)
Wir fürchten darüber hinaus, dass es auch noch zu anderen Problemen kommen könnte, da Salesforce seine Inhalte/Komponenten sehr stark kapselt und man bestimmte DOM-Elemente nicht nach belieben abfragen o. manipulieren kann. Das müsste wir aber noch genauer verifizieren.
Leider sind wir da bei Salesforce nicht so flexibel wie bei einer selbst entwickelten Webanwendung, daher wäre die Frage wie flexibel das snap.js auf solche spezifischen Sicherheitsanforderungen noch angepasst werden kann und ob wir auf Grund dieser Einschränkungen erst einmal auf den OCM/TPP im Zusammenspiel mit Salesforce Community bei der weiteren Planung verzichten müssen.
Im Anhang befinden sich noch weitere technische Details unserer Analysen.
Tags: ocm, salesforce, tpp
-
Author: Peter_Jodeleit - 9/12/2019 9:52
Hallo Andre,
wir evaluieren gerade, ob wir da etwas auf unserer Seite ändern können.
Gibt es denn nach dem Content Security Policy Fehler Folgefehler, die mit dem CSS zusammenhängen? Wenn nicht, könntest du zwischenzeitlich versuchen, das CSS manuell bereitzustellen und so weitere Tests durchführen. Ein zip mit CSS und den Bildern habe ich dir dafür hier abgelegt: http://docs.e-spirit.com/tpp/fs-tpp-css.zip
Eine kurze Rückmeldung dazu wäre gut.LG, Peter
0 -
Author: astember - 9/12/2019 16:37
Hallo Peter,
ich habe das CSS + Bilder mal über die CMS-Connect Funktion von Salesforce eingebunden. Damit bin ich schon mal einen Schritt weiter und die Bearbeitungs-Widgets und Formulare sind im ContentCreator OCM schon mal sichtbar und können auch bedient werden. Der nächste Schritt wäre jetzt noch der Test mit Inhalten aus der Preview-CaaS Instanz. Wenn das auch funktioniert wäre es denke ich ein sinnvoller Workaround das CSS + Grafiken von snap.js getrennt vom Javascript einzubinden.
0 -
Author: Peter_Jodeleit - 9/12/2019 16:45
Super das es funktioniert hat! Und danke für die prompte Rückmeldung hier.
Halt uns ruhig weiter auf dem Laufenden hier. Ich hab die Prio für die Suche nach einer besseren Lösung für das Content-Security-Policy aber jetzt erst mal wieder etwas runtergestuft.0 -
Author: astember - 9/23/2019 11:25
Bisher verliefen meine Tests mit dem Preview und Live CaaS weitestgehend positiv. Das Anlegen, Bearbeiten und Löschen von FirstSpirit Absätzen funktioniert bereits korrekt. Mir ist es bisher nur noch nicht gelungen die Standard-Arbeitsabläufe in unserer CaaS Implementierung zu aktivieren. Ich vermute, dass hier ggf. noch etwas in der CaaS Implementierung fehlt:
Hier die Beispielimplementierung per Preview-CaaS:
https://devgew1-demoshop.cs84.force.com/example/s/cms
Wäre schön wenn ich noch ein Tipp für das Troubleshooting der Workflows bekommen könnte. Das Modul BasicWorkflows sollte im Projekt korrekt konfiguriert sein.
0 -
Author: Peter_Jodeleit - 9/23/2019 12:15
Hallo Andre,
der Kontext für den Workflow-Button im CC-Rahmen wird über setPreviewElement() gesetzt. Ruft ihr das auf?
Ansonsten sollte bei den Workflows nur der Standard-Lösch-Workflow in den Projekteinstellungen eingestellt werden. Mehr ist an Konfiguration nicht nötig.LG
0 -
Author: groth - 9/24/2019 11:32
Hallo Andre,
wir haben mit dem Ticket OCM-361 das Packaging verändert, so dass das CSS nicht mehr als Blob geladen, sondern im Header inlined wird. Der Fix wird im nächsten Release v1.2.15 enthalten sein, was wir hoffentlich Mitte/Ende nächster Woche bereitstellen können.
Beste Grüße
Christian
0 -
Author: astember - 9/30/2019 8:50
Das klingt nachdem was ich gesucht habe. Wir versuchen dies mal an der richtigen Stelle einzubinden.
0 -
Author: astember - 10/7/2019 17:06
Die Zuordnung des Workflow-Status zur Seite hatte ja über die Funktion setPreviewElement() funktioniert.
Ich hatte gehofft, dass über die richtige Zuordnung auch das Verschieben der Absätze funktioniert. Leider ist die Funktion nach wie vor ausgegraut. Ich vermute es könnte daran liegen, dass die Seite 2 Inhaltsbereich ("content_top" + "content_bottom") enthält. Wie kann man SNAP den korrekten Inhaltsbereich für die Zuordnung der Absätze "mitgeben"? Aktuell liegen die Absätze als <section>-HTML-Elemente inklusive Absatz-Preview-ID innerhalb eines einzelnen DIV-Containers mit der entsprechenden Seiten-PreviewID.
0 -
Author: Peter_Jodeleit - 10/8/2019 10:25
Die Verschiebe-Aktion benötigt ein umschließendes div mit der previewId des Body-Bereichs, wenn das Template mehr als einen Body-Bereich hat.
Könnt ihr das ausprobieren?
0 -
Author: astember - 10/8/2019 11:56
Ich habe noch einmal versucht das umschließende DIV mit folgender ID zu umschließen:
previewId(element: #global.page.body("content_top"))
Leider klappt das dennoch nicht.
Ich schaue mal parallel, ob ich noch Fehler in der HTML Struktur finde:
Der aktuelle Output liegt hier:
0 -
Author: Peter_Jodeleit - 10/8/2019 14:42
Anhand des HTMLs kann ich keinen Fehler erkennen. Der Button ist disabled, wenn kein möglicher Zielknoten gefunden wird. Mögliche Zielknoten sind der Seiten-Knoten, Body-Knoten und Absatz-Knoten (jeweils ausgezeichnet über die entsprechende data-preview-id). Geprüft wird dabei, ob das Template des Absatzes in dem entsprechendem Body erlaubt ist bzw. bei dem Seiten-Knoten im ersten Body.
Wenn dir das nicht weiterhilft, dann würde ich vorschlagen, das du uns das Projekt zukommen lässt, damit wir das Problem weiter eingrenzen können. Dafür am besten ein Ticket bei unserem TechSupport öffnen und auf die Diskussion hier verweisen.
0 -
Author: astember - 10/9/2019 10:36
Ich habe mal ein Support Ticket erstellt (#41264). Was mich noch wundert ist, dass das Anlegen neuer Absätze über die CC Widgets funktioniert und an der richtigen Stelle eingefügt wird. Mir fehlt noch etwas der Hinweis wie man die CC Funktionen z.B. über die WE_API oder Snap dahingehend in der Browser-Console debuggen könnte. Eine weitere Vermutung von mir wäre, dass möglicherweise Salesforce die Kontrolle auf die DOM Absatzelemente innerhalb der Community Seite einschränkt. Ich konnte dazu allerdings bisher keinen Hinweis in der Browser-Console erkennen.
0 -
Author: Peter_Jodeleit - 10/9/2019 10:54
Zum Debuggen kannst du die Snap-Funktionen auch über die Browser-Konsole aufrufen (Doku: snap Documentation). Achtung, dafür muss der App-Frame in der Browser-Konsole ausgewählt sein!
0 -
Author: astember - 10/9/2019 13:06
Ich habe schon versucht ein bisschen mit der API zu experimentieren. Mit den Befehl .moveSection hatte ich aber weder in den Demo-Seiten noch in der Salesforce Einbindung Erfolg.
Hier mal meine Versuche.
TPP_SNAP.moveSection("eyJkYXRhLWZzLWF0dHJzIjoiZXlKc1lXNW5kV0ZuWlVGaVluSmxkbWxoZEdsdmJpSTZJa1JGSW4wPSIsImRhdGEtZnMtaWQiOiJleUpwWkNJNk1URXpOemdzSW5OMGIzSmxJam9pVUVGSFJWTlVUMUpGSW4wPSJ9","eyJkYXRhLWZzLWF0dHJzIjoiZXlKc1lXNW5kV0ZuWlVGaVluSmxkbWxoZEdsdmJpSTZJa1JGSW4wPSIsImRhdGEtZnMtaWQiOiJleUpwWkNJNk1URXpOemtzSW5OMGIzSmxJam9pVUVGSFJWTlVUMUpGSW4wPSJ9", {before:false, copy:false, result:false});
Promise {<rejected>: ReferenceError: getElementStatus is not defined
at h.actions.moveSection (https://devgew1-demos…}
aura_prod.js:930 null ReferenceError: getElementStatus is not defined
at h.actions.moveSection (index.js:674)
at <anonymous>:1:10
(anonymous) @ aura_prod.js:930
He.e.$$lwcEventWrapper$$ @ aura_prod.js:1
index.js:674 Uncaught (in promise) ReferenceError: getElementStatus is not defined
at h.actions.moveSection (index.js:674)
at <anonymous>:1:10
moveSection @ index.js:674
(anonymous) @ VM644:1
TPP_SNAP.getElementStatus("eyJkYXRhLWZzLWF0dHJzIjoiZXlKc1lXNW5kV0ZuWlVGaVluSmxkbWxoZEdsdmJpSTZJa1JGSW4wPSIsImRhdGEtZnMtaWQiOiJleUpwWkNJNk1URXpOemdzSW5OMGIzSmxJam9pVUVGSFJWTlVUMUpGSW4wPSJ9")
Promise {<pending>}__proto__: Promise[[PromiseStatus]]: "resolved"[[PromiseValue]]: Object
TPP_SNAP.getElementStatus("eyJkYXRhLWZzLWF0dHJzIjoiZXlKc1lXNW5kV0ZuWlVGaVluSmxkbWxoZEdsdmJpSTZJa1JGSW4wPSIsImRhdGEtZnMtaWQiOiJleUpwWkNJNk1URXpOemtzSW5OMGIzSmxJam9pVUVGSFJWTlVUMUpGSW4wPSJ9")
Promise {<pending>}
0 -
Author: Peter_Jodeleit - 10/10/2019 14:34
Stimmt, die API-Methode "moveSection" wirft in der aktuellen Version diesen Fehler. Ich habe ein Ticket dafür geöffnet: OCM-368.
Das Verschieben über den Standard-Button ist aber unabhängig davon und funktioniert auch auf unserem Testsystem.0 -
Author: Peter_Jodeleit - 10/23/2019 16:24
Leider überschreibt das JavaScript der Salesforce Lightning Community die Funktionen von "document", so dass diese keine Ergebnisse liefern für document.querySelectorAll('[data-preview-id]'). Damit findet die von uns mitgelieferten Funktion "Absatz-Verschieben" keine Verschiebe-Ziele und ist deaktiv.
astember Kannst du das hier dann als "gelöst" kennzeichnen?
Zu dem anderen Problem: Den Fix für OCM-368 liefern wir dann wahrscheinlich mit der nächsten Freigabe aus.0
Please sign in to leave a comment.
Comments
16 comments