Il DynamicRSSLink è uno dei nuovi Dynamic Data Controls per ASP.NET in grado di automatizzare la creazione di un feed RSS partendo dallo schema di una tabella o di una vista definita all'interno del nostro DB.
Analogamente a quanto previsto per gli altri Dynamic Data Controls, la prima operazione da effettuare per il corretto utilizzo di un DynamicRSSLink è la configurazione del meccanismo di mapping verso lo schema delle varie tabelle (o viste) che costituiranno la sorgente dati in fase di esecuzione. A tal proposito, tutto ciò che dobbiamo fare è definire i nostri mapping all'intero del Web.Config nell' apposita sezione dynamicDataControls:
<configuration>
<configSections>
<section name="dynamicDataControls" type="Microsoft.Web.DynamicDataControls.DynamicDataControlsSection"/>
...
</configSections>
<connectionStrings>
<add connectionString="..." name="MyConnectionString" providerName="System.Data.SqlClient"/>
</connectionStrings>
...
<dynamicDataControls showAllTables="false" connectionString="MyConnectionString">
<nameMap>
<add table="Articles" pathPrefix="~/myArticles"/>
</nameMap>
</dynamicDataControls>
...
<configuration>
Qualora non venisse specificato alcun nameMap, di default tutti i Dynamic Data Controls (DynamicRSSLink incluso) interpreterebbero il nome della Microsoft.Web.DynamicDataControls.DynamicDataPage (e non System.Web.UI.Page ;)) in cui sono definiti come il nome della tabella (o della vista) che funge da sorgente dati nel contesto di esecuzione.
Nel markup seguente, osserviamo come il controllo DynamicRSSLink da inserire all'interno della nostra DynamicDataPage può essere associato opzionalmente ad un HyperLink, referenziato tramite l'attributo ControlID.
<asp:DynamicRssLink ID="DynamicRssLink1" runat="server" ControlID="HyperLink1" />
<asp:HyperLink ID="HyperLink1" runat="server"><img alt="RSS" src="images/rss.gif" /></asp:HyperLink>
Veniamo ora alla personalizzazione del feed RSS generato: per personalizzare il testo inserito nei campi title e description dei vari item occorre semplicemente implementare all'interno della nostra pagina l'override del metodo GetRSSFields che, come si può osservare nel codice sottostante, restituisce una lista IEnumerable contenente esattamente due stringhe corrsipondenti, nell'ordine, ai tag title e description di un generico feed item (eventuali stringhe aggiutive verranno ignorate):
public partial class MyArticles : Microsoft.Web.DynamicDataControls.DynamicDataPage
{
...
public override IEnumerable GetRSSFields()
{
// Impostazione dei campi da considerare rispettivamente
// come "title" e "description" per ciascun item del Feed RSS
List<string> strings = new List<string>();
strings.Add("Title");
strings.Add("Body");
return strings;
}
...
}
L'output che otteniamo è il seguente:
<rss version="2.0">
<channel>
<title>Feed for table 'Articles'</title>
<link>http://localhost:1337/DynamicDataWebSite/Articles/Articles.aspx</link>
<description>Description of the feed for table 'Articles'</description>
<item>
<title>Titolo 2</title>
<link>http://localhost:1337/DynamicDataWebSite/Articles/Articles.aspx?dv=1&DDCCol_ID=1cb9d37c-a397-4c9b-9188-1414d8390397</link>
<description>bla bla bla bla</description>
</item>
<item>
<title>Titolo 1</title>
<link>http://localhost:1337/DynamicDataWebSite/Articles/Articles.aspx?dv=1&DDCCol_ID=68b457f4-1f9c-4ea6-a29b-7a4afa8274cf</link>
<description>bla bla bla bla</description>
</item>
...
</channel>
</rss>
Il feed RSS contiene, per ciascun item, il link ad una pagina (di default la stessa in cui si trova il DynamicRSSLink) contenente eventualmente il controllo dinamico DynamicDetails. Inoltre, se il DataSource associato alla pagina è sottoposto ad un filtro, anche il feed RSS generato dal DynamicRSSLink conterrà solamente gli item selezionati dal filtro impostato (questo aspetto verrà preso in considerazione in eventuali post successivi... ;))
Infine, vorrei segnalare come, sfruttando le API messe a disposizione dal controllo DynamicRSSLink, sembra non sia possibile personalizzare l' adattamento del contenuto dei tag title e description all'interno del tag channel del feed. A quanto pare, per ora tale obiettivo sembra essere raggiungibile tramite il buon vecchio overriding del metodo Render della pagina o tramite creazione di un HttpHandler.
Technorati tags: ASP.NET, RSS