Kategorien
Allgemein

Success Message nach Page Refresh [F5] vermeiden

Nach dem Speichern eines Formulars, wird in APEX üblicherweise eine Erfolgsmeldung angezeigt. Wenn der Benutzer danach die Seite aktualisiert [F5], erscheint diese Meldung erneut.

Wurde der entsprechende Prozess erneut ausgeführt? Denken wir an eine Meldung wie “E-Mail versendet”. Wurde die Mail ein weiteres mal versendet?

Ich war mir jedenfalls anfangs unsicher, bis ich es selbst ausprobiert habe. Ergebnis: Die Submit-Prozesse (Code im Bereich „Processing“) werden nicht nochmals ausgeführt. Das ist gut und richtig so.

Die Erfolgsmeldung wird aber leider trotzdem erneut angezeigt.

Wir kann man dieses Verhalten verhindern?

Die Success-Message wird über den Parameter success_msg in der URL angetriggert (siehe Screenshot). Damit die Nachricht beim Reload nicht mehr erscheint, müssen wir diesen Parameter loswerden. Das können wir mit ein paar Zeilen JavaScript erledigen.

Hier eine JavaScript-Funktion, die wir zentral ablegen können (zum Beispiel in einer eigenen Datei unter Shared Components). Testweise könnt ihr es auch auf der Seite unter “Function and Global Variable Declaration” ablegen.

function removeParam(key, sourceURL) {
    var rtn = sourceURL.split("?")[0],
        param,
        params_arr = [],
        queryString = (sourceURL.indexOf("?") !== -1) ? sourceURL.split("?")[1] : "";
    if (queryString !== "") {
        params_arr = queryString.split("&");
        for (var i = params_arr.length - 1; i >= 0; i -= 1) {
            param = params_arr[i].split("=")[0];
            if (param === key) {
                params_arr.splice(i, 1);
            }
        }
        rtn = rtn + "?" + params_arr.join("&");
    }
    return rtn;
}

Aufgerufen werden soll diese Funktion direkt beim Laden der Seite. Wir erstellen dazu folgenden Aufruf unter “Execute when Page Loads”.

window.history.pushState("object or string", "Title", removeParam("success_msg", window.location.href)); 

Der Parameter wird nach dem Laden der Seite entfernt und nach einem Page Refresh [F5] erscheint die Meldung dann nicht mehr.

Von Markus Hohloch

Selbständiger Berater für Softwareentwicklung und Informationstechnik. Schwerpunkte sind die Entwicklung von Web-Applikationen mit Oracle APEX oder Java und Jasper Reports.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.