ssrs ax 2012

16
1 1. AX 2012 reporting service Microsoft SQL Server reporting services (SSRS) è lo strumento ufficiale per lo sviluppo dei report in AX 2012. SSRS è un servizio incluso in SQL server. Il vecchio freamework di reportistica è ancora presente nel sitema, ma solo per compatibilità, è considerato deprecated e verrà eliminato nella prossima versione di AX. SSRS si basa sul nuovo framework di classi “SysOperation” che andrà a sostituire il vecchio “RunBase”. Lo strumento principale di lavoro è il Report Designer integrato in Visual Studio che si occupa della gestione del design del report. Se dall’AOT si prova ad espandere il nodo design del report vediamo che non contiene elementi di layout editabili: I Principali vantaggi dei report di Reporting Services sono: Visualizzare i dati organizzati in aree dati predefinite (tabelle, matrici e liste...) La modifica del layout è realmente “visuale”, ottenendo con pochi click un resa grafica che col vecchio framework avrebbe richiesto molto più tempo (es: righe verticali) Visualizzare report per utilizzo personale oppure pubblicarli su un server di report o un sito di SharePoint Definire espressioni che offrono la possibilità di personalizzare il modo in cui i dati del report vengono filtrati, raggruppati ordinati e visualizzati Le logiche del report sono nettamente separate dal suo layout

Upload: lillilor

Post on 11-Aug-2015

1.085 views

Category:

Documents


8 download

DESCRIPTION

Introduction to AX 2012 reporting

TRANSCRIPT

Page 1: SSRS AX 2012

1

1. AX 2012 reporting service

Microsoft SQL Server reporting services (SSRS) è lo strumento ufficiale per lo sviluppo dei report in AX 2012. SSRS è un servizio

incluso in SQL server.

Il vecchio freamework di reportistica è ancora presente nel sitema, ma solo per compatibilità, è considerato deprecated e verrà

eliminato nella prossima versione di AX. SSRS si basa sul nuovo framework di classi “SysOperation” che andrà a sostituire il vecchio

“RunBase”.

Lo strumento principale di lavoro è il Report Designer integrato in Visual Studio che si occupa della gestione del design del report.

Se dall’AOT si prova ad espandere il nodo design del report vediamo che non contiene elementi di layout editabili:

I Principali vantaggi dei report di Reporting Services sono:

Visualizzare i dati organizzati in aree dati predefinite (tabelle, matrici e liste...) La modifica del layout è realmente “visuale”, ottenendo con pochi click un resa grafica

che col vecchio framework avrebbe richiesto molto più tempo (es: righe verticali) Visualizzare report per utilizzo personale oppure pubblicarli su un server di report o un

sito di SharePoint Definire espressioni che offrono la possibilità di personalizzare il modo in cui i dati del

report vengono filtrati, raggruppati ordinati e visualizzati Le logiche del report sono nettamente separate dal suo layout

Page 2: SSRS AX 2012

2

2. AX 2012 report

Alla base di qualsiasi report SSRS ci possono essere sostanzialmente due tipi di datasource:

Query Tabelle temporanee

Vedremo come costruire il report con i due tipi di datasource, ma la differenza principale rispetto al vecchio framework è che:

non si può più accedere direttamente al dato che si vuole visualizzare

Dato che i report sono dentro visual studio è da lì che bisognerà lavorare, lato AX dovremo solo esporre le informazioni da

visualizzare. Se reporting service è configurato correttamente e da visual studio 2010 clicchiamo su “Application explorer” (Ctrl+d)

vedremo apparire nel riquadro di sinistra l’AOT dell’AOS a cui SSRS punta:

Ovviamente fatta eccezione del nodo SSRS al quale possiamo aggiungere nuovi elementi, tutti gli altri nodi sono in sola

visualizzazione.

Page 3: SSRS AX 2012

3

2.1 Report SSRS basati su Query:

Per prima cosa dobbiamo creare la query lato AX oppure possiamo utilizzare una query standard. Come esempio utilizzaremo una

query custom su inventTable:

Apriamo ora visual studio e creiamo un progetto per il nostro report. Scegliamo come templete di progetto “Dynamics AX project”

, selezionare “Report model” ed inseriamo il nome del progetto:

A questo punto si aprirà la finestra “solution explorer” che conterrà l’albero del nostro progetto al quale dobbiamo aggiungere il

report facendo click col destro sul progetto > Add > Report:

Page 4: SSRS AX 2012

4

Rinominiamo il report in “SR_InventTable” facendo clic col tasto destro sul report > rinomina. Aggiungiamo la nostra query come

dataset del report. Facciamo click col destro sul nodo “dataset” , selezioniamo “New dataset” e rinominiamolo in “InventTable”. A

questo punto dovrebbe aprirsi in basso a destra la form delle proprietà del dataset:

La proprietà “Data source type” è fondamentale perchè è quella che determina se il report è basato su query (query) o su classi, in

questo caso dovremo selezionare “Report data provider”, (approfondiremo questo caso più avanti). Facciamo click su [...] e nella

form che si apre vengono mostrate tutte le query di AX.

Page 5: SSRS AX 2012

5

Selezioniamo “SR_InventTableQuery” , poi clicchiamo Next, vengono mostrati tutti i campi e i metodi display che possono essere

visualizzati nel report. Possiamo selezionare quelli che ci interessano o prenderli tutti flaggando “All field” e “All display method”:

Scegliamo tutti i campi e prendiamo inventSiteId() e inventlocationId() , clicchiamo OK. Se tutto è andato a buon fine, espandendo il

nodo fields del nostro dataset abbiamo tutti i campi della query più i due metodi diplay che abbiamo selezionato

Page 6: SSRS AX 2012

6

Le modifiche al dataset si concludono quì, possiamo ora iniziare a lavorare sul design.

Per cominciare facciamo tasto destro sul design e aggiungiamo un nodo “precision design” poi sempre col tasto destro sul precision

design clicchiamo su “Edit using designer”

Si apre l’editor dei report di visual studio:

Come vediamo dalla figura, nel riquadro “report data” a sinistra, sono disponibili i campi ed i metodi diplay selezionati dal la query

che possono essere utilizzati nel report. L’area centrale è l’area di lavoro, in cui si lavora sul layout e nella quale si posso aggiungere

oggetti grafici predefiniti come caselle di testo, righe, tabelle, immagini etc... Nel riquadro in basso a destra sono visualizzate le

proprietà dell’oggetto selezionato. Una volta terminato il lavoro si può salvare il progetto in viasual studio direttamente del nodo

“Visual studio project” dell’AOT e riaprirli direttamente da lì:

Approfondiremo più avanti l’utilizzo del design editor, nel prossimo paragrafo vedremo come implementare report basati su X++.

Page 7: SSRS AX 2012

7

2.2 Report SSRS basati su X++:

Il concetto che stà alla base di questa tecnica è il seguente:

1. Costruisci un framework di classi (sysOperation) 2. Crea una o più tabelle tamporanea 3. Il framework di classi popola la tabella temporanea 4. Mostra sul report i campi della tabella temporanea

2.2.1 Il Framework di classi

Le classi che come minimo dovremo implementare sono almeno tre:

Report data controller: Questa classe dovrà estendere SrsReportRunController. Questa classe si occupa di controllare l’esecuzione del report e della dialog di lancio, convalidare i parametri ed effettuare altre validazioni prima dell’esecuzioni del report .

Report data contract: Questa classe è utilizzata per pacchettizzare i dati che saranno poi passati al report SSRS Di fatto è la classe che sostituisce i metodi dialog() e getFromDialog() nel vecchio framework runbase. Sostanzialmente la classe non è altro che una dichiarazione di varabili globali, ognuna col il suo relativo metodo “parm”. Non estende nessuna classe ma nella class declaration deve obblicatoriamente avere la dichiarazione di attributo che dichiara la classe come dataContract del report. Riportiamo come esempio la classe standard SalesInvoiceContract che gestisce il report della fattura da ordine cliente.

[DataContractAttribute] public class SalesInvoiceContract { RecId recordId; RecId formLetterRecordId;

Report data provider: deve estendere SRSReportDataProviderBase. Deve dichiarare come attributo la sua dataContract, da cui preleverà i dati, dichiara il buffer di tabella temporanea che sarà usata come dataset del report con relativo metodo get per recuperarlo, dovrà inoltre contenere il metodo “ProcessReport()” che di fatto è il vecchio fetch() del report in cui si definiscono tutte le logiche per il recuperano dei dati da visualizzare (X++ Business Logic), e si salvano nella tabella temporanea.

[ SRSReportParameterAttribute(classstr(<contractClass>)) ] class ReportDP extends SRSReportDataProviderBase { TempTable TempTable ; }

[SRSReportDataSetAttribute('TempTable')] public TempTable getTempTable() { select TempTable; return TempTable; }

Nel metodo process report dovremo per prima cosa recuperare l’istanza della dataContract chiamando il metodo standard

this.parmDataContract(); e recuperare i valori di filtro tramite i metodi parm(). Una volta recuperati i valori possiamo eseguire la query e popolare la tabella temporanea. Un template base del metodo processreport potrebbe essere il seguente:

Page 8: SSRS AX 2012

8

public void processReport() {

<lista dei parametri> <datacontract> dataContract; dataContract = this.parmDataContract(); <recuperare I valori dei parametri tramite i metodi parm> ttsbegin; while select … { tmpTable.clear(); tmpTable.Field_1 = valore_1; .. tmpTable.Field_n = valore_n; tmpTable.insert(); } ttscommit;

}

Ogni volta che si effettua una modifica alle classi del report e si ricompila è necessario effettuare una ricompilazione incrementale del CIL, dato che il framewrok sysoperation poggia in parte su una parte di codice “Compilato” introdotta in AX 2012. Di solito la parte che inserisce i dati nella tabella temporanea è relegata in un metodo a parte. Se il report risulta complesso si consiglia di usare più dataset. Per esempio si può avere un dataset per i dati di testata e uno per i dati delle righe. Per aggiungere ulteriori dataset dobbiamo per prima cosa aggiunegere il metodo get() della tabella temporanea, poi dobbiamo inserire all’inizio del metodo process report la striga di connessione per agganciare i record che si stanno inserendo alla transazione corrente

DatasetName.setConnection(this.parmUserConnection());

N.B: Per aggiungere questo metodo la classe dataprovider dovrà estendere SrsReportDataProviderPreProcess Ciò è necessario perchè a volte la tabella della classe provider potrebbe essere non temporaneave contenere record diversi relativi a transazioni diverse, appartenenti cioè ad instanze diverse di reporting service. Grazie a questa istruzione se si effettua una select firstonly sul buffer che stiamo ciclando siamo sicuri di individuare la riga corretta anche se la tabella contenesse più record assicurandoci quindi l’utilizzo del datasource nel giusto contesto. Il metodo set connection infatti lega il transacionId del buffer al transactionId corrente. Il fatto di avere più datasource, oltre che aumentare la leggibilità del codice, consente anche di superare un noto bug di SSRS che non riesce a gestire tabelle con più di 255 campi.

2.2.2 Validazioni: Se si vogliono effettuare validazioni, la classe contract dovrà implementare l’interfaccia SysOperationValidateble:

implements SysOperationValidatable

a questo punto sarà obbligatorio fare l’override del metodo validate(), per es possiamo scrivere:

public boolean validate() { boolean isValid = true; if (!TransDate) { isValid = checkFailed(“Error”); } return isValid; }

2.2.3 Utilizzo di query: Se nella dialog di lancio vogliamo integrare l’utilizzo di query (Tasto seleziona) sarà sufficente aggiungere l’attributo SRSReportQueryAttribute nella Class declaration della data provider indicando il nome della query che vogliamo caricare:

[SRSReportQueryAttribute (querystr(CustTable))] //transazioni clienti

Page 9: SSRS AX 2012

9

Nel metodo processReport si recupera la query tramite il metodo standard parmQuery() in questo modo:

QueryRun queryRun = new QueryRun(this.parmQuery()); ed utilizzare poi il classico

while (queryRun.next()) {

}

Per scorrere i record della query.

Se da visual studio espandiamo il nodo dei parametri del report, vediamo il parametro chiamato “DynamicParameter” che indica il

nostro query run. Per quanto riguarda la tabella temporanea bisogna settare la proprietà tableType come TempDB o InMemory. Si

consiglia di usare InMemory per tabelle piccole (con meno di 1000 records); Usare TempDB per gestire tabelle più grandi e

migliorare le performance dato che in AX 2012 con questa opzione la tabella viene scritta direttamente dentro SQLServer. A questo

punto in visual studio, nelle proprietà del dataset settiamo la proprietà “Report data provider”, clicchiamo su [..] che questa volta

mostrerà la lista delle classi dataprovider disponibili:

Page 10: SSRS AX 2012

10

Click su next, come nel caso della query dovremo selezionare i campi e i metodi display da tenere in considerazione, clicchiamo infine su OK per rendere effettive le modifiche ed iniziare a lavorare sul layout col report design di visual studio.

Page 11: SSRS AX 2012

11

3. Report Designer (Visual Studio 2010)

Per prima cosa aggiungiamo al report l’header e il footer. Da notare che a differenza del vecchio framework è consentito l’utilizzo di un solo header e di un solo footer Tasto destro sul repor -> Add -> page header, pagefooter. Come vediamo dalla figura, nel riquadro delle proprietà possiamo impostare le dimensioni, i margini, il colo di sfondo etcc.. non esiste il concetto di “Fit to page”, è cura del programmatore settare correttamente le dimensioni. L’intero report può essere agevolmente ridimensionato semplicemente trascinandone i bordi i in alternativa settando il valore della proprietà size. Molto utile risulta quindi il righello (tasto destro -> view -> ruler). I valori delle dimensioni possono essere espresse in pollici (in), centimetri(cm) oppure millimetri(mm). Il tab “preview” ci consente di visualizzare un’anteprima veloce del report.

3.1 Gestione Label/TextBox Per creare una label dobbiamo utilizzare una TextBox. Dopo ever creato la label possiamo inserire il testo al suo interno. Facciamo tasto desto sulla text box:

Page 12: SSRS AX 2012

12

Per inserire il testo e gestirlo come label di AX dobbiamo selezionare expression ed inserire per esempio:

=Labels!@SYS336181

La sintassi dei comandi è particolare di SSRS e si inspira comunque al C#, il riquadro in basso a sinistra ci viene in aiuto suggerendoci la sintassi delle funzioni più comuni che si possono utilizzare. Se invece della Label volessimo visualizzare un campo del report la sintassi è la seguente:

=Fields!InvoiceId.Value In alternativa possiamo trascinare il campo che ci interessa dal riquadro report data direttamente all’interno del campo di testo Per visualizzare un parametro (per esempio la company) dobbiamo scrivere:

=Parameters!AX_CompanyName.Value O trascinare il parametro dal nodo “parameters” nella textbox Possiamo selezionare Cut /Copy / Paste /Delete per tagliare / copiare /incollare o cancellare l’elemento. Il sottomenu Layuout contiene una serie di funzioni molto utili per gestire la nostra texbox:

Align left/center/right/top/middle/bottom per allineare una texbox nella stessa posizione di un’altra

Make same height/width Per impostare stessa altezza/larghezza di un’altra textbox selazionata

NB: selezionare almeno due texbox per attivare il menu

Il menu Text box properties apre le proprietà dell’oggetto, da quì possiamo impostare diverse caratteristiche dell’oggetto:

Page 13: SSRS AX 2012

13

General: Possiamo impostare il nome dell’oggetto , il suo valore e l’helptext Number: Serve ad impostare il formato del contenuto numerico, per esempio se deve essere in valuta o contenere

date/ora , percentuale, si può inoltre specificare un formato custom.

Alignment: Specifica le proprietà di allineamento e il padding, ossiam il margine del contenuto dal bordo

Font: Serve a settare le proprietà del carattere, la dimensione e lo stile Border: In questo menù possiamo impostare le proprietà del bordo

Fill: Serve ad impostare il colore del riempimento ed eventuali immagini di sfondo

Visibility: Imposta la visibilità dell’oggetto, può essere true/false , vincolata dal valore di un campo del report o vincolata da un’ espressione. Possiamo per esempio decidere che l’elemento sia visibile in base al valore assunto da un altro campo del report o da un parametro: es1: se il valore del campo è > 0 è visibile altrimenti no

=IIF(Fields![nomeCampo].Value > 0 , True, False)

Es2: se il valore del parametro è “Yes” visualizza il campo alrtimenti no

=IIF(Parameters![nomeParametro].Value = "Yes", True, False) Notare l’importanza del tasto funzione f(x) presente su quasi tutte le poprietà. Questo potente strumento consente una notevole flessibilità del layout del report dato che oltre agli oggetti è applicato anche alla funzioni di split e raggruppamento. Possiamo per esempio mettere una condizione sulla proprietà background nella righe di un tablix per alternare il colore dello sfondo delle righe del report: Es3: se il numero di riga è pari imposta sfondo bianco, altrimenti sfondo grigio

=iif(RowNumber(Nothing) Mod 2, "#ffffff", "#f0f0f0")

Dove la parola chiave Nothing consente di ottenere un conteggio parziale delle righe nell'area dati più esterna, in alternativa si può inserire il nome del tablix o il valore di un campo (per esempio linenum)

Interactive sorting: contiene opzioni sull’ordinamento Action: per gestire funzioni di ipertesto

Possiamo effettuare selezioni multiple degli elementi del report e muoverli in blocco tedendo premuto il tasto ctrl + tasto freccia

3.2 Gestione Immagini

Per inserire un’immagine nel report dobbiamo semplicemente aggiungere un campo di tipo “image” ed inserire come espressione

il valore del campo image properties -> use this field -> cliccare su fx ed inserire

= Fields!CompanyLogo.Value

Page 14: SSRS AX 2012

14

3.3 Le aree dati Tablix (Tabelle/matrici)

I tablix sono strumenti molto utili per stampare I dati del report. Si possono aggiungere solo nel corpo del report. Impostando la

proprietà “datasetname” il tablix ciclerà in automatico tutti i record del dataset. La prima riga è di intestazione, la seconda conterrà

i dati da visualzzare. I tablix possono essere espansi a piacimento aggiungendo tutte le colonne che ci servono, ogni colonna può

essere ridimensionata a piacimento trasciando il bordo. L’utilizzo di una tabella piuttosto che una matrice dipende dal contesto, la

differenza sostanziale è nei raggruppamenti, nelle matrici infatti si possono creare raggruppamenti sia per riga che per colonna,

nelle tabella il ragruppamento è solo per righe. I raggruppamenti in SSRS sono identificati da una piccola parentesi quadrata gialla

che appare sul bordo destro della cella:

Come si evince dalla figura nelle matrici il raggruppamento è possibile anche per colonna. In realtà esiste anche una terza area dati

in cui è possibile organizzare i dati: l’area dati List che consiste in un elenco in formato libero in cui Non è obbligatorio utilizzare un

layout griglia ma è possibile posizionare liberamente i campi all'interno dell'elenco. Le funzionalità Tablix includono la

visualizzazione dei dati di dettaglio o di aggregazioni per i dati raggruppati in righe e colonne. È inoltre possibile creare gruppi

nidificati. I dati raggruppati possono essere filtrati e ordinati e si possono inoltre combinare con semplici operazioni i gruppi

includendo più espressioni di raggruppamento in una definizione di gruppo, è possibile aggiungere i totali per un gruppo o i totali

complessivi per l'area dati. Si possono nascondere le righe o le colonne per semplificare un report e consentire all'utente di

attivare la visualizzazione dei dati nascosti. L’utilizzo dei tablix è consentito solamente nel body del report

3.4 Gestione raggruppamenti nei Tablix

Le righe all'interno di un gruppo si ripetono una volta per ogni valore univoco del gruppo e vengono utilizzate in genere per i riepiloghi di aggregazione.Quando si seleziona una cella della Tablix, gli handle di riga e colonna e le parentesi all'interno dell'area dati Tablix mostrano i gruppi a cui appartiene una cella. In questa figura sono riportati gli indicatori visivi seguenti:

Page 15: SSRS AX 2012

15

Possiamo aggiungere altri campi di raggruppamento trascinando i campi dal riquadro report data al riquadro row gruop,

nidificandoli secondo i nostri criteri di raggruppamento

Per inserire i totaloni e subtotali per guppo ci basterà fare click col destro sul gruppo/sottogruppo che ci interessa e cliccare

AddTotal, SSRS creerà in automatico la cella con la somma della colonna.

In generale la sintassi di SSRS per effettuare la somma è la seguente:

=Sum(Fields![nomeCampo].Value)

per ogni riga/colonna del tablix si può gestire la visibilità e l’ordinamento, mentre per ciascuna cella possiamo impostare tutte le

propietà della textbox (impostando per esempio la visualizzazione dei soli bordi laterali si possono ottenere le righe verticali!!)

Page 16: SSRS AX 2012

16

4. Deploy del report

Una volta terminate le modifiche al layout dobbiamo fare il deploy della soluzione per rendere effettive le modifiche in AX

si consiglia quindi di eseguire VisualStudio come utente amministratore.