• Passa al contenuto principale
  • Passa alla barra laterale primaria
  • INIZIA QUI
  • HOME
  • CHI SONO

APPin5Minuti

Creare APP Gestionali con Oracle APEX e Low-Code

Crea Applicazioni Gestionali con Oracle APEX e gli strumenti Low-Code.

Oracle APEX: la Bellezza del Classic Report

Agosto 5, 2021

Se anche a te piace la pizza come piace a me, penso che sarai d’accordo nell’affermare una pizzeria non può chiamarsi tale se non ha nel proprio menù alcuni classici intramontabili come la margherita, la boscaiola o la capricciosa.

Non credi?

Allo stesso modo, io penso che oggi una applicazione enterprise non può dirsi all’avanguardia se non offre ai propri utenti un ambiente di sviluppo che consenta di creare report e di visualizzare le informazioni con tabelle e cruscotti.

Non è una questione che possa essere messa in discussione: se è vero che i dati prima di tutto devono essere inseriti (si spera nel modo più intuitivo possibile per l’utente), poi devono anche poter essere estratti in un modo altrettanto semplice.

Quando penso ad un report da sviluppare in Oracle APEX è probabile che la prima cosa che mi venga in mente sia la classica estrazione in formato tabellare.

Quando si tratta di costruire dashboard, grafici e tabelle, da cui poi fare un po’ di drill-down per arrivare al dato puro, Oracle APEX ha tutto quello di cui hai bisogno.

Creare una applicazione che permetta di estrarre i dati in formato tabellare è un lavoro di una semplicità quasi disarmante.

Ma non è di questo che voglio parlare oggi.

Quello che mi chiedo è: Oracle APEX è sempre lo strumento adatto per creare, ad esempio, un portale e-commerce per vendere servizi, una agenda digitale oppure una applicazione social?

Insomma, è effettivamente lo strumento giusto quando il nostro obiettivo è costruire una applicazione web dove la componente di user interface è importante tanto quanto la componente di back-end?

In questo articolo desidero spiegarti come utilizzare un componente grafico specifico che APEX mette a disposizione della sua libreria e di come puoi sfruttarlo realizzare delle applicazioni molti interessanti, che magari non pensavi: il Classic Report.

Prima di iniziare, ti ricordo che puoi vedere on-line tutti gli esempi che ho preparato in questo tutorial collegandoti direttamente all’APP di APPIn5Minuti, sviluppato al 100% in APEX.

IN QUESTO ARTICOLO

  • Cos’è il Classic Report APEX
  • Come configurare un Classic Report
  • Come usare i template del Classic Report
    • Alert Template
    • Badge List Template
    • Cards Template
    • Comments Template
    • Media List Template
    • Timeline Template
  • Conclusioni

Cos’è il Classic Report APEX

Prima di passare alle questioni più tecniche, vale la pena fare una piccola introduzione per capire cos’è il Classic Report e quando conviene prenderlo in considerazione rispetto ad altri strumenti di reporting che il nostro framework di sviluppo low-code mette a disposizione.

Faccio questa precisazione perché, come forse già sai, in Oracle APEX puoi visualizzare i dati in tanti modi diversi: ad esempio usando un Interactive Report oppure una Interactive Grid.

Anche se a prima vista questi oggetti sembrano molto simili, di fatto hanno specifiche peculiarità che vale la pena tenere a mente per scegliere con maggior consapevolezza.

Un Classic Report ha bisogno di una Origine Dati per funzionare come query SQL, una tabella oppure una API Rest.

Una volta che hai definito il suo layout, il Classic Report non mette a disposizione dell’utente nessuna funzionalità di personalizzazione del formato o del suo aspetto.

D’altro canto, un Interactive Report è, come suggerisce il nome, interattivo: l’utente può modificarne l’aspetto nascondendo o visualizzando le colonne disponibili, può ordinare le righe secondo uno o più campi e può creare dei filtri.

L’Interactive Grid, infine, da la possibilità di modificare direttamente nella griglia i campi senza dover aprire form.

Quindi, a prima vista, sembrerebbe che il Classic Report sia un componente abbastanza limitato.

Ma è proprio così?

Come immaginerai, la risposta è no. Anzi, tutto il contrario.

Il Classic Report è in effetti uno dei componenti più versatili di APEX.

Il motivo principale sta nel fatto visualizza le informazioni utilizzando dei template HTML che possono essere personalizzati ed estesi per ottenere il risultato migliore.

Inoltre APEX mette a disposizione un discreto numero di template HTML pronti all’uso che possono essere utilizzati per gli scopi più disparati.

Come configurare un Classic Report

Prima di tutto ti spiegherò come configurare un Classic Report.

A tal proposito ho creato nel database una tabella S_EMP dove gestire l’elenco dei dipendenti di una generica azienda: per fare questo esercizio tu potrai utilizzare una qualunque tabella o vista del database.

Questa è una query di esempio per estrarre i dati

select id,
       last_name,
       first_name,
       userid,
       start_date,
       title,
       salary
  from s_emp
  • Accedi all’APP Builder ed apri la definizione della pagina che vuoi modificare
  • Aggiungi una nuova Region di tipo Classic Report di nome Tabular Classic Report.
  • Vai alle proprietà della Region Tabular Classic Report ed imposta le seguenti proprietà
    • Identification > Title: Tabular Classic Report
    • Identification > Type: Classic Report
    • Source > Location: Local Database
    • Source > Type: SQL Query
    • Source > SQL Query: inserisci la query
  • Clicca su Attributes e vai alla sezione Appearance dove puoi notare che il template selezionato è quello Standard (formato tabellare).
  • Se esegui la Preview dovresti vedere qualcosa di simile a questo
  • Sempre in Attributes > Appearance, clicca sul menù a tendina Template per vedere tutti i template disponibili.

Come usare i template del Classic Report

Vediamo insieme quali alcuni dei template messi a disposizione da APEX e come possiamo configurarli (o personalizzarli) per i nostri obiettivi.

Alert Template

Il template Alert è particolarmente utile quando vuoi creare una pagina web che mostra delle notifiche evidenziate in modo diverso in funzione di parametro di severity (es: info, warning, danger,…)

A tal proposito ho creato una semplice tabella (di cui qui sotto trovi lo script), chiamata S_ALERTS che utilizzerò per gestire nel sistema queste notifiche.

-- create tables
create table s_alerts (
    id                             number generated by default on null as identity 
                                   constraint s_alerts_id_pk primary key,
    title                          varchar2(150 char),
    description                    varchar2(250 char),
    creation_date                  date,
    archived                       varchar2(1 char),
    type                           varchar2(7 char)
)
;

-- triggers
create or replace trigger s_alerts_biu
    before insert or update 
    on s_alerts
    for each row
begin
    :new.type := lower(:new.type);
end s_alerts_biu;
/
-- load data
 
insert into s_alerts (
    id,
    title,
    description,
    creation_date,
    archived,
    type
) values (
    1,
    'Rhoncus non,molestie sit amet.',
    'Risus rhoncus.Cras vulputate porttitor ligula. Nam semper diam suscipit elementum sodales.',
    sysdate - 38,
    'Y',
    'INFO'
);
insert into s_alerts (
    id,
    title,
    description,
    creation_date,
    archived,
    type
) values (
    2,
    'Proin vulputate.',
    'Faucibus. Ut id nulla ac sapien suscipit tristique ac volutpat risus.Phasellus vitae ligula commodo, dictum lorem sit amet, imperdiet ex.',
    sysdate - 49,
    'N',
    'SUCCESS'
);
insert into s_alerts (
    id,
    title,
    description,
    creation_date,
    archived,
    type
) values (
    3,
    'Suscipit elementum sodales.',
    'Risus rhoncus.Cras vulputate porttitor ligula. Nam semper diam suscipit elementum sodales. Proin sit amet massa eu lorem commodo ullamcorper.',
    sysdate - 30,
    'Y',
    'WARNING'
);
insert into s_alerts (
    id,
    title,
    description,
    creation_date,
    archived,
    type
) values (
    4,
    'Mattis risus rhoncus.Cras vulputate porttitor ligula.',
    'Lorem commodo ullamcorper.Interdum et malesuada fames ac ante ipsum primis in faucibus.',
    sysdate - 10,
    'N',
    'DANGER'
);
insert into s_alerts (
    id,
    title,
    description,
    creation_date,
    archived,
    type
) values (
    5,
    'In massa pharetra, id mattis risus rhoncus.',
    'Posuere cubilia Curae; Proin vulputate placerat pellentesque. Proin viverra lacinialectus, quis consectetur mi venenatis nec.',
    sysdate - 94,
    'Y',
    'INFO'
);
commit;
  • Per prima cosa, creiamo un nuovo Classic Reports usando la seguente query SQL
select id,
       title,
       description,
       creation_date,
       archived,
       type
  from s_alerts
  • Esegui la Preview. Se non hai fatto alcuna personalizzazione dovresti vedere il classico formato tabellare che ci aspettiamo.
  • Seleziona il Classic Report
  • Vai al pannello delle proprietà e clicca su Attributes
  • Vai alla sezione Appearance > Template e seleziona il template Alerts
  • Esegui la Preview: dovresti ottenere qualcosa di simile a quello riportato nella figura seguente.

Forse ti starai chiedendo: beh, cosa stai vedendo esattamente?

Ovviamente stai guardando i record estratti dalla query che hai inserito nella definizione del Classic Report.

Tuttavia, manca ancora un passaggio fondamentale: devi mappare le colonne estratte dalla query con i campi in input che si aspetta di ricevere il template ossia quelli che vedi nel layout.

In questo caso specifico, il template Alerts prevede 3 parametri da mappare

  • ALERT_TITLE: l’oggetto della notifica
  • ALERT_DESC: il corpo della notifica
  • ALERT_ACTION: un terzo campo da usare, ad esempio, per implementare una azione utente (tra poco vedremo come fare)

Prima di tutto completiamo la configurazione del Classic Report

  • Seleziona il Classic Report e vai alle proprietà della Region.
  • Inserisci la query seguente, dove ho aggiunto alcune colonne che
select id,
       title,
       description,
       creation_date,
       archived,
       type,
       title alert_title,     
       description alert_desc,
       '<button type="button" title="Archivia Alert" aria-label="Archivia Alert" class="t-Button t-Button--noLabel t-Button--icon t-Button--hot t-Button--link archiviaAlert" alert-id="'||id||'"><span aria-hidden="true" class="t-Icon fa fa-remove"></span></button>' alert_action,
       type alert_type
  from s_alerts
  • Seleziona la colonna ALERT_ACTION
  • Vai alla proprietà Security > Escape Special Characters e verifica che non sia selezionata
  • Esegui la Preview. Questo è il risultato, decisamente molto più accattivante.

Come trovare i tag di un template HTML in APEX

Fino a qui tutto bello. Rimane un punto importante da capire.

Come posso capire quali tag il template HTML si aspetta di ricevere?

Non preoccuparti, non è nulla di complicato e adesso te lo mostrerò.

  • Clicca sul Report
  • Vai al pannello delle proprietà e clicca su Attributes
  • Vai alla sezione Appearance > Template
  • Clicca sul bottone Go To Report Template
  • Clicca su Edit Component
  • Dovresti atterrare sulla pagina di gestione dello specifico template. Da qui puoi gestire tutti gli aspetti legati al Look&Feel del template HTML.
  • Clicca su Row Templates per vedere il codice HTML che viene usato da APEX per formattare il singolo record. Qui puoi vedere i tag HTML

Come implementare una dynamic action nel report

Completiamo la configurazione del nostro report implementando una Dynamic Action che ci permetterà di archiviare, ossia nascondere, le notifiche che non vogliamo più vedere.

Per far questo abbiamo aggiunto nella query SQL la colonna ALERT_ACTION che restituisce il markup HTML di un pulsante APEX che ho costruito usando il Button Builder di Oracle APEX

L’unico punto di attenzione sta nel fatto che devi aggiungere due non standard al codice HTML

  • aggiungi il valore archiviaAlert alla proprietà class
  • aggiungi l’attributo alert-id che sarà valorizzato dinamicamente in funzione del valore restituito dalla colonna ID

Questi due attributi ci serviranno tra poco per implementare nel modo corretto la dynamic action.

Questo è il codice HTML completo del bottone implementato


<button type="button" title="Archivia Alert" aria-label="Archivia Alert" class="t-Button t-Button--noLabel t-Button--icon t-Button--hot t-Button--link archiviaAlert" alert-id="'||id||'"><span aria-hidden="true" class="t-Icon fa fa-remove"></span></button>

Il risultato è lo stesso che abbiamo visto poco fa.

Ora possiamo implementare l’azione dinamica.

  • Dall’App Builder, clicca su Dynamic Action
  • Clicca con il pulsante destro su Click e seleziona Create Dynamic Action
  • Crea una nuova Azione Dinamica con queste proprietà
    • Name: archiveAlert
    • Event: Click
    • Selection Type: jQuery Selector
    • jQuery Selector: .archiveAlert(deve essere uguale al valore della proprietà class del pulsante che deve essere intercettato)
  • Nella sezione Advanced imposta la proprietà Event Scope su Dynamic
  • Arrivato a questo punto puoi implementare la tua Dynamic Action per far si che faccia quello che preferisci. Ad esempio potresti eseguire del codice PL-SQL per aggiornarne lo stato del record sul database.
  • Per semplicità, mi limiterò a farti vedere come eseguire un semplice codice JavaScript che stampa un alert,
  • Aggiungi una nuova nuova Action di tipo Execute JavaScript Code
    • Action: Execute JavaScript Code
    • Code: JavaScript Expression
    • JavaScript Expression: inserisci lo script JS seguente.
alert("Hai cliccato sul record con ID=" + this.triggeringElement.getAttribute('alert-id'));
  • Esegui la Preview e premi sul bottone Archivia Alert. Se hai fatto tutto correttamente dovresti ottenere questo risultato.

Badge List Template

I badges vengono generalmente utilizzati quando vuoi costruire un cruscotto che enfatizzi o metta in evidenza una particolare informazione.

I badge sono uno dei migliori metodi per attrarre l’attenzione degli utenti su uno numero specifico come (il numero di task da eseguire, un KPI, ecc,…).

Un esempio molto calzante potrebbe essere quello di una applicazione di Customer Care (gestione delle Richieste di Assistenza) dove l’operatore che si collega può vedere in una dashboard in Home Page quante richieste nuove sono da assegnare, quante invece sono già state prese in carico e così via.

Ecco un esempio:

Vediamo insieme come costruire questo cruscotto.

A tal proposito useremo una query dummy, che estrae dei valori fittizi mentre nella realtà tu dovrai usare dei dati reali, letti dalle tabelle della tua applicazione.

La cosa importante da tenere a mente è che dovresti definire una query che restituisce un solo record, qualcosa di simile a questo

select 5 new_requests,
       6 assigned_to_me,
       30 assigned_to_my_groups,
       8 on_track,
       2 at_risk,
       3 overdue
  from dual

Ora che abbiamo preparato la query da usare per estrarre le informazioni, possiamo procedere con la configurazione del report.

  • Accedi all’APP Builder e crea un nuovo Classic Report
  • Inserisci nella sua definizione la query che vuoi utilizzare
  • Vai in Attributes > Appearance e seleziona il template Badge List
  • Clicca su Template Options
  • Da questa maschera puoi configurare le seguenti opzioni:
    • Apply Theme Colors: specifica se vuoi che APEX colori automaticamente ciascun badge usando la color palette definita nel Theme Roller
    • Badge Size: specifica la dimensione in pixel del badge
    • Style: specifica se il badge deve essere squadrato o circolare
    • Layout: specifica il layout generale (numero di colonne/righe)
  • Se esegui la preview dovresti ottenere il risultato atteso

Faccio solo alcune considerazioni di carattere generale.

La query che alimenta il Classic Report non deve contenere alcun placeholder o tag particolare: come hai potuto notare, la pagina dei risultati mostra direttamente gli ALIAS delle colonne della query.

Questo tipo di Template è indicato quando vuoi creare un cruscotto che mostra solo 1 record.

Se vuoi usare una query che estrae più righe non è il componente migliore da scegliere.

Un altro aspetto importante da tenere in considerazione sta nel fatto che questo tipo di layout non è interattivo.

Tornando all’esempio che abbiamo costruito sarebbe interessante far sì che l’utente se clicca sul singolo box (o badge) venga indirizzato ad una pagina di dettaglio dove si vedono tutti i record.

Per implementare questa funzionalità è più indicato l’utilizzo di una lista apex.

Cards Template

Il template Cards, di cui potete trovare qualche esempio qui, è molto utile per mostrare dati e informazioni raggruppate in schede o blocchi.

Un classico esempio di layout che puoi implementare utilizzando il template Cards è quello di un e-commerce oppure di uno store digitale.

Supponiamo, a tal proposito, di voler creare una applicazione dove puoi votare la tua pizza preferita!

  • Prima di tutto preoccupiamoci di creare la base dati che la nostra applicazione Pizza Contest utilizzerà. A tal proposito esegui il seguente script SQL.
-- create tables
create table pizza_contest (
    id                             number generated by default on null as identity 
                                   constraint pizza_contest_id_pk primary key,
    name                           varchar2(150 char),
    description                    varchar2(500 char),
    image                          varchar2(500 char),
    likes_counter                  number
)
;
-- load data
 
insert into pizza_contest (
    id,
    name,
    description,
    image,
    likes_counter
) values (
    1,
    'Pizza Margherita',
    'La pizza Margherita è la tipica pizza napoletana, condita con pomodoro, mozzarella (tradizionalmente è usato il fior di latte, non quella di bufala), basilico fresco, sale e olio; è, assieme alla pizza marinara, la più popolare pizza italiana.',
    '#APP_IMAGES#pizza_margherita.jpeg',
    39
);
insert into pizza_contest (
    id,
    name,
    description,
    image,
    likes_counter
) values (
    2,
    'Pizza Boscaiola',
    'La pizza Prosciutto e Funghi, chiamata anche Boscaiola, è una pizza con ingredienti di terra molto apprezzata dagli amanti dell''antica tradizione',
    '#APP_IMAGES#pizza_boscaiola.jpeg',
    68
);
insert into pizza_contest (
    id,
    name,
    description,
    image,
    likes_counter
) values (
    3,
    'Pizza 4 Formaggi',
    'Mozzarella, scamorza affumicata, Gorgonzola D.O.P. e Grana Padano: quando questi ingredienti si uniscono, il risultato è un trionfo di bontà filante.',
    '#APP_IMAGES#pizza_quattro_formaggi.jpeg',
    74
);
insert into pizza_contest (
    id,
    name,
    description,
    image,
    likes_counter
) values (
    4,
    'Pizza Capricciosa',
    'La pizza capricciosa è una pizza tipica della cucina italiana caratterizzata da un condimento di pomodoro, mozzarella, prosciutto cotto, funghi (di solito champignon), olive e carciofini.',
    '#APP_IMAGES#pizza_capricciosa.jpeg',
    86
);
insert into pizza_contest (
    id,
    name,
    description,
    image,
    likes_counter
) values (
    5,
    'Pizza 4 Stagioni',
    'La pizza alle quattro stagioni è una varietà di pizza che viene preparata con diversi condimenti, ripartiti in quattro diverse sezioni,ognuna delle quali richiama una delle quattro stagioni dell''anno.',
    '#APP_IMAGES#pizza_quattro_stagioni.jpeg',
    54
);
commit;

Per ciascuna card mostreremo il nome della pizza, una breve descrizione ed una foto.

Ci sono diversi modi per mostrare all’interno di un Classic Report una immagine, ad esempio recuperandola da una colonna BLOB definita nel database.

In questo esempio, invece, caricherò le immagini nell’area Static Application Files della mia applicazione

  • Accedi all’APP Builder e vai in Shared Components
  • Clicca su Static Application Files
  • Clicca su Upload File
  • Seleziona o trascina i file da caricare e premi Upload
  • Una volta che i files sono stati caricati sul server puoi utilizzarli nella tua applicazione usando la stringa che vedi nella colonna Reference (es: #APP_IMAGES#pizza_margherita.jpeg)

Ora possiamo configurare il report.

  • Accedi all’APP Builder e clicca sulla Pagina da modificare
  • Aggiungi una nuova Region di tipo Classic Report
  • Vai alle proprietà del Classic Report ed inserisci nella sua definizione la seguente query SQL
select id,
       name,
       description,
       image,
       likes_counter,
       apex_util.prepare_url('#') card_link,
       '<h2>'||name||'</h2>' card_subtitle,
       description card_text,
       'fa-heart' card_icon,  /* this could be anything  */
       null card_color,
       '<img src="' || image || '" width="350px"></img>' card_title,
       '<button type="button" class="t-Button t-Button--icon t-Button--hot t-Button--link t-Button--iconLeft"><span aria-hidden="true" class="t-Icon t-Icon--left fa fa-heart"></span>'||likes_counter||'</button>' card_subtext
  from pizza_contest
  • Sempre nella scheda Region vai alla sezione Appearance e seleziona il Template che si chiama Cards Container
  • Clicca su Attributes e seleziona il Template Cards
  • Seleziona Template Options e configura le opzioni grafiche come preferisci. Ad esempio io ho impostato queste opzioni
    • Display Subtitle: Yes
    • Style: Featured
    • Icons: No Icons
    • Layout: 5 Columns
    • Body Text: Auto
    • Icon Shape: Circle
    • Animation: Raise Card
  • Seleziona le seguenti colonne del Classic Report
    • CARD_SUBTITLE
    • CARD_TITLE
    • CARD_SUBTEXT
  • Imposta per ciascuna di esse la proprietà Escape Special Characters a OFF
  • Esegui la Preview dovresti ottenere questo risultato
  • Per completare la configurazione del template puoi implementare una azione dinamica, come fatto per il template Alert che aggiorna il numero di likes ottenuto da ciascuna pizza.

Comments Template

Il template Comments quando vuoi implementare delle applicazioni che hanno una componente social oppure di messaggistica.

Al riguardo ho scritto un articolo che spiega nel dettaglio come Creare una applicazione mobile simile a Twitter in Oracle APEX: ti invito a leggerlo capire come configurare correttamente questo tipo di template

Media List Template

Il template Media List è utile per implementare delle liste come quelle usate, ad esempio, per elencare i contatti di una rubrica aziendale oppure un elenco di task o appuntamenti in una agenda digitale.

Puoi trovare un esempio di come usare un Classic Report configurato come Media List in questo articolo.

Timeline Template

Quando vuoi visualizzare una sequenza temporale di eventi puoi usare il template Timeline.

Un caso d’uso molto pratico è, ad esempio, nelle applicazioni di customer care dove normalmente il sistema traccia un log degli eventi che si sono verificati dal momento in cui la richiesta è stata creata.

Questi report sono molto utili all’operatore per avere un’idea veloce di tutte le iterazioni che ci sono state tra il customer care e il cliente.

Vediamo insieme con un esempio come implementare questo tipo di report.

  • Esegui il seguente script per installare una tabella di DEMO da usare per l’esercizio
-- create tables
create table request_tracking (
    id                             number generated by default on null as identity 
                                   constraint request_tracking_id_pk primary key,
    event_user                     varchar2(100 char),
    event_user_type                varchar2(100 char),
    event_date                     date,
    event_type                     varchar2(100 char),
    event_title                    varchar2(150 char),
    event_description              varchar2(250 char)
)
;
-- load data
insert into request_tracking (
    id,
    event_user,
    event_user_type,
    event_date,
    event_type,
    event_title,
    event_description
) values (
    1,
    'Mario Rossi',
    'END_CUSTOMER',
    sysdate - 19,
    'NEW_REQUEST',
    'Nuova Richiesta',
    'Nuova richiesta di supporto'
);
insert into request_tracking (
    id,
    event_user,
    event_user_type,
    event_date,
    event_type,
    event_title,
    event_description
) values (
    2,
    'Daniele Trasarti',
    'CUSTOMER_CARE',
    sysdate - 19,
    'IN_CHARGE',
    'Presa in Carico',
    'La richiesta è stata presa in carico'
);
insert into request_tracking (
    id,
    event_user,
    event_user_type,
    event_date,
    event_type,
    event_title,
    event_description
) values (
    3,
    'Daniele Trasarti',
    'CUSTOMER_CARE',
    sysdate - 18,
    'RAISE_PHONE',
    'Chiamata telefonica',
    'Effettuata una chiamata di chiarimenti con il cliente'
);
insert into request_tracking (
    id,
    event_user,
    event_user_type,
    event_date,
    event_type,
    event_title,
    event_description
) values (
    4,
    'Daniele Trasarti',
    'CUSTOMER_CARE',
    sysdate - 17, 
    'WAITING_CUSTOMER_RESPONSE', 
    'In attesa di informazioni', 
    'Richieste informazioni aggiuntive al cliente, in attesa di risposta'
);
insert into request_tracking (
    id,
    event_user,
    event_user_type,
    event_date,
    event_type,
    event_title,
    event_description
) values (
    5,
    'Mario Rossi',
    'END_CUSTOMER',
    sysdate - 17, 
    'CUSTOMER_RESPONSE_RECEIVED',
    'Risposta ricevuta',
    'Risposta dal cliente ricevuta'
);
insert into request_tracking (
    id,
    event_user,
    event_user_type,
    event_date,
    event_type,
    event_title,
    event_description
) values (
    6,
    'Daniele Trasarti',
    'CUSTOMER_CARE',
    sysdate - 16, 
    'REQUEST_CLOSED', 
    'Richiesta completata',
    'Richieste di supporto completata'
);
commit;
-- load data
  • Accedi all’APP Builder e clicca sulla Pagina da modificare
  • Aggiungi una nuova Region di tipo Classic Report
  • Inserisci nella sua definizione la seguente query SQL
select id,
       event_user user_name,
       apex_string.get_initials(event_user) as user_avatar,
       case event_type
           when 'NEW_REQUEST'                then 'fa fa-file-new'
           when 'IN_CHARGE'                  then 'fa fa-file-search'
           when 'RAISE_PHONE'                then 'fa fa-phone'
           when 'WAITING_CUSTOMER_RESPONSE'  then 'fa fa-pause'
           when 'CUSTOMER_RESPONSE_RECEIVED' then 'fa fa-file-arrow-down'
           when 'REQUEST_CLOSED'             then 'fa fa-check'
           else null
       end as event_icon,
       case event_type
           when 'NEW_REQUEST'    then 'is-removed'
           when 'REQUEST_CLOSED' then 'is-new'
           else 'is-updated'
       end as event_status,
       event_user_type,
       event_date event_date,
       event_type,
       event_title,
       event_description event_desc,
       apex_util.prepare_url('#') event_link
  from request_tracking
 order by id desc
  • Vai in Attributes > Templates
  • Seleziona il template type Timeline
  • Vai nei Template Options e scegli l’opzione che preferisci tra un layout
  • Esegui la Preview per controllare il risultato

Conclusioni

Bene, abbiamo visto insieme quante cose un singolo componente come il Classic Report è in grado di fare.

Notevole, vero?

Con questa semplice guida ho cercato non solo di spiegarti come configurare un report. Ho anche voluto darti qualche idea su come usarli al meglio.

Spero con tutto il cuore che ti sia d’aiuto.

Ricordati che puoi puoi vedere on-line tutti gli esempi che ho prodotto in questo tutorial collegandoti direttamente all’APP di APPIn5Minuti.

Comunque sia, non finisce qui.

Come forse avrai già intuito, Oracle APEX ti permette di creare nuovi template così che tu possa completamente personalizzare la formattazione ed il layout grafico della tua applicazione.

Ne parlerò in un prossimo articolo.

Per il momento ti saluto di cuore e ti invito a seguirmi sui social e ad iscriverti alla pagina LinkedIn ufficiale di APPin5Minuti.

Un abbraccio

Daniele

TI POTREBBE INTERESSARE:

  • Come migrare le applicazioni da Oracle Forms ad Oracle APEX
  • Come sviluppare applicazioni sicure con Oracle APEX
  • CPQ in Oracle APEX
  • Prevedere l'interesse di un cliente verso un prodotto o servizio con Oracle APEX e Machine Learning
  • Programmare in PL-SQL: guida facile per principianti
  • Costruiamo un CRM con Oracle APEX

classic report, oracle apex

Interazioni del lettore

Lascia un commento Annulla risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Barra laterale primaria

BENVENUTO!

Il mio nome è Daniele Trasarti, autore di APPin5Minuti, il blog italiano che parla di piattaforme di Oracle APEX e applicazioni low-code.

Qui troverai tantissimi tutorial e risorse per imparare a sviluppare in pochissimo tempo bellissime applicazioni per gestire i dati ed i processi della tua azienda.

Se vuoi saperne di più inizia da qui.

Seguimi sui social!

  • LinkedIn
  • Twitter

NEWSLETTER

Iscriviti anche tu per far parte della più grande community italiana di persone che amano sviluppare low-code!

api rest appsheet appsheet data sources appsheet views appsheet workflow automation autonomous database build apps cpq crm css cyber security database dynamic layout facebook flowform flows4apex google google cloud interactive grid interactive report javascript list microsoft microsoft access mobile oracle oracle apex oracle cloud oracle rest data service ords pl-sq PL-SQL power apps product configurator sales configurator security social login software gestionale sql theme roller ux woocommerce wordpress workflows

COMMENTI RECENTI

  1. Daniele Trasarti su Oracle APEX: come creare un’applicazione web in 5 minuti

    Ciao Sabatino, grazie per l'apprezzamento. Riguardo alla tua domanda ti consiglio di usare Oracle Cloud. Puoi creare un account gratis…

  2. Sabatino Iannazzo su Oracle APEX: come creare un’applicazione web in 5 minuti

    Ciao Daniele, complimenti per la guida, mi hai aperto un mondo! volevo chiederti se con Apex e Oracle Database Express…

  3. Laura su Autenticazione a 2 Fattori basata su TOTP (Time-based One-time Password) con Oracle APEX

    Ciao, trovo molto interessante il tuo articolo. Hai qualche suggerimento per l'autenticazione con spid? pensi di fare qualche guida al…

  4. Mario Volpetti su Oracle APEX: come creare un’applicazione web in 5 minuti

    Ottima spiegazione e complimenti per la semplicità che ai usato. Sono riuscito a farlo anche io con un foglio excel…

  5. Riccardo Liviabella su Google AppSheet: come creare una APP Mobile da un foglio Excel in 5 minuti

    Ciao Daniele e grazie per le tue interessanti spiegazioni. E' da un pò di anni che lavoro su Appsheet e…

  6. Daniele Trasarti su Come costruire Workflows Approvativi in Oracle APEX

    Ciao Bhavin, I think you badly copied PL-SQL because the one you provided is not correct. Fix the script and…

  7. Daniele Trasarti su Applicazione di Prenotazione Appuntamenti in Oracle APEX

    Grazie mille Franca!

Copyright © 2023 · APPin5Minuti.it · Privacy Policy · Cookie Policy