johni
I'm new here

Zugriff auf WebEdit Oberfläche aus ExecutableToolbarActionsItem

Ich habe ein Toolbar Plugin vom Typ ExecutableToolbarActionsItem geschrieben.

Nachdem die Aktion ausgeführt wurde, will ich:

  • Den vorschau Cache löschen
  • Die aktuelle Vorschau (von einem bestimmten Element aus) aktualisieren

Wie kann ich auf WebEdit zugreifen und diese Aktionen auslösen?

0 Kudos
4 Replies
gockel
Crownpeak employee

Hallo,

Den vorschau Cache löschen

das geht nicht

Die aktuelle Vorschau (von einem bestimmten Element aus) aktualisieren

Ich gehe mal davon aus, dass die Aktion eine Veränderung an Elementen vornimmt, die in der Vorschau dargestellt werden und nun die aktualisierte Vorschau angezeigt werden soll.

Hierzu könnte man anstelle des ExecutableToolbarActionsItem ein ClientScriptProvidingToolbarActionsItem verwenden. Die Implementierung von #getScript erhält auch einen ToolbarContext.

[EDIT] In dieser würde dann zunächst die verändernde Operation durchgeführt. Das funktioniert so leider doch nicht, da die Methode #getScript bereits zum Zeitpunkt der Anzeige aufgerufen wird, dass heißt bevor die Toolbaraktion durch den Benutzer (Klick) ausgelöst wurde. Die verändernde Operation würde also zu einem völlig falschen (viel zu frühen) Zeitpunkt passieren.

Die Rückgabe ist dann ein JavaScript welches den Refresh der Vorschau auslöst und zwar über die Webclient JavaScript API (WE_API).

Das zurückgegebene Script könnte dann z.B. so aussehen: "top.WE_API.Preview.reload();" um die aktuelle Vorschau zu aktualisieren.

Um ein konkretes Element anzuspringen, könnte #jumpTo verwendet werden.

siehe auch die Beispiel-Implementierung für den Webclient. Im konkreten Fall: PageUrlScriptToolbarActionsItem

[/EDIT]

Man müsste in der #getScript Methode also ein JavaScript-Aufruf zusammenbauen, welcher dann wieder ein serverseitiges Skript aufruft, welches dann die verändernde Aktion durchführt.

Ich versuche das mal zu skizzieren.

Der ToolbarContext des ClientScriptProvidingToolbarActionsItem erhält als Kontextelement, ja immer das aktuelle Element der Webclient-Vorschau. Auf Basis dieses Elementes soll zum Zeitpunkt der Ausführung der Aktion eine Operation 'X' ausgeführt werden.

Die Methode #getScript wird schon vor der Anzeige der Aktion in der Toolbar aufgerufen. In der Implementierung dieser Methode DARF die Operation 'X' also nicht ausgeführt werden.

#getScript müsste also einen JavaScript-Aufruf liefern, der wiederrum ein entsprechend parametrisiertes Script aufruft über Common#execute

Pseudo-Beispiel für die Rückgabe von #getScript:

"top.WE_API.Common.execute(\"class:my.full.qualified.executable.OperationX\", {nodeId:42}, function(result) { WE_API.Preview.reload(); });"

Es wird also ein JavaScript zurückgegeben, welches über #execute eine Executable-Class (my.full.qualified.executable.OperationX) aufruft. Diese erhält alle benötigten Parameter (nodeId=42), um die OperationX ausführen zu können, da diese ja keinen Toolbarcontext mehr hat.

Darüberhinaus wird diesem Aufruf ein Callback übergeben (function), der dann den Refresh der Vorschau (Preview.reload()) auslöst.

Kann das ClientScriptProvidingToolbarActionsItem auch alles, was das ExecutableToolbarActionsItem kann?

Das wurde aus der Dokumentation nicht wirklich klar und ich bin davon ausgegangen, dass das hauptsächlich dafür da ist Javascript zurück zu geben (und nicht so viel kann).

0 Kudos
gockel
Crownpeak employee

Ich habe das obige Posting noch mal angepasst, da meine erste Aussage falsch war. s.o.

0 Kudos

Ok, vielen Dank, hat so funktioniert. Wobei ich die Id des aktuellen Elements nicht an die Executable übergeben habe, ich konnte das auch aus dem Context holen.

0 Kudos