mstaender
I'm new here

ClientScriptOperation hängt ab 2. Ausführung

Jump to solution

Hi,

ich habe gerade ein Problem im ContentCreator das ich noch nicht ganz verstanden habe.

In einer WebApp für den ContentCreator nutze ich ExecutableToolbarActionsItem um ein Script anzuzeigen das eine externe Webseite in einem IFrame im CC anzeigt.

Die Methode die mir den JavaScript Code erzeugt:

protected String getIFrameDialogJavascript(String title, String url) {

    return "var dialog = top.WE_API.Common.createDialog();"
            + "dialog.setTitle('"+title+"');"
            + "dialog.addButton('Close', function(){dialog.hide();});"
            + "dialog.setSize(1200, 600);"
            + "elem = document.createElement('iframe');"
            + "elem.setAttribute('src', '"+url+"');"
            + "elem.setAttribute('width', '100%');"
            + "elem.setAttribute('height', '100%');"
            + "elem.setAttribute('frameborder', 0);"
            + "dialog.setContent(elem);"
            + "dialog.show();";

}

Ich rufe nun den Code auf um ein Skript auszuführen:

ClientScriptOperation scriptOperation = _operationAgent.getOperation(ClientScriptOperation.TYPE);

LoggerUtils.logTrace("Executing script: " + script, ScriptExecutorTask.class);

scriptOperation.perform(script, false);

LoggerUtils.logTrace("Done executing script: " + script, ScriptExecutorTask.class);

Beim ersten Aufruf taucht nun eine Box auf in der meine gewünschte Seite dargestellt wird und im Log sehe ich alle erwarteten Ausgaben. So weit so gut. Klicke ich jetzt aber ein zweites Mal auf den Button im CC, dann wird wieder das "Executing script" log ausgegeben und danach nichts mehr. Es öffnet sich auch kein Fenster. Es sieht aus als würde der Aufruf einfach hängen bleiben.

der _operationAgent ist eine Variable die ich in meiner Klasse einmal im Konstruktor erzeuge, daran sollte es nicht liegen aber welche Gründe kann es geben, dass genau die gleiche Operation beim 2. Aufruf hängt?

Mal davon abgesehen, dass es nicht am JS Code hängen sollte kann ich diesen manuell nach wie vor z.B. über Firebug ausführen => das erwartete Ergebnis (Popup mit IFrame) taucht auf.

Hilfe?

MfG Marcus

1 Solution

Accepted Solutions
StefanSchulz
I'm new here

Hall Marcus,

Marcus Beckerle schrieb:

der _operationAgent ist eine Variable die ich in meiner Klasse einmal im Konstruktor erzeuge, daran sollte es nicht liegen

ich würde vermuten, dass es genau daran liegt. Mit "erzeugen" meinst du sicherlich, dass du dir den Agent vom Context erfragst. Das heißt aber auch, dass der Agent nur in dem einen Context funktioniert. Beim ersten Aufruf wird der Context, den du als Parameter für die Ausführung erhälst, der gleiche sein, wie im Konstruktor. Bei der zweiten Ausführung jedoch nicht.

Versuche bitte, den Weg über den Context-Parameter der Methode zu gehen, um dir Agent und dann Operation zu holen. Das sollte dein Problem lösen.

Beste Grüße

Stefan

View solution in original post

0 Kudos
2 Replies
StefanSchulz
I'm new here

Hall Marcus,

Marcus Beckerle schrieb:

der _operationAgent ist eine Variable die ich in meiner Klasse einmal im Konstruktor erzeuge, daran sollte es nicht liegen

ich würde vermuten, dass es genau daran liegt. Mit "erzeugen" meinst du sicherlich, dass du dir den Agent vom Context erfragst. Das heißt aber auch, dass der Agent nur in dem einen Context funktioniert. Beim ersten Aufruf wird der Context, den du als Parameter für die Ausführung erhälst, der gleiche sein, wie im Konstruktor. Bei der zweiten Ausführung jedoch nicht.

Versuche bitte, den Weg über den Context-Parameter der Methode zu gehen, um dir Agent und dann Operation zu holen. Das sollte dein Problem lösen.

Beste Grüße

Stefan

0 Kudos

Hi Stefan,

in der Tat lag es daran, dass ich zwar den Context immer frisch verarbeitet habe aber an einer Stelle hatte ich eine statische Variable die ein Objekt mit dem alten alten Kontext enthielt.

DANKE Smiley Happy

MfG Marcus