.. _le_stampe/stampe_genropy/stampe_risorsa/risorse_stampa/dati_record: 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'] .. hint:: 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 :ref:`Main della risorsa di stampa ` il parametro ``virtual_columns`` con le colonne da caricare per la stampa. Fa eccezione :ref:`la struttura della griglia` , dove invece le colonne virtuali saranno sempre automaticamente disponibili. .. hint:: 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 :ref:`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.