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.

Kategorien
Allgemein

Avoid success message after page refresh [F5]

After storing a form, a success message is displayed usually . That message will be going to be shown again when user reloads the page [F5].

But, has that process been executed again? Let’s think of a message like “Email sent”. Has that mail been sent again?

I was unsure at first until I tried it myself. Result: The submit processes (code in the “Processing” section) are not executed again. That’s fair enough.

Unfortunately, the success message is still displayed again.

How can this behavior be prevented?

The success message is triggered via the parameter success_msg in the URL (see screenshot at the top). To prevent this message from appearing during reload, we have to get rid of this parameter. We can do this with a few lines of JavaScript.

Kategorien
Allgemein

DA nach Schließen des Modaldialogs per X-Icon oder Escape

Nach dem Schließen eines Modalen Dialogs ist es oft notwendig, in der aufrufenden Seite eine Dynamic Action (DA) auszulösen. In APEX gibt es dafür einen DA Event “Dialog Closed”. Damit kann zum Beispiel eine Region aktualisiert werden.

Wenn der Benutzer im Modalen Dialog allerdings die Taste Escape drückt oder das Schließen-Symbol (X) oben rechts benutzt, wird der Dialog zwar geschlossen, aber das Ereignis “Close Dialog” wird nicht ausgelöst. Hier die einfachste Lösung, die mir bekannt ist.

Auf der Seite des Modalen Dialogs muss unter Page › Dialog › Attributes folgender JavaScript-Code eingebunden werden:

close: function(event, ui) {
  apex.navigation.dialog.close(
    true, {dialogPageId:2}
  );
}

Die “2” am Parameter dialogPageId ist hierbei die Page-ID des Modal-Dialogs.

Kategorien
Allgemein

Dynamic Actions über Report-Link ausführen

Bei Buttons gibt es die Möglichkeit, Dynamic Actions (DA) zu hinterlegen, die bei Klick ausgeführt werden.

Wählbare Button-Actions

Bei Links in Reportspalten gibt es diese Option leider nicht.

Target-Types von Column-Links

Was kann man also tun, um eine DA auch darüber auszuführen?

Kategorien
Allgemein Kleine Tipps

RegEx für Mail-Adressen

Zur Validierung von E-Mail-Adressen verwende ich seit kurzem folgende Regular Expression:

^[a-zA-Z0-9]{1}[a-zA-Z0-9_+\.\-]{1,}@[a-zA-Z0-9]{1}[a-zA-Z0-9\.\-]{1,}\.{1}[a-zA-Z]{2,4}$

(Ich schreibe diesen Tipp vor allem für mich, damit ich beim nächsten mal nicht lange suchen muss. ^^)

Kategorien
Allgemein Kleine Tipps

APEX 5.1: Icons auf Font APEX umstellen

Mit Oracle APEX 5.1 wird eine neue Icon-Sammlung “Font APEX” mitgeliefert.  Diese sehen nicht nur schöner aus, sondern bieten auch mehr Icons als das bisherige “Font Awesome 4.2”. Wer von Font Awesome auf Font APEX umstellen will, geht folgenden Weg:

Shared Components \ Themes \ Edit Theme \ Icons \ Library

Kategorien
Allgemein

Wann findet in APEX ein Commit statt?

Diese Frage sollte eigentlich einfach zu beantworten sein, oder? Mit einem Submit werden alle Prozesse durchlaufen. Abschließend wird der Commit[1] ausgeführt. Wenn ein Fehler auftritt, wird per Rollback die Transaktion rückgängig gemacht.

Das bedeutet also das der Commit erst am Ende aller Submit-Prozesse durchgeführt wird. Normalerweise…

Kategorien
Allgemein

SQL: Gestern, letzte Woche, letzter Monat

select
  -- Last month period
  trunc(sysdate, 'mm') - interval '1' month last_month_start,
  trunc(sysdate, 'mm') - interval '1' second last_month_end,
  -- Last week period
  trunc(sysdate, 'iw') - interval '7' day last_week_start,
  trunc(sysdate, 'iw') - interval '1' second last_week_end,
  -- Last day period
  trunc(sysdate, 'dd') - interval '1' day last_day_start,
  trunc(sysdate, 'dd') - interval '1' second last_day_end
from dual
Kategorien
Allgemein

JasperReports-APEX-Integration: Vortrag, Source-Code und Demo

In dieser Woche habe ich einen Vortrag auf der DOAG-Konferenz 2016 gehalten. Das Thema lautete “Open-Source-Drucklösungen mit JasperReports”. Wie versprochen stelle ich hier das gezeigte PL/SQL-Package und die Demo-Applikation zum Download zur Verfügung. Außerdem findet ihr hier auch die eigentliche Präsentation.

jr_server_integration_package.zip
jr_server_integration_demo.zip
Drucklösung-mit-JasperReorts-und-APEX.pdf

Kategorien
Allgemein

JasperReports: Ein Überblick

In Software-Projekten erhalte ich oft die Anforderung zur Realisierung von Drucklösungen und formatierten Exporten. Rechnungen, Broschüren, Einsatzpläne und Statusberichte sind nur einige Beispiele – also Dokumente mit identischer Vorlage und unterschiedlichen Inhalten.

Dafür verwende ich gerne die Open-Source-Lösung von JasperReports, eine weit verbreitetes Reporting-Tool