Revue du web .NET du 21 décembre

Les tweets de la semaine

http://twitter.com/jrguay/statuses/6797869877 SharePoint 2010 offre une nouvelle expérience de développement et maintenant le monde fancy du web (jQuery) peut rencontrer le monde de l’entreprise.

http://twitter.com/willyxoft/statuses/6772998114 Spring 1.3.0 est sorti, les changements majeurs sont le support de NHibernate 2.1. (avec en plus un byte code provider), et la disponibilité de template de projets pour Visual Studio. Plein d’autres choses à découvrir dans la documentation exhaustive : http://www.springframework.net/docs/1.3.0/reference/html/index.html La version 2.0 est déjà en développement, elle apportera une simplification de la configuration.

http://twitter.com/silverlightblog/statuses/6800040893 le moment des fêtes est toujours un peu plus calme, de quoi tuer le temps avec un jeu … simple.

La question Stackoverflow

 http://stackoverflow.com/questions/1935726/best-way-to-send-message-to-thread-c-net-inter-thread-communication .NET 4.0 apporte de nouvelles classes autour de la concurrence et des collections qui  peuvent se rendre utiles pour certains patterns de communication entre Threads.

Actualités Microsoft

Non on ne vous parlera pas du retard d’un certain logiciel pour régler certains problèmes de performance :)

IronRuby est une implémentation du langage Ruby pour .NET. On en a beaucoup entendu parlé avec la DLR (Dynamic Language Runtime) récemment et avec l’arrivée du mot-clé dynamic dans .NET 4.0. La DLR a permis la naissance de projets comme IronPython et IronRuby en fournissant un ensemble de services au-dessus de la CLR. Dans cet article Jimmy Schementi présente la version RC1 du projet.

Actualités “Alt.NET”

Récemment sur le blog officiel de NHibernate, deux billets donnent un aperçu de la verion 3.0 du framework de mapping objet-relationnel :

Le premier donne un état du portage de Linq to NHibernate vers la nouvelle version qui ne base plus sur l’API Criteria et utilise le nouveau parseur de la version 2.1. Les fonctionnalités du fournisseur actuel sont implémentées et testées, il ne “reste” plus que les fonctionnalités autour de requêtes imbriquées ou encore les unions.

Le deuxième billet aborde la nouvelle API de Criteria : QueryOver. L’API criteria était basée sur l’utilisation d’objets pour requêter (Query, Expressions, Alias) mais reposait aussi sur des chaînes de caractères pour passer le nom des propriétés par exemple. Le billet passe en revue les expressions lambdas et les méthodes d’extensions introduites par la nouvelle version.

De l’autre côté

On parle souvent des nouveaux langages comme Ruby ou de la renaissance de certains comme Python mais certains ne sont que des noms vaguement entendu lors d’un cours d’informatique. Erlang fait partie de ces derniers. Eugene Letuchy nous parle de l’utilisation de Erlang dans l’infrastructure de “chat”de Facebook. N’oubliez pas de consulter le fichier pdf en bas de billet, on y apprend des chiffres intéressants.

Un projet

WPF Reports est un projet open source de technologie de rapports se basant sur WPF. Bien qu’au début de son existence il supporte aussi les en-têtes/pieds de page que le databinding et des choses moins courantes comme les codes barres et l’export XPS.

barcodereport
barcodereport
chartreport
chartreport

Le projet se base beaucoup sur le XAML, le langage utilisé par WPF pour déclarer les objets d’interface et en particulier l’API autour des documents comme le FlowDocument. Voici un exemple de template qui définit un pied de page :

<xrd:SectionReportFooter PageFooterHeight=“2” Padding=“10,0,10,10” FontSize=“12”>

    <Table CellSpacing\="0"\>

        <Table.Columns\>

            <TableColumn Width\="\*" />

            <TableColumn Width\="\*" />

        </Table.Columns\>

        <TableRowGroup\>

            <TableRow\>

                <TableCell\>

                    <Paragraph\>

                        <Image Tag\="dpd.jpg" Height\="0.5cm" />

                    </Paragraph\>

                </TableCell\>

                <TableCell\>

                    <Paragraph TextAlignment\="Right"\>

                        Page

                        <xrd:InlineContextValue PropertyName\="PageNumber" FontWeight\="Bold" /> of

                        <xrd:InlineContextValue PropertyName\="PageCount" FontWeight\="Bold" />

                    </Paragraph\>

                </TableCell\>

            </TableRow\>

        </TableRowGroup\>

    </Table\>

</xrd:SectionReportFooter\>

Voici l’initialisation du rapport :

var reportDocument = new ReportDocument();

StreamReader reader = new StreamReader(

new FileStream(@“Templates\ComplexReport.xaml”, FileMode.Open, FileAccess.Read));

reportDocument.XamlData = reader.ReadToEnd();

reportDocument.XamlImagePath = Path.Combine(Environment.CurrentDirectory, @“Templates\");

reader.Close();

On utilise ensuite des objets de type ReportData pour fournir les données du rapport via des propriétés ou des DataTables pour remplir des grids :

List listData = new List();

for (int i = 0; i < 5; i++) // generates five reports

{

ReportData data = new ReportData();

// set constant document values

data.ReportDocumentValues.Add("PrintDate", dateTimeStart); // print date is now

data.ReportDocumentValues.Add("ReportNumber", (i + 1)); // report number

// sample table "Ean"

DataTable table = new DataTable("Ean");

table.Columns.Add("Position", typeof(string));

table.Columns.Add("Item", typeof(string));

table.Columns.Add("EAN", typeof(string));

table.Columns.Add("Count", typeof(int));

Random rnd = new Random(1234 + i);

int count = rnd.Next(20) \* (rnd.Next(2) + 1);

for (int j = 1; j <= count; j++)

{

    // randomly create some articles

    table.Rows.Add(new object\[\] { j, "Item " + (j + (1000 \* (i + 1))).ToString("0000"), "123456790123", rnd.Next(9) + 1 });

}

data.DataTables.Add(table);

listData.Add(data);

}

XpsDocument xps = reportDocument.CreateXpsDocument(listData);

documentViewer.Document = xps.GetFixedDocumentSequence();

Pause

La revue du web fait une petite pause de deux semaines. Nous serons de retour le 11 janvier.

billet publié dans les rubriques coding le