10. August 2015

Einfaches Logging und Debugging, Version 2.0

Jede Applikation braucht eine einfache Methode um Fehler zu speichern. Die folgende Technik kann desweiteren dazu benutzt werden um Forms, Reports und PL/SQL zu debuggen. In der neuen Version 2.0 wird nun auch der Username gespeichert und der Viewname hat sich leicht geändert.

Zuerst einmal erstellen wir die Tabelle, Sequence und eine View um die Logging-Information zu speichern:
CREATE TABLE Logging (
  ID                         NUMBER(9) NOT NULL,
  SESSION_ID                 NUMBER(9),
  INSERT_DATE                DATE NOT NULL,
  INSERT_USER                VARCHAR2(30) NOT NULL,
  TEXT                       VARCHAR2(2000) NOT NULL);

CREATE SEQUENCE Logging_SEQ;

CREATE OR REPLACE VIEW Logging_desc_V
         (ID, SESSION_ID, INSERT_DATE, INSERT_USER, TEXT)
AS SELECT ID, SESSION_ID, INSERT_DATE, INSERT_USER, TEXT
     FROM Logging
    ORDER BY SESSION_ID DESC, ID DESC;

Als nächstes brauchen wir ein Package mit den Prozeduren, die für das Logging benötigt werden.
CREATE OR REPLACE PACKAGE PK_DEBUG IS
  FUNCTION Debug_allowed RETURN BOOLEAN;
  FUNCTION Next_ID       RETURN NUMBER;

  PROCEDURE Disable;
  PROCEDURE Enable;
  PROCEDURE Destroy;
  PROCEDURE Init  (P_Debug_allowed IN BOOLEAN DEFAULT TRUE);
  PROCEDURE Write (P_Text IN VARCHAR2,
                   P_Session_ID IN NUMBER DEFAULT NULL);

  G_Debug_allowed BOOLEAN := TRUE;
  G_Session_ID    NUMBER;
END;
/
CREATE OR REPLACE PACKAGE BODY PK_DEBUG IS
FUNCTION Debug_allowed RETURN BOOLEAN IS
BEGIN
  RETURN (G_Debug_allowed);
END;

FUNCTION Next_ID RETURN NUMBER IS
  V_ID NUMBER;
BEGIN
  SELECT Logging_SEQ.nextval
    INTO V_ID
    FROM DUAL;
  RETURN (V_ID);
END;

PROCEDURE Disable IS
BEGIN
  G_Debug_allowed := FALSE;
END;

PROCEDURE Enable IS
BEGIN
  G_Debug_allowed := TRUE;
END;

PROCEDURE Destroy IS
BEGIN
  Write ('----------------------stopp '
    || to_char (G_Session_ID) || '--');
  G_Session_ID := NULL;
END;

PROCEDURE Init (
  P_Debug_allowed IN BOOLEAN DEFAULT TRUE) IS
BEGIN
  G_Debug_allowed := P_Debug_allowed;
  G_Session_ID := Next_ID;
  Write ('--start ' || to_char (G_Session_ID)
    || '----------------------');
END;

PROCEDURE Write (
  P_Text       IN VARCHAR2,
  P_Session_ID IN NUMBER DEFAULT NULL) IS
  PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
  IF Debug_allowed THEN
    IF G_Session_ID IS NULL THEN
      Init;
    END IF;
    INSERT INTO Logging (ID,
      Session_ID,
      Insert_Date,
      Insert_User,
      Text)
    VALUES (Next_ID,
      NVL (P_Session_ID, G_Session_ID),
      Sysdate,
      User,
      P_Text);
    COMMIT;
  END IF;
END;
END;
/

Das Debugging wird mit INIT gestartet und endet mit DESTROY. Fehlermeldungen werden in die Tabelle festgeschrieben mit WRITE. Zum Beispiel:
pk_Debug.Init;
pk_Debug.Write ('Hello World - ' || V_Test);
pk_Debug.Destroy;

Teile des Debuggings können deaktiviert werden mit DISABLE, so dass von dieser Zeile Code an keine Logging-Informationen mehr geschrieben werden, bis man ENABLE startet.

Die View Logging_DESC_V zeigt die Logging-Daten, gruppiert nach der neuesten Session-ID.
ID Session Insert-Date     Text
============================================
24    21   10.09.-12:38:48 -------stopp 21--
23    21   10.09.-12:38:48 Hello World - 42
22    21   10.09.-12:38:48 --start 21-------


Viel Spass damit
Gerd

19. Juni 2015

Gerade wiedergefunden


jetzt brauche ich nur noch ein 3,5" Diskettenlaufwerk.

:-)
Gerd

31. März 2015

Gerüchte über Oracle Reports 12c

Seit fast sechs Wochen gibt es Gerüchte, dass Oracle Reports nicht in der Version 12c erscheinen wird.

Seitdem versuche ich Informationen zu diesem Thema zu bekommen. Dies ist mir dann nach einigen EMails auch gelungen.


Das Gerücht ist definitiv falsch und niemand bei Oracle will Reports 12c einstellen.


Ich hoffe, dass dies die Gerüchteküche ein wenig abkühlt.

Gerd

26. Februar 2015

Das ADF-Buch ist da

Die Deutsche ADF- (und Forms-) Community hat heute ihr erstes Buch herausgegeben.

Das "ADF Buch" ist eine Zusammenstellung von deutschsprachigen Vorträgen, Artikeln und Workshop-Tutorials zum Thema Oracle ADF (es sind auch vereinzelte englischsprachige Beiträge enthalten). Die Autoren sind Mitglieder der deutschen ADF Community. Der Zeitrahmen umfaßt die Jahre 2010 bis 2014. Das Projekt "ADF Buch" wurde von einem Team von Mitarbeitern aus Partnerunternehmen und Oracle umgesetzt.

40 Autoren schrieben 70 Beiträge auf 1400 Seiten.

Der Download besteht aus einem 110 MB PDF und ist kostenfrei: ADF-Community-Homepage


Mein Artikel im Buch hat den Titel "Modernizing Oracle Forms". In ihm demonstriere ich, wie einfach in Oracle Forms die Integration moderner Frameworks wie z.B. LAF (Look and Feel-Framework von Francois Degrelle) ist und wie man ADF in Oracle Forms via OraFormsFaces (Framework von Wilfred van der Deijl) integriert.

Viel Spaß beim Lesen
Gerd

19. März 2014

INC und DEC sollte man in PL/SQL Libraries nicht benutzen

In meiner ältesten PL/SQL-Library in Forms 4 waren dies meine ersten Prozeduren:

PROCEDURE Inc (P_Number IN OUT NUMBER) IS
BEGIN
  P_Number := P_Number + 1;
END;

PROCEDURE Dec (P_Number IN OUT NUMBER) IS
BEGIN
  P_Number := P_Number - 1;
END;

Diese Prozeduren nutze ich seit 20 Jahren in der ein oder anderen Variation. Manchmal mit zwei Parametern, oft auch nur mit einem Parameter. In der ganzen Zeit gab es nie Probleme

In neueren Versionen von Oracle Forms funktioniert dies nun nicht mehr

Und warum? Oracle hat in PL/SQL einen neuen SUBTYPE für DECIMAL erzeugt und ihn "DEC" genannt. Diesen TYPE kann man zum Beispiel zur Variablendeklaration benutzen:
DECLARE
  V_Value   DEC;
BEGIN
... 
 
Das zerstört natürlich meine Prozedur in der PL/SQL-Library :-(
Alle anderen Sprachen kennen von Hause aus schon INC und DEC. Nur nicht Oracle!

Also immer schön acht geben beim erzeugen von neuen Funktionen die für lange Zeit gültig sein sollen :-)
Gerd

8. Januar 2014

Neues Statement of Direction, September 2013

Die aktuellen Supportzeiträume von Forms und Reports findet man in diesem Dokument.

Das Wichtigste auf einen Blick:


Hier geht's zu meinen älteren Statement of Directions Privatkopien:

SoD Oracle Fusion 2013 / 09
SoD Forms 2012 / 03
SoD Oracle Fusion 2010 / 05
SoD Forms 2009 / 07
SoD Forms 2008 / 07
SoD Forms 2007 / 11
SoD Forms 2005 / 09
SoD Forms 2005 / 05
SoD Forms 2005 / 03
SoD Forms 2004 / 06

Mein vorheriger Artikel zu diesem Thema ist hier zu finden

2. Oktober 2013

Modernizing Forms Vortrag

Das Interview, über das ich vorgestern schrieb, ist in Zusammenarbeit mit meinem Vortrag "Wie modernisiere ich Oracle Forms" entstanden.

Das vollständige Video zu dem Vortrag (50 min) ist hier zu finden:





Die Folien des Vortrags sind über diesen Link erreichbar.

Try it
Gerd

30. September 2013

DOAG Interview

Nach meinem letzten Konferenzvortrag bin ich von der DOAG interviewt worden. Thema des Interviews war die Modernisierung von Oracle Forms.


Inhalt des Interviews + YouTube-Info:
Viele sagen über das Ausehen des Entwicklungswerkzeugs Oracle Forms, dieses sei nicht mehr zeitgemäß. Gerd Volberg von Opitz Consulting hat sich im Open-Source-Umfeld umgeschaut und Frameworks gefunden, mit denen die Forms-Welt aufgepeppt werden kann. Im Interview mit dem Leiter der SIG Development Christian Schwitalla präsentiert Volberg das "Forms Look and Feel Project" vom Oracle Ace Francois Degrelle sowie das Framework von Wilfred van der Deijl von "OraFormsFaces", das die Forms und ADF-Welt vereint.

Viel Spass
Gerd

29. Mai 2013

Oracle Forms in the Cloud - the next big thing?

Die ganze Welt redet nur noch vom Arbeiten in der Cloud. Warum nicht auch Oracle Forms?

Warum nicht...

Warum...

Weil Oracle es längst tut...



Link zum Webcast


Michael Ferrante und Roger Vidal besprechen in dem Webcast, wie man Applikationen in der Cloud im Web Logic Server laufen lässt und was das für die Zukunft von Oracle Forms bedeutet.

Grant hat in seinem Blog auf den Webcast verwiesen mit den Worten: "Oracle Forms remains a key technology..."

Viel Spass beim Webcast
Gerd

31. Januar 2013

Verhalten von Registerkarten

Wenn Registerkarten immer weiter vergrössert werden, kann man ein interessantes Verhalten feststellen: Nehmen wir zum Beispiel eine Maske mit 3 Registerkarten (Stil Breite = Fest)
Forms erzeugt alle 3 Registerkarten in der selben Breite. Das ist genau das, was wir erwartet haben.

Nun fügen wir eine vierte Registerkarte hinzu:

Sobald nicht genug Platz vorhanden ist, um alle Registerkarten darzustellen, reduziert Forms automatisch die Breite der einzelnen Überschriften. Die Breite der längsten Überschrift bleibt erhalten. Die anderen teilen sich den restlichen Platz.

Wir erzeugen weitere Registerkarten:
In der breitesten Registerkarte wird nun die Überschrift reduziert und einige Buchstaben durch Punkte ersetzt.

Ganz zum Schluß:

Die letzte Art der Darstellung erzeugt eine kleine horizontale Scrollbar. Spätestens jetzt kann man mit der Tab Canvas kaum noch arbeiten. Die Überschriften der Registerkarten sind nicht mehr sprechend und müssen teilweise schon erraten werden. Daran sollte man denken, wenn man Registerkarten immer weiter ausbaut und vergrössert.

Viel Spass damit
Gerd

13. September 2012

Forms Vorträge auf der DOAG Konferenz 2012

Und hier nun ein paar Vorschläge für die diesjährige DOAG Konferenz in Nürnberg


Jan Peter Timmermann


Wolfgang Kriebel, Christian Kühne


Mein Vortrag :


Perry Pakull


Stephan La Rocca


Nachmittags gibt es dann noch ein Fusion Middleware Panel mit Frank Nimphius, Duncan Mills und Jürgen Menge


Viel Spass auf der DOAG Konferenz
Gerd

12. September 2012

Forms Modernisierung auf der Oracle Open World

Hier sind ein paar Tipps für die Oracle "Forms" Open World 2012

Grant spricht über die Zukunft von Oracle Forms :


Auch Lucas nimmt sich des Themas Zukunft an:


Mia und Grant sprechen zusammen über Facelifting-Tipps für Forms :


Mehr Informationen dazu gibt es auf Grants Blog and on Mia's Blog

Viel Spass beim Lesen
Gerd

3. Juli 2012

Java 7 und Forms 11

Vor einigen Tagen wurde eine überarbeitete Zertifizierungsmatrix von Oracle veröffentlicht:


Zertifizierungs-Link

In diesem Excel-Sheet ist Forms 11.1.1.6 gegen JRE 1.7.0_04+ zertifiziert. Sehr gute Nachricht! Nun können wir hoffen, dass Forms 11.1.2 ebenfalls in Kürze zertifiziert werden wird. Dies ist zur Zeit die aktuelle Version auf dem OTN:


Und zu guter Letzt: " Oracle, zertifiziere bitte auch Oracle Forms 10g mit JRE 7 ! "
Gerd

27. Juni 2012

Java 7-Auto-Update, weitere Links

Hier sind noch ein paar weitere Links und Metalink-Dokumente zum aktuellen Java 7 Auto-Update-Problem. Die Dokumente sind nur erreichbar, wenn man sich in "My Oracle Support" einloggt.

Oracle Java SE Support Roadmap

Updated Java 6 EOL date

Note 1412103.2
Installation and Configuration for Oracle Java SE

Note 1467442.1
URGENT BULLETIN: All E-Business Suite End-Users Must Manually Apply JRE 6 Updates

Note 1469230.1
FAQ - Java SE Auto Update

Note 1470123.1
What Impact does the Desupport of Java 6 have on Fusion Middleware 11

Note 1470671.1
JRE7 Is Not Certified For Oracle Health Insurance

Aktuelle Version von JRE 1.6
Oracle JDK 6 update 33 (1.6.0_33)

viel Spass damit
Gerd

26. Juni 2012

Java 7-Auto-Update Warnung

Es sieht so aus, dass wir mit unseren Forms-Applikationen ab nächster Woche, 3. Juli 2012, in ein grösseres Problem laufen werden.

Oracle's Java 1.6-Updater wird automatisch das JRE auf allen PC's auf Version 1.7updaten, wo der Auto-Update aktiviert ist. Java 1.7 ist nicht zertifiziert mit Forms 10g, Forms 11g sowie der E-Business-Suite (bzw. den EBS-Forms-Komponenten).

Ich werde versuchen, alle relevanten Stellen und Problemlösungen in den nächsten Tagen hier zu bloggen, damit wir alle die nächste Woche ohne grössere Probleme überleben. Verteilen Sie diesen Blogpost gerne auch an andere Formskunden, die ebenfalls mit Java 1.7 ein Problem bekommen könnten.


Hier sind die ersten Links, die ich zu dem Thema gefunden habe:

The latest news directly from E-Business Suite Development



JRE Troubleshouting Guide



OTN Forms Forum: steps to install and deinstall
Michael Armstroing beschreibt hier unter anderem die De-Installation von Java 1.7



Und hier ist die Beschreibung des eigentlichen Problems, das wir mit Java 1.7 bekommen werden



Viel Spass beim Lesen
Gerd