Browsing "Older Posts"

Restore APEX Report Region Selects

Von Tobias Arnhold → 10.27.2010
Maybe you came in the situation when you created an APEX report and during your development you unfortunately saved it with the wrong selection.

It happened a couple of times to me...

I found a way how you can restore such a lost selection easily within a SQL statement:

select PAGE_ID,
PAGE_NAME,
REGION_NAME,
TEMPLATE,
STATIC_ID,
REGION_SOURCE,
SOURCE_TYPE
from APEX_APPLICATION_PAGE_REGIONS
as of timestamp sysdate - 100 / (24 * 60)
-- Minus 100 Minutes
where APPLICATION_ID = '100'
and PAGE_ID = 100;

Just use the Oracle flashback feature inside the APEX View "APEX_APPLICATION_PAGE_REGIONS" and restore it from your redolog files. Column REGION_SOURCE includes the original selection.
APEX-AT-WORK no image

Tooltip der Extraklasse

Von Tobias Arnhold → 10.23.2010
Ich hatte ja vor nicht allzu langer Zeit schon erwähnt das ich ne Tooltip Anwendung erstellen wollte. Leider hat es die Zeit nicht ganz zugelassen.

Seit APEX 4.0 sind die Tooltips ja eh dynamisch und eigentlich brauch jetzt niemand mehr ne Speziallösung! Eigentlich...

Es gibt eine Tooltip Art die APEX noch nicht von Haus aus unterstützt: Moveover-Tooltips
Anzeige einer Infobox wenn ich mich über dem Item befinde.

Beispiel: http://www.ta-it-consulting.de/tooltip_example.html

Die Lösung basiert auf dem Quellcode von Swazz mit ihrem Tooltip Plugin: Boxover.
Paulo Vale schrieb bereits über die Integration dieses Tooltips. Damit auch die Deutsche Community dran teilhaben darf, dachte ich mir, ich erweitere die Anleitung und zeige was alles möglich ist.
Leider ist die offizielle Beispielseite nicht mehr Online. Die Javascript Datei könnt ihr hier runterladen: http://ta-it-consulting.de/boxover_tooltip.js

1. Installation - HTML Header:

<!-- TOOLTIP START -->
// Source code
<script type="text/javascript" src="#APP_IMAGES#boxover_tooltip.js"></script>

// Erweitertes Layout
<style type="text/css">
.hlpHeader{font-weight:bold;width:320px;font-family:arial;border:1px solid #6F6F6F;padding:3;fontsize:11;
color:#FFFFFF;background:#8F8F8F;filter:alpha(opacity=85);opacity:0.85;
}

.hlpBody{width:320px;font-family:arial;border-bottom:1px solid #6F6F6F;border-left:1px solid #6F6F6F;
border-right:1px solid #6F6F6F;padding:3;fontsize:11;color:#FFFFFF;background:#BFBFBF;filter:alpha(opacity=85);
opacity:0.85;
}
</style>
<!-- TOOLTIP END -->


2. Konfiguration - Item > HTML Form Element Attributes:

Beispiel 1:
TITLE="header=[Information] body=[Hilfetext fuer dieses Item]"

Beispiel 2:
TITLE="cssbody=[hlpBody] cssheader=[hlpHeader] header=[Information] body=[Hilfetext]"

Beispiel 3:
TITLE="fixedrelx=[1] fixedrely=[-56] header=[Information] body=[Hilfetext]"

Anleitung:
http://opatia.com/js/BoxOverParameters.htm

Einstellungsmöglichkeiten:

































































































ParameterMögliche WerteDefault Beschreibung
headerAny characterblankSpecifies the header text of the caption
bodyAny characterblankSpecifies the body text of the caption
fixedrelxAny integerN/AForces the X-coordinate of the caption to stay fixed (offset is relative to the annotated HTML element)
fixedrelyAny integerN/AForces the Y-coordinate of the caption to stay fixed (offset is relative to the annotated HTML element)
fixedabsxAny integerN/AForces the X-coordinate of the caption to stay fixed (X is an offset relative to the body of the HTML document)
fixedabsyAny integerN/AForces the Y-coordinate of the caption to stay fixed (Y is an offset relative to the body of the HTML document)
windowlockOn / OffOnMake caption stick to side of the window if user moves close to the side of the screen.
cssbodyAny defined style classBuilt in stylesSpecifies CSS class for styles to be used on caption body.
cssheaderAny defined style classBuilt in stylesSpecifies CSS class for styles to be used on caption header.
offsetxAny integer10Horizontal offset, in pixels, of the caption relative to the mouse cursor.
offsetyAny integer10Vertical offset, in pixels, of the caption relative to the mouse cursor.
doubleclickstopOn / OffOnSpecifies whether to halt the caption when the user double clicks on the HTML element with the caption.
singleclickstopOn / OffOffSpecifies whether to halt the caption when the user single clicks on the HTML element with the caption.

- if both singleclickstop and doubleclickstop are set to "on", singleslclickstop takes preference.
requireclickOn / OffOffSpecifies whether the user must first click the element before a
tooltip appears. Intended for use on links so that information appears
while the link is followed.
hideselectsOn / OffOffSpecifies whether to hide all SELECT boxes on page when popup is activated.
fadeOn / OffOffSpecifies whether to fade tooltip into visibility.
fadespeedNumber between 0 and 10.04Specifies how fast to fade in tooltip.
delayAny integer0Specifies delay in milliseconds before tooltip displays.

Dynamic Actions Beispiel

Von Tobias Arnhold → 10.10.2010
Vor einer Weile wurde eine super Anleitung für die Verwendung von Dynamic Actions in APEX 4.0 auf der deutschen APEX Community Seite erstellt. http://www.oracle.com/webfolder/technetwork/de/community/apex/tipps/apex40-dynamicactions/index.html
Damit auch der letzte die Vorteile von Dynamic Actions versteht, habe ich auf dieser Anleitung basierend eine kleine Anwendung erstellt.


Beispiel: http://ta-it-consulting.de/trigger_example.html

Wer Interesse am Code hat oder nähere Infos zu APEX 4.0 bzw. Dynamic Actions benötigt. Kann mich unter tobias-arnhold@hotmail.de einfach anmailen.
APEX-AT-WORK no image

Die nächsten Tutorials warten bereits...

Von Tobias Arnhold → 9.01.2010
In den nächsten Wochen und Monaten habe ich vor ein paar wirklich nützliche APEX Erweiterungen vorzustellen. In Form von Anleitungen und Beispielapplikationen soll jeder in die Lage versetzt werden, professionelle Anwendungen mit den neuesten Techniken zu entwickeln.

Die folgenden Themen stehen derzeit auf meiner Agenda:
- Tooltip Applikation: Viele Tooltip/Infobox Beispiele für APEX gibt es im Netz, nur keiner hat einen wirklichen Überblick darüber. Diese Applikation soll Abhilfe schaffen. Ein alter Post zeigt ein paar Möglichkeiten auf: All about Tooltips
- jExpand Report: Eine geniale Reportlösung mit der es möglich ist, Reports mit vielen Spalten auch auf kleinen Raum unter zu bekommen! Eine Implementierung als APEX Template wird das Ziel sein. Beispiel mit Testdaten
- JQuery Layouts: Ähnlich ExtJS ist es möglich bewegliche Seitenbereiche auch mit JQuery umzusetzen. Ein Ansatz der bisher kaum Gehör bei den APEX Entwicklern fand und endlich auch mit OpenSource Mitteln umgesetzt werden kann. http://fabrizioballiano.net/jquery-border-layout/ und http://layout.jquery-dev.net/ Bis dahin schaut doch mal in meine ExtJS Lösung rein: APEX-AT-WORK Developer Competition 2009 Edition

Ich denke das sind Themen die viele APEX Entwickler interessieren könnten. Deswegen gebt doch einfach mal ein kurzes Feedback zu meinen Ideen.

Silbentrennung (Hyphenation) in APEX (GER)

Von Tobias Arnhold → 8.20.2010
Viele Entwickler in APEX kennen das Problem professionelle gut strukturierte Reports zu entwickeln, deren Spaltenbreiten nicht über die gewünschten maximalen Breiten hinausragen.
Folgende Bedingungen erschweren die einfache Entwicklung von Reports:
- Bildschirmauflösung ist eingeschränkt (1024x768)
- Zu lange Texte in Reports (Spaltennamen, Spaltenwerte)
- Nutzung verschiedener Browser (Firefox, Internet Explorer 6, 7 und 8,Safari,...)
- Übersetzung in verschiedene Sprachen notwendig
- Nutzung unterschiedlicher Layouts mit verschiedenen CSS Eigenschaften

Vor einer Weile habe ich einen Tipp beschrieben der die Problematik ein wenig verbessern kann: Automatic linebreak if word breaks out of table element

Nun habe ich eine wirklich gut Lösung gefunden die mit ein paar einfachen Anpassungen erstaunliche Wirkungen in ihren APEX Reports hervorrufen kann. Das Zauberwort heißt Silbentrennung (Engl.: Hyphenation). Die Lösung besteht darin den dargestellten Text durch ein Javascript Plugin entsprechend der maximalen Feldbreite zu begrenzen.

Dazu wird nach jeder Aktualisierung eine Funktion gestartet, die die Felder entsprechend anpasst.
Die Anwendung heißt Hyphenator, kann in allen gängigen Sprachen dynamisch verwendet werden, ist ein Javascript Plugin und ist hier zu finden http://code.google.com/p/hyphenator/

Ein weiterer Entwickler hat ein passendes Jquery Plugin geschrieben: http://bitbucket.org/webvariants/jquery-hyphenator/wiki/Home

In dieser Kombination ist die Verwendung in APEX 3.2 oder 4.0 denkbar einfach.

Anleitung:
1. Datei downloaden
Downloaden Sie die aktuell stabile Version von hier http://hyphenator.googlecode.com/files/Hyphenator%202.5.0.zip und hier http://bitbucket.org/webvariants/jquery-hyphenator/get/v1.1.0.zip

2. Kopieren Sie das Jquery Plugin auf ihren Webspace (APEX /i/ Verzeichnis)
  /i/Hyphenator/Hyphenator.js (Umbennen von hyphenator.min.js)
  /i/Hyphenator/jquery.hyphenator.min.js">
3. Kopieren Sie den Ordner patterns aus dem Hyphenator Download in ihr Verz.
  /i/Hyphenator/patterns/de.js

4. Definieren des Plugins in ihrem APEX HTML Header

<!-- START: Hyphenator Plugin -->
<style type="text/css">
.hyph {
/* WIDTH Parameter wird erst ueber Spalte definiert */
display:block;
/* DISPLAY:BLOCK ist immer zwingend erforderlich */
overflow:hidden; float:left;
/* Schneidet alles Sichtbare über der max. Groesse ab, dadurch entstehen keine Fehler beim verkleinern, IE6 Fehlverhalten */
white-space:normal;
/* Darf niemals: white-space:nowrap als Einstellung in einer Tabelle haben */
word-wrap: break-word;z-index:999;
/* Fuer IE6 */
}
</style>
<script type="text/javascript" src="/i/Hyphenator/Hyphenator.js"></script>
<script type="text/javascript" src="/i/Hyphenator/jquery.hyphenator.min.js"></script>
<!-- ENDE: Hyphenator Plugin -->

5. Deaktivieren Sie in ihrem APEX Report Template folgenden CSS Einstellung
  white-space:nowrap mit white-space:normal;

<!-- Column Heading Template -->
<th ... style="white-space:normal;z-index:999;word-wrap: break-word;">#COLUMN_HEADER#</th>

<!-- Column Template 1 -->
<td ... style="white-space:normal;z-index:999;word-wrap: break-word;">#COLUMN_VALUE#</td>

6. Report Spalten Anpassen

<!-- Column Heading: -->
<span class="hyph" style="width:50px;text-decoration: underline;">Anwendungsname</span>

<!-- HTML Expression -->
<span class="hyph" style="width:50px;">#NAME#</span>

Info: Hier definieren Sie die maximale Breite und die Option Hyphenation zu verwenden.

7. APEX Dynamic Action für Report anlegen

After Report Refresh Trigger mit javascript Ausführung: $('.hyph').hyphenate();
Im Idealfall sollte sollte ein ähnlicher Report wie in meiner Beispielanwendung herauskommen:
http://ta-it-consulting.de/hyphenation.html

Info 1: Die LANG Option im HTML Tag definiert die Übersetzungssprache <html lang="de">
Info 2: Das Plugin kann auch in APEX 3.2 verwendet werden, außerdem ist der IE6 ohne Probleme verwendbar.

Das Ergebnis ist eine universelle Lösung die all ihre Reportprobleme lösen könnte.

Der einzige Haken ist eine erhöhte CPU Auslastung auf der Clientebene. Also Vorsicht vor verschwenderischer Übersetzung.

Mal was anderes: Inzwischen ist auch der AAW-DBMON ONLINE: http://ta-it-consulting.de/dbmon.html
APEX-AT-WORK no image

Debugging hint for your APEX pl/sql processes

Von Tobias Arnhold → 8.12.2010
Often I use to much pl/sql code inside my APEX processes. As we all know it is just better using complex code inside packages. In case you got trouble with your APEX code and you can't find a fast way debugging it. Just use some javascript popup boxes:

-- Test Box
htp.prn('<script>alert("TEST");</script>');

-- Box with item values showing an IF validation:
htp.prn('<script>alert("'||:P1_TEST1 || ' = ' || :P1_TEST2 || '");</script>');

Summer is coming to an end and it becomes time to blog some more. Right now I'm developing a new small APEX application which describes a way how you can easily use hyphenation inside your application. In that combination I also found a trick how you can prevent the misbehavior of IE6 with fixed column width inside your Reports.

Tobias