2012-01-09

ADFrc: Warum stretch meine Table nicht ?

Einleitung

In der ADF Project Session 3 in Deutschland im Dezember wurde folgende Frage innerhalb der  Übung  über die  ADF Layout Strategien am häufigsten gestellt:

Warum wird die Tabelle (mit den vorhanden Spalten) nicht auf 100% der Breite und Höhe gestretcht ?

Dieser Eintrag behandelt kurz die wichtigsten Antworten auf die gestellte Frage.

Problem

Simon: "Ich verwende StretchPanelLayout aber trotz dem wird die Tabelle nicht gestretcht !"

Mentor: "Prüfe Deine Seitenstruktur auf Flow Layout !"

Image(22)

Ursache

Einer der häufigsten Ursachen für dieses Erscheinungsbild ist die Tatsache, dass  die Layoutkonzept von Stretch auf Flow gewechselt hat ohne das der Entwickler dies mit bekommen hat.

Sobald eine weitere UI Komponente in eine Facette geworfen wird fügt der Oracle JDeveloper ein PanelGroupLayout - Komponente hinzu und wechselt von der Stretch- auf die Flow - Konzept.

Image(20) Image(21)

Lösung

Aus Stretch wird Flow, wenn sich mehr als eine Komponente im Teilbaum befindet !

Verifiziere Dein Layout im Structure Panel, auch wenn Du den JDeveloper nicht traust !

Problem

Rudolf: "Ich verwende StretchPanelLayout aber trotzdem werden die Spalten meiner Tabelle nicht auf die gesamte Breite verteilt !"

Mentor: "Denke nicht in HTML und CSS (width:100%). Denke in Komponenten !"

Image(23)

Ursache

Wenn ein Bereich gestretch wird, so wird die UI Komponente skaliert, aber nicht automatisch alle weiteren UI Komponenten im Teilbaum. D.h. in diesem Fall, das die PanelCollection auf eine Breite von 100% skaliert wird. Wie die einzelnen Spalten der Table verbreitert werden sollen, ist nicht definiert.

Lösung

Über die Eigenschaft ColumnStretching der UI Komponente Table, kann eine Strategie zum auffüllen, des Leerraumes vorgegeben werden.

Image(24)

af:table - Oracle Fusion Middleware Tag Reference for Oracle ADF Faces (11.1.2)

Geometry Management

This component can be stretched by a parent layout component that stretches its children, e.g. panelStretchLayout. When stretching this component, the only valid setting for autoHeightRows is "-1".

When NOT stretched, autoHeightRows="0" can be used to size the height to the fetch size, which is similar to dimensionsFrom="children". Please refer to 'autoHeightRows' attribute for more information. Use the columnStretching attribute to configure stretching of the children column components

Image(25)

 
Referenzen
JDeveloper Workspace
Oracle Fusion Middleware Tag Reference for Oracle ADF Faces (11.1.2)

2011-12-23

Oracle Scheduler Jobs ein-/ausschalten

ab Oracle Version 10g werden regelmäßig auszuführende, zeitgesteuerte Jobs über den Scheduler (Package: dbms_scheduler) und nicht mehr als Jobs (Package: dbms_jobs) eingerichtet. Immer wieder steht man vor der Aufgabe alle Scheduler-Jobs auf einmal zu deaktivieren, insbesondere z.B. nach dem Clonen einer Produktiv-DB in eine Test-DB.

Komplett ausgeschaltet werden kann der Scheduler mittels:
   dbms_scheduler.set_scheduler_attribute('SCHEDULER_DISABLED','TRUE');
Komplett eingeschaltet werden kann der Scheduler mittels:
   dbms_scheduler.set_scheduler_attribute('SCHEDULER_DISABLED','FALSE');
Zu beachten ist hier die, auf den ersten Blick, vertauschte Bedeutung von 'TRUE' und 'FALSE'!

Ein einzelner Job kann deaktiviert werden mittels:
   exec dbms_scheduler.disable('<job_name>');
und aktiviert wird er über:
   exec dbms_scheduler.enable('<job_name>');
Hiermit können jedoch nur Jobs des am SQL*Plus angemeldeten Benutzers (aktuelles Schema) ein- bzw. ausgeschaltet werden. Die Dokumentation liefert keinen Hinweis darauf, wie man z.B. als sys alle Scheduler-Jobs auch fremder Schamata ausschalten kann.

Etwas Herumexperimentieren hat aber ergeben, dass ein einzelner Job in einem fremden Schema deaktiviert werden kann mittels:
   exec dbms_scheduler.disable('<owner>.<job_name>');
und aktiviert wird ein Job in einem fremden Schema über:
   exec dbms_scheduler.enable('<owner>.<job_name>');
Man muss also einfach den Job-Namen ersetzen durch Eigentümer.Job-Name.

Die notwendigen Informationen zu den Scheduler-Jobs liefert die View DBA_SCHEDULER_JOBS.

Alle Scheduler-Jobs aller DB-Benutzer auf einmal ausschalten geht mit folgendem PL*SQL Block:
begin
   for v_job_info in (select owner, job_name from DBA_SCHEDULER_JOBS where enabled = 'TRUE')
   loop
      dbms_scheduler.disable(v_job_info.owner || '.' || v_job_info.job_name);
   end loop;
end;

Folgende Scheduler-Jobs sollte man typischer Weise aktiv/eingeschaltet lassen
(und es gibt sicher noch weitere, die laufen sollten):
OWNER                          JOB_NAME
------------------------------ ------------------------------
SYS                            BSLN_MAINTAIN_STATS_JOB
SYS                            DRA_REEVALUATE_OPEN_FAILURES
SYS                            ORA$AUTOTASK_CLEAN
SYS                            PURGE_LOG
ORACLE_OCM                     MGMT_STATS_CONFIG_JOB
ORACLE_OCM                     MGMT_CONFIG_JOB
EXFSYS                         RLM$SCHDNEGACTION
EXFSYS                         RLM$EVTCLEANUP

2011-12-21

DOAG@Talk mit Ducan Mills

Christian Schwitalla (DOAG Leiter der SIG Development / Tools) hat mit Duncan Mills über die Zukunft der Entwicklungswerkzeuge von Oracle gesprochen. Das Gespräch gibt es hier.

2011-12-15

HowTo: Set Default Run Target to TaskFlow Activity

Goal

Eine Fusion Web Application (ADF) soll innerhalb einer Applikation Workspace]  unabhängig vom selektierten Kontext per Tastatur gestartet werden.

Context

- JDeveloper 11gR2

- Fusion Web Application (ADF)

Solution

Image(19)

Choose: Run / Choose Active Run Configuration / Manage Run Configuration..

Image(16)

Select: Run Configuration / Default

Choose: Edit..

Image(17)

Deselect: Attempt to Run Active File Before Default

Select Default Run Target: ..\WEB-INF\adfc-config.xml [your task-flow file]

Image(18)

Choose: Launch Settings / ADF Task Flow

Select View Activity: home [your start page]

Choose: Ok

Choose: F11