1. Tree

1.1. SQl Code

alte tree
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:
tree für exists
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:

image 2021 12 15 18 05 56 642
Figure 1. Ausgabe

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.

1.2. Werte in den Feldern setzten

Bei jedem Textfeld ein SELECT schreiben damit die werte eingesetzt werden.
image 2021 12 15 18 11 16 562
Figure 2. Select statemend für andere Zeilen

2. Report

Select * from Fehlermeldung where knr = :P1_SELECTLIST or  :P1_SELECTLIST = -10
image 2022 02 09 19 50 31 898
image 2022 02 09 19 50 59 880

3. Validation

image 2022 02 09 19 53 13 453
Figure 3. Datum überprüfen
image 2022 02 09 19 57 17 502
Figure 4. Rechtsklick auf validation um neue zu erstellen
image 2022 02 09 19 57 48 384

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.

image 2021 12 15 20 50 29 193
Figure 5. Wenn Button Save gedrückt wird, wird der Process augeführt

Der folgende Save Code sieht so aus:

Save Process
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
image 2021 12 15 20 44 17 105

4.1. Blob in Tabelle als Column

Unter:

→SQL Workshop→(links) "Tabelle"→add column

gibt man dann folgendes ein, um eine Blob column zu erstellen:

image 2021 12 15 20 22 08 355
Figure 6. neue column (Blob)

4.2. Report füllen

Um den Report dann zu füllen, verwenden wir folgenden Code:

Blob in report
Select starnum, starname, birthplace, cntryid, starborn, sex, dbms_lob.getlength(THUMBNAIL) THUMBNAIL FROM Star;
Wichtig ist es bei dem Blob(Thumbnail) dbms_lob.getlength(THUMBNAIL) THUMBNAIL zu verwenden

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.

image 2021 12 15 12 22 13 858
Figure 7. Einfacher Report mit den Werten einer Tabelle.

5.2. Diagramme

Diagramme findet man unter Layout → Regions → Chart

image 2021 12 15 14 39 54 904
Figure 8. Links das erstellte Diagram | Rechts die Oprion 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:

Es wird der umsatz mit dem Jahr+Monat in X gespeichert | Das wird als Label verwendet
Select umsatz_eur,CONCAT(CONCAT(Monat, ' '), Jahr) AS X from verkauf
image 2021 12 15 14 51 55 390
Figure 9. Einistellung
image 2021 12 15 14 52 34 703
Figure 10. Output

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→+

image 2021 12 15 14 58 38 288

Wenn man dann auf new Clicky Clicky macht, kann man rechts einstellen was der Process machen soll.

image 2021 12 15 15 28 38 561
Figure 11. Einstellung des Processes

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:

image 2021 12 15 15 32 04 008
Figure 12. When Button Pressed

Wenn man aber einen Process After Submit auslösen möchte, stellt man das hier ein:

image 2021 12 15 15 34 48 934

5.4. Images

Wenn man Bilder einfügen möchte, geht man rechts oben auf das Zeichen mit den Symbolen.

Location:

image 2021 12 15 18 21 12 976
Figure 13. Location wo das Foto Hochgeladen wird
image 2021 12 15 18 19 16 134
Figure 14. Bild aussichen und dann Upload
image 2021 12 15 18 23 29 935
Figure 15. Was nach dem # kommt is der Path
image 2021 12 15 18 27 08 401
Figure 16. Bild Anzeigen
static content
<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.

image 2021 12 15 18 48 33 425
Figure 17. Ausgewählte Column

Rechts dann unter Identification→Type und dann die gewählte Zeile wählen.

image 2021 12 15 18 50 33 749

Weiter unten auf der rechten Seite dann unter Link das auswählen was gemacht werden soll.

image 2021 12 15 18 51 52 470
Figure 18. Target auswählen also Seite | und den Link Text also das was angezeigt wird
image 2021 12 15 18 53 59 029
Figure 19. Beim Target folgendes auswählen um einen Text auf der zweiten Seite anzeigen zu lassen

5.6. Tree Emp

select case when connect_by_isleaf = 1 then 0
            when level = 1             then 1
            else                           -1
       end as status,
       level,
       "ENAME" as title,
       null as icon,
       "EMPNO" as value,
       null as tooltip,
       null as link
from "#OWNER#"."EMP"
start with "MGR" is null
connect by prior "EMPNO" = "MGR"
order siblings by "ENAME"

6. Wichtiges aus dem Doodle Beispiel

6.1. Selecct List

select termin d, posid r from abstimmung_position where kopfid = :P3_KOPFID

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')
)

6.3. Sequence erstellen

→ SQL-Workshop
→ Object Browser
→ Rechts aufs Plus
→ Sequence
→ Jeweiligen Namen in Sequence Name
→ Next
→ Create Sequence

image 2021 12 15 12 02 28 951

7. Doodle komplett

7.1. Create Application

  • Desktop

  • Name: Doodle  
     

  • Pages: Home-Page löschen

  • Add Page

  • Select Report

500
  • 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

500
500
500
500
  • Create  
     

  • KOPFID auswählen und in der Default-Section die Sequence angeben

300
500
  • 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

500
  • Keinen neuen Navigation Entry

500
  • 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,

500
  • Region auswählen, gibt ja eh nur eine ;)

 
 

  • Columns links aufklappen  
     

  • ERGID auswählen → zu Default

create abstimmen 4

 
 

  • 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_KOPFID

d …​ 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 → ChartBar

500
  • Keinen neuen Navigation Entry  
     

  • Soll wie folgt ausschauen:

500
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;
500
  • Create

  • Optional: Links Series 1 auswählen und umbennenen (z.B. zu Result)

  • Save  
     

  • In Component View: Neues Page Item erstellen,

500
  • 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

500
  • 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

500
  • Linktext in der Select List auf das 1. ändern (ERGEBNIS)

Credits für doodle:

  • Jonas Birklbauer

  • Nico Bojer

  • Tarik Hošić