Implementazione dell'interfaccia IRenderingExtension
Come descritto in precedenza in questa sezione, l'estensione per il rendering è responsabile di prendere i risultati da una definizione del report combinata con i dati effettivi ed eseguire il rendering dei dati risultanti in un formato che sia possibile utilizzare. La trasformazione dei dati combinati e della formattazione viene eseguita tramite una classe CLR (Common Language Runtime) che implementa IRenderingExtension, che consente di trasformare il modello di oggetti in un formato di output che può essere utilizzato da un visualizzatore, una stampante o un'altra destinazione di output.
IRenderingExtension dispone di tre metodi che devono essere codificati. I valori sono i seguenti:
Render: consente di eseguire il rendering del report.
RenderStream: consente di eseguire il rendering di un flusso specifico dal report.
GetRenderingResource: consente di ottenere informazioni aggiuntive, come icone, necessarie per il report.
Nelle sezioni seguenti questi metodi vengono descritti in modo più dettagliato.
Metodo Render
Il metodo Render contiene argomenti che rappresentano gli oggetti seguenti:
L'oggetto report stesso di cui si desidera eseguire il rendering. Questo oggetto contiene proprietà, dati e informazioni sul layout per il report. Il report costituisce la radice dell'albero del modello di oggetti del report.
L'oggetto reportServerParameters contenente l'oggetto dizionario di stringhe con i parametri per il server di report, se disponibili.
I parametri deviceInfo contenenti le impostazioni dei dispositivi. Per ulteriori informazioni sulle impostazioni dei dispositivi, vedere Impostazioni relative alle informazioni sul dispositivo di Reporting Services.
Il parametro clientCapabilities contenente un oggetto dizionario NameValueCollection con informazioni sul client in cui si esegue il rendering.
L'oggetto RenderProperties contenente le informazioni sul risultato del rendering.
createAndRegisterStream è una funzione di delegato che deve essere chiamata per ottenere un flusso in cui eseguire il rendering.
Parametro deviceInfo
Il parametro deviceInfo contiene parametri di rendering e non parametri del report. Questi parametri vengono passati all'estensione per il rendering. I valori di deviceInfo vengono convertiti in un oggetto NameValueCollection dal server di report. Gli elementi inclusi nel parametro deviceInfo vengono trattati come valori senza distinzione tra maiuscole e minuscole. Se la richiesta di rendering deriva da un accesso con URL, i parametri URL nel formato rc:key=value vengono convertiti in coppie chiave/valore nell'oggetto dizionario deviceInfo. Il codice di rilevamento del browser fornisce inoltre gli elementi seguenti nel dizionario clientCapabilities: EcmaScriptVersion, JavaScript, MajorVersion, MinorVersion, Win32, Type e AcceptLanguage. Qualsiasi coppia nome/valore presente in deviceInfo non compresa dall'estensione per il rendering viene ignorata. Nell'esempio di codice seguente viene illustrato un metodo GetRenderingResource di esempio per il recupero delle icone.
public void GetRenderingResource (CreateStream createStreamCallback, NameValueCollection deviceInfo)
{
string[] iconTagValues = deviceInfo.GetValues("Icon");
if ((iconTagValues != null) && (iconTagValues.Length > 0) )
{
// Create a stream to output to.
Stream outputStream = createStreamCallback(m_iconResourceName, "gif", null, "image/gif", false);
// Get the GIF image for one of the buttons on the toolbar
Image requiredImage = (Image) m_resourcemanager.GetObject(m_iconResourceName
// Write the image to the output stream
requiredImage.Save(outputStream, requiredImage.RawFormat);
}
return;
}
Metodo RenderStream
Il metodo RenderStream consente di eseguire il rendering di un flusso specifico dal report. Tutti i flussi vengono creati durante la chiamata a Render iniziale, ma i flussi non vengono inizialmente restituiti al client. Questo metodo viene utilizzato per flussi secondari (come immagini nel rendering HTML) o pagine aggiuntive di un'estensione per il rendering di più pagine (come Image/EMF).
Metodo GetRenderingResource
In alcuni casi, il report necessita di informazioni che non richiedono il rendering del report stesso. Se, ad esempio, è necessaria l'icona associata all'estensione per il rendering, utilizzare il parametro deviceInfo contenente il tag singolo <Icon>. In questi casi, è possibile utilizzare il metodo GetRenderingResource. Questo metodo consente di recuperare le informazioni senza eseguire l'intero rendering del report.