<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3771030798571428234</id><updated>2011-11-28T01:24:56.215+01:00</updated><title type='text'>Blog de Yannick</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://aristidi.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3771030798571428234/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://aristidi.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Yannick Aristidi</name><uri>http://www.blogger.com/profile/13469925821941670877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_mAgpVvAfDSw/Ssc2TFz6iAI/AAAAAAAAAAM/l7FiZtfKEd8/S220/photoblog.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>7</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3771030798571428234.post-6349152245198613037</id><published>2010-01-06T10:10:00.000+01:00</published><updated>2010-01-06T10:10:41.257+01:00</updated><title type='text'>Déménagement des articles</title><content type='html'>Afin de rendre ces articles plus accessibles, l'ensemble des traductions est en cours de "portage " sur developpez.com. (&lt;a href="http://www.developpez.com/"&gt;http://www.developpez.com/&lt;/a&gt;).&lt;br /&gt;Pour ceux qui ne connaitraient pas ce site, sachez qu'il regroupe des forums et un grand nombre d'articles touchant tous les aspects de la programmation. &lt;br /&gt;Donc, je laisse ce blog ouvert dans le seul but de renvoyer les visiteurs vers mon nouveau site:&lt;br /&gt;&lt;a href="http://aristidi.developpez.com/"&gt;http://aristidi.developpez.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3771030798571428234-6349152245198613037?l=aristidi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aristidi.blogspot.com/feeds/6349152245198613037/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://aristidi.blogspot.com/2010/01/demenagement-des-articles.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3771030798571428234/posts/default/6349152245198613037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3771030798571428234/posts/default/6349152245198613037'/><link rel='alternate' type='text/html' href='http://aristidi.blogspot.com/2010/01/demenagement-des-articles.html' title='Déménagement des articles'/><author><name>Yannick Aristidi</name><uri>http://www.blogger.com/profile/13469925821941670877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_mAgpVvAfDSw/Ssc2TFz6iAI/AAAAAAAAAAM/l7FiZtfKEd8/S220/photoblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3771030798571428234.post-1367776421105128736</id><published>2009-10-20T17:15:00.000+02:00</published><updated>2009-10-20T17:15:54.482+02:00</updated><title type='text'>Exemple d'application d'entreprises pour Silverlight 3 et .NET RIA Services. - Partie 4 : SEO, exportation vers Excel et Hors du navigateur</title><content type='html'>&lt;strong&gt;&lt;span style="font-size: large;"&gt;Partie 4 : SEO, exportation vers Excel et Hors du navigateur&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: #cccccc;"&gt;Cet exercice requière (tout est gratuit et le restera) :&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #cccccc;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #cccccc;"&gt;1- VS2008 SP1 (qui comprend Sql Express 2008)&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #cccccc;"&gt;2 - Silverlight 3.0&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #cccccc;"&gt;3 - .NET RIA Services July’09 Preview (pour cet exercice, ceci est optionnel)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: yellow;"&gt;L'original en anglais est diponible ici: Part 4: &lt;/span&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2009/07/14/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-part-4-seo-export-to-excel-and-out-of-browser.aspx"&gt;&lt;span style="background-color: yellow;"&gt;SEO, Export to Excel and Out of Browser&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="background-color: yellow;"&gt;L'application en ligne est disponible ici:&lt;/span&gt;&lt;a href="http://www.hanselman.com/abrams/#/Home"&gt;&lt;span style="background-color: yellow;"&gt; http://www.hanselman.com/abrams/#/Home&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Vous pouvez télécharger la solution complète ici: &lt;a href="http://pagesperso-orange.fr/aristidi/files/MonApplication.zip"&gt;MonApplication.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Aujourd’hui, nous allons parles des différentes vue et de la logique de notre application.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Différentes vues&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Maintenant, intéressons-nous à mettre des vues différentes à notre application. L’un des éléments clef pour la réalisation de différentes vues sont les liens profonds. Voyons comment ajouter cela à notre application.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/St3K9I0NAVI/AAAAAAAAANE/ECZn02etFDI/s1600-h/Image1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/St3K9I0NAVI/AAAAAAAAANE/ECZn02etFDI/s320/Image1.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Tout d’abord, nous devons ajouter un &lt;em&gt;Textbox&lt;/em&gt; afin d’afficher le lien profond pour chacun de nos super employés. Pour ce faire, ajouter le code ci-dessous juste après la balise de fermeture du &lt;em&gt;DataForm&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/St3LBKDFpdI/AAAAAAAAANM/EuAuYtaJlyw/s1600-h/Image2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/St3LBKDFpdI/AAAAAAAAANM/EuAuYtaJlyw/s640/Image2.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Ajoutons l’évènement &lt;em&gt;SelectionChanged&lt;/em&gt; à notre &lt;em&gt;Datagrid&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_mAgpVvAfDSw/St3LGLvMMFI/AAAAAAAAANU/UDjmpwmemzw/s1600-h/Image3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_mAgpVvAfDSw/St3LGLvMMFI/AAAAAAAAANU/UDjmpwmemzw/s640/Image3.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Et connectons le en code behind…&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_mAgpVvAfDSw/St3LPD8nefI/AAAAAAAAANc/JlSosnjd4NQ/s1600-h/Image4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_mAgpVvAfDSw/St3LPD8nefI/AAAAAAAAANc/JlSosnjd4NQ/s640/Image4.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_mAgpVvAfDSw/St3LTXDf6FI/AAAAAAAAANk/tPUS54nn1eI/s1600-h/Image5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_mAgpVvAfDSw/St3LTXDf6FI/AAAAAAAAANk/tPUS54nn1eI/s320/Image5.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Maintenant, nous devons rendre la page suffisamment intelligente afin de connaitre ce lien profond :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_mAgpVvAfDSw/St3LbQi1xHI/AAAAAAAAANs/k-03lBUdvMg/s1600-h/Image6.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_mAgpVvAfDSw/St3LbQi1xHI/AAAAAAAAANs/k-03lBUdvMg/s640/Image6.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Maintenant, lancez l’application, faites un copier/coller de cette adresse dans un navigateur qui affichera exactement cet enregistrement.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_mAgpVvAfDSw/St3LhNAGK8I/AAAAAAAAAN0/2KeR3rTxV8Q/s1600-h/Image7.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_mAgpVvAfDSw/St3LhNAGK8I/AAAAAAAAAN0/2KeR3rTxV8Q/s400/Image7.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Ok, maintenant que nous disposons d’un lien profond, que pouvons-nous faire avec ? Et bien, nous pouvons envoyer ce lien par mail, par messagerie instantanée, l’inclure dans un blog, etc.&lt;br /&gt;&lt;br /&gt;Mais qu’en est-il si nous voulons que des moteurs de recherches soient capables de trouver les enregistrements dans notre site ? Il s’avère qu’il y a pour cela un format standard appelé sitemap (&lt;a href="http://sitemap.org/"&gt;http://sitemap.org/&lt;/a&gt;). Vous pouvez voir un exemple concret ici : &lt;a href="http://amazon.com/robots.txt"&gt;http://amazon.com/robots.txt&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Pour ajouter cela à notre application, faisons un clic droit sur notre projet web, Add, New Item, Search Sitemap.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/St3LmHAxY0I/AAAAAAAAAN8/VNPq2eFP6os/s1600-h/Image8.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/St3LmHAxY0I/AAAAAAAAAN8/VNPq2eFP6os/s400/Image8.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Ceci ajoute &lt;em&gt;robots.txt&lt;/em&gt; et &lt;em&gt;sitemap.aspx&lt;/em&gt; à notre projet. Avant de continuer plus avant, nous allons utiliser la page &lt;em&gt;Default.aspx&lt;/em&gt; comme page de démarrage. Pour ce faire, nous allons faire un copier/coller de l’ensemble du contenu du fichier &lt;em&gt;BusinessApplicationTestPage.aspx&lt;/em&gt; dans&lt;em&gt; Default.aspx&lt;/em&gt;. Une fois cela fait, vérifiez que les deux premières lignes de ce dernier soient bien comme suit :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_mAgpVvAfDSw/St3LtNz-veI/AAAAAAAAAOE/fuOv5A5EUNk/s1600-h/Image9.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_mAgpVvAfDSw/St3LtNz-veI/AAAAAAAAAOE/fuOv5A5EUNk/s640/Image9.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Puis, allez dans &lt;em&gt;Project&lt;/em&gt;, &lt;em&gt;MonApplication.web Properties&lt;/em&gt;… Assurez-vous d’avoir&lt;em&gt; MonApplication.web&lt;/em&gt; en surbrillance.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_mAgpVvAfDSw/St3LypH0Z2I/AAAAAAAAAOM/N8maMostzMU/s1600-h/Image10.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_mAgpVvAfDSw/St3LypH0Z2I/AAAAAAAAAOM/N8maMostzMU/s400/Image10.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Enfin, allez dans l’onglet &lt;em&gt;Web&lt;/em&gt; et effacez le champ &lt;em&gt;Start Action – Specific Page&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_mAgpVvAfDSw/St3L3huEXBI/AAAAAAAAAOU/fhSlvwJLt90/s1600-h/Image11.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_mAgpVvAfDSw/St3L3huEXBI/AAAAAAAAAOU/fhSlvwJLt90/s400/Image11.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Ceci dans le but que l’application utilise plutôt la page &lt;em&gt;Default.aspx&lt;/em&gt; plutôt que &lt;em&gt;BusinessApplicationTestPage.aspx&lt;/em&gt; comme page de démarrage. &lt;br /&gt;Enfin, modifions la méthode &lt;em&gt;dataGrid1_SelectionChanged&lt;/em&gt; afin de ne plus se référer à &lt;em&gt;BusinessApplicationTestPage.aspx&lt;/em&gt; comme suit :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/St3L8ZRQ8eI/AAAAAAAAAOc/NP3THckIB-8/s1600-h/Image12.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/St3L8ZRQ8eI/AAAAAAAAAOc/NP3THckIB-8/s640/Image12.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Ceci étant fait, voyons comment personnaliser le fichier &lt;em&gt;sitemap.aspx.&lt;/em&gt; Notez que nous utilisons un nouveau contrôle ASP.NET datasource qui est conçu pour fonctionner avec la classe DomainService. Ceci nous donne accès au serveur pour la même logique d’application d’ASP.NET et Silverlight&lt;br /&gt;&lt;br /&gt;Rendons nous dans le fichier &lt;em&gt;Sitemap.aspx&lt;/em&gt; afin d’ajouter le code suivant :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/St3MBdtsxZI/AAAAAAAAAOk/e_VQmk881lQ/s1600-h/Image13.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/St3MBdtsxZI/AAAAAAAAAOk/e_VQmk881lQ/s640/Image13.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Une dernière chose à faire, consiste a permettre au coté serveur d’accéder à l’ID de l’employee. Dans &lt;em&gt;Default.aspx.cs&lt;/em&gt;, ajoutez :&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/St3MF6KG5XI/AAAAAAAAAOs/D_-oddcAUi4/s1600-h/Image14.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/St3MF6KG5XI/AAAAAAAAAOs/D_-oddcAUi4/s640/Image14.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Maintenant, en faisant un clic droit sur &lt;em&gt;Sitemap.aspx&lt;/em&gt;, faites &lt;em&gt;View in browser&lt;/em&gt;. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_mAgpVvAfDSw/St3MKD6r_xI/AAAAAAAAAO0/xDm1VLxlmSw/s1600-h/Image15.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_mAgpVvAfDSw/St3MKD6r_xI/AAAAAAAAAO0/xDm1VLxlmSw/s320/Image15.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Et voilà le résultat :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_mAgpVvAfDSw/St3MO5zIPmI/AAAAAAAAAO8/ChdhwGaUQ50/s1600-h/Image16.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_mAgpVvAfDSw/St3MO5zIPmI/AAAAAAAAAO8/ChdhwGaUQ50/s320/Image16.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Changez l’adresse par&lt;em&gt; Robots.txt&lt;/em&gt; et vous devriez obtenir ceci :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_mAgpVvAfDSw/St3MTBu3JnI/AAAAAAAAAPE/1kOI-wAZ12g/s1600-h/Image17.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_mAgpVvAfDSw/St3MTBu3JnI/AAAAAAAAAPE/1kOI-wAZ12g/s320/Image17.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Si vous faites un copier/coller d’une adresse du sitemap, vous pouvez constater que cela fonctionne parfaitement.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_mAgpVvAfDSw/St3MW2-_4GI/AAAAAAAAAPM/qt5NGc_I1Jc/s1600-h/Image18.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_mAgpVvAfDSw/St3MW2-_4GI/AAAAAAAAAPM/qt5NGc_I1Jc/s640/Image18.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Ok, ceci fonctionne parfaitement. Maintenant, les moteurs de recherches peuvent trouver n’importe quelle entité dans notre application. Mais que les moteurs de recherches vont vraiment y trouver comme cela? Les moteurs de recherches sont performant pour analyser du html, mais les contenus dynamiques tels que ceux que nous avons là ou les sites Ajax sont plus difficiles à traiter pour eux. L’art de ce type de référencement est appelé &lt;em&gt;Optimisation pour les moteurs de recherche&lt;/em&gt; (SEO, Search Engine Optimization en anglais, nous emploierons ici le terme &lt;em&gt;SEO&lt;/em&gt;).&lt;br /&gt;&lt;br /&gt;Rendons-nous dans notre page &lt;em&gt;Default.aspx&lt;/em&gt;. Etant donné que nous avons modelé notre logique d’application dans une classe DomainService, il est aisé d’ajouter une vue en Html standard. Ajoutons juste le code suivant dans la balise &lt;em&gt;object&lt;/em&gt; dans &lt;em&gt;Default.aspx&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_mAgpVvAfDSw/St3Mbk4VcvI/AAAAAAAAAPU/wGl4e1EFSls/s1600-h/Image19.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_mAgpVvAfDSw/St3Mbk4VcvI/AAAAAAAAAPU/wGl4e1EFSls/s640/Image19.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Nous avons également besoin d’une méthode de domaine &lt;em&gt;GetSuperEmployee&lt;/em&gt; afin de prendre en charge ce code. Retournons donc dans notre service &lt;em&gt;SuperEmployeeDomainService.cs&lt;/em&gt; et ajoutons :&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_mAgpVvAfDSw/St3MgdeCmVI/AAAAAAAAAPc/l8vrzxyDAR4/s1600-h/Image20.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_mAgpVvAfDSw/St3MgdeCmVI/AAAAAAAAAPc/l8vrzxyDAR4/s640/Image20.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Maintenant, nous devons désactiver Silverlight dans notre navigateur parce que les moteurs de recherche ne disposent pas de ce plugin. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_mAgpVvAfDSw/St3MkxF4npI/AAAAAAAAAPk/JeGwHpX985M/s1600-h/Image21.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_mAgpVvAfDSw/St3MkxF4npI/AAAAAAAAAPk/JeGwHpX985M/s400/Image21.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Et effectuons un rafraichissement le page sur un lien profond…&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/St3Mp902YnI/AAAAAAAAAPs/hf9g5z5kBQk/s1600-h/Image22.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/St3Mp902YnI/AAAAAAAAAPs/hf9g5z5kBQk/s400/Image22.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Plutôt sympa, non ? Maintenant les moteurs de recherches (avec ou sans Silverlight) peuvent accéder aux données.&lt;br /&gt;&lt;br /&gt;Mais, cela fonctionne-t-il vraiment ? Essayez les recherches suivantes :&lt;br /&gt;&lt;br /&gt;&lt;a href="http://search.yahoo.com/search;_ylt=A0oGkjwOnLxJC38BZetXNyoA?p=Super+employee+placement+Alfred+&amp;amp;fr=yfp-t-501"&gt;Super Employé Alfred&lt;/a&gt;&amp;nbsp;(Yahoo)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.google.com/search?hl=en&amp;amp;q=Super+Employee+Placement+Alfred"&gt;Super Employée Alfred&lt;/a&gt;&amp;nbsp;(Google)&lt;br /&gt;&lt;br /&gt;Bien, ceci est une vue serveur, essayons maintenant une autre vue coté client… Nous allons exporter ces données dans Excel !&lt;br /&gt;&lt;br /&gt;Pour ce faire, nous allons ajouter le fichier &lt;em&gt;excelTemplate.txt&lt;/em&gt; à la racine du projet coté client. (Vous pouvez télécharger ce fichier ici: &lt;a href="http://pagesperso-orange.fr/aristidi/files/excelTemplate.txt"&gt;http://pagesperso-orange.fr/aristidi/files/excelTemplate.txt&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;Puis nous allons ajouter un bouton dans notre fichier &lt;em&gt;Home.xaml&lt;/em&gt; pour exporter vers Excel :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_mAgpVvAfDSw/St3NF-hRb2I/AAAAAAAAAP0/pAAaNgQpSs8/s1600-h/Image23.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_mAgpVvAfDSw/St3NF-hRb2I/AAAAAAAAAP0/pAAaNgQpSs8/s640/Image23.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Enfin, nous allons écrire le fichier Excel… Notez que tout est en accès sécurisé, l’utilisateur doit sélectionner la destination du fichier. Le développeur ne pourra plus avoir accès à l’emplacement du fichier. Maintenant, dans notre fichier &lt;em&gt;Home.xaml.cs&lt;/em&gt;, ajoutons la méthode suivante :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_mAgpVvAfDSw/St3NKAQLfYI/AAAAAAAAAP8/Kj4eAtgaNYU/s1600-h/Image24.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_mAgpVvAfDSw/St3NKAQLfYI/AAAAAAAAAP8/Kj4eAtgaNYU/s640/Image24.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Enfin, exécutons de nouveau l’application (après avoir pensé à réactiver Silverlight dans notre navigateur).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_mAgpVvAfDSw/St3NOkwpLlI/AAAAAAAAAQE/0lPosQ3x6Gk/s1600-h/Image25.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_mAgpVvAfDSw/St3NOkwpLlI/AAAAAAAAAQE/0lPosQ3x6Gk/s320/Image25.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_mAgpVvAfDSw/St3NSrD8_SI/AAAAAAAAAQM/EtiBpgTxdYk/s1600-h/Image26.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_mAgpVvAfDSw/St3NSrD8_SI/AAAAAAAAAQM/EtiBpgTxdYk/s400/Image26.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Ceci créer un fichier Excel là où nous l’avons choisi.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/St3NZ3_yHVI/AAAAAAAAAQU/DDQQwv8qBaM/s1600-h/Image27.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/St3NZ3_yHVI/AAAAAAAAAQU/DDQQwv8qBaM/s320/Image27.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Ouvrons-le et faisons un peu de formatage.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_mAgpVvAfDSw/St3Nd_v78lI/AAAAAAAAAQc/c2a40gOdChI/s1600-h/Image28.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_mAgpVvAfDSw/St3Nd_v78lI/AAAAAAAAAQc/c2a40gOdChI/s400/Image28.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Et maintenant, la vue finale… en dehors du navigateur&lt;br /&gt;&lt;br /&gt;Sélectionnons les propriétés sur l’application cliente :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_mAgpVvAfDSw/St3Ni-SgORI/AAAAAAAAAQk/mxNWIEHOVmw/s1600-h/Image29.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_mAgpVvAfDSw/St3Ni-SgORI/AAAAAAAAAQk/mxNWIEHOVmw/s400/Image29.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Editons les paramètres :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_mAgpVvAfDSw/St3NnN3KL9I/AAAAAAAAAQs/UkQlOBovXTs/s1600-h/Image30.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_mAgpVvAfDSw/St3NnN3KL9I/AAAAAAAAAQs/UkQlOBovXTs/s400/Image30.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Lançons l’application. Effectuons un clic droit et sélectionnons « Installer Application… ».&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/St3NsLv9VlI/AAAAAAAAAQ0/QFjkEkMt-Cw/s1600-h/Image31.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/St3NsLv9VlI/AAAAAAAAAQ0/QFjkEkMt-Cw/s400/Image31.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_mAgpVvAfDSw/St3NxahjQzI/AAAAAAAAAQ8/vT8jwuw9_14/s1600-h/Image32.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_mAgpVvAfDSw/St3NxahjQzI/AAAAAAAAAQ8/vT8jwuw9_14/s320/Image32.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Ajoutons un lien sur le bureau…&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_mAgpVvAfDSw/St3N1NNIdLI/AAAAAAAAARE/yR4cuit6k9o/s1600-h/Image33.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_mAgpVvAfDSw/St3N1NNIdLI/AAAAAAAAARE/yR4cuit6k9o/s320/Image33.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Et il nous reste plus qu’a lancer l’application !&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_mAgpVvAfDSw/St3N6B-KxCI/AAAAAAAAARM/qiDTpy9gRqU/s1600-h/Image34.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_mAgpVvAfDSw/St3N6B-KxCI/AAAAAAAAARM/qiDTpy9gRqU/s640/Image34.jpg" vr="true" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3771030798571428234-1367776421105128736?l=aristidi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aristidi.blogspot.com/feeds/1367776421105128736/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://aristidi.blogspot.com/2009/10/exemple-dapplication-dentreprises-pour_20.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3771030798571428234/posts/default/1367776421105128736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3771030798571428234/posts/default/1367776421105128736'/><link rel='alternate' type='text/html' href='http://aristidi.blogspot.com/2009/10/exemple-dapplication-dentreprises-pour_20.html' title='Exemple d&apos;application d&apos;entreprises pour Silverlight 3 et .NET RIA Services. - Partie 4 : SEO, exportation vers Excel et Hors du navigateur'/><author><name>Yannick Aristidi</name><uri>http://www.blogger.com/profile/13469925821941670877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_mAgpVvAfDSw/Ssc2TFz6iAI/AAAAAAAAAAM/l7FiZtfKEd8/S220/photoblog.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_mAgpVvAfDSw/St3K9I0NAVI/AAAAAAAAANE/ECZn02etFDI/s72-c/Image1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3771030798571428234.post-6526952478665133305</id><published>2009-10-15T10:47:00.001+02:00</published><updated>2009-10-15T10:48:12.573+02:00</updated><title type='text'>Exemple d'application d'entreprises pour Silverlight 3 et .NET RIA Services. - Partie 3: L’authentification</title><content type='html'>&lt;strong&gt;&lt;span style="font-size: large;"&gt;Partie&amp;nbsp;3 : L’authentification&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Cet exercice requière (tout est gratuit et le restera) :&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: #cccccc;"&gt;1- VS2008 SP1 (qui comprend Sql Express 2008)&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #cccccc;"&gt;2 - Silverlight 3.0&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #cccccc;"&gt;3 - .NET RIA Services July’09 Preview (pour cet exercice, ceci est optionnel)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: yellow;"&gt;L'original en anglais est diponible ici: &lt;/span&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2009/07/11/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-part-1-rich-data-query.aspx"&gt;&lt;span style="background-color: yellow;"&gt;Part 2: Rich Data Query&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="background-color: yellow;"&gt;L'application en ligne est disponible ici: &lt;/span&gt;&lt;a href="http://www.hanselman.com/abrams/#/Home"&gt;&lt;span style="background-color: yellow;"&gt;http://www.hanselman.com/abrams/#/Home&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Vous pouvez télécharger la solution complète ici: &lt;a href="http://pagesperso-orange.fr/aristidi/files/MonApplication.zip"&gt;MonApplication.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Aujourd’hui, nous allons parler de l’authentification.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="background-color: #f3f3f3;"&gt;NdT : pour cette session, il ne s’agit que d’une présentation basique des possibilités offerte par .NET RIA Services et Silverlight. Une session plus approfondie fera l’objet d’un article futur.&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Les applications professionnelles ont souvent accès à des données sensibles. Il est important que vous puissiez auditer, restreindre et contrôler l’accès à vos données. Voyons comment .NET RIA Services et Silverlight opèrent pour réaliser cela.&lt;br /&gt;&lt;br /&gt;Utiliser le modèle &lt;em&gt;Silverlight Business Application&lt;/em&gt; est super facile… Par défaut, il est connecté au système d’authentification d’ASP.NET qui offre un système de gestion utilisateur personnalisable.&lt;br /&gt;&lt;br /&gt;Je vais faire la démonstration en utilisant l’authentification par formulaire, vous pouvez bien sûr utiliser l’authentification Windows en faisant une légère modification du modèle.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_mAgpVvAfDSw/StbhBK1X_DI/AAAAAAAAAMM/aipOTzmVj4Q/s1600-h/image1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://4.bp.blogspot.com/_mAgpVvAfDSw/StbhBK1X_DI/AAAAAAAAAMM/aipOTzmVj4Q/s320/image1.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Pour cette démo, je vais faire la démonstration de la création d’un nouvel utilisateur, mais si vous disposer déjà d’une base utilisateur, vous pouvez l’utiliser.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="background-color: #eeeeee;"&gt;NdT : pour cette session, pensez à lancer l’application avec CTRL+F5.&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/StbhHMGE5gI/AAAAAAAAAMU/9vIBUevSaFs/s1600-h/image2.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/StbhHMGE5gI/AAAAAAAAAMU/9vIBUevSaFs/s320/image2.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_mAgpVvAfDSw/StbhM9EXkZI/AAAAAAAAAMc/rl04LUkXSkY/s1600-h/image3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://3.bp.blogspot.com/_mAgpVvAfDSw/StbhM9EXkZI/AAAAAAAAAMc/rl04LUkXSkY/s320/image3.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Notez que nous avons des règles de validations fonctionnelles.&lt;br /&gt;&lt;br /&gt;Maintenant, l’application sait qui vous êtes…&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/StbhRCggLKI/AAAAAAAAAMk/UQmvZqFL7X0/s1600-h/image4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/StbhRCggLKI/AAAAAAAAAMk/UQmvZqFL7X0/s320/image4.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Notez que tout ce qui concerne l’expérience utilisateur sur le client est complètement personnalisable étant donné que tout le code source est inclus dans le projet. Mais le modèle par défaut est pas mal pour de nombreuses applications.&lt;br /&gt;&lt;br /&gt;Maintenant que nous sommes connectés, faisons quelque chose de ces données utilisateur. Par exemple, faisons en sorte que seuls les utilisateurs enregistrés puissent accéder aux données des supers employés. Editons la classe &lt;em&gt;SuperEmployeeDomainService (SuperEmployeeDomainService.cs)&lt;/em&gt; sur le serveur afin d’ajouter l’attribut &lt;em&gt;RequiresAuthentication&lt;/em&gt;. Il y a d’autres attrubuts comme les rôles et la possibilité de les gérer dans votre code si vous le voulez.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_mAgpVvAfDSw/StbhUskFBpI/AAAAAAAAAMs/HEldMGp0edg/s1600-h/image5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://4.bp.blogspot.com/_mAgpVvAfDSw/StbhUskFBpI/AAAAAAAAAMs/HEldMGp0edg/s400/image5.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Maintenant, si nous lançons l’application et que nous ne nous connectons pas, nous n’aurons aucune donnée. Notez que cette validation est faite coté client pour une expérience utilisateur riche et une fois encore sur le serveur pour s’assurer de la sécurité.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_mAgpVvAfDSw/StbhaNBxNuI/AAAAAAAAAM0/oPXKbGm207E/s1600-h/image6.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://2.bp.blogspot.com/_mAgpVvAfDSw/StbhaNBxNuI/AAAAAAAAAM0/oPXKbGm207E/s320/image6.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Lorsque nous somme connectés…&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_mAgpVvAfDSw/Stbhd-ZwyUI/AAAAAAAAAM8/w1kTL2vINpg/s1600-h/image7.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://4.bp.blogspot.com/_mAgpVvAfDSw/Stbhd-ZwyUI/AAAAAAAAAM8/w1kTL2vINpg/s320/image7.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;… et lorsque nous le sommes pas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3771030798571428234-6526952478665133305?l=aristidi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aristidi.blogspot.com/feeds/6526952478665133305/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://aristidi.blogspot.com/2009/10/exemple-dapplication-dentreprises-pour_15.html#comment-form' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3771030798571428234/posts/default/6526952478665133305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3771030798571428234/posts/default/6526952478665133305'/><link rel='alternate' type='text/html' href='http://aristidi.blogspot.com/2009/10/exemple-dapplication-dentreprises-pour_15.html' title='Exemple d&apos;application d&apos;entreprises pour Silverlight 3 et .NET RIA Services. - Partie 3: L’authentification'/><author><name>Yannick Aristidi</name><uri>http://www.blogger.com/profile/13469925821941670877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_mAgpVvAfDSw/Ssc2TFz6iAI/AAAAAAAAAAM/l7FiZtfKEd8/S220/photoblog.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_mAgpVvAfDSw/StbhBK1X_DI/AAAAAAAAAMM/aipOTzmVj4Q/s72-c/image1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3771030798571428234.post-2264028935685786274</id><published>2009-10-15T09:27:00.001+02:00</published><updated>2009-10-15T11:23:35.659+02:00</updated><title type='text'>Les exercices disponibles au format PDF</title><content type='html'>Je ne sais pas vous, mais parfois lorsque j'apprend un truc sur mon PC, j'aime bien avoir le bouquin sur les genoux. Du coup, j'ai &lt;strike&gt;commencé à convertir les articles au format pdf. Pour l'instant, seul le chapitre 2 est dispo. Je mettrais le chaptire 1 en ligne asser rapidement. Puis, au fur et à mesure, je publirais&amp;nbsp;les traductions à la fois sur ce blog et à la fois en pdf.&lt;/strike&gt;&lt;br /&gt;Bien, en fait ce ne fut pas long, les 3 premiers chapitres sont donc dispo en PDF.&lt;br /&gt;Pour télécharger l'exercice au format pdf, cliquez sur le lien idoine à droite...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3771030798571428234-2264028935685786274?l=aristidi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aristidi.blogspot.com/feeds/2264028935685786274/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://aristidi.blogspot.com/2009/10/les-exercices-disponibles-au-format-pdf.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3771030798571428234/posts/default/2264028935685786274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3771030798571428234/posts/default/2264028935685786274'/><link rel='alternate' type='text/html' href='http://aristidi.blogspot.com/2009/10/les-exercices-disponibles-au-format-pdf.html' title='Les exercices disponibles au format PDF'/><author><name>Yannick Aristidi</name><uri>http://www.blogger.com/profile/13469925821941670877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_mAgpVvAfDSw/Ssc2TFz6iAI/AAAAAAAAAAM/l7FiZtfKEd8/S220/photoblog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3771030798571428234.post-5613688074231376621</id><published>2009-10-14T11:21:00.005+02:00</published><updated>2009-10-15T09:30:31.456+02:00</updated><title type='text'>Exemple d'application d'entreprises pour Silverlight 3 et .NET RIA Services. - Partie 2: L'accès aux données</title><content type='html'>&lt;strong&gt;&lt;span style="font-size: large;"&gt;Partie 2 : Accès aux données&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Cet exercice va nous entrainer à l'accès aux données avec Silverlight.&lt;br /&gt;&lt;br /&gt;Cet exercice requière (tout est gratuit et le restera) :&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: #cccccc;"&gt;1- VS2008 SP1 (qui comprend Sql Express 2008)&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #cccccc;"&gt;2 - Silverlight 3.0&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #cccccc;"&gt;3 - .NET RIA Services July’09 Preview (pour cet exercice, ceci est optionnel)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: yellow;"&gt;L'original en anglais est diponible ici: &lt;/span&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2009/07/11/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-part-1-rich-data-query.aspx"&gt;&lt;span style="background-color: yellow;"&gt;Part 2: Rich Data Query&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="background-color: yellow;"&gt;L'application en ligne est disponible ici: &lt;/span&gt;&lt;a href="http://www.hanselman.com/abrams/#/Home"&gt;&lt;span style="background-color: yellow;"&gt;http://www.hanselman.com/abrams/#/Home&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Vous pouvez télécharger la solution complète ici: &lt;a href="http://pagesperso-orange.fr/aristidi/files/MonApplication.zip"&gt;MonApplication.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Tout d’abord, récupérons la base NORTHWND.MDF disponible ici:&lt;a href="http://pagesperso-orange.fr/aristidi/files/NORTHWND.MDF"&gt; NORTHWND.MDF&lt;/a&gt;&lt;br /&gt;Plaçons-là dans le répertoire MonApplication.web/AppData. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_mAgpVvAfDSw/StWPUxeTY8I/AAAAAAAAAEU/ODnStA4eDoc/s1600-h/Image0.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://2.bp.blogspot.com/_mAgpVvAfDSw/StWPUxeTY8I/AAAAAAAAAEU/ODnStA4eDoc/s400/Image0.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;Effectuons un clic-droit sur MonApplication.web et ajoutons un nouvel item. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWPboMXKjI/AAAAAAAAAEc/ubaG-quj-ps/s1600-h/Image1.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWPboMXKjI/AAAAAAAAAEc/ubaG-quj-ps/s400/Image1.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Allons dans Data et sélectionnons ADO.NET Entity Data Model et nommons-le &lt;em&gt;Northwind.edmx&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_mAgpVvAfDSw/StWPiwKsxtI/AAAAAAAAAEk/wO5Mmz_u17U/s1600-h/Image2.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://3.bp.blogspot.com/_mAgpVvAfDSw/StWPiwKsxtI/AAAAAAAAAEk/wO5Mmz_u17U/s320/Image2.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;Une nouvelle fenêtre apparait nous demandant de choisir quel type de modèle nous désirons. Sélectionnons &lt;em&gt;Generate from database&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_mAgpVvAfDSw/StWPtrL0lrI/AAAAAAAAAEs/3IpDm6YKLqg/s1600-h/Image3.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://2.bp.blogspot.com/_mAgpVvAfDSw/StWPtrL0lrI/AAAAAAAAAEs/3IpDm6YKLqg/s320/Image3.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Dans la fenêtre d’option, dans Data Source, sélectionnons &lt;em&gt;Change&lt;/em&gt; et choisissons &lt;em&gt;Microsoft SQL Server Database File.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_mAgpVvAfDSw/StWP0pxJ8JI/AAAAAAAAAE0/8SMt6RSI430/s1600-h/Image4.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://3.bp.blogspot.com/_mAgpVvAfDSw/StWP0pxJ8JI/AAAAAAAAAE0/8SMt6RSI430/s320/Image4.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_mAgpVvAfDSw/StWP4xPJONI/AAAAAAAAAE8/DmrfI16f0Nc/s1600-h/Image5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://4.bp.blogspot.com/_mAgpVvAfDSw/StWP4xPJONI/AAAAAAAAAE8/DmrfI16f0Nc/s320/Image5.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Cliquons sur le boutonBrowse de Database File Name et sélectionnons la base &lt;em&gt;NORTHWND.MDF&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_mAgpVvAfDSw/StWQGAVH1MI/AAAAAAAAAFE/5Y5m4eBYeYg/s1600-h/Image6.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://3.bp.blogspot.com/_mAgpVvAfDSw/StWQGAVH1MI/AAAAAAAAAFE/5Y5m4eBYeYg/s320/Image6.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_mAgpVvAfDSw/StWQJ0krJ1I/AAAAAAAAAFM/S9B34nL2O1c/s1600-h/Image7.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://2.bp.blogspot.com/_mAgpVvAfDSw/StWQJ0krJ1I/AAAAAAAAAFM/S9B34nL2O1c/s320/Image7.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Nous pouvons cliquer sur le bouton &lt;em&gt;Test Connection&lt;/em&gt; pour nous assurer que tout se passe bien.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_mAgpVvAfDSw/StWQNsvBRDI/AAAAAAAAAFU/WPzaFQIIooY/s1600-h/Image8.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://3.bp.blogspot.com/_mAgpVvAfDSw/StWQNsvBRDI/AAAAAAAAAFU/WPzaFQIIooY/s320/Image8.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Cliquons sur &lt;em&gt;OK&lt;/em&gt;, et une nouvelle fenêtre apparait. Cliquons sur &lt;em&gt;Next&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWQSKNhklI/AAAAAAAAAFc/7IKUWVNXSWY/s1600-h/Image9.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWQSKNhklI/AAAAAAAAAFc/7IKUWVNXSWY/s320/Image9.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Sur la fenêtre suivante, nous allons sélectionner la table qui nous intéresse, en l’occurrence, ici, il faut cocher &lt;em&gt;SuperEmployees (dbo)&lt;/em&gt;. Validons notre choix en cliquant sur &lt;em&gt;Finish&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_mAgpVvAfDSw/StWQWh0dzfI/AAAAAAAAAFk/kiJA-cZXcws/s1600-h/Image10.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://3.bp.blogspot.com/_mAgpVvAfDSw/StWQWh0dzfI/AAAAAAAAAFk/kiJA-cZXcws/s320/Image10.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;A ce stade, il est alors nécessaire de compiler à nouveau la solution afin de tout prendre en compte. Pour ce faire, faisons un clic droit sur notre solution et sélectionnons &lt;em&gt;Build Solution&lt;/em&gt;. Voilà, nous avons créé notre couche d’accès aux données.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWQd7fGZaI/AAAAAAAAAFs/PzS_EVrhLmo/s1600-h/Image11.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWQd7fGZaI/AAAAAAAAAFs/PzS_EVrhLmo/s320/Image11.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_mAgpVvAfDSw/StWQiMWPlvI/AAAAAAAAAF0/0Fu-Tjwj3Vk/s1600-h/Image12.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://3.bp.blogspot.com/_mAgpVvAfDSw/StWQiMWPlvI/AAAAAAAAAF0/0Fu-Tjwj3Vk/s320/Image12.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Maintenant, une fois que tout est en place, nous allons pouvoir parler de l’accès aux données. Quasiment toutes les applications professionnelles ont besoin d’un accès aux données. Nous allons d’abord démarrer avec le projet web. Pour cet exemple, j’ai utilisé un modèle de donnée Entity Framework, mais RIA Services fonctionne très bien avec tout type de données issues d’objets ou de fichier XML, de services web au Linq to Sql. &lt;br /&gt;&lt;br /&gt;Maintenant, la question qui se pose est : comment allons-nous accéder à ces données depuis notre client Silverlight ? Traditionnellement, la plupart des applications d’entreprises démarrent avec un modèle d’application 2-tiers. Ceci est source de nombreux problèmes en termes de flexibilité et d’évolutivité… De plus, cela ne fonctionne tout simplement pas avec l’architecture client Silverlight / web.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWQmbS013I/AAAAAAAAAF8/YhqeyALcUQk/s1600-h/Image13.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWQmbS013I/AAAAAAAAAF8/YhqeyALcUQk/s320/Image13.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Du coup, les développeurs s’orientent plutôt dans le monde du n-tiers. Il est très facile, avec .NET RIA Services de créer des services n-tiers qui soient flexibles et évolutifs bâtis sur WCF et ADO.NET Data Services.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_mAgpVvAfDSw/StWQqInvf2I/AAAAAAAAAGE/ucIIZe78BTA/s1600-h/Image14.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://3.bp.blogspot.com/_mAgpVvAfDSw/StWQqInvf2I/AAAAAAAAAGE/ucIIZe78BTA/s320/Image14.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Ces services .NET RIA modélisent la logique de notre application UI-tiers et encapsulent l’accès à nos données diverses tel que les données POCO (Plain Old CLR Object), les services Cloud comme Azure, S3, etc. via REST, etc. Une des caractéristique formidable de cela, c’est que l’on peut migrer d’une base de donnée SQL Server à un service Azure distant sans rien n’avoir à changer quoique ce soit dans la logique d’application.&lt;br /&gt;&lt;br /&gt;Voyons maintenant à quel point il est aisé de créer ces services RIA.&lt;br /&gt;&lt;br /&gt;Effectuons un clic droit sur le projet serveur (MonApplication.web) et sélectionnons ajouter une nouvelle classe&lt;em&gt; Domain Service&lt;/em&gt;. Nommons la nouvelle classe &lt;em&gt;SuperEmployeeDomainService.cs&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_mAgpVvAfDSw/StWQulo43eI/AAAAAAAAAGM/b2Xu1n47e8A/s1600-h/Image15.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://2.bp.blogspot.com/_mAgpVvAfDSw/StWQulo43eI/AAAAAAAAAGM/b2Xu1n47e8A/s320/Image15.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWQyJ2JWTI/AAAAAAAAAGU/5DVNOGY0hNU/s1600-h/Image16.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWQyJ2JWTI/AAAAAAAAAGU/5DVNOGY0hNU/s320/Image16.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Dans l’assistant, sélectionnons notre source de données (ici&lt;em&gt; NORTHWNDEntities&lt;/em&gt;). Notez que nous pourrions choisir une classe Linq2Sql, une classe POCO, etc. Veillons également à cocher les cases &lt;em&gt;Enable Client Access, SuperEmployees, Enable editing&lt;/em&gt; et &lt;em&gt;Generate associated classes for metada&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_mAgpVvAfDSw/StWQ2Jn3bmI/AAAAAAAAAGc/ZXO_vxuukuA/s1600-h/Image17.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://3.bp.blogspot.com/_mAgpVvAfDSw/StWQ2Jn3bmI/AAAAAAAAAGc/ZXO_vxuukuA/s320/Image17.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Dans la classe nouvellement créée, nous avons une ébauche de toutes les méthodes pour accéder à nos données. Nous devrions bien sûr les modifier pour notre application. Pour les prochaines étapes, nous allons utiliser la méthode&lt;em&gt; GetSuperEmployees(),&lt;/em&gt; donc, nous allons devoir la modifier comme suit :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWQ6MaZJsI/AAAAAAAAAGk/1F5Vew53aBY/s1600-h/Image18.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWQ6MaZJsI/AAAAAAAAAGk/1F5Vew53aBY/s400/Image18.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Maintenant, basculons du coté du client. Tout d’abord, compilons à nouveau la solution afin d’y accéder coté client directement. Ces projets sont liés.&lt;br /&gt;&lt;br /&gt;Effectuons un glisser-déposer de la &lt;em&gt;Datagrid&lt;/em&gt; de la boite à outil dans notre vue &lt;em&gt;Home.xaml&lt;/em&gt;, juste après les &lt;em&gt;TextBlock&lt;/em&gt;, avant la fermeture du &lt;em&gt;StackPanel&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_mAgpVvAfDSw/StWQ-4m1pGI/AAAAAAAAAGs/u0FsB7Ozvak/s1600-h/Image19.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://4.bp.blogspot.com/_mAgpVvAfDSw/StWQ-4m1pGI/AAAAAAAAAGs/u0FsB7Ozvak/s400/Image19.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Modifions alors le xaml ainsi ajouté comme suit :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_mAgpVvAfDSw/StWRDS096EI/AAAAAAAAAG0/fEVUdpNdkvc/s1600-h/Image20.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://2.bp.blogspot.com/_mAgpVvAfDSw/StWRDS096EI/AAAAAAAAAG0/fEVUdpNdkvc/s400/Image20.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Maintenant, dans le code behind (c-a-d, dans le fichier &lt;em&gt;Home.xaml.cs&lt;/em&gt;), ajoutons la clause&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;using MonApplication.Web&lt;/span&gt;. &lt;br /&gt;&lt;br /&gt;Notez qu’il est intéréssant que MonApplication.Web est définie sur le serveur… Nous pouvons maintenant accéder au proxy client du serveur DomainService localement.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_mAgpVvAfDSw/StWRIlvQo3I/AAAAAAAAAG8/b5YyAmwUTvM/s1600-h/Image21.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://2.bp.blogspot.com/_mAgpVvAfDSw/StWRIlvQo3I/AAAAAAAAAG8/b5YyAmwUTvM/s400/Image21.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A la ligne 1, nous avons créé notre &lt;em&gt;SuperEmployeeDomainContext&lt;/em&gt;… Il s’agit du SuperEmployeeDomainService coté client. Notez la convention de d’appellation ici.&lt;br /&gt;&lt;br /&gt;A la ligne 2, nous lions les données à la datagrid que nous avons créé précédemment. Enfin, à la ligne 3, nous chargeons les données grâce à la méthode &lt;em&gt;GetSuperEmployees()&lt;/em&gt; que nous avons défini sur le serveur. &lt;br /&gt;Notez que tout cela se fait de façon asynchrone et que nous n’avons pas a nous préoccuper de la complexité du monde de l’asynchronisation.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWRN9OmaMI/AAAAAAAAAHE/n5WjctvipYE/s1600-h/Image22.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWRN9OmaMI/AAAAAAAAAHE/n5WjctvipYE/s320/Image22.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Et voilà le résultat ! Nous avons toutes nos entrées, mais dans le vrai monde, ne voulons-nous pas pouvoir paginer et faire en sorte que le serveur trie et filtre les résultats ? Voyons-voir comment procéder.&lt;br /&gt;&lt;br /&gt;Tout d’abord, effaçons totalement les lignes de code que nous avons ajouté en code behind (c-a-d, les trois lignes dans notre fichier Home.xaml.cs). Puis, dans notre vue &lt;em&gt;Home.xaml&lt;/em&gt;, ajoutons un &lt;em&gt;DomainDataSource&lt;/em&gt; en faisant un glisser-déplacer de la boite à outil.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWRR55u9KI/AAAAAAAAAHM/noJz9ZdsQP4/s1600-h/Image23.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWRR55u9KI/AAAAAAAAAHM/noJz9ZdsQP4/s320/Image23.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Puis, éditons le code nouvellement inséré. Ajoutons en premier lieu l’espace de nom de notre application.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_mAgpVvAfDSw/StWRWJ0S2DI/AAAAAAAAAHU/XbybX0aV5Mw/s1600-h/Image24.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://2.bp.blogspot.com/_mAgpVvAfDSw/StWRWJ0S2DI/AAAAAAAAAHU/XbybX0aV5Mw/s400/Image24.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;En 1, nous avons jouté l’espace de nom.&lt;br /&gt;&lt;br /&gt;En 2, nous appelons la méthode &lt;em&gt;GetSuperEmployeesQuery&lt;/em&gt; du DomianContext spécifié en 4.&lt;br /&gt;&lt;br /&gt;En 3, nous réglons la taille du chargement à 20. Ceci signifie que nous allons télécharger les données par groupe de 20.&lt;br /&gt;&lt;br /&gt;Maintenant, nous allons lier tout cela au Datagrid et afficher un petit indicateur de chargement.&lt;br /&gt;&lt;br /&gt;Pour ce faire, nous allons tout d’abord ajouter un espace de nom afin d’accéder à l’indicateur de progression.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_mAgpVvAfDSw/StWRbxy9zVI/AAAAAAAAAHc/Qydf4JNSKA0/s1600-h/Image25.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://4.bp.blogspot.com/_mAgpVvAfDSw/StWRbxy9zVI/AAAAAAAAAHc/Qydf4JNSKA0/s400/Image25.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Puis nous allons modifier notre vue comme suit :&lt;br /&gt;&lt;br /&gt;NB : lorsque l'on fait un glisser-déposer d’un contrôle sur la vue, l’espace de nom est automatiquement ajouté. Ajoutons donc le DataPager de cette manière.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_mAgpVvAfDSw/StWRg0U0vKI/AAAAAAAAAHk/RqwF2KiSSCs/s1600-h/Image27.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://3.bp.blogspot.com/_mAgpVvAfDSw/StWRg0U0vKI/AAAAAAAAAHk/RqwF2KiSSCs/s400/Image27.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;A la ligne 27, nous voyons le &lt;em&gt;Datagrid&lt;/em&gt; qui est lié à la propriété DDS.Data. Puis, nous voyons un &lt;em&gt;DataPager&lt;/em&gt; à la ligne 31, qui est lié à la même source de données. Ceci nous prodigue l’interface de pagination. &lt;br /&gt;Notez qu’à la ligne 31 nous choisissons d’afficher dix enregistrements à la fois. Finalement, nous englobons l’ensemble dans un contrôle &lt;em&gt;Activity&lt;/em&gt; afin d’afficher la progression.&lt;br /&gt;&lt;br /&gt;Ce qui est bien avec les contrôles &lt;em&gt;Activity&lt;/em&gt;, le &lt;em&gt;Datagrid&lt;/em&gt; et le &lt;em&gt;DataPager&lt;/em&gt;, c’est que l’on peut les utiliser avec n’importe quelle source de données comme les services WCF, les services REST, etc.&lt;br /&gt;&lt;br /&gt;Appuyons sur F5 et voyons le résultat…&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_mAgpVvAfDSw/StWRlijYKAI/AAAAAAAAAHs/8W9iDF73YWE/s1600-h/Image28.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://2.bp.blogspot.com/_mAgpVvAfDSw/StWRlijYKAI/AAAAAAAAAHs/8W9iDF73YWE/s400/Image28.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Notez que nous chargeons 20 enregistrements à la fois, mais que nous n’en n’affichons que 10. Ainsi, si nous avançons d’une seule page, cela sera géré uniquement par le client, mais si nous avançons d’avantage, nous faisons un appel serveur et nous téléchargeons 20 enregistrements de plus. Notez également que le tri fonctionne également. Et où se trouve le code qui gère le tri ? Avons-nous écrit le code coté client ou serveur ? Pas du tout, ceci n’est que la magie de Linq, tout cela se fait tout seul et le résultat tombe.&lt;br /&gt;&lt;br /&gt;Nous pouvons déjà ajouter une fonction de groupement. Pou cela, nous allons tout d’abord ajouter un espace de nom comme suit :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_mAgpVvAfDSw/StWRqOjYDnI/AAAAAAAAAH0/bLfDYdeXZOg/s1600-h/Image29.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://4.bp.blogspot.com/_mAgpVvAfDSw/StWRqOjYDnI/AAAAAAAAAH0/bLfDYdeXZOg/s400/Image29.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Puis, nous joutons le code suivant :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_mAgpVvAfDSw/StWRur8deDI/AAAAAAAAAH8/y32aJXGVASs/s1600-h/Image30.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://3.bp.blogspot.com/_mAgpVvAfDSw/StWRur8deDI/AAAAAAAAAH8/y32aJXGVASs/s400/Image30.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Et voilà le résultat :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_mAgpVvAfDSw/StWRzHcC3oI/AAAAAAAAAIE/qEn5jVFbnW4/s1600-h/Image31.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://2.bp.blogspot.com/_mAgpVvAfDSw/StWRzHcC3oI/AAAAAAAAAIE/qEn5jVFbnW4/s320/Image31.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Maintenant, ajoutons un filtrage. Tout d’abord, ajoutons un &lt;em&gt;Label&lt;/em&gt; et un &lt;em&gt;TextBox&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWR3mm3O2I/AAAAAAAAAIM/7BkKdQB2YKw/s1600-h/Image32.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWR3mm3O2I/AAAAAAAAAIM/7BkKdQB2YKw/s400/Image32.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Enfin, ajoutons ces filtres à notre DomainDataSource :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_mAgpVvAfDSw/StWR8w2dLCI/AAAAAAAAAIU/hI3UCN3iXSw/s1600-h/Image33.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://4.bp.blogspot.com/_mAgpVvAfDSw/StWR8w2dLCI/AAAAAAAAAIU/hI3UCN3iXSw/s400/Image33.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Lorsque nous appuyons sur F5, nous obtenons une boite de filtre et lorsque l’on tape quelque chose dedans, nous faisons un filtrage des résultats coté serveur.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_mAgpVvAfDSw/StWSA4bvo9I/AAAAAAAAAIc/voYislFfyPg/s1600-h/Image34.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://2.bp.blogspot.com/_mAgpVvAfDSw/StWSA4bvo9I/AAAAAAAAAIc/voYislFfyPg/s400/Image34.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Maintenant, supposons que nous voulons créer un champ de saisie automatique plutôt qu’une simple boite de texte. La première chose que nous devons faire est d’obtenir toutes les origines possibles. Notez que nous devons les obtenir à partir du serveur (le client risque en effet de ne pas toutes les avoir dans la mesure où nous chargeons les données par groupe de 20, que nous effectuons une pagination, etc.). Pour faire cela, nous allons ajouter une méthode dans notre DomainService. Dans le fichier &lt;em&gt;SuperEmployeeDomainService.cs&lt;/em&gt;, ajoutons tout d’abord cette classe :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_mAgpVvAfDSw/StWSF49EHOI/AAAAAAAAAIk/gPudh5b3txY/s1600-h/Image35.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://3.bp.blogspot.com/_mAgpVvAfDSw/StWSF49EHOI/AAAAAAAAAIk/gPudh5b3txY/s320/Image35.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Puis la méthode dans la classe &lt;em&gt;SuperEmployeeDomainService&lt;/em&gt; qui retourne les origines :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_mAgpVvAfDSw/StWSSNmYB8I/AAAAAAAAAIs/7wTca-GyboA/s1600-h/Image36.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://4.bp.blogspot.com/_mAgpVvAfDSw/StWSSNmYB8I/AAAAAAAAAIs/7wTca-GyboA/s400/Image36.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Dans notre vue &lt;em&gt;Home.xaml&lt;/em&gt;, remplaçons le &lt;em&gt;TextBox&lt;/em&gt; par un &lt;em&gt;AutoCompleteBox&lt;/em&gt; comme ceci :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWSW6jKu2I/AAAAAAAAAI0/cgG7H0aLpJM/s1600-h/Image37.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWSW6jKu2I/AAAAAAAAAI0/cgG7H0aLpJM/s400/Image37.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Puis ajoutons le code behind pour charger tout ça :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_mAgpVvAfDSw/StWSahD6o_I/AAAAAAAAAI8/YnkB1adq1kk/s1600-h/Image38.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://4.bp.blogspot.com/_mAgpVvAfDSw/StWSahD6o_I/AAAAAAAAAI8/YnkB1adq1kk/s400/Image38.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Lançons le tout avec F5 et nous devrions obtenir cela :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_mAgpVvAfDSw/StWSfP1_whI/AAAAAAAAAJE/jHcJNd4CDL0/s1600-h/Image39.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://3.bp.blogspot.com/_mAgpVvAfDSw/StWSfP1_whI/AAAAAAAAAJE/jHcJNd4CDL0/s400/Image39.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;strong&gt;Valider la mise à jour des données&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Maintenant, nous avons certes une application qui nous permet d’afficher les données de manière sophistiqué, mais les applications professionnelles nécessitent également d’autoriser la mise à jour de données. Voyons comment procéder. Tout d’abord, remplaçons le xaml ci-dessous, sous le DomainDataService. Ceci nous fournira une belle vue Master-detail. &lt;br /&gt;&lt;br /&gt;(Veuillez vous rendre ici pour avoir le texte complet de &lt;a href="http://pagesperso-orange.fr/aristidi/files/Home.xaml"&gt;Home.xaml&lt;/a&gt;). &lt;br /&gt;Maintenant, lançons l’application avec F5 et nous obtenons alors ceci :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWSl5-6chI/AAAAAAAAAJM/GdSKzaz-2ig/s1600-h/Image40.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWSl5-6chI/AAAAAAAAAJM/GdSKzaz-2ig/s400/Image40.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Si l’on tente de modifier un enregistrement dans la vue détail, nous voyons un astérisque nous signalant que cette entrée est modifiée et quelle devra être renvoyée au serveur. Si vous éditez une ou plusieurs entrées et que vous annulez ces modifications, l’astérisque disparaitra.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_mAgpVvAfDSw/StWSqeC5cBI/AAAAAAAAAJU/FpgkC21tCmw/s1600-h/Image41.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://2.bp.blogspot.com/_mAgpVvAfDSw/StWSqeC5cBI/AAAAAAAAAJU/FpgkC21tCmw/s320/Image41.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Maintenant, nous devons brancher le bouton « Envoyer ». Pour ce faire, dans votre fichier&lt;em&gt; Home.xaml.cs&lt;/em&gt;, ajoutons le délégué suivant :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWSuIkBKPI/AAAAAAAAAJc/xlW1V6cjj18/s1600-h/Image42.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWSuIkBKPI/AAAAAAAAAJc/xlW1V6cjj18/s400/Image42.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Tout d’abord, nous devons valider l’élément qui est en cours d’édition, puis nous devons juste envoyer les changements. Ces changements sont regroupés par lot et renvoyés au serveur. Puis, notre méthode Update est appelée. Notez que l’astérisque disparait alors. &lt;br /&gt;&lt;br /&gt;Voilà qui est fait, mais qu’en est-il de la validation des données ? De base, nous avons une validation de niveau type (si c’est un entier, une chaine de caractère, etc.). Par exemple, si nous remplissons le champ EmployeeID avec une chaine de caractère, nous obtenons une erreur (NB : pour que cela fonctionne, vous devez lancer votre projet sans débogage, en appuyant sur CTRL-F5).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_mAgpVvAfDSw/StWSyl3aR5I/AAAAAAAAAJk/ykRUDQJLRxA/s1600-h/Image43.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://4.bp.blogspot.com/_mAgpVvAfDSw/StWSyl3aR5I/AAAAAAAAAJk/ykRUDQJLRxA/s400/Image43.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Maintenant, voyons comment aller un peu plus loin. Pour ce faire, nous éditons &lt;em&gt;SuperEmployeeDomainService.metadata.cs&lt;/em&gt; sur le serveur. Il est important de faire cela sur le serveur, ainsi le système effectue toutes les vérifications dans un premier temps pour fournir une bonne expérience utilisateur et une seconde fois sur le serveur pour vérifier l’intégrité des données. Lorsque votre méthode Update est appelée sur votre DomainService, vous pouvez être sûr que la validation a été faite.&lt;br /&gt;&lt;br /&gt;Voici quelles validations nous pouvons faire :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_mAgpVvAfDSw/StWS2yjEgsI/AAAAAAAAAJs/7qPIgorD9Zg/s1600-h/Image44.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://3.bp.blogspot.com/_mAgpVvAfDSw/StWS2yjEgsI/AAAAAAAAAJs/7qPIgorD9Zg/s400/Image44.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Maintenant, il faut reconstruire la solution pour que ces modifications soient prises en compte. Lançons l’application avec CTRL-F5 et nous voyons nos règles de validation qui fonctionnent.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_mAgpVvAfDSw/StWS6abzKLI/AAAAAAAAAJ0/NXG8rSVtt5w/s1600-h/Image45.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://4.bp.blogspot.com/_mAgpVvAfDSw/StWS6abzKLI/AAAAAAAAAJ0/NXG8rSVtt5w/s400/Image45.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Notez que nous pouvons naviguer entre les erreurs et que le focus se fait sur l’erreur sélectionnée.&lt;br /&gt;&lt;br /&gt;Voilà pour ce qui est de la validation des données. Mais, qu’en est-il sur l’ajout de données ?&lt;br /&gt;&lt;br /&gt;Pour ce faire, nous allons utiliser la nouvelle fenêtre enfant (&lt;em&gt;ChildWindow&lt;/em&gt;) de Silverlight 3.&lt;br /&gt;&lt;br /&gt;Faites un clic-droit sur &lt;em&gt;View, Add… , New Item&lt;/em&gt;. Sélectionnez &lt;em&gt;Silverlight Child Window&lt;/em&gt; et nommez-la &lt;em&gt;AddNewWindow&lt;/em&gt;. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWS_C3dWsI/AAAAAAAAAJ8/1DzZWXRnQlA/s1600-h/Image46.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWS_C3dWsI/AAAAAAAAAJ8/1DzZWXRnQlA/s400/Image46.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Lions cette fenêtre à un bouton afin de permettre son affichage. Tout d’abord, ajoutons un bouton au formulaire principal (Home.xaml) pour afficher cette nouvelle fenêtre :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWTCwi-41I/AAAAAAAAAKE/zQn3mZxplSs/s1600-h/Image47.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWTCwi-41I/AAAAAAAAAKE/zQn3mZxplSs/s400/Image47.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Puis, lions-le en code behind (&lt;em&gt;Home.xaml.cs&lt;/em&gt;):&lt;br /&gt;&lt;br /&gt;Tout d’abord, ajoutons cette clause Using :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWTGsJPjlI/AAAAAAAAAKM/-7rNQe4DFI8/s1600-h/Image48.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWTGsJPjlI/AAAAAAAAAKM/-7rNQe4DFI8/s400/Image48.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Puis écrivons notre évènement comme suit :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWTKfKoAcI/AAAAAAAAAKU/ElufGiFLU3E/s1600-h/Image49.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWTKfKoAcI/AAAAAAAAAKU/ElufGiFLU3E/s400/Image49.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Et voilà le résultat :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_mAgpVvAfDSw/StWTRmvpqSI/AAAAAAAAAKc/xFVLjFwd4oM/s1600-h/Image50.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://3.bp.blogspot.com/_mAgpVvAfDSw/StWTRmvpqSI/AAAAAAAAAKc/xFVLjFwd4oM/s400/Image50.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Nous voyons que cette nouvelle fenêtre est déjà dotée d’un bouton OK et d’un bouton Cancel qui sont déjà fonctionnels (bien qu’ils ne fasse pas grand-chose). Nous n’avons qu’à ajouter un &lt;em&gt;DataForm&lt;/em&gt;. Pour cela, nous n’avons qu’a reprendre le même que nous avons défini pour la mise à jour des données dans notre vue master/detail. (Vous pouvez téléchargez ce fichier &lt;a href="http://pagesperso-orange.fr/aristidi/files/AddNewWindow.xaml"&gt;ici&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_mAgpVvAfDSw/StWTW7__2kI/AAAAAAAAAKk/PKmhdZGqe_E/s1600-h/Image51.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://2.bp.blogspot.com/_mAgpVvAfDSw/StWTW7__2kI/AAAAAAAAAKk/PKmhdZGqe_E/s400/Image51.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Maintenant, en code behnind, nous devons procéder à ces différentes étapes. Tout d’abord, n’omettons pas d’ajouter notre caluse Using.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_mAgpVvAfDSw/StWTaCaHIQI/AAAAAAAAAKs/HVCalnVhXFE/s1600-h/Image52.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://3.bp.blogspot.com/_mAgpVvAfDSw/StWTaCaHIQI/AAAAAAAAAKs/HVCalnVhXFE/s400/Image52.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Ajoutons cette déclaration de classe :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_mAgpVvAfDSw/StWTfDhG1rI/AAAAAAAAAK0/Y1FIv32l7F0/s1600-h/Image53.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://2.bp.blogspot.com/_mAgpVvAfDSw/StWTfDhG1rI/AAAAAAAAAK0/Y1FIv32l7F0/s400/Image53.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Initialisons le constructeur…&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWTjwT2wOI/AAAAAAAAAK8/ImPGwX-bI5Y/s1600-h/Image54.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWTjwT2wOI/AAAAAAAAAK8/ImPGwX-bI5Y/s400/Image54.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Et gérons le bouton OK :&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_mAgpVvAfDSw/StWTzBSzsUI/AAAAAAAAALE/I1HZctlCmmA/s1600-h/Image55.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://3.bp.blogspot.com/_mAgpVvAfDSw/StWTzBSzsUI/AAAAAAAAALE/I1HZctlCmmA/s400/Image55.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Voilà le résultat :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWT4IidiaI/AAAAAAAAALM/nKIcDvNeehE/s1600-h/Image56.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWT4IidiaI/AAAAAAAAALM/nKIcDvNeehE/s400/Image56.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Bien, maintenant, nous allons répercuter ce changement localement (&lt;em&gt;Home.xaml.cs&lt;/em&gt;):&lt;br /&gt;&lt;br /&gt;Tout d’abord, nous allons abonner l’évènement &lt;em&gt;AddNewButton_Click&lt;/em&gt; à un évènement qui détectera la fermeture de la fenêtre AddNewWindow :&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWT87rq3DI/AAAAAAAAALU/SBMj6ULwnec/s1600-h/Image57.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWT87rq3DI/AAAAAAAAALU/SBMj6ULwnec/s400/Image57.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Et nous allons créer ce délégué :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWUBBcB1OI/AAAAAAAAALc/u6xpn7hPvi4/s1600-h/Image58.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/StWUBBcB1OI/AAAAAAAAALc/u6xpn7hPvi4/s400/Image58.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Et voilà ! Notre application est totalement fonctionnelle. Notez que pour que les changements soient répercutés sur la base de donnée distante, une fois la fenêtre AddNewWindow fermée, nous devons cliquer sur le bouton envoyer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3771030798571428234-5613688074231376621?l=aristidi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aristidi.blogspot.com/feeds/5613688074231376621/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://aristidi.blogspot.com/2009/10/exemple-dapplication-dentreprises-pour.html#comment-form' title='6 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3771030798571428234/posts/default/5613688074231376621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3771030798571428234/posts/default/5613688074231376621'/><link rel='alternate' type='text/html' href='http://aristidi.blogspot.com/2009/10/exemple-dapplication-dentreprises-pour.html' title='Exemple d&apos;application d&apos;entreprises pour Silverlight 3 et .NET RIA Services. - Partie 2: L&apos;accès aux données'/><author><name>Yannick Aristidi</name><uri>http://www.blogger.com/profile/13469925821941670877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_mAgpVvAfDSw/Ssc2TFz6iAI/AAAAAAAAAAM/l7FiZtfKEd8/S220/photoblog.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_mAgpVvAfDSw/StWPUxeTY8I/AAAAAAAAAEU/ODnStA4eDoc/s72-c/Image0.jpg' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3771030798571428234.post-2273588032982602969</id><published>2009-10-04T10:22:00.000+02:00</published><updated>2009-10-14T11:50:18.654+02:00</updated><title type='text'>Exemple d'application d'entreprises pour Silverlight 3 et .NET RIA Services. - Partie 1: les bases de la navigation</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;strong&gt;Partie 1 : Les bases de la navigation&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: #cccccc;"&gt;Cet exercice requière (tout est gratuit et le restera) :&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #cccccc;"&gt;1- VS2008 SP1 (qui comprend Sql Express 2008)&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #cccccc;"&gt;2 - Silverlight 3.0&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #cccccc;"&gt;3 - .NET RIA Services July’09 Preview (pour cet exercice, ceci est optionnel)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: yellow;"&gt;L'original en anglais est diponible ici: &lt;/span&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2009/07/10/amazing-business-apps-example-updated-for-silverlight-3-rtm-and-net-ria-services-july-update.aspx"&gt;&lt;span style="background-color: yellow;"&gt;Part 1: Navigation Basics&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Aujourd’hui nous allons parler de l’apparence professionnelle.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Apparence Professionnelle&lt;/strong&gt;&lt;br /&gt;Les applications d'entreprises doivent être professionnelles, mais combien d’entre-nous ont un designer à temps plein à notre travail ? Je suppose très peu. C’est pour cela que nous avons investi beaucoup d’efforts pour une prise en main rapide. Les projets Silverlight Navigation Application et et Silverlight Business Application (qui ajoute un support de login / délogin) démarrent avec une structure d’application normalisé, un « look and feel » agréable et très simple à modifier, même pour un développeur.&lt;br /&gt;&lt;br /&gt;- Sous Visual Studio, cliquez sur New Project et choisissez Silverlight Business Application.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_mAgpVvAfDSw/SshVWQsw1HI/AAAAAAAAAA4/cF9SynsNH1c/s1600-h/image1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://4.bp.blogspot.com/_mAgpVvAfDSw/SshVWQsw1HI/AAAAAAAAAA4/cF9SynsNH1c/s320/image1.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;- Pressez la touche F5 pour lancer le projet. Une fenêtre apparait alors vous demandant s’il faut modifier le fichier web.config. Sélectionner Modify et cliquez sur OK.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_mAgpVvAfDSw/SshVchV98hI/AAAAAAAAABA/WmIlfRyAvvo/s1600-h/image2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://2.bp.blogspot.com/_mAgpVvAfDSw/SshVchV98hI/AAAAAAAAABA/WmIlfRyAvvo/s320/image2.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;- Vous devriez alors obtenir quelque chose comme cela :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_mAgpVvAfDSw/SshVu_8dR_I/AAAAAAAAABI/HmynkJnywAU/s1600-h/image3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://3.bp.blogspot.com/_mAgpVvAfDSw/SshVu_8dR_I/AAAAAAAAABI/HmynkJnywAU/s320/image3.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Nous obtenons alors une application Silverlight parfaitement fonctionnelle (bien qu’elle ne fasse pas grand-chose pour le moment). Notez les liens de navigation (home et about). &lt;br /&gt;&lt;br /&gt;Notez que les boutons suivants et précédents fonctionnent parfaitement.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/SshVzRtZsbI/AAAAAAAAABQ/WRorbYXTj2Q/s1600-h/image4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/SshVzRtZsbI/AAAAAAAAABQ/WRorbYXTj2Q/s320/image4.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Notez également le lien profond qui pointe exactement là où vous êtes dans l’application Silverlight. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_mAgpVvAfDSw/SshV4oJF3oI/AAAAAAAAABY/H4oY5UooE3M/s1600-h/image5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://2.bp.blogspot.com/_mAgpVvAfDSw/SshV4oJF3oI/AAAAAAAAABY/H4oY5UooE3M/s320/image5.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Vous pouvez la copier/coller dans un site web, un bog, un mail ou autre et le destinataire du message sera dirigé exactement au même point de l’application. Et ce, quelque soit le navigateur utilisé.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/SshV80IX1OI/AAAAAAAAABg/JBLnEe5KhSo/s1600-h/image6.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/SshV80IX1OI/AAAAAAAAABg/JBLnEe5KhSo/s320/image6.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Parfois, même les meilleurs développeurs font des erreurs dans leurs applications. Les liens qui sont invalides ou les erreurs génèrent des exceptions. Le modèle Navigation Application ou Business Application offre une manière très facile de les gérer. Tapez une mauvaise URL dans votre application et une fenêtre d’erreur apparaitra.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_mAgpVvAfDSw/SshWBWH8b1I/AAAAAAAAABo/G5ABEoaAgaU/s1600-h/image7.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://4.bp.blogspot.com/_mAgpVvAfDSw/SshWBWH8b1I/AAAAAAAAABo/G5ABEoaAgaU/s320/image7.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Maintenant procédons à un peu de modifications. &lt;br /&gt;Tout d’abord, ajoutez une nouvelle page. &lt;br /&gt;Faites un clic droit sur Views dans le projet client et sélectionnez Add New Item, sélectionnez Silverlight Page. Donnez-lui un nom ou laissez celui par défaut (pour cet exemple, mieux vaut la nommer MaPremierePage).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_mAgpVvAfDSw/SshWGQHzMSI/AAAAAAAAABw/CQ8XN7OgMg4/s1600-h/image8.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://3.bp.blogspot.com/_mAgpVvAfDSw/SshWGQHzMSI/AAAAAAAAABw/CQ8XN7OgMg4/s320/image8.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/SshWNlIcmxI/AAAAAAAAAB4/6nltVp79M4o/s1600-h/image9.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/SshWNlIcmxI/AAAAAAAAAB4/6nltVp79M4o/s320/image9.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Lorsque la page est ouverte, insérer le code ci-dessous juste avant la balise de fermeture de la grille.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_mAgpVvAfDSw/SshY0LtkvqI/AAAAAAAAADI/CWKpGJZ0JQI/s1600-h/code1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://3.bp.blogspot.com/_mAgpVvAfDSw/SshY0LtkvqI/AAAAAAAAADI/CWKpGJZ0JQI/s400/code1.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Maintenant, connectons cette page au menu de navigation. Dans le fichier MainPage.xaml ajouter un nouveau bouton en suivant le même format que ceux qui sont déjà présent.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_mAgpVvAfDSw/SshZluep2LI/AAAAAAAAADY/MSogGk3nxAk/s1600-h/code2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://2.bp.blogspot.com/_mAgpVvAfDSw/SshZluep2LI/AAAAAAAAADY/MSogGk3nxAk/s400/code2.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Maintenant, tant que nous y sommes, allons personnaliser le modèle de fenêtre de message d’erreur. Ouvrez View/ErrorWindow.xaml. Vous pouvez changer le format, enregistrer l’erreur sur un journal du serveur ou personnaliser le texte que les utilisateurs finaux verront apparaitre.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_mAgpVvAfDSw/SsharscaEWI/AAAAAAAAADg/bPhRAjBao-s/s1600-h/code3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://3.bp.blogspot.com/_mAgpVvAfDSw/SsharscaEWI/AAAAAAAAADg/bPhRAjBao-s/s400/code3.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Maintenant, changeons l’intitulé du site. Tout d’abord, dans MainPage.xaml , changez le nom « Application Name » en Service de Placement de Super Employés.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/SshbEH3S71I/AAAAAAAAADo/p2VQm9UKG_Q/s1600-h/code4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/SshbEH3S71I/AAAAAAAAADo/p2VQm9UKG_Q/s400/code4.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Finalement, changeons la couleur du bandeau du haut afin qu’il corresponde à l’image de votre société. Ouvrez Style.xaml dans le répertoire Assets. Ce fichier contient toutes les définitions de styles de votre application. Nous allons voir qu’il est aisé, même pour un développeur de modifier l’apparence d’un site.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_mAgpVvAfDSw/SshWSzZgzxI/AAAAAAAAACA/7V3Iz3S6VZY/s1600-h/image10.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://2.bp.blogspot.com/_mAgpVvAfDSw/SshWSzZgzxI/AAAAAAAAACA/7V3Iz3S6VZY/s320/image10.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Appuyez sur F5 et voilà ce que vous devriez obtenir :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_mAgpVvAfDSw/SshWW_qqevI/AAAAAAAAACI/BZTkkEML4-4/s1600-h/image11.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://4.bp.blogspot.com/_mAgpVvAfDSw/SshWW_qqevI/AAAAAAAAACI/BZTkkEML4-4/s320/image11.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/SshWbxXfz-I/AAAAAAAAACQ/wcFGLrb-aPE/s1600-h/image12.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/SshWbxXfz-I/AAAAAAAAACQ/wcFGLrb-aPE/s320/image12.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Comme vous pouvez le constater, mes choix de couleurs ne sont pas très bons. Toutefois, des styles complets sont disponibles. Vous n’avez qu’à remplacer le fichier Styles.xaml dans le dossier Assets par ceux qui sont proposés ici :&lt;br /&gt;&lt;br /&gt;http://timheuer.com/blog/archive/2009/07/09/free-silverlight-application-themes-silverlight-3.aspx &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Aurora :&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_mAgpVvAfDSw/SshWfc70JgI/AAAAAAAAACY/HlAkqWDLtrA/s1600-h/sltheme-aurora.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://4.bp.blogspot.com/_mAgpVvAfDSw/SshWfc70JgI/AAAAAAAAACY/HlAkqWDLtrA/s320/sltheme-aurora.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Frosted Cinnamon Toast:&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://2.bp.blogspot.com/_mAgpVvAfDSw/SshW3jf188I/AAAAAAAAACg/iMtDMJgHuQ0/s1600-h/sltheme-frostedcinnamontoast.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://2.bp.blogspot.com/_mAgpVvAfDSw/SshW3jf188I/AAAAAAAAACg/iMtDMJgHuQ0/s320/sltheme-frostedcinnamontoast.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Lime Shocker:&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://2.bp.blogspot.com/_mAgpVvAfDSw/SshXBIlH5YI/AAAAAAAAACo/aQjD9OoPuGU/s1600-h/sltheme-limeshocker.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://2.bp.blogspot.com/_mAgpVvAfDSw/SshXBIlH5YI/AAAAAAAAACo/aQjD9OoPuGU/s320/sltheme-limeshocker.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Pinky:&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://2.bp.blogspot.com/_mAgpVvAfDSw/SshXEU7qbWI/AAAAAAAAACw/TdaDidCCffc/s1600-h/sltheme-pinky.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://2.bp.blogspot.com/_mAgpVvAfDSw/SshXEU7qbWI/AAAAAAAAACw/TdaDidCCffc/s320/sltheme-pinky.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Retro:&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://4.bp.blogspot.com/_mAgpVvAfDSw/SshXHuh7IjI/AAAAAAAAAC4/5YG3QoHDhmA/s1600-h/retro.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://4.bp.blogspot.com/_mAgpVvAfDSw/SshXHuh7IjI/AAAAAAAAAC4/5YG3QoHDhmA/s320/retro.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Skyline:&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://1.bp.blogspot.com/_mAgpVvAfDSw/SshXLIPO7TI/AAAAAAAAADA/F_dVWQN0AWs/s1600-h/skyline.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://1.bp.blogspot.com/_mAgpVvAfDSw/SshXLIPO7TI/AAAAAAAAADA/F_dVWQN0AWs/s320/skyline.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3771030798571428234-2273588032982602969?l=aristidi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aristidi.blogspot.com/feeds/2273588032982602969/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://aristidi.blogspot.com/2009/10/exemple-dapplication-professionelle.html#comment-form' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3771030798571428234/posts/default/2273588032982602969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3771030798571428234/posts/default/2273588032982602969'/><link rel='alternate' type='text/html' href='http://aristidi.blogspot.com/2009/10/exemple-dapplication-professionelle.html' title='Exemple d&apos;application d&apos;entreprises pour Silverlight 3 et .NET RIA Services. - Partie 1: les bases de la navigation'/><author><name>Yannick Aristidi</name><uri>http://www.blogger.com/profile/13469925821941670877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_mAgpVvAfDSw/Ssc2TFz6iAI/AAAAAAAAAAM/l7FiZtfKEd8/S220/photoblog.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_mAgpVvAfDSw/SshVWQsw1HI/AAAAAAAAAA4/cF9SynsNH1c/s72-c/image1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3771030798571428234.post-2561907222326663443</id><published>2009-10-03T12:34:00.002+02:00</published><updated>2009-10-14T12:21:06.903+02:00</updated><title type='text'>Ouverture de mon blog</title><content type='html'>Bonjour et bienvenue.&lt;br /&gt;&lt;br /&gt;L'objectif de ce blog est de fournir des articles autour de &lt;em&gt;Silverlight&lt;/em&gt; que j’aurais traduit avec la permission des auteurs.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Pourquoi ce blog ?&lt;/strong&gt;&lt;br /&gt;Actuellement, avec la sortie récente de Silverlight 3.0, il existe encore assez peu de ressources didactiques sur cette technologie. Je le déplore, étant moi-même un fervent utilisateur de cette techno.&lt;br /&gt;&lt;br /&gt;Lors de mes pérégrinations sur le net, je suis tombé sur ce blog : &lt;a href="http://blogs.msdn.com/brada/"&gt;http://blogs.msdn.com/brada/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Les articles, principalement ceux intitulés &lt;strong&gt;Business Apps Example for Silverlight 3 RTM and .NET RIA Services&lt;/strong&gt; (qui sont disponibles à partir du mois&amp;nbsp;de juillet sur son blog) s’avèrent extrêmement intéressants mais néanmoins problématiques pour nous francophone pour 2 raisons:&lt;br /&gt;&lt;br /&gt;Primo, il est en anglais…&lt;br /&gt;&lt;br /&gt;Secundo : si l’on est débutant, il est nécessaire de suivre la vidéo pour réaliser les exercices car tout n’est pas détaillé dans le texte. La vidéo étant en anglais et non sous-titré, elle est donc peu accessible.&lt;br /&gt;&lt;br /&gt;Les plus perspicaces d’entre vous auront déjà déduit que je vais dans un premier temps traduire et détailler d’avantage les exercices cités ci-dessus.&lt;br /&gt;&lt;br /&gt;Pour l’instant ce blog est vide, mais il devrait s’étoffer assez rapidement. Je tiens à signaler que la seconde partie intitulée Rich Data Query est particulièrement longue à traduire. &lt;strike&gt;Donc, wait &amp;amp; see.&lt;/strike&gt;&lt;br /&gt;&lt;br /&gt;Je tiens également à remercier Brad Abrams de m’avoir donné l’autorisation de traduire et de re-travailler ses exemples.&lt;br /&gt;&lt;br /&gt;Si j’ai choisi d’abord les articles de Brad Abrams, c’est parcequ ‘ils sont utilisés lors de la présentation de Silverlight 3.0 et de .Net RIA Services. Ils permettent donc d’avoir une approche rapide de ces technologies.&lt;br /&gt;&lt;br /&gt;Il ne me reste plus qu’a vous souhaiter un bon apprentissage.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3771030798571428234-2561907222326663443?l=aristidi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aristidi.blogspot.com/feeds/2561907222326663443/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://aristidi.blogspot.com/2009/10/ouverture-de-mon-blog.html#comment-form' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3771030798571428234/posts/default/2561907222326663443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3771030798571428234/posts/default/2561907222326663443'/><link rel='alternate' type='text/html' href='http://aristidi.blogspot.com/2009/10/ouverture-de-mon-blog.html' title='Ouverture de mon blog'/><author><name>Yannick Aristidi</name><uri>http://www.blogger.com/profile/13469925821941670877</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_mAgpVvAfDSw/Ssc2TFz6iAI/AAAAAAAAAAM/l7FiZtfKEd8/S220/photoblog.jpg'/></author><thr:total>1</thr:total></entry></feed>
