Import / Export Bilancio ACG Vision4 Guida alla personalizzazione Settembre 2011 © IBM Corp. 2011. All rights reserved. Note Le informazioni riportate nel presente documento sono distribuite “as is” senza alcuna garanzia implicita o esplicita. E’ responsabilità dell’utente utilizzare queste informazioni o implementare le tecniche descritte che richiedono la capacità dell’utente di valutarle ed integrarle all’interno dell’ambiente operativo. IBM assicura l’accuratezza degli argomenti trattati in relazione alle specifiche situazioni descritte, tuttavia non garantisce l’ottenimento dei medesimi o analoghi risultati in tutte le possibili condizioni operative dell’ambiente utente. L’adattamento delle tecniche descritte agli ambienti operativi è effettuato a proprio rischio. Il presente documento può includere imprecisioni tecniche o errori di stampa. Modifiche al documento potranno essere disponibili in date successive. La IBM può introdurre miglioramenti e/o variazioni ai prodotti e/o programmi descritti nel presente documento in qualsiasi momento e senza preavviso. Qualunque riferimento a siti web non IBM è fornito a solo titolo esemplificativo e non costituisce invito all’utilizzo e/o navigazione. Il materiale presente nei siti web referenziati non è parte del prodotto IBM fornito e il loro eventuale utilizzo è effettuato a proprio rischio. Le informazioni relative a prodotti non IBM sono fornite dai rispettivi fornitori, dagli annunci pubblicitari e da informazioni liberamente disponibili. IBM non ha collaudato tali prodotti e non può confermare l’accuratezza delle prestazioni, la compatibilità o qualunque altra caratteristica relativa ai prodotti non IBM. Qualunque richiesta sulle caratteristiche operative dei prodotti non IBM devono essere rivolte direttamente ai rispettivi fornitori. I programmi di esempio e i file di esempio descritti e/o scaricabili, sono parte integrante del presente tutorial e quindi soggetti alle stesse condizioni di utilizzo riportate nella sessione iniziale Note e Trademarks. COPYRIGHT LICENSE: Il presente documento può contenere esempi di applicazioni il cui codice sorgente illustra le tecniche di programmazione su diversi ambienti operativi. © IBM Corp. 2011. All rights reserved. Trademarks IBM, il logo IBM e ibm.com sono marchi o marchi registrati della International Business Machines Corporation in diversi Paesi del mondo. La lista aggiornata dei marchi registrati di IBM è disponibile sul sito www.ibm.com/legal/copytrade.shtml, alla voce "Copyright and trademark information" . I seguenti termini sono marchi o marchi registrati della International Business Machines Corporation in diversi Paesi del mondo: AS/400® BladeCenter® Cognos® DB2® DB2 Universal Database™ eServer™ i5/OS® IBM® iSeries® OpenPower® OS/400® POWER® Power Systems™ pSeries® Rational® System i® System i5® System p® System p5® System Storage® System x® WebSphere® I seguenti termini sono marchi di altre aziende: – Adobe, il logo Adobe, PostScript e il logo PostScript sono entrambi marchi registrati o marchi di Adobe Systems Incorporated negli Stati Uniti e/o in altri Paesi. – Intel, il logo Intel, Intel Inside, il logo Intel Inside, Intel Centrino, il logo Intel Centrino, Celeron, Intel Xeon, Intel SpeedStep, Itanium e Pentium sono marchi o marchi registrati di Intel Corporation o delle sue consociate e/o filiali negli Stati Uniti e in altri Paesi. – Linux è un marchio registrato di Linus Torvalds negli Stati Uniti, in altri Paesi, o in entrambi. – Microsoft, Windows, Windows NT e il logo di Windows sono marchi di Microsoft Corporation negli Stati Uniti, in altri Paesi, o in entrambi. – UNIX è un marchio registrato di The Open Group negli Stati Uniti e in altri Paesi. – Java e tutti i marchi e i loghi basati su Java sono marchi o marchi registrati di Oracle e/o delle sue filiali e/o consociate. – Novell, il logo Novell, openSUSE e il logo openSUSE sono marchi registrati di Novell, Inc e SUSE Linux è un marchio di Novell, Inc. Altre denominazioni ivi citate, prodotti e nomi di servizi possono essere marchi di IBM o di altre aziende. © Copyright International Business Machines Corporation 2011. Tutti i diritti riservati. © IBM Corp. 2011. All rights reserved. Indice 1. Introduzione e obiettivi............................................................................................5 1.1 2. Flusso operativo .....................................................................................................6 2.1 Esportazione ...................................................................................................................................6 2.2 Modifica...........................................................................................................................................8 2.3 Importazione ...................................................................................................................................8 3. Personalizzazione del template ..............................................................................9 3.1 Posizione del template sul server ...................................................................................................9 3.2 Aggiunta di informazioni statiche ....................................................................................................9 3.3 Aggiunta di una nuova pagina contenente un grafico...................................................................10 3.4 Impostazione della password sulle pagine protette ......................................................................11 4. 5. Prerequisiti ......................................................................................................................................5 Personalizzazione del codice ............................................................................... 12 4.1 La Factory .....................................................................................................................................12 4.2 Estrazione dei dati e costruzione del foglio elettronico.................................................................12 4.3 Il template......................................................................................................................................12 4.4 PoiAdapter ....................................................................................................................................13 4.5 Supporto del formato .xlsx (Excel® 2007) ....................................................................................13 Uso come componente......................................................................................... 14 © IBM Corp. 2011. All rights reserved. Pagina 4 di 14 1. Introduzione e obiettivi La funzione di importazione/esportazione Bilancio Vision4 permette all’utente di esportare un bilancio, modificarne i valori tramite un foglio elettronico ed eventualmente reimportarlo in Vision4. Il codice è progettato in modo modulare per essere adattato a diverse necessità. In questo tutorial verrà brevemente illustrato il flusso operativo della funzione quindi si passerà alla personalizzazione. E’ possibile agire su due livelli: • • Personalizzazione del template o o Nessuna conoscenza del linguaggio Java™ è richiesta E’ possibile introdurre/modificare attributi statici (colori, font, logo aziendale, immagini, hiperlink, ecc) o E’ possibile introdurre nuove pagine con calcoli e grafici derivati dai dati con cui verrà popolato il template all’atto dell’esportazione. Personalizzazione del codice o Verranno illustrate le classi ed i metodi da estendere; questa strada è obbligata quando si vogliono introdurre nel foglio elettronico dati nuovi, estraendoli dal database Vision4 eventualmente integrato da tabelle di prodotti di terze parti. 1.1 Prerequisiti • ACG Vision4 versione 1.4.0 o successive • Microsoft® Exce®l 2003 o versioni successive • IBM® WebSphere® 6.0 o successive Nota: le funzioni descritte nel presente tutorial si basano sulla libreria Apache poi-2.5.1-final-20040804.jar fornita insieme al prodotto ( http://poi.apache.org/ ). Se si utilizza la versione di Websphere® 6.1 (o successive) è raccomandabile utilizzare poi-3.5-FINAL-20090928.jar che offre in fase di personalizzazione un set più evoluto di funzionalità. © IBM Corp. 2011. All rights reserved. Pagina 5 di 14 2. Flusso operativo Esportazione Template Foglio elettronico database Modifica dei dati Server ACG Vision4 Importazione Foglio elettronico 2.1 Esportazione Dal menù selezionare: Controlling -> Bilanci Gestionali -> Lista Scegliere un bilancio ad immissione manuale, visualizzarlo e, tramite il pulsante , lanciare l’esportazione. In alternativa la funzione può essere lanciata direttamente dalla lista tramite il menù contestuale. Il sistema mostra prima un pannello di riepilogo dei parametri di selezione, se tutto è a posto premendo “Esegui” si genera un file Excel® di questo tipo: © IBM Corp. 2011. All rights reserved. Pagina 6 di 14 Nota bene: Microsoft® Internet Explorer® potrebbe essere configurato in modo da prevenire il download di file; se questo accade modificare le impostazioni di sicurezza come segue: Selezionare Strumenti -> Opzioni Internet -> Protezione -> livello personalizzato… Attivare “download dei file” e “Richiesta di conferma automatica per il download dei file” sulle impostazioni di protezione. © IBM Corp. 2011. All rights reserved. Pagina 7 di 14 2.2 Modifica L’operatore può, a questo punto, modificare i valori di bilancio; il foglio ricalcolerà contestualmente i totali. Alcune celle dello Stato Patrimoniale e del Conto Economico sono protette da scrittura. In particolare è protetta la struttura del bilancio ed il calcolo dei totali. Questo è di grande aiuto nel prevenire modifiche che possono causare problemi nella successiva fase di importazione. Terminate le modifiche salvare l’Excel® sul disco locale. 2.3 Importazione Dalla lista dei bilanci gestionali, attraverso il menù contestuale selezionare “Importa bilancio”: Selezionando “upload” si carica sul sistema il file preparato al punto precedente. Attraverso il pulsante “Estrai parametri” è possibile estrarre dal file i parametri di importazione (azienda, schema, bilancio, divisione). A questo punto eseguire l’importazione definitiva selezionando il pulsante Il sistema sottopone il foglio ad un controllo incrociato della validità di tutto il suo contenuto. Se non si riscontrano problemi mostra i valori che si stanno per riversare sul database e chiede conferma per il salvataggio. © IBM Corp. 2011. All rights reserved. Pagina 8 di 14 3. Personalizzazione del template Il template è un foglio di partenza che la funzione carica e poi popola con i dati estratti dal database; il risultato di questo processo viene poi scaricato in locale. Modificando il template sul server possiamo introdurre/modificare attributi statici. 3.1 Posizione del template sul server Il template si trova sull’application server in /conf/ctg/TemplateExportBilancio.xls Se ne può determinare la posizione assoluta sul server attraverso l’utility fscan: lanciare vision4 e dalla parte alta dello schermo selezionare: Strumenti -> Debug -> Raccolta informazioni -> Visualizza attributi di sessione Compare una finestra su cui inserire il file da cercare; selezionando quindi “find file” viene visualizzato: Individuato il file lo si può modificare direttamente secondo le indicazioni dei paragrafi che seguono. Per distribuirlo ai clienti finali è opportuno impacchettarlo in uno .zip da installare tramite la consolle di amministrazione di websphere seguendo la stessa procedura che si segue per le fix. A questo documento sono allegati una serie di template di esempio che possono essere liberamente provati. Per tornare alla situazione iniziale installare TemplateStandard.zip. Nota: in generale le PTF non sovrascrivono il template, a meno che non si tratti di PTF cumulative. In questo caso è necessario installare nuovamente il proprio template personalizzato dopo la PTF. 3.2 Aggiunta di informazioni statiche Per aggiungere un logo, un hiperlink, o semplicemente per cambiare font e colori, è sufficiente modificare il template e le informazioni saranno riportate sul file esportato. Esempio allegato: TemplateExportBilancioConLogo.zip © IBM Corp. 2011. All rights reserved. Pagina 9 di 14 3.3 Aggiunta di una nuova pagina contenente un grafico Per aggiungere all’export che verrà generato un grafico di questo tipo: Operare come segue: Aprire il template e, dal menù di Excel® selezionare Insert -> Chart A questo punto seguire le indicazioni del wizard avendo cura di impostare come “Source data” le celle dei fogli di CE o di SP che vengono sovrascritte durante l’esportazione ad esempio =CE!$D$6:$O$7 Chiaramente si avrà un grafico poco significativo sul template, l’utente finale invece vedrà il grafico ricalcolato sulla base dei dati sovrascritti durante l’esportazione. Sono sovrascritte la riga 6 con le label e tutte le righe successive con i dati. Esempio allegato: TemplateExportBilancioConChart.zip © IBM Corp. 2011. All rights reserved. Pagina 10 di 14 3.4 Impostazione della password sulle pagine protette Come indicato nel paragrafo “Modifica” alcune celle sono “protette” per prevenire modifiche che potrebbero ostacolare l’importazione dei dati. Questa protezione può essere rafforzata impostando una password. Dal menù di Excel® selezionare Tools -> Macro -> Visual Basic Editor Modificare la macro come nell’esempio che segue; possiamo impostare la password in modo differente per ogni foglio. Private Sub Workbook_Open() Sheets("CE").EnableOutlining = True Sheets("CE").Protect , userInterfaceOnly:=True Sheets("SP").EnableOutlining = True Sheets("SP").Protect "ACG", userInterfaceOnly:=True End Sub © IBM Corp. 2011. All rights reserved. Pagina 11 di 14 4. Personalizzazione del codice Per eseguire le personalizzazioni di questo tipo è necessaria una conoscenza di base di Java™. 4.1 La Factory ImportExportBilancioFactory istanzia le classi che interagiscono col database e che popolano il template con i dati. Sostituendola si può pilotare l’uso di classi esterne che implementano comportamenti personalizzati. package com.ibm.acgv4.ctg.service; public class ImportExportBilancioFactory { public static ImportExportBilancio createImportExportBilancio(){ return new ImportExportBilancio(); } public static EsportaBilancioInExcell createEsportaBilancioInExcell(){ return new EsportaBilancioInExcell(); } public static ImportaBilancioDaExcell createImportaBilancioDaExcell(){ return new ImportaBilancioDaExcell(); } } 4.2 Estrazione dei dati e costruzione del foglio elettronico La classe ImportExportBilancio è essenzialmente un runnable, è basata cioè su un metodo run() che esegue l’elaborazione vera e propria. Una serie di metodi di set e get permettono di impostare i parametri. L’esempio riportato nel capitolo 5 rende molto evidente questa struttura. Il metodo run legge in sequenza tutti gli archivi ACG contenenti i dati di bilancio ed effettua i controlli formali sui parametri ricevuti. Si noti che questa prima parte è richiamabile separatamente in modo da pre-validare i dati ricevuti prima di lanciare l’elaborazione vera e propria. Il passo successivo è la costruzione, cella per cella, del foglio elettronico (o, se siamo in modalità importazione, la lettura del foglio ricevuto ed il confronto con i valori del database). Esportazione e importazione “ImportaBilancioDaExcell” sono affidate rispettivamente a “EsportaBilancioInExcell” e 4.3 Il template La classe EsportaBilancioInExcell legge un file excel di base, il “template” e lo popola con i dati. Questo, come si è visto, conferisce una notevole flessibilità rendendo possibile cambiare colori, font, aggiungere nuovi campi calcolati, con la semplice sostituzione del template. © IBM Corp. 2011. All rights reserved. Pagina 12 di 14 Il programma di esportazione è piuttosto semplice; si basa sull’open source Apache Poi ( http://poi.apache.org/ ) che permette di creare il foglio elettronico in modo lineare, definendone il contenuto cella per cella con istruzioni del tipo: row.createCell(1).setCellValue(1.2); Nota: i template contenenti immagini sono gestiti solo con Apache POI 3.5 o successive. 4.4 PoiAdapter Le funzioni recenti di excel necessitano di versioni recenti della libreria POI che, a loro volta, necessitano di jdk 1.5. Per garantire la compatibilità a quei clienti che usano ancora websphere 6.0 (jdk 1.4) è stata predisposto un adapter: com.ibm.acgv4.utils.PoiAdapter. Ad esempio il metodo: sheet.groupRow( start, end ); deve essere sostituito con PoiAdapter.groupRow(sheet, (short)start, (short)end); L’adapter esegue il metodo solo se il livello di jdk è adeguato. Riusciamo così a realizzare un unico codice che si adatta a tutti gli ambienti dei clienti. 4.5 Supporto del formato .xlsx (Excel® 2007) Si tratta di un formato “Open” (http://www.ecmainternational.org). basato su xml promosso da ECMA International Le specifiche sono disponibili al sito: http://www.ecmainternational.org/publications/standards/Ecma376.htm. Il nuovo formato è un xml compresso che permette di ottenere files di dimensioni contenute. Per modificare il formato del file generato bisogna agire in un unico punto: l’istanziazione del workbook che non sarà più di tipo HSSFWorkbook (Excel® 2002) ma di tipo XSSFWorkbook. L’esempio che segue mostra la modifica da fare: //Workbook wb = new HSSFWorkbook(); Workbook wb = new XSSFWorkbook(); //FileOutputStream fileOut = new FileOutputStream("foglio.xls"); FileOutputStream fileOut = new FileOutputStream("nuovofoglio.xlsx"); wb.write(fileOut); fileOut.close(); © IBM Corp. 2011. All rights reserved. Pagina 13 di 14 5. Uso come componente La parte di presentazione è completamente separata dall’interfaccia grafica; può quindi essere richiamata liberamente dal resto della Vision4 o, anche, da personalizzazioni. Nell’esempio che segue vediamo il richiamo da una classe di test. private static final String[][] parametriTest={ // Nickd Nickb Anno Cdvsn Nickk {"ELIKA_PROD","A_BIL_GES", "2010","","DL: 127","Test standard 1"}, {"ELIKA_PROD","NCG32_GS_1","2010","","DL: 127","Test standard 2"}, {"ELIKA_PROD","BIL_PROD", "2010","","SCHEMA_BREVE","Prova con tutti i mesi"}, {"ELIKA_PROD","BIL_PROD", "2009","","SCHEMA_BREVE","Dal primo al terzo"}, {"ELIKA_PROD","BIL_PROD", "2008","","SCHEMA_BREVE","con 0 per voce 1"}, {"ELIKA_TEST","B_TEST", "2010","","DL: 127","Con azienda diversa"} }; public void testExport() { ACGLogon logon= new ACGLogon(); logon.login("AS400", "9.168.26.31", utente, pwd, si ,false); log.info("JUnitTest for import/export bilancio"); //for (int i = 0; i < 1; i++) { for (int i = 0; i < parametriTest.length; i++) { log.info("---------------------------------------"); log.info("TestCase "+i+" - "+parametriTest[i][5]); long p = System.currentTimeMillis(); ImportExportBilancio ie_bil=ImportExportBilancioFactory.createImportExportBilancio(); ie_bil.setLogon(logon); ie_bil.setNickd(parametriTest[i][0]); ie_bil.setNickb(parametriTest[i][1]); ie_bil.setAnno(parametriTest[i][2]); ie_bil.setCdvsn(parametriTest[i][3]); ie_bil.setNickk(parametriTest[i][4]); String nome=ie_bil.getNickd()+"-"+ie_bil.getNickb()+"-"+ie_bil.getAnno()+"-"+ ie_bil.getCdvsn()+"-"+ie_bil.getNickk()+"B.xls"; nome=nome.replace(':', '_'); log.info("Output File "+nome); try { ie_bil.run(); FileOutputStream outStm; outStm = new FileOutputStream("c:/temp/aaaform/"+nome); ie_bil.getWorkbook().write(outStm); //log.info("WARNINGS: \n"+ie_bil.getWarnings().toString()); log.info("Tempo impiegato: " + (System.currentTimeMillis() - p)+ " millisecondi"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); fail(e.getMessage()); } log.info("finito " + i); } © IBM Corp. 2011. All rights reserved. Pagina 14 di 14