WCF DataServices e Numero Totale di Righe
Cristian Merighi ()

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 () {
$().dataView.defaults = {autoFetch: true, itemTemplate: '#dataViewItemTemplate'};
var proxy = $.openDataServiceProxy('<%=ResolveClientUrl("~/services/modelservice.svc") %>');
var topRows = 3;
var qb = new Sys.Data.OpenDataQueryBuilder('BudgetSet');
qb.set_inlineCount('allpages');
qb.set_orderby('EndDate desc,StartDate');
qb.set_top(topRows);
qb.set_filter("EndDate le datetime'<%=DateTime.Today.ToString("yyyy-MM-dd") %>'");
proxy.query(qb.toString(),
function(results, ctx, uri, c){
totalCount = c.count;
$("#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.