Browsing "Older Posts"

HowTo: Dynamisch berechnete Werte setzen

Von Tobias Arnhold → 9.16.2012

Wie berechne ich während der Laufzeit neue Werte und aktualisierte anschließend meine APEX Items.
Die Lösung für diese Fragestellung ist recht einfach, man nehme eine Dynamic Action nutzt die "Set Value"-Funktion um mit dieser mehrere APEX Items während der Laufzeit durch berechnete Werte zu setzen.

An Hand des folgenden Beispiels erkennen Sie die Logik:
Die Items haben  folgende Namen:
P3_TEAM
P3_NAME
P3_PUNKTE
P3_ANZ_MEISTERSCHAFTEN

Bei Auswahl eines Teams werden automatisch die Felder Name, Punkte und Anzahl Meisterschaften gesetzt.

Dieses Beispiel besteht aus einer Dynamic Action, die 3 "True"-Aktionen beinhaltet.
Die erste "True"-Aktion reagiert auf das Change Event beim APEX Item P3_TEAM (unsere Select List).
Um die Werte entsprechend zu bestimmen wird eine Set Value Funktion ausgeführt. Diese berechnet die Werte für die Items: P3_PUNKTE & P3_ANZ_MEISTERSCHAFTEN
Außerdem wird dem Item P3_NAME der Rückgabewert unseres Teams zugewiesen.
Dies geschieht auf APEX Session und auf Browser Ebene.

Nun wiederholen wir nur die Übergabe der Parameter für die anderen beiden Items, in dem wir zwei weitere "True"-Aktionen anlegen.
Es mag vielleicht etwas komplex aussehen, ist aber mit etwas Übung recht einfach anzuwenden. Außerdem bleiben Sie die ganze Zeit im APEX Standard und müssen so nicht, eine Sonderlocke aufsetzen um einen individuellen Nutzerwunsch umzusetzen.

PDF Creation with direct print dialog

Von Tobias Arnhold → 9.12.2012

This solution is based on the usage of Jasper Reports to create PDF reports inside APEX.

You may had the requirement to create a PDF document with a direct print dialog but there should be no download pop-up dialog or an in-line view appear where the end user explicitly needed to click on the print button. Seems to be a simple problem: Print dialog should immediately appear after PDF creation.

Actualy there is a quite easy workaround available:
Just add this new property under the properties section (for you document) in the iReport builder settings.

/* Property name */
net.sf.jasperreports.export.pdf.javascript
/* Property value */
this.print({bUI: true,bSilent: true,bShrinkToFit: false});
 
Now every time you create the PDF and open it. The print dialog starts automatically (at least with Adobe PDF).

Next step is to configure a way so that you do not need to open or close the PDF manually.
For that add a new HTML area with the following code on your master page (like page 1).

<script>
function refreshPDF(){
var iframe = document.getElementById('region_iframe_pdf'); 
iframe.src = 'f?p=&APP_ID.:2:&SESSION.:::2::';
};
</script>
<!--  iFrame element which leads to page 2 (including our Jasper Reports Call as BeforeHeader Process) -->
<iframe id="region_iframe_pdf" src="#" style="border:0px #FFFFFF none;" name="iFramePDF" scrolling="no" frameborder="0" marginheight="0px" marginwidth="0px" height="1px" width="1px"></iframe>
Now we only need to call the javascript function to refresh our page 2 (which includes our PDF generation):
javscript:refreshPDF()
This could be added as button href link or as a dynamic action.
The generated PDF on page 2 must be an embedded PDF.
The trick is that the iFrame is more or less not visible to the end user and becomes only refreshed when the end user calls the function: refreshPDF

The idea and most of the code comes from my good fellow Sebastian.

Balken Chart (Progress Bar) - Hidden Feature

Von Tobias Arnhold → 8.28.2012
Viele von euch kennen bestimmt die Balken-Grafik die Ihr innerhalb eines APEX Reports erstellen könnt:
Zu diesem Thema gibt es einige sehr gute Anleitungen:
EN:
http://www.inside-oracle-apex.com/more-undocumented-new-features-in-oracle-apex-31/#high_2
http://www.talkapex.com/2009/06/displaying-percentage-bar-in-apex.html
DE:
http://frankschmidt.blogspot.de/2009/06/prozentbalken-in-apex-reports.html

Neben der einfachen Verwendung in den Report Attributes, gibt es auch die Möglichkeit die Charts direkt mit einer APEX_UTIL Funktion zu generieren:
APEX_UTIL Documentation
APEX_UTIL.HTML_PCT_GRAPH_MASK (
    p_number         IN NUMBER    DEFAULT NULL,
    p_size           IN NUMBER    DEFAULT 100,
    p_background     IN VARCHAR2  DEFAULT NULL,
    p_bar_background IN VARCHAR2  DEFAULT NULL,
    p_format         IN VARCHAR2  DEFAULT NULL)
RETURN VARCHAR2;

In diesem Zusammenhang hat Peter Raganitsch die Generierung einer Balken-Grafik innerhalb eines APEX Items beschrieben:
DOAG Tipps & Tricks: So erstellen Sie mit APEX eine Balkengrafik-Formatmaske in einem Page-Item

Nun hat man oft die Notwendigkeit eine bedingte Anzeige (Beispiel: Ampel) abzubilden. Dies geht auch mit den Balken-Grafiken in APEX. Ich zeige dies mal anhand eines Report Beispiels:
select
 case when FINISHED_IN_PERCENT <= 30    
        then APEX_UTIL.HTML_PCT_GRAPH_MASK (FINISHED_IN_PERCENT,100,'cccccc','BF381A')
      when FINISHED_IN_PERCENT >= 31 and 
           FINISHED_IN_PERCENT <= 70
        then APEX_UTIL.HTML_PCT_GRAPH_MASK (FINISHED_IN_PERCENT,100,'cccccc','EFD13B') 
      when FINISHED_IN_PERCENT >= 71
        then APEX_UTIL.HTML_PCT_GRAPH_MASK (FINISHED_IN_PERCENT,100,'cccccc','7DC24B') 
 end as chart,
 ID
from ORDERS
APEX-AT-WORK no image

Open Source HTML/JS Charting Solutions

Von Tobias Arnhold → 8.23.2012
APEX-AT-WORK no image

APEX Tabular Forms mit Before Insert Trigger

Von Tobias Arnhold → 8.20.2012
In vielen meiner Projekte nutze ich Tabular Forms. Bei Standardspalten wie "geändert am" oder "geändert von" ist es leider nicht ohne weiteres möglich das SYSDATE und den APP_USER mitzugeben.

Der Grund liegt in den wenigen Einstellmöglichkeiten (bis mindestens APEX 4.1).  Es gibt nur einen Default Wert den ich setzen kann. Dieser wird aber nicht bei einem Update Prozess gezogen und der alte Wert bleibt bestehen.

Eine Lösung stellt hier ein "before insert or update"-Trigger dar:
CREATE OR REPLACE TRIGGER "TRG_NACHRICHTEN" before
  INSERT OR
  UPDATE ON TBL_NACHRICHTEN FOR EACH row BEGIN
  :NEW.geaendert_am := sysdate;
  :NEW.geaendert_von := UPPER(NVL(v('APP_USER'),USER));
END;
APEX-AT-WORK no image

Neue Version des SQL Developers (3.2)

Von Tobias Arnhold →
Es gibt eine neue Version des Oracle SQL Developers:
http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html

Neben vielen Bugfixes und Usability Erweiterungen, wurde auch eine Administrationsumgebung für den APEX Listener hinzugefügt. Siehe Release Notes - New Features:
http://www.oracle.com/technetwork/developer-tools/sql-developer/sqldev-newfeatures32-1731840.html

Aktuell gibt es eine Early Adopter (Beta) des APEX Listeners in der Version 2.0:
http://www.oracle.com/technetwork/developer-tools/apex-listener/downloads/listener-beta-1727062.html

Achja wer es bisher verpasst hat, auch APEX gibt es in einer zweiten Version des Early Adopters zum testen:
http://joelkallman.blogspot.de/2012/07/application-express-42-early-adopter-2.html

Noch ne Info:
Am 26.09 findet eine APEX SIG in Karlsruhe statt. Ich selbst halte auch ein Vortrag:
http://www.doag.org/termine/termine.php?tid=440574

IR Bug after import of an application with new id

Von Tobias Arnhold → 8.07.2012
Today I discovered a really cruel bug in APEX.
We migrated an APEX 4.0 application into a new workspace with APEX 4.1.
The application got a new application id. The application used a lot of interactive reports. Some of the report columns where created as "Display as Text (based on LOV, escape special characters)".
After the import all LOV assignments where dropped.

Did anyone else discovered the same issue? Is there any bug fix planned in a newer version of APEX. 
In the new workspace we use version 4.1.0.00.32.