Reporting Services - cancellare uno snapshot da codice

by Andrea 24 February 2010 03:49

Può capitare di voler dare la possibilità all'utente di cancellare uno snapshot di un determinato report, e dargli la possibilità di farlo direttamente dall'applicazione che abbiamo realizzato.

Oggi mi sono scontrato con questa problematica, e uscirne non è stato proprio immediato a causa della scarsa documentazione a riguardo. Spero quindi che questo post sia utili a qualcuno.

Nella classe ReportingService2005SoapClient (del proxy generato verso il WebService di Reporting Services) esiste un metodo DeleteReportHistorySnapshot che si occupa per l'appunto di cancellare un preciso snapshot (DeleteReportHistorySnapshot), ma il come utilizzarlo è stato un pò oscuro.

Ecco qui il codice finale, che recupera il path del report, conoscendone l'id (scorrendo i report contenuti in una precisa cartella), e successivamente richiama la cancellazione dello snapshot avente l'historyId conosciuto.

   1: using (ReportingService2005SoapClient rs = this.CreateReportingService2005SoapClient())
   2: {                
   3:     string batchID = string.Empty;
   4:     ServerInfoHeader infoHeader = rs.CreateBatch(out batchID);
   5:     BatchHeader bh = new BatchHeader()
   6:     {
   7:         BatchID = batchID,
   8:         AnyAttr = infoHeader.AnyAttr
   9:     };
  10:  
  11:     CatalogItem[] items = null;
  12:     rs.ListChildren(reportFolder, true, out items);
  13:  
  14:     foreach (var item in items)
  15:         if (string.Compare(item.ID, reportId.ToString(), true) == 0)
  16:         {
  17:             rs.DeleteReportHistorySnapshot(bh, item.Path, historyId);
  18:             rs.ExecuteBatch(bh);
  19:         }
  20: }

La difficoltà è stata nel capire cosa fosse il BachHeader, e il di dover chiamare rs.ExecuteBatch,  che si occupa di lanciare i comandi che sono stati inviati utilizzando lo stesso BatchHeader sotto un'unica transazione. Non avendo mai fatto uso (in passato) di metodi a cui viene passato un oggetto BatchHeader, questa soluzione non mi è venuta proprio spontanea.

Ecco un link a riguardo delle operazioni eseguite in batch in reporting services: Batching Methods

Tags:

SQL Server | Reporting Services | .NET

Comments

25/02/2010 08:47 #

Reporting Services - creazione di uno snapshot

Reporting Services - creazione di uno snapshot

Andrea Dottor - il silenzio di un urlo |

Comments are closed