astember
Returning Observer

FirstSpirit Third-Party-Preview API Integration with Salesforce Lightning Community

Jump to solution

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.

0 Kudos
16 Replies

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:

https://devgew1-demoshop.cs84.force.com/example/s/cms

0 Kudos

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.

Peter
0 Kudos

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 Kudos

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!

Peter
0 Kudos

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 Kudos

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.

Peter
0 Kudos

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.

Peter
0 Kudos