Resumé

WCF DataServices e Numero Totale di Righe

Cristian Merighi () 0,00

Utilizzare il protocollo OData e gli strumenti forniti da ASP.NET Ajax 4 per recuperare, assieme ad un set di righe, il numero totale di elementi in database.
Questo articolo è da considerarsi obsoleto. Alcune funzionalità potrebbero non essere più disponibili e non è possibile aggiungere commenti.

ASP.NET Ajax 4 è da poco disponibile nella sua veste definitiva ed al momento attuale la documentazione relativa alle varie funzionalità disponibili, assieme agli articoli della community di sviluppatori, è piuttosto scarsa.
Per questo mi sono ripromesso, ogniqualvolta mi trovo a "scoprire" una nuova gemma all'interno di questa miniera di utilità, di fissarla in questo mio diario online.

Il presente articolo tratta di data-paging (in generale). In particolare tratta di come recuperare il numero totale di righe immagazzinate in database che soggiaciono ad un criterio di filtro dato.
La tecnologia coinvolta è quella dei WCF Data Services, interrogati utlizzando le OData protocol URI conventions.

Lo scenario d'azione è quello del nostro browser, via javascript vediamo di ottenere lo scopo prefissato.
Partiamo col richiedere - dinamicamente - gli scripts necessari (alla maniera di ASP.Net 4, considero note e chiare le istruzioni riportate nel seguente blocco di codice, se così non è date un occhio a questa documentazione o ad altre analoghe).

<script type="text/javascript">
//<![CDATA[
// jQuery has been already (statically) loaded
    Sys.require([Sys.components.openDataServiceProxy, Sys.components.dataView]);
//]]>
</script>

A questo punto siamo pronti per interrogare il System.Data.Services.DataService che espone in modalità REST i dati dell'applicazione.
Nei commenti al codice (in inglese) vengono evidenziati i passaggi più importanti.

<script type="text/javascript">
//<![CDATA[

var totalCount;
Sys.onReady(function () {
    // setting default values for our hypothetical Sys.UI.DataView.
    $().dataView.defaults = {autoFetch: true, itemTemplate: '#dataViewItemTemplate'};
    // instantiate the jQuery way the web service proxy.
    var proxy = $.openDataServiceProxy('<%=ResolveClientUrl("~/services/modelservice.svc") %>');
    var topRows = 3;
    // I use this utility (Sys.Data.OopenDataQueryBuilder) to ease the URI formatting.
    var qb = new Sys.Data.OpenDataQueryBuilder('BudgetSet');
    // IMPORTANT: set the $inlinecount parameter to allpages:
    // the result of the request will be enriched with a total count information.
    qb.set_inlineCount('allpages');
    qb.set_orderby('EndDate desc,StartDate');
    // Limit the number of rows to be returned.
    qb.set_top(topRows);
    // Filter clause:
    qb.set_filter("EndDate le datetime'<%=DateTime.Today.ToString("yyyy-MM-dd") %>'");
    proxy.query(/* here it is the formatted URI -> */qb.toString(),
        // And now the black magic!
        // Among the arguments passed to the callback function for successful retrieval...
        // the 4th(!) contains the information that we need: the totalcount.
        function(results, ctx, uri, c){
        // let us store it...
        totalCount = c.count;
        // let us use the retrieved data to feed the dataview...
        $("#expiredBudgets").dataView({ data: results });
    });
});
//]]>
</script>

Ometto il resto dell'implementazione: come utilizzare l'informazione "numero totale di righe" sta alla sensibilità del singolo sviluppatore, la cosa davvero importante è poterlo fare!
Spero d'esser stato d'aiuto.

Take care. Bye.

feedback
 

Syndicate

Autore

Cristian Merighi facebook twitter google+ youtube

Ultimi articoli

Top rated

Archivio

Dove sono?

Autore

Cristian Merighi facebook twitter google+ youtube

Le mie letture

Feeds