ERP 2.50:Developers Guide/Examples/Report/it
Languages: |
Contents |
Introduzione
Questo esempio spiega il 'Report Ordine Fornitore' già presente in Openbravo ERP. Prima di entrare nei dettagli, è possibile verificare il report nel seguente percorso:
Procurement Management > Analysis Tools > Purchase Order Report
Obiettivo
L'obiettivo principale di questo documento è di dare, in modo pragmatico, una spiegazione dettagliata su come integrare un modello di JasperReports in Openbravo ERP.
Implementation
Dizionario Applicazione
A seguito di queste operazioni sarete in grado di trovare il report nel Dizionario Applicazione:
Come System Administrator andare su :
- Application Dictionary > Report and Process
- Utilizzare il filtro e ricercare : Purchase Order Report
- Selezionare il record trovato
Si dovrebbe essere in grado di vedere la definizione del report :
- Search Key: JR_ReportPurchaseOrder
- Name: Purchase Order Report
- Description: Purchase Order Report
- Help/Comment: Purchase Order Report JR
- Active: Yes
- Data Access Level: Client/Organization
- Livello di Accesso ai dati definisce chi ha accesso a questo report.
- UI Pattern: Standard
- Standard o Manuale. Un processo Standard è usato per pop-ups generate dal WAD le cui pop-ups richiederanno i parametri dei report. Un UI Manuale deve essere gestita dallo sviluppatore. Nessuna finestra verrà automaticamente generata per questo.
- Report: No
- Jasper Report: Yes
![]() | Si noti che quando si registra un report basato su JasperReport, non selezionate la casella di controllo Report, ma quella Report Jasper . Tali relazioni sono gestite come processi |
- JR Template name: @basedesign@/org/openbravo/erpCommon/ad_reports/ReportPurchaseOrder.jrxml
- Definisce la posizione del template JRXML . @basedesign@ viene valutata a run-time, e tradotte in qualcosa di simile: your_tomcat_context/src-loc/design
Parametri
Business Partner
Ora andiamo alla scheda Parameters . Report and Processes > Parameters. Seleziona il parametro Business Partner
- Nome: Business Partner
- Descrizione: cliente, impiegato , etc.
- Help/Commento: Un Business Partner è qualunque persona fisica/giuridica con cui si ha una transazione commerciale. Questo può includere un cliente, un fornitore, impiegato o una combinazione di questi.
- Sequence Number: 10
- Definisce l'ordine del parametro. More info at Sequence Number
- DB Column Name: C_BPartner_ID
- Definisce il nome del parametro nel template JRXML.
![]() | Il Nome colonna DB deve corrispondere esattamente il nome del parametro definito nel modello. E' case sensitive. |
- Elemento Applicazione : C_BPartner_ID - Business Partner
- Definisce l' Elemento durante il rendering utilizzato da questo parametro
- Reference: Search
- Definisce il tipo di Riferimento che si desidera utilizzare quando si chiedono i valori dei parametri.In questo caso abbiamo scelto Search, così sarà reso come un 'selector'.
- Reference Search Key: Business Partner
- Dal momento che abbiamo scelto come riferimento la Search, abbiamo scelto il selettore Business Partner.
- Length: 40
- Definisce la lunghezza del campo.
Valuta, Magazzino, Data d'inizio, Data Fine
Questi parametri seguono lo stesso tipo di definizione utilizzata per il Business Partner. L'unico cambiamento è il Nome colonnaDB, e il riferimento utilizzato da ciascuna di esse.
Tipo di Output
Questo è un parametro speciale che dovrebbe essere presente in tutti i reports Standard UI . È utilizzato per specificare quale output che si desidera utilizzare : PDF, HTML, XLS
- Name: Tipo di Output
- Help/Comment: Definisce il tipo di formato di output dalla lista di quelli disponibili.
- Sequence Number: 70
- DB Column Name: outputType
- Il nome del parametro deve essere in OutputType per utilizzarlo
- Application Element: outputType - Output type
- Definisce l'elemento associato a questo parametro
- Reference: List
- Definisce che vogliamo utilizzare un elenco di valori definiti
- Reference Search Key: Output format
- Questo è l'elenco dei possibili valori della combo: Excel, Html, PDF
- Length: 20
- Definisce la lunghezza del parametro
- Mandatory: Yes
- Definisce che è un valore obbligatorio, non può essere vuoto
Pattern Standard UI
La definizione precedente dei parametri verrà tradotto in una finestra pop-up come questa :
- Definizione Help/Comment del Report
- L' Elemento definito per ogni parametro
- Il Riferimento definito per ogni parametro
Template JasperReport
Openbravo ERP 2.50 viene fornito con la versione JasperReports 3.0.1 . È necessario utilizzare la stessa versione di iReport.
- Aprire il modello JRXML con iReport: Dovrebbe trovarsi sotto src/org/openbravo/erpCommon/ad_reports/ReportPurchaseOrder.jxrml
Parametri
L'elenco seguente di parametri, corrisponde alla definizione del parametro DB Column Name nel Dizionario Applicazione
- C_BPartner_ID: java.lang.String
- DateFrom: java.util.Date
- DateTo: java.util.Date
- M_Warehouse_ID: java.lang.String
- C_Project_ID: java.lang.String
- C_Currency_ID: java.lang.String
Parametri Ausiliari
Questi parametri ausiliari sono utilizzati nella definizione SQL del report per impostare una restrizione aggiuntiva nella clausola WHERE. La logica è semplice, se il parametro è nullo o una stringa vuota, non dobbiamo filtrare, altrimenti si aggiunge una condizione supplementare.
- aux_partner:
$P{C_BPartner_ID}.equals("") ? " " : " AND C_ORDER.C_BPARTNER_ID = '" + $P{C_BPartner_ID} +"'"
- aux_warehouse:
$P{M_Warehouse_ID}.equals("") ? " " : " AND C_ORDER.M_WAREHOUSE_ID = '" + $P{M_Warehouse_ID} + "'"
- aux_project:
$P{C_Project_ID}.equals("") ? " " : " AND C_ORDER.C_PROJECT_ID = '" + $P{C_Project_ID} + "'"
- aux_DateFrom:
($P{DateFrom} == null || $P{DateFrom}.equals("")) ? "" : "AND C_ORDER.DATEORDERED >='" + new java.sql.Date($P{DateFrom}.getTime()).toString() + "'"
- aux_DateTo:
($P{DateTo} == null || $P{DateTo}.equals("")) ? "" : "AND C_ORDER.DATEORDERED <='" + new java.sql.Date($P{DateTo}.getTime()) + "'"
Parametri Extra
Ci sono alcuni parametri extra
- USER_CLIENT: java.lang.String
- Parametro da utilizzare nella query SQL e filtro per Client
- USER_ORG: java.lang.String
- Parametro da utilizzare nella query SQL e filtro per Organizzazione
- LANGUAGE: java.lang.String
- Parametro che tiene la lingua corrente, e.g. en_US
- NUMBERFORMAT: java.text.DecimalFormat
- Parametro utilizzato in campi per la formattazione di numeri . e.g.
($F{PRICELIST}!=null)?$P{NUMBERFORMAT}.format($F{PRICELIST}):new String(" ")
SQL Query
Questa è l'intera query SQL utilizzata per ottenere i dati :
SELECT DOCUMENTNO, DATEORDERED, CLIENT_NAME, SUM(QUANTITYORDER) AS QUANTITYORDER, PRICEACTUAL, CONVPRICEACTUAL, SUM(PRICELIST) AS PRICELIST, SUM(CONVPRICELIST) AS CONVPRICELIST, PRODUCT_NAME, UOMNAME, C_CURRENCY_SYMBOL(TRANSCURRENCYID, '0', 'Y') AS TRANSSYM, C_CURRENCY_SYMBOL($P{C_Currency_ID}, '0', 'Y') AS CONVSYM, C_CURRENCY_ISOSYM($P{C_Currency_ID}) AS CONVISOSYM FROM ( SELECT C_ORDER.DOCUMENTNO AS DOCUMENTNO, C_ORDER.DATEORDERED AS DATEORDERED, C_BPARTNER.NAME AS CLIENT_NAME, SUM(C_ORDERLINE.QTYORDERED) AS QUANTITYORDER, C_ORDERLINE.PRICEACTUAL AS PRICEACTUAL, C_CURRENCY_CONVERT(C_ORDERLINE.PRICEACTUAL, COALESCE(C_ORDERLINE.C_CURRENCY_ID, C_ORDER.C_CURRENCY_ID), $P{C_Currency_ID}, TO_DATE(COALESCE(C_ORDERLINE.DATEORDERED, C_ORDER.DATEORDERED, NOW())), NULL, C_ORDERLINE.AD_CLIENT_ID, C_ORDERLINE.AD_ORG_ID) AS CONVPRICEACTUAL, SUM(C_ORDERLINE.LINENETAMT) AS PRICELIST, C_CURRENCY_CONVERT(SUM(C_ORDERLINE.LINENETAMT), COALESCE(C_ORDERLINE.C_CURRENCY_ID, C_ORDER.C_CURRENCY_ID), $P{C_Currency_ID}, TO_DATE(COALESCE(C_ORDERLINE.DATEORDERED, C_ORDER.DATEORDERED, NOW())), NULL, C_ORDERLINE.AD_CLIENT_ID, C_ORDERLINE.AD_ORG_ID) AS CONVPRICELIST, M_PRODUCT.NAME AS PRODUCT_NAME, C_UOM.NAME AS UOMNAME, COALESCE(C_ORDERLINE.C_CURRENCY_ID, C_ORDER.C_CURRENCY_ID) AS TRANSCURRENCYID, TO_DATE(COALESCE(C_ORDERLINE.DATEORDERED, C_ORDER.DATEORDERED, NOW())) AS TRANSDATE, C_ORDERLINE.AD_CLIENT_ID AS TRANSCLIENTID, C_ORDERLINE.AD_ORG_ID AS TRANSORGID FROM C_ORDER, C_ORDERLINE, C_BPARTNER, M_PRODUCT, C_UOM WHERE C_ORDER.C_BPARTNER_ID = C_BPARTNER.C_BPARTNER_ID AND C_ORDER.C_ORDER_ID = C_ORDERLINE.C_ORDER_ID AND C_ORDERLINE.M_PRODUCT_ID = M_PRODUCT.M_PRODUCT_ID AND C_ORDERLINE.C_UOM_ID = C_UOM.C_UOM_ID AND 1=1 $P!{aux_partner} $P!{aux_warehouse} $P!{aux_project} $P!{aux_DateFrom} $P!{aux_DateTo} AND C_ORDER.ISSOTRX = 'N' AND C_ORDER.AD_CLIENT_ID IN ($P!{USER_CLIENT}) AND C_ORDER.AD_ORG_ID IN ($P!{USER_ORG}) GROUP BY C_BPARTNER.NAME, C_ORDERLINE.PRICEACTUAL, M_PRODUCT.NAME, C_UOM.NAME, C_ORDER.DOCUMENTNO, C_ORDER.DATEORDERED, C_ORDERLINE.DATEORDERED, C_ORDERLINE.C_CURRENCY_ID, C_ORDER.C_CURRENCY_ID, C_ORDERLINE.AD_CLIENT_ID, C_ORDERLINE.AD_ORG_ID ) ZZ GROUP BY CLIENT_NAME, PRICEACTUAL, CONVPRICEACTUAL, PRODUCT_NAME, UOMNAME, DOCUMENTNO, DATEORDERED, TRANSCURRENCYID, TRANSDATE ORDER BY CLIENT_NAME, DATEORDERED
L'uso del parametro in una chiamata di funzione
C_CURRENCY_SYMBOL($P{C_Currency_ID}, '0', 'Y') AS CONVSYM, C_CURRENCY_ISOSYM($P{C_Currency_ID}) AS CONVISOSYM
Noi usiamo il parametro C_Currency_ID per ottenere il simbolo di valuta
L'uso di parametri ausiliari
WHERE C_ORDER.C_BPARTNER_ID = C_BPARTNER.C_BPARTNER_ID AND C_ORDER.C_ORDER_ID = C_ORDERLINE.C_ORDER_ID AND C_ORDERLINE.M_PRODUCT_ID = M_PRODUCT.M_PRODUCT_ID AND C_ORDERLINE.C_UOM_ID = C_UOM.C_UOM_ID AND 1=1 $P!{aux_partner} $P!{aux_warehouse} $P!{aux_project} $P!{aux_DateFrom} $P!{aux_DateTo} AND C_ORDER.ISSOTRX = 'N' AND C_ORDER.AD_CLIENT_ID IN ($P!{USER_CLIENT}) AND C_ORDER.AD_ORG_ID IN ($P!{USER_ORG})
Come potete vedere ci sono dei parametri * aux_* utilizzati nella clausola WHERE. ad esempio Immaginiamo che l'utente seleziona un partner commerciale con ID 1000000, tale valore verrà passato al modello e la linea:
$P!{aux_partner}
Verrà modificata in:
" AND C_ORDER.C_BPARTNER_ID = '" + $P{C_BPartner_ID} +"'"
E dopo aver valutato il valore del parametro sarà:
" AND C_ORDER.C_BPARTNER_ID = '1000000'"
Quindi il report sarà filtrato da quel Business Partner
Client e Organizzazione
Il report è filtrato anche da Client e Organizzazione
AND C_ORDER.AD_CLIENT_ID IN ($P!{USER_CLIENT}) AND C_ORDER.AD_ORG_ID IN ($P!{USER_ORG})
P{} vs P!{}
- $P!{} questa sintassi è usato per sostituire il segnaposto di parametro con il suo valore come pezzo grezzo di query
- $P{} questa sintassi è usato per trattare il parametro come parametro SQL, JasperReports preparerà una dichiarazione
AND C_ORDER.AD_CLIENT_ID IN ($P!{USER_CLIENT}) -- $P!{USER_CLIENT} will be replaced by a string like '10000' AND C_ORDER.AD_ORG_ID IN ($P!{USER_ORG})
C_CURRENCY_SYMBOL(TRANSCURRENCYID, '0', 'Y') AS TRANSSYM, C_CURRENCY_SYMBOL($P{C_Currency_ID}, '0', 'Y') AS CONVSYM, -- $P{C_Currency_ID} will be a SQL parameter C_CURRENCY_SYMBOL(?, '0', 'Y') AS CONVSYM C_CURRENCY_ISOSYM($P{C_Currency_ID}) AS CONVISOSYM
Risultato Finale
- Scegliendo PDF come tipo di Output si dovrebbe essere in grado di ottenere un report come questo :
Languages: |