Instant Developer

Tips&Tricks Instant Developer Foundation: report alla dimensione “adatta”

| 10 Luglio 2020 | Giuseppe Lanzi
immag 2 Instant Developer

Il motore di reportistica di Instant Developer Foundation è davvero potente e flessibile, ma c’è una particolare richiesta su cui spesso vedo difficoltà di implementazione: ottenere un report grande come il suo contenuto, specialmente su app mobile.

Immaginiamo di voler stampare a video una scheda articolo e di voler usare un Libro per sfruttare la flessibilità grafica del motore di reportistica, che ci garantisce diversi vantaggi:

  1. la grafica è altamente personalizzabile;
  2. gli oggetti grafici possono essere collegati a metodi, per implementare funzioni applicative ed essere quindi vere e proprie interfacce, non semplici report;
  3. le box e le sezioni possono adattarsi automaticamente al proprio contenuto.

Tuttavia abbiamo due problemi da risolvere:

  1. come evitare la sovrapposizione delle box che si sono allargate?
  2. come poter avere una pagina alta esattamente quanto il contenuto?

La sovrapposizione delle box

Immaginiamo di voler stampare a video un contenuto di dimensioni non note. Sappiamo che, se usiamo Adatta come metodo di ridimensionamento di una box, questa diventerà grande abbastanza per mostrare tutto il contenuto. Ma come fare per stampare a video tutte le box successive?

Nel progetto di esempio ho incluso un report che mostra la scheda di un prodotto, al cui interno ho voluto inserire una box contenente una riga per ogni volta in cui il prodotto è stato ordinato.

A design time appare come nell’immagine sotto.

12 Instant Developer

Si potrebbe pensare di lasciare dello spazio, ma ci sono due problemi: lo spazio potrebbe essere troppo poco oppure troppo. Nel primo caso si avrebbe un “buco” nella visualizzazione, nel secondo caso un ancor più brutto effetto di sovrapposizione.

13 Instant Developer
La box contenente la lista degli ordini si è ridimensionata, ma si è sovrapposta a quella inferiore.

Risolvere questo fenomeno è semplice, basta usare due sezioni di dettaglio, una che arriva fino alla box contenente la lista degli ordini e l’altra che contiene le box successive, riducendo al minimo lo spazio tra le due. In questo modo, la prima delle due sezioni si allungherà per poter mostrare correttamente il contenuto e la sezione che la segue comincerà a stamparsi da quel punto in giù.

Nulla vieta di avere due sezioni dello stesso tipo una dietro l’altra 😉

A design time avremo questa configurazione, dove la prima sezione – Detail1 – comincia all’inizio della pagina e la seconda – Detail2 – comincia dove appare la riga rossa.

14 Instant Developer

A runtime l’effetto è quello dell’immagine qui sotto, pertanto il problema della sovrapposizione è risolto.

Adattare la lunghezza della pagina

Rimane da risolvere il problema dell’altezza della pagina. Nell’immagine precedente, infatti, c’è un grande spazio bianco dopo la fine del testo, perché la pagina è stata disegnata lunga 1000 mm per permettere di avere sempre una sola pagina stampata a video. Ma come fare a ridurla a runtime nel modo giusto?

Sono due le funzionalità che vengono in nostro aiuto: l’evento di formattazione della pagina mastro onFormatting e il flag Calcola il numero di pagine prima di stampare.

Attivando il flag per il calcolo del numero di pagine prima di stampare (utile per stampare contenuti che hanno già il numero definitivo delle pagine totali del report) il libro deve essere stampato due volte: una prima volta per calcolare il numero effettivo delle pagine finali della stampa, conseguentemente al codice eseguito negli eventi di formattazione come quello che abbiamo nel progetto di esempio, e una seconda volta per la stampa definitiva.

Possiamo attivare questo flag per stampare il report una prima volta, memorizzando la dimensione totale del contenuto nell’evento afterFormatting dell’ultima sezione del report, per poi modificare a runtime la dimensione della pagina mastro nell’evento onFormatting, quando la funzione number Of Pages Confirmed restituisce true.

Questo è il codice dell’evento onFormatting che ho usato nel progetto di esempio.

16 Instant Developer

E questo è il codice dell’evento afterFormatting della sezione Detail2 citata nel punto precedente. Per ottenere l’altezza sommiamo l’altezza della box nella pagina mastro (PageBody), la posizione corrente della sezione Detail2, ottenuta tramite YPos e la sua altezza di runtime letta con height.

17 Instant Developer

Per provare l’esempio basta avviarlo e selezionare una categoria: verrà mostrata la pagina con tutti i prodotti della categoria selezionata, per i quali viene visualizzata una scheda prodotto per volta.

D’ora in poi solo report in anteprima con la misura giusta 😉

Giuseppe Lanzi
Technical Support Manager
Mi occupo di assistenza e consulenza tecnica, dei corsi di formazione e dei sistemi rivolti ai clienti. Amo la tecnologia e ogni tipo di nuovo gadget, mi interesso di fotografia e prendo al volo ogni occasione di scoprire un nuovo gioco.

2 comments

  1. Instant Developer Foundation: report alla dimensione “adatta”
    Molto interessante ma non trovo dove scaricare l’esempio
    Grazie

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.


Potrebbe Interessarti

Instant Developer Foundation 22.5 e Fluid: il futuro comincia da qui

La versione 22.5 di Instant Developer Foundation rappresenta un passo tangibile verso il futuro di Instant Developer. Il nuovo motore grafico Fluid è infatti il...

Leggi Tutto

Webinar: Le novità di Instant Developer Cloud 22.5

Nel webinar sulle novità della release 22.5 di Instant Developer Cloud , Giuseppe Lanzi, responsabile dei reparti Customer Care e Systems e Paolo Giannelli, responsabile...

Leggi Tutto

Instant Developer Cloud 22.5: esperienze migliori per te e il tuo software

Instant Developer Cloud 22.5 è una versione progettata per una migliore esperienza di utilizzo da parte degli sviluppatori e di fruizione delle applicazioni per gli...

Leggi Tutto

Rimani Aggiornato

Iscriviti alla nostra newsletter per ricevere aggiornamenti su novità, eventi, release, webinar e tante altre notizie sui prodotti Instant Developer.