Record e parametri

self.record

In generale l’oggetto stampa contiene al suo interno una copia del record primario che vogliamo stampare (l’ordine, la fattura, il cliente) e possiamo accedere ai suoi campi usando la notazione

protocollo = self.record['numero_protocollo']

Inoltre con la sintassi che supporta il path relazionale possiamo quindi leggere dei valori in relazione.

ragione_sociale = self.record['@cliente_id.ragione_sociale']

Suggerimento

Si noti che nel record saranno sempre disponibili solo le colonne «vere» del database, ad esclusione quindi di quelle virtuali che non siano state staticizzate. Sarà quindi necessario specificare nel Main della risorsa di stampa il parametro virtual_columns con le colonne da caricare per la stampa. Fa eccezione la struttura della griglia , dove invece le colonne virtuali saranno sempre automaticamente disponibili.

Suggerimento

Nel caso in cui l’oggetto della stampa sia una selezione di record, le pkeys di questi record verranno di default rese disponibili in self.record['selectionPkeys']

self.field

Se non siamo però interessati al datatype originale del valore, ma desideriamo semplicemente farlo comparire nella stampa, suggeriamo di usare il field. Questo infatti restituirà il valore, letto dal record, già convertito come testo e formattato opportunamente per la rappresentazione su stampa.

La cosa è molto vantaggiosa e comoda se abbiamo a che fare con numeri decimali o con date, da formattare secondo lo standard locale. Anche il metodo field supporta un path di tipo relazionale con gli @.

fattura_row.cell(self.field('data_fattura'), lbl='Data')

Vedete come con questa sintassi non devo preoccuparmi di convertire o formattare il dato.

Il metodo onRecordLoaded

Abbiamo detto che l’oggetto stampa, quando viene creato riceve e salva al suo interno una copia del record primario. Questo avviene durante una chiamata interna al metodo loadRecord, il quale non è un metodo di hook e non dovrebbe essere ridefinito.

Lo sviluppatore Genropy ha la possibilità di definire una callback che verrà invocata subito dopo la lettura del record. Per far questo bisogna implementare il metodo onRecordLoaded.

In questo punto, se ci fossero degli attributi o delle caratteristiche della stampa che dipendono dai dati del record, lo sviluppatore può inserire qui questo tipo di logica.

self.db

Inoltre un oggetto che erediti da TableScriptToHtml, ha un attributo che rimanda direttamente all’oggetto database dell’applicazione. Perciò nei metodi della nostra risorsa di stampa potremmo andare a fare delle letture alle table, usando tale proprietà

self.db

Parametri di stampa

Abbiamo visto che nella definizione della batch action che lancia l’esecuzione della stampa è possibile richiedere all’utente dei parametri personalizzati.

Anche questi sono messi a disposizione dell’oggetto stampa e posso accedervi con il metodo parameter.

Questo metodo riceve il nome del parametro e ne restituisce il valore. Se viene invocato senza passare il nome di un parametro restituisce una Bag contenente tutti i parametri di stampa.

inizio_periodo = self.parameter('inizio_periodo')
fine_periodo = self.parameter('fine_periodo')

Questi parametri erano stati definiti e richiesti dal metodo table_script_parameters_pane e potrò usarli ad esempio per la query che mi darà le righe da rappresentare nella griglia di stampa.