1. Tree
1.1. SQl Code
select 0 as status,
       3 as einrueck,
       (select s.starname from star s where s.starnum = m.starnum) as title,
       null as icon,
       m.mvnum as mvnum,
       null as tooltip,
       apex_util.prepare_url('f?p='||:app_id||':1:'||:app_session||':T:::P1_Starnum:'|| m.starnum) as link from movstar m
       -- :1: ist die Page Seite | :P1_Starnum: ist der Parameter (Löschen beim einfügen bitte)
union
select 1,
       1,
       'alle filme' as title,
       null,
       0 as mvnum,
       null,
       null from dual
union
select -1,
        2,
        mvtitle as title,
        null,
        mvnum,
        null,
        null from movie order by mvnum- 
1 ist der Stamm (oberste) 
- 
-1 sind die Äste 
- 
0 sind die Blätter 
| Wenn man überprüfen will, ob ein Ast Null ist, verwenden wir Folgendes: | 
select -1, -- -1 bei exists damit der Ast angezeigt wird
        2,
        ...
        null from irgendwas
        where exists (...)
union
select 0, -- 0 bei not exists
        2,
        ..
        null from irgendwasAnderem
        where not exists (...)Der Tree sollte mit den gebrauchten Tabellen dann so aussehen:
 
Wenn man auf einen Actor drückt, wird nur die Id mitgegeben. Um den Namen oder etwas anderes in den Textfields zu bekommen, muss man das dann ein Select ausführen.
4. Images ("POST")
Der Post wird verwendet, um Bilder zu den Schauspielern hinzuzufügen. Also eigentlich ein Update.
Man erstellt einen Process der z.B. Update heißt. Hier weist man dann den Button zu, welcher dann der Auslöser des Processes ist.
 
Der folgende Save Code sieht so aus:
declare
    v_blob blob;
    v_thum blob;
    v_mimeType varchar2(4000); --Braucht man nicht unbedingt
    v_count number;
    v_oi_bild   ordimage := null;
    v_oi_thumb  ordimage := null;
begin
    apex_debug.message('P1_UPLOAD: %s', :P1_UPLOAD); --debug option optional
    select count(*) into v_count from apex_application_temp_files
          WHERE name = :P1_UPLOAD; -- gibts eine file?
     if v_count != 0 then
              SELECT blob_content , mime_type -- optional | file wird selected
      INTO v_blob, v_mimeType
      FROM apex_application_temp_files
      WHERE name = :P1_UPLOAD; -- UPLOAD ist die file
     v_oi_bild  := ordimage(v_blob);
     v_oi_bild.setproperties();
     v_oi_thumb := ordimage(v_thum);
     -- Thumbnail generieren
     v_oi_bild.processcopy(
       command => 'maxScale=100 100',
       dest    => v_oi_thumb
     ); --maxScale -> größe
    v_thum := v_oi_thumb.getContent(); -- zuweisung
    end if;
    UPDATE star
    SET STARNAME = :P1_STARNAME,
        BIRTHPLACE = :P1_BIRTHPLACE,
        CNTRYID = :P1_CNTRYID,
        STARBORN = :P1_STARBORN,
        STARDIED = :P1_STARDIED,
        SEX = :P1_SEX,
        DEATHCAUSE = :P1_DEATHCAUSE,
        THUMBNAIL = v_thum --,
        --MIMETYPE = v_mimeType
    where STARNUM = :P1_STARNUM;
end;| Die einzelnen Felder müssen gleich sein | 
 
5. Allgemein Wichtiges
5.1. Classic Report
Report findet man unter:
Regions→Classic Report
Rechts unter Source Findet man auch die SQL Query um den Report zu füllen.
 
5.2. Diagramme
Diagramme findet man unter Layout → Regions → Chart
 
Unter Atributes kann man auswählen was für ein Diagramm es sein soll.
Atributes→(rechts) Chart→Type→`Auswahl Diagramtyp`
Unter Series kann man die Diagramme dann "Zeichnen". Wenn man z.B. eine neue Serie erstellt wird eine neue Linie gezeichnet.
Wenn man auf eine Serie Clicky Clicky macht, hat man die Option eine SQL Query einzugeben.
Series→New→(rechts) Source→Type: SQL Query→SQL Query
Beispiel für Linien Diagramm mit SQL Query:
Select umsatz_eur,CONCAT(CONCAT(Monat, ' '), Jahr) AS X from verkauf 
 
Weitere Diagram Queries:
Select "verkaufid", "JAHR", "MONAT", "UMSATZ_EUR", "WERBUNG_TV_EUR", "WERBUNG_ZEITG_EUR", "ANZAHL_VERKAEUFER",
sum(umsatz_eur) over (partition by jahr order by monat rows between unbounded preceding and current row) as kum_umsatz from "VERKAUF"select CONCAT(CONCAT(Monat, ' '), Jahr) AS X, avg(UMSATZ_EUR) over(order by jahr, monat rows between 1 PRECEDING and 1 following) test  from verkauf;5.3. Process
Um einen Process zu erstellen, geht man unter:
Component View→Page Processing→Process→+
 
Wenn man dann auf new Clicky Clicky macht, kann man rechts einstellen was der Process machen soll.
 
In dem PL/SQL Code Block schreibt man was der Process machen soll. Hier z.B. setzt er einen Text in ein Textfield.
Hier wird der Auslöser definiert:
 
Wenn man aber einen Process After Submit auslösen möchte, stellt man das hier ein:
 
5.4. Images
Wenn man Bilder einfügen möchte, geht man rechts oben auf das Zeichen mit den Symbolen.
Location:
 
 
 
 
<img src="#WORKSPACE_IMAGES#Matt_CPU.jpg" width="800" height="600">5.5. Redirect
Um einen Link zu erstellen, verwenden wir z.B. einen Report mit einer Column.
 
Rechts dann unter Identification→Type und dann die gewählte Zeile wählen.
 
Weiter unten auf der rechten Seite dann unter Link das auswählen was gemacht werden soll.
 
 
6. Wichtiges aus dem Doodle Beispiel
Credit: htl-profis-doodle
6.2. Create Tables
SQL Workshop→SQL Commands
| Die Befehle nach der Reihe einfügen | 
CREATE TABLE abstimmung(
    kopfid NUMBER(5, 0) NOT NULL,
    name VARCHAR2(100),
    CONSTRAINT pk_abstimmung PRIMARY KEY(kopfid)
);
CREATE TABLE abstimmung_position(
    kopfid NUMBER(5, 0) NOT NULL,
    posid NUMBER(5, 0) NOT NULL,
    termin DATE,
    CONSTRAINT pk_abstimmung_position PRIMARY KEY(posid),
    CONSTRAINT fk_abstimmung FOREIGN KEY(kopfid) REFERENCES abstimmung(kopfid)
)
CREATE TABLE abstimmung_ergebnis(
    ergid NUMBER(5, 0),
    posid NUMBER(5, 0),
    name VARCHAR2(1000),
    ergebnis VARCHAR2(1),
    CONSTRAINT pk_abstimmung_ergebnis PRIMARY KEY(ergid),
    CONSTRAINT fk_abstimmung_position FOREIGN KEY(posid) REFERENCES abstimmung_position(posid),
    CONSTRAINT chk_abstimmung_ergebnis CHECK(UPPER(ergebnis) LIKE 'Y' OR UPPER(ergebnis) LIKE 'N')
)7. Doodle komplett
7.1. Create Application
- 
Desktop 
- 
Name: Doodle 
 
- 
Pages: Home-Page löschen 
- 
Add Page 
- 
Select Report 
 
- 
Add Page 
 
- 
Authentication Scheme: No Authentication 
- 
Date-Formats: optional auch leer sinds ok :) 
 
- 
Create Application 
7.2. Master Detail Page
- 
Create Page 
 
- 
Select Form 
- 
Select Single Page Master Detail 
 
 
 
 
- 
Create 
 
- 
KOPFID auswählen und in der Default-Section die Sequence angeben 
 
 
- 
Optional: Name links auswählen und als Textfeld 
- 
Columns von Detail links aufklappen 
- 
POSID auswählen 
- 
Vorgang wiederholen - andere Sequence natürlich :) 
- 
Datepicker auswählen 
- 
Rechts unter Settings → Show auf Both 
7.3. Selbst Abstimmen
- 
Neue Page erstellen 
 
- 
Report → Interactive Grid 
 
- 
Keinen neuen Navigation Entry 
 
- 
Create 
 
- 
Abstimmen Region links auswählen 
- 
Vorhandene SQL Query mit Folgender ändern 
select ERGID,
       POSID,
       NAME,
       ERGEBNIS
  from ABSTIMMUNG_ERGEBNIS
where posid in (select posid from abstimmung_position where kopfid=:P3_KOPFID)- 
In Component View: Neues Page Item erstellen, 
 
- 
Region auswählen, gibt ja eh nur eine ;) 
 
 
- 
Columns links aufklappen 
 
- 
ERGID auswählen → zu Default 
 
 
 
- 
POSID auswählen 
- 
Type zu Select List ändern 
- 
Bei List of Values als Type SQL Query auswählen 
select termin d, posid r from abstimmung_position where kopfid = :P3_KOPFIDd … display
r … return value oder so
- 
Save 
 
- 
Name auswählen 
- 
Type zu Textfield ändern 
 
- 
Ergebnis auswählen 
- 
Type zu Select List ändern 
- 
Bei List of Values als Type Static Values auswählen 
STATIC:Ja;Y,Nein;N
7.4. Graph
- 
Neue Page erstellen → Chart → Bar 
 
- 
Keinen neuen Navigation Entry 
 
- 
Soll wie folgt ausschauen: 
 
select null, to_char(TERMIN, 'DD-MM-YYYY') as Termin,
       (select count(*) from ABSTIMMUNG_ERGEBNIS erg
       where pos.POSID = erg.POSID and erg.ERGEBNIS='Y') as Count
from ABSTIMMUNG_POSITION pos where pos.KOPFID = :P4_KOPFID; 
- 
Create 
- 
Optional: Links Series 1 auswählen und umbennenen (z.B. zu Result) 
- 
Save 
 
- 
In Component View: Neues Page Item erstellen, 
 
- 
Region auswählen, gibt ja eh nur eine ;) 
 
- 
Save 
7.5. Auf Page 1 wechseln
- 
Abstimmung Region auswählen 
- 
SQL Query auf Folgende ändern 
select name, kopfid, 'Ergebnis' as Ergebnis from abstimmung- 
Columns links aufklappen 
 
- 
KOPFID auswählen → Type auf Hidden Column 
- 
Name auswählen → Type auf Link ändern → No Link Defined Button betätigen und zu folgendem ändern 
 
- 
Linktext in der Select List auf das 1. ändern (NAME) 
- 
Ergebnis auswählen → Type auf Link ändern → No Link Defined Button betätigen und zu folgendem ändern 
 
- 
Linktext in der Select List auf das 1. ändern (ERGEBNIS) 
Credits für doodle:
- 
Jonas Birklbauer 
- 
Nico Bojer 
- 
Tarik Hošić 
 
 
 
 
 
 
 
