Vai al contenuto

Stampe su Jasper

Versione 0.1 - Prototipo

In via sperimentale proviamo a implementare la gestione delle stampe attraverso Jasper. Il presupposto per il funzionamento di questo metodo e': - Presenza di un server Jasper (gia' implementato per la stampa rapportini) - L'attivazione di uno storage S3 per il cliente che lo usa

Funzionamento di massima

Fase Area S3 Web
Richiesta di stampa L'utente entra in una funzione di stampa su Area, gia' predisposta per la stampa su Word/Jasper
Selezione modello Si apre la DIALOG di selezione dei modelli (COGPA3). L'utente seleziona un modello di stampa identificato come "Jasper" (generalmente i modelli sono per WORD)
Produzione XML Viene innescato WORDMDL, come nel caso di stampa Word, che crea un XML formalmente corretto in locale
Trasferimento su Web Il file XML viene portato su S3 bucket, processo, id_report
Viene creato un record di registro sulla tabella "Spool"
Presa in carico del report Attesa semaforo libero.... Il demone si accorge che c'e' un processo da gestire, alza un semaforo sul record di registro
Elaborazione report Attesa semaforo libero.... Jasper recupera il file XML e le restanti informazioni dal file di registro di spool ed elabora il report producendo un file PDF
Chiusura report Attesa semaforo libero.... bucket, processo, id_report Jasper imposta il record di registro come "elaborato" e salva il report in PDF su s3. Opzionale: il file XML viene rimosso da S3
Conclusione Non appena il gestionale si accorge che il report e' libero, scarica il file "report.pdf" dalla cartella id_report relativa e lo apre in anteprima

Si potra' poi prevedere la possibilita' di invio in stampa diretta, o di invio mail; quest'ultima opzione pero' potrebbe essere effettuata direttamente lato WEB.

Base dati

COGMODST: In questa tabella verra' aggiunto un campo che permette di stabilire il "Motore di esecuzione". Il default e' Word, e sara' possibile scegliere anche "Jasper". Se la sperimentazione ha successo qui molto probabilmente dovremo aggiungere un "Codice modello Jasper": fa riferimento ad un elenco di modelli preparati da noi, e permette quindi di associare il modello di Area al modello da usare su Jasper; probabilmente questo codice modello si potra' mettere sul campo "MDC-PATH", che in contesto jasper non viene utilizzato. Se quindi la tabella COGMODST verra' sincronizzata su ARPMODST per i modelli con MDC-MOTORE = "J", il motore Jasper potra' capire quale modello di stampa usare.

Particolarita' - Caratteri speciali

Ci sono alcuni caratteri che verranno sostituiti, perche' non sono compatibili con formato XML; verra' quindi implementata una apposita funzione di GESSTR: "CONV-PER-XML", simile a "CONV-PER-WORD".

Modifiche

COGPA2: Gestione della colonna "Motore report"

COGPA3: Deve restituire al programma chiamante il "Motore report" su COGPA3-MOTORE

Programmi di stampa: Qualunque programma di stampa potra' usare questa modalita'. Naturalmente sara' piu' semplice iniziare implementandola sui programmi che prevedono la stampa in modalita' Word. Su questi programmi sara' sufficiente:

Operazione: "APRI-XML" - Impostare WORDMDL-DRIVER = "XML", se l'utente ha scelto un modello con MDC-MOTORE = "J" - Impostare WORDMDL-PROCESSO = COGPA3-TIP - Impostare WORDMDL-MDC-PROG = COGPA3-O-MDC-PROG - Al termine testare WORDMDL-CODICE-ERRORE: deve essere 0, altrimenti interrompere l'elaborazione evidenziando l'errore nel messaggio

Operazione: "Esegui" - Al termine testare WORDMDL-CODICE-ERRORE: deve essere 0, altrimenti interrompere l'elaborazione evidenziando l'errore nel messaggio

WORDMDL: Sono state effettuate alcune modifiche necessarie per la produzione di un XML standard. Queste modifiche sono subordinate a WORDMDL-DRIVER = "XML"

Post-elaborazione: Quando il driver richiesto e' "XML", dovra' innescare il procedimento descritto sopra.


Versione 1.0

Versione piu' strutturata, che prevede la gestione configurazione dei modelli di stampa direttamente su Areagate, e l'importazione di questi modelli in locale sul gestionale, in modo che sia possibile per l'utente scegliere il modello ed eseguire la stampa.

In questa modalita', si prevede che su Areagate venga effettuata la configurazione completa del modello: si dovranno quindi definire le tabelle da configurare e le relative colonne; queste informazioni saranno poi importate all'interno dell'applicazione gestionale locale e utilizzate come se fossero state configurate in locale.

Funzionamento di massima - Sezione operativa

Questa parte rispecchia quasi completamente quella del prototipo.

Fase Area S3 Web
Richiesta di stampa L'utente entra in una funzione di stampa su Area, gia' predisposta per la stampa su Word/Jasper
Selezione modello Si apre la DIALOG di selezione dei modelli (COGPA3). L'utente seleziona un modello di stampa identificato come "Jasper". In questo caso il modello e' stato "Selezionato" dall'utente direttamente da una funzionalita' di Areagate
Produzione XML Viene innescato WORDMDL, come nel caso di stampa Word, che crea un XML formalmente corretto in locale
Trasferimento su Web Il file XML viene portato su S3 bucket, processo, id_report
Viene creato un record di registro sulla tabella "Spool". Il campo A-SPL-PROG-MODELLO conterra' quindi l'id modello definito in COGMODST2
Presa in carico del report Attesa semaforo libero.... Il demone si accorge che c'e' un processo da gestire, alza un semaforo sul record di registro
Elaborazione report Attesa semaforo libero.... Jasper recupera il file XML e le restanti informazioni dal file di registro di spool ed elabora il report producendo un file PDF
Chiusura report Attesa semaforo libero.... bucket, processo, id_report Jasper imposta il record di registro come "elaborato" e salva il report in PDF su s3. Opzionale: il file XML viene rimosso da S3
Conclusione Non appena il gestionale si accorge che il report e' libero, scarica il file "report.pdf" dalla cartella id_report relativa e lo apre in anteprima

Si potra' poi prevedere la possibilita' di invio in stampa diretta, o di invio mail; quest'ultima opzione pero' potrebbe essere effettuata direttamente lato WEB.

Base dati

Vedi schema "LucidChart"

Modifiche

COGPA2: Gestione della colonna "Motore report"

COGPA3: Deve restituire al programma chiamante il "Motore report" su COGPA3-MOTORE

WORDMDL: Sono state effettuate alcune modifiche necessarie per la produzione di un XML standard. Queste modifiche sono subordinate a WORDMDL-DRIVER = "XML"

Post-elaborazione: Quando il driver richiesto e' "XML", dovra' innescare il procedimento descritto sopra. Il procedimento viene eseguito da JASPUTIL. All'interno del programma, viene letta la configurazione "areagate"-"server-web" per comporre un indirizzo di pagina php che si occupa dell'esecuzione del processo di stampa.


Progettazione nuove classi di report

Questa sezione e' equivalente a quella che si realizza per i report classici in WORD. Su ambiente di sviluppo si crea la struttura della nuova classe report; ogni classe corrisponde prevalentemente ad un programma, ed e' caratterizzato da un record di testata, e uno o piu' record di dettaglio, dove ogni record corrisponde ad una tabella di dati utilizzabile all'interno del report. Per ciascuna tabella poi si definiscono i campi utilizzabili in ciascuna tabella.

Questa definizione attualmente viene effettuata su alcune tabelle di Area che possono essere sincronizzate con corrispondenti tabelle su KPN:

Tabella Area Contenuto Tabella KPN
COGMDSTS Definizione classi di report ARPMDSTS
COGMDSDT Definizione tabelle di dettaglio per classe ARPMDSDT
COGMDSDC Definizione campi per ciascuna tabella di dettaglio ARPMDSDC

La sincronizzazione di queste tabelle avverra' unicamente in tempo reale con gli stessi programmi che effettuano la gestione delle tabelle area. Quindi, la definizione di un nuovo modello avverra' su AREA, partendo da: - GESMDSTS - Modelli di stampa - GESMDSDT - Dettagli su modelli di stampa - GESMDSDC - Campi su tabella


Progettazione modello di report per una classe

AREAGATE - Progettazione nuovo modello

Disegno nuovo report: Su Jasper si progetta un modello e viene generato un file JRXML che contiene le direttive. Il modello conterra': - Tag singoli - Tabelle

Salvataggio modello standard: Una apposita funzione su AREAGATE permettera' la creazione del modello. Si crea un record su ARPMODST2 con le seguenti caratteristiche:

Dato Contenuto
A-MDC-AZI
A-MDC-PROG Codice progressivo auto-increment
A-MDC-TIP Classe di documento; corrisponde in linea di massima al nome del programma che lato gestionale produce il file XML
A-MDC-PERTINENZA " "
A-MDC-ANA " "
A-MDC-DES Descrizione modello
A-MDC-PATH Percorso completo del file JRXML (lato server Jasper)
A-MDC-TIPO-PATH "L"
A-MDC-LNG Lingua a cui e' associato il modello (?)
A-MDC-BRAND " "
A-MDC-FL-AGG " "
A-MDC-VAL " "
A-MDS-DATETIME timestamp del record
A-MDC-MODEL "gen" (?)
A-MDC-SKM-ORIGINE " "
A-MDC-SKM-MODELLO " " (?)
A-MDC-PRESENZA-CHECKLIST " "

Si creano "n" record su ARPMODDT: ognuno corrisponde alla configurazione di una tabella presente nel modello:

Dato Contenuto
A-MDD-AZI A-MDC-AZI
A-MDD-PROG-MODELLO A-MDC-PROG
A-MDD-PROG-DET A-MDSD-PROG
A-MDD-COMPOSIZIONE Stringa che contiene i codici di colonna scelti dall'utente, separati da ";". Il numero di campi deve corrispondere alle colonne previste nel modello Jasper per questa tabella
A-MDD-FL-AGG " "
A-MDD-FL-CANC " "
A-MDD-ID-SINCRO 0

Attivazione modelli presso cliente

Usando l'apposita funzione COGPA2 si aggiunge un nuovo modello, come se fosse creato localmente in WORD. In caso invece di creazione modello Jasper le differenze sono: - Si indica "Motore = Jasper" - L'utente dovra' scegliere tra i modelli "Standard" preparati su Areagate e resi disponibili a tutti - Non sara' possibile ne' necessario configurare le tabelle di dettaglio perche' queste sono fissate durante la progettazione su Areagate, e saranno quindi acquisite in locale al momento dell'associazione.


Utilizzo modelli

Quando si decide di generare dei modelli Jasper per una nuova classe, e' necessario fare alcune piccole modifiche al programma di generazione report, nelle chiamate a WORDMDL:

Operazione: "APRI-XML" - Impostare WORDMDL-DRIVER = "XML", se l'utente ha scelto un modello con MDC-MOTORE = "J" - Impostare WORDMDL-PROCESSO = COGPA3-TIP - Impostare WORDMDL-MDC-PROG = COGPA3-O-MDC-PROG - Al termine testare WORDMDL-CODICE-ERRORE: deve essere 0, altrimenti interrompere l'elaborazione evidenziando l'errore nel messaggio

Operazione: "Esegui" - Al termine testare WORDMDL-CODICE-ERRORE: deve essere 0, altrimenti interrompere l'elaborazione evidenziando l'errore nel messaggio


Modifiche a programmi di stampa

Qualunque programma di stampa potra' usare questa modalita'. Naturalmente sara' piu' semplice iniziare implementandola sui programmi che prevedono la stampa in modalita' Word. Su questi programmi sara' sufficiente:

Operazione: "APRI-XML" - Impostare WORDMDL-DRIVER = "XML", se l'utente ha scelto un modello con MDC-MOTORE = "J" - Impostare WORDMDL-PROCESSO = COGPA3-TIP - Impostare WORDMDL-MDC-PROG = COGPA3-O-MDC-PROG

Esempio:

move cogpa3-tip to wordmdl-processo
if cogpa3-o-motore = "J"
    move "XML" to wordmdl-driver
end-if
move cogpa3-o-mdc-prog to wordmdl-mdc-prog
call "WORDMDL" using stringhe util-wordmdl
  • Al termine testare WORDMDL-CODICE-ERRORE: deve essere 0, altrimenti interrompere l'elaborazione evidenziando l'errore nel messaggio

Esempio:

if wordmdl-codice-errore > 0
    string "Problema nella produzione report; errore: "
        k-newline wordmdl-codice-errore ": '"
        wordmdl-msg-esito "'"
        delimited " " into wb-msg
    perform vbx-msg-error
    go to ......
end-if

Operazione: "Esegui" - Al termine testare WORDMDL-CODICE-ERRORE: deve essere 0, altrimenti interrompere l'elaborazione evidenziando l'errore nel messaggio

Esempio:

if wordmdl-codice-errore > 0
    string "Problema nella produzione report; errore: "
        k-newline wordmdl-codice-errore ": '"
        wordmdl-msg-esito "'"
        delimited " " into wb-msg
    perform vbx-msg-error
    go to ......
end-if

Casi particolari

Note fisse su ordine (COGO65M): Sugli ordini clienti le note fisse venivano esportate suddivise per linee, come nei vecchi programmi di stampa a carattere. Inoltre l'esportazione veniva effettuata passando i dati a WORDMDL come se fossero righe di tabella; questo generava un problema su Jasper, perche' di fatto non era una tabella.

Soluzione: Passo tutte le note fisse in una unica chiamata a WORDMDL.


Estratto da documentazione interna ClickUp