<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://xamlpt.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Gonçalo Chaves</title><link>http://xamlpt.com/blogs/chaves/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>Second Annual Scrum User Group Meeting – The after</title><link>http://xamlpt.com/blogs/chaves/archive/2010/02/03/second-annual-scrum-user-group-meeting-the-after.aspx</link><pubDate>Wed, 03 Feb 2010 14:18:17 GMT</pubDate><guid isPermaLink="false">7e8b0034-b719-4475-a4b6-24c681638f0a:1099</guid><dc:creator>Gonçalo Chaves</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://xamlpt.com/blogs/chaves/rsscomments.aspx?PostID=1099</wfw:commentRss><comments>http://xamlpt.com/blogs/chaves/archive/2010/02/03/second-annual-scrum-user-group-meeting-the-after.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://xamlpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chaves/ScrumUserGroup_5F00_Portugal_5F00_sm1_5F00_125DB69A.jpg"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="ScrumUserGroup_Portugal_sm[1]" border="0" alt="ScrumUserGroup_Portugal_sm[1]" src="http://xamlpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chaves/ScrumUserGroup_5F00_Portugal_5F00_sm1_5F00_thumb_5F00_66ACEC9D.jpg" width="244" height="91" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Hi all,&lt;/p&gt;  &lt;p&gt;Today at Microsoft Portugal took place the 2nd Annual Scrum User Group meeting. With a great morning sessions opened by &lt;a href="http://www.linkedin.com/in/jeffsutherland"&gt;Dr. Jeff Sutherland&lt;/a&gt;, then &lt;a href="http://mitchlacey.com/About-Mitch-Lacey.html"&gt;Mitch Lacey&lt;/a&gt; and two Portuguese testimonials with: &lt;a href="http://doc-it.fe.up.pt/aaguiar/"&gt;Prof. Ademar Aguiar&lt;/a&gt; and &lt;a href="http://pt.linkedin.com/in/marioaraujo"&gt;Mário Araújo&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The Microsoft’s auditorium was full with more then 120 people engaged to learn and exchange Scrum best practices and knowledge. You can review the agenda here: &lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.fullsix.pt/scrum/Annual_Meeting_2010.htm" href="http://www.fullsix.pt/scrum/Annual_Meeting_2010.htm"&gt;http://www.fullsix.pt/scrum/Annual_Meeting_2010.htm&lt;/a&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;And some photos about it at:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.flickr.com/photos/gchaves/sets/72157623217629763/" href="http://www.flickr.com/photos/gchaves/sets/72157623217629763/"&gt;http://www.flickr.com/photos/gchaves/sets/72157623217629763/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I really enjoyed the sessions and Tiago Andrade e Silva (our fullsix Portugal CTO) suggested a next meeting with a full user group feedback interaction about individuals experiences with Scrum. &lt;/p&gt;  &lt;p&gt;Stay tuned for next meetings and training at: &lt;a href="http://www.fullsix.pt/scrum"&gt;www.fullsix.pt/scrum&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://xamlpt.com/aggbug.aspx?PostID=1099" width="1" height="1"&gt;</description></item><item><title>Remove Spammers of your Community Server</title><link>http://xamlpt.com/blogs/chaves/archive/2010/01/19/remove-spammers-of-your-community-server.aspx</link><pubDate>Tue, 19 Jan 2010 12:01:12 GMT</pubDate><guid isPermaLink="false">7e8b0034-b719-4475-a4b6-24c681638f0a:1092</guid><dc:creator>Gonçalo Chaves</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://xamlpt.com/blogs/chaves/rsscomments.aspx?PostID=1092</wfw:commentRss><comments>http://xamlpt.com/blogs/chaves/archive/2010/01/19/remove-spammers-of-your-community-server.aspx#comments</comments><description>&lt;p&gt;Hi all,&lt;/p&gt;  &lt;p&gt;I would like start this new year with a full dedicated post of one of hell head pain, that’s your usual community server 200x installation with tons of spammers users and content… &lt;/p&gt;  &lt;p&gt;I’ve been working with Community Server from Telligent a while ago, and it’s a nicer community driven web platform, and if we could get the CS with Umbraco in the same web site I could say that solution would be the 90% useful in most websites of this days.&lt;/p&gt;  &lt;p&gt;Has we have some CS community web sites, we notice that they have been a nice target for the tons of spam and unwanted content… really? who wants sex terms related ads, in your peacefully community site? So he had our mission to go…&lt;/p&gt;  &lt;h3&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/h3&gt;  &lt;h3&gt;&lt;strong&gt;First – Protect, close the gates&lt;/strong&gt;&lt;/h3&gt;  &lt;p&gt;Sure, the first step is get something that kept the registration form (ie. /yourTheme/users/createuser.aspx) protected against the spammer robot, so the one that we’ve chosen was a captcha mechanism, in order to require a code that only the user can decipher from the image. Sounds promising… from the paper into the code we found a captcha control named &lt;a href="http://upupo-soft.com/media/p/155.aspx"&gt;Upupo Captcha&lt;/a&gt; … nice! It comes with the dll and a sample that we can apply on our pages.&lt;/p&gt;  &lt;p&gt;So we first insert the control into the createuser.aspx registration form in order to avoid new spam registrations :)&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;&amp;lt;%@ Register Assembly=&amp;quot;Upupo.Captcha&amp;quot; Namespace=&amp;quot;Upupo.Captcha&amp;quot; TagPrefix=&amp;quot;Captcha&amp;quot; %&amp;gt;&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;In page look like:&lt;/p&gt;    &lt;p&gt;&lt;a href="http://xamlpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chaves/image_5F00_219E274B.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://xamlpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chaves/image_5F00_thumb_5F00_59DC9E63.png" width="244" height="152" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;With a required control inside of it the automatic spammer cannot advance on this…. at least for now.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;So now we close the entrance for new registrations… now let’s deal with the spammer content…&lt;/p&gt;  &lt;p&gt;Note, if you want to improve protection with this control you can add it into the comment blogs forms, forum post form and media post form. Same way as the sample createuser.aspx sample page.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Second – Delete, kill all spam traces&lt;/h3&gt;  &lt;p&gt;Now that we close doors for unwanted “fake persons”, maybe you notice that your community has increased in 2500 new users in some days… wow… all spammers, all trash… so another head pain was how we can remove this guys and grant the database data integrity. When cs has a new user he create a lot of references inside the ASP.NET Membership tables and in CS_ tables… and to help the field UserID is different from the Memebership UserId … yeah… not great implementation.&lt;/p&gt;  &lt;p&gt;Although this little issue, you can remove using the ControlPanel, on Memebership administration section, but you have to search and then remove one by one… NO WAY! &lt;/p&gt;  &lt;p&gt;That’s right so how we can automate this process, in order to remove the unwanted users and delete related content?&lt;/p&gt;  &lt;p&gt;If you explore the StoredProcedures from your CS database you will find something like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://xamlpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chaves/image_5F00_4EB31419.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://xamlpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chaves/image_5F00_thumb_5F00_19A684E9.png" width="181" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Hum… &lt;strong&gt;&amp;lt;dbo.cs_User_Delete&amp;gt; &lt;/strong&gt;sounds good, and it sounds! This Sp is used each time that you delete a user using the control panel on the membership admin section. So all we needed to do in order to automate the remove process of this users and contents was a custom SQL to execute this SP with some additional prams and features.&lt;/p&gt;  &lt;p&gt;So we used this sp to execute for each registration that we want to find so we did something like this:&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;EXEC cs_User_Delete &amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;CONVERT&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;UserId&lt;span style="color:gray;"&gt;) + &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;Anonymous&amp;#39;
&lt;/span&gt;&lt;span style="color:blue;"&gt;FROM  &lt;/span&gt;dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;cs_Users
&lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;UserName &lt;span style="color:gray;"&gt;like &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;%.%.%.%&amp;#39;&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;So now we’ve only made some adjustments on the LIKE statement in order to catch all spammers, so spaces, keywords that we know like casino or hotel or pharmacy, this query selects all that and draws the execution SQL of the CS delete SP necessary and deletes from all tables the user data and assign their related content with the Anonymous user. Sweet ha?

&lt;p&gt;With this we were capable of remove all spammers from our CS based sites. this is only one tip maybe there are others but the telligent community unfortunately don’t care anymore and I couldn’t find anything related with this.&lt;/p&gt;

&lt;p&gt;Stays another journey with CS.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://xamlpt.com/aggbug.aspx?PostID=1092" width="1" height="1"&gt;</description><category domain="http://xamlpt.com/blogs/chaves/archive/tags/seguran_26002300_231_3B00_a/default.aspx">seguran&amp;#231;a</category><category domain="http://xamlpt.com/blogs/chaves/archive/tags/community+server/default.aspx">community server</category><category domain="http://xamlpt.com/blogs/chaves/archive/tags/spam/default.aspx">spam</category></item><item><title>2009: my tech course review</title><link>http://xamlpt.com/blogs/chaves/archive/2009/12/22/2009-my-tech-course-review.aspx</link><pubDate>Tue, 22 Dec 2009 09:44:01 GMT</pubDate><guid isPermaLink="false">7e8b0034-b719-4475-a4b6-24c681638f0a:1082</guid><dc:creator>Gonçalo Chaves</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://xamlpt.com/blogs/chaves/rsscomments.aspx?PostID=1082</wfw:commentRss><comments>http://xamlpt.com/blogs/chaves/archive/2009/12/22/2009-my-tech-course-review.aspx#comments</comments><description>&lt;p&gt;Hi all,&lt;/p&gt;  &lt;p&gt;yes 2009 is living his last days, and I would like to provide a little &lt;em&gt;resumé &lt;/em&gt;where I were, and what we’ve done with communities. &lt;/p&gt;  &lt;p&gt;So:&lt;/p&gt;  &lt;p&gt;- In February:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;I was with the DevDays’09 team, and was speaker with Ricardo Escovinha in the “Design and Developer better together for Silverlight solution” session.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;- In March:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;I joined the &lt;a&gt;XAMLpt.com&lt;/a&gt; community for the web site launch and hosted a blog there.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;- In May:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;I finished my internal trainee program at &lt;a&gt;Microsoft&lt;/a&gt; Portugal&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;- In June&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;I Started work (where I’m right now) at &lt;a href="http://www.fullsix.pt"&gt;fullsix&lt;/a&gt; portugal, in the Server Side task force team.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;- In July&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;I was speaker with &lt;a href="http://xamlpt.com/members/Sergio-Agostinho/default.aspx"&gt;Sérgio Agostinho&lt;/a&gt; from Viatecla of the session “Silverlight 3 what’s new”, in the XAMLPT community launch event.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;-In September&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;I was invited to be one of &lt;a href="http://www.xbox.com/pt-PT/embaixadores/"&gt;XBOX Portuguese Ambassador&lt;/a&gt; by our local Microsoft XBOX team.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;For the next year I hope that we can develop more Silverlight solutions and I would like to start writing a book with the title: “What a kind of name is Soap?” … hum… it’s a good title. Although the web technologies that are in a super highway of development, we want to be on the edge, not only for improvements on out current solutions but also to explore more the UI, interactions and behaviors.&lt;/p&gt;  &lt;p&gt;My latest work is totally focus on the server side development, not only external solution, but some internal and tuning some tools such as Continuous Integration Server, TDD, and additional frameworks. In another hand getting ready for the release of .net framework 4 and VS 2010, I can’t look forward for it.&lt;/p&gt;  &lt;p&gt;Also keep the opportunity to wish all a merry Christmas and a happy new year.&lt;/p&gt;  &lt;p&gt;merci.&lt;/p&gt;  &lt;p&gt;Chaves&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://xamlpt.com/aggbug.aspx?PostID=1082" width="1" height="1"&gt;</description></item><item><title>WPF XBAP: Import your Contacts from Outlook (demo)</title><link>http://xamlpt.com/blogs/chaves/archive/2009/11/06/wpf-xbap-import-your-contacts-from-outlook-demo.aspx</link><pubDate>Fri, 06 Nov 2009 00:50:00 GMT</pubDate><guid isPermaLink="false">7e8b0034-b719-4475-a4b6-24c681638f0a:1065</guid><dc:creator>Gonçalo Chaves</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://xamlpt.com/blogs/chaves/rsscomments.aspx?PostID=1065</wfw:commentRss><comments>http://xamlpt.com/blogs/chaves/archive/2009/11/06/wpf-xbap-import-your-contacts-from-outlook-demo.aspx#comments</comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[PT] (for a English version, see bellow on this page, please)&lt;/p&gt;
&lt;p&gt;Ol&amp;aacute; a todos,&lt;/p&gt;
&lt;p&gt;Recentemente num projecto interno n&amp;oacute;s est&amp;aacute;vamos a necessitar de utilizar algum tipo de activeX numa p&amp;aacute;gina Web, para que fosse poss&amp;iacute;vel a importa&amp;ccedil;&amp;atilde;o dos contactos do Outlook, tal como no linkedIn.&lt;/p&gt;
&lt;p&gt;Portanto, para qu&amp;ecirc; um activeX quando temos as aplica&amp;ccedil;&amp;otilde;es XBAP? Hum&amp;hellip; parece-me bem. Ent&amp;atilde;o aqui fica um pouco da experi&amp;ecirc;ncia que tivemos no desenvolvimento desta brincadeira. Em primeiro lugar, n&amp;atilde;o esquecer que se a nossa aplica&amp;ccedil;&amp;atilde;o vai interagir com um dos membros do Microsoft Office, as Visual Tools for Office t&amp;ecirc;m as bibliotecas certas para isto!&lt;/p&gt;
&lt;p&gt;Eis os nossos passos:&lt;/p&gt;
&lt;p&gt;1) Importa&amp;ccedil;&amp;atilde;o da biblioteca do Outlook para a nossa aplica&amp;ccedil;&amp;atilde;o:&lt;/p&gt;
&lt;p&gt;using Microsoft.Office.Interop.Outlook;&lt;/p&gt;
&lt;p&gt;2) Cria&amp;ccedil;&amp;atilde;o dos tipos necess&amp;aacute;rios para a transmiss&amp;atilde;o com o Outlook e leitura dos dados:&lt;/p&gt;
&lt;pre&gt;private MAPIFolder oContactsFolder = null;&lt;/pre&gt;
&lt;pre&gt;//load outlookcontacts&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var oApp = new Microsoft.Office.Interop.Outlook.Application();&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NameSpace oNS = oApp.GetNamespace(&amp;quot;MAPI&amp;quot;);&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; oContactsFolder = oNS.PickFolder();&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string filter = &amp;quot;[MessageClass] = \&amp;quot;IPM.Contact\&amp;quot;&amp;quot;;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Items oContactItems = oContactsFolder.Items.Restrict(filter);&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (ContactItem oContact in oContactItems)&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var item = new EmailContact();&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (oContact != null)&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item.ContactEmail = oContact.Email1Address;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item.ContactName = oContact.FullName;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //before add the email let&amp;#39;s see that&amp;#39;s is valid&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (ValidateEmailAdd(item.ContactEmail) &amp;amp;&amp;amp; !String.IsNullOrEmpty(item.ContactEmail))&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; contactList.Add(item);&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;
&lt;p&gt;3) Defini&amp;ccedil;&amp;atilde;o da interface e da l&amp;oacute;gica da aplica&amp;ccedil;&amp;atilde;o&lt;/p&gt;
&lt;p&gt;Para tal escolhemos a XBAP para que nos seja poss&amp;iacute;vel aplicar todas as funcionalidades que o WFP nos oferece, mas para tal existem algumas notas importantes a ter em considera&amp;ccedil;&amp;atilde;o:&lt;/p&gt;
&lt;p&gt;- A XBAP dever&amp;aacute; correr em modo de &amp;ldquo;full trust&amp;rdquo;, e para tal &amp;eacute; necess&amp;aacute;rio um certificado digital que assine o c&amp;oacute;digo da aplica&amp;ccedil;&amp;atilde;o, e obviamente o nosso browser dever&amp;aacute; confiar no mesmo.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://xamlpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chaves/image_5F00_693CB48E.png"&gt;&lt;img height="244" width="215" src="http://xamlpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chaves/image_5F00_thumb_5F00_1C9877EB.png" alt="image" border="0" title="image" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Para tal, cri&amp;aacute;mos um certificado fullsix CA, algo que fomos seguindo aqui:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa194055%28office.11%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa194055%28office.11%29.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Outro post com informa&amp;ccedil;&amp;otilde;es muito importantes sobre esta parte:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/maxim/archive/2008/03/05/wpf-xbap-as-full-trust-application.aspx"&gt;http://blogs.microsoft.co.il/blogs/maxim/archive/2008/03/05/wpf-xbap-as-full-trust-application.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Para a extrac&amp;ccedil;&amp;atilde;o do certificado seguimos:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/maxim/archive/2008/03/31/how-to-run-wpf-xbap-application-in-full-trust-mode-post-2-certificate-extraction.aspx"&gt;http://blogs.microsoft.co.il/blogs/maxim/archive/2008/03/31/how-to-run-wpf-xbap-application-in-full-trust-mode-post-2-certificate-extraction.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Para automatizar este processo, desenvolvemos uma pequena aplica&amp;ccedil;&amp;atilde;o de consola que permite o download e a instala&amp;ccedil;&amp;atilde;o silenciosa do mesmo. Assim o certificado fullsix CA fica instalado no computador, que assina o certificado que usamos para assinar o c&amp;oacute;digo da nossa XBAP application.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://xamlpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chaves/image_5F00_2D9CA5CE.png"&gt;&lt;img height="167" width="199" src="http://xamlpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chaves/image_5F00_thumb_5F00_741995D6.png" alt="image" border="0" title="image" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Aqui fica o c&amp;oacute;digo que us&amp;aacute;mos:&lt;/p&gt;
&lt;pre&gt;try&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var myStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(&amp;quot;InstallXBAPOutlookCert.Console.f6signing.cer&amp;quot;);&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; byte[] b = new byte[myStream.Length];&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myStream.Read(b, 0, b.Length);&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; X509Certificate2 cert = new X509Certificate2(b);&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; X509Store store = new X509Store(StoreName.AuthRoot, StoreLocation.LocalMachine);&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; store.Open(OpenFlags.ReadWrite);&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; store.Add(cert);&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; store.Close();&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; store = new X509Store(StoreName.TrustedPublisher, StoreLocation.LocalMachine);&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; store.Open(OpenFlags.ReadWrite);&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; store.Add(cert);&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; store.Close();&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Console.WriteLine(&amp;quot;Certificate Successfully Installed...!&amp;quot;);&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Console.Read();&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch (Exception ex)&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Console.WriteLine(&amp;quot;Error &amp;quot; + ex.ToString());&lt;/pre&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;N&amp;atilde;o esquecer de embeber o ficheiro de manifesto da aplica&amp;ccedil;&amp;atilde;o dentro do ficheiro exe da aplica&amp;ccedil;&amp;atilde;o, isto &amp;eacute; necess&amp;aacute;rio para utilizar os direitos de Administrador da m&amp;aacute;quina, para que seja poss&amp;iacute;vel fazer a instala&amp;ccedil;&amp;atilde;o do certificado. &amp;Eacute; necess&amp;aacute;rio alterar este manifesto como se segue:&lt;/p&gt;
&lt;p&gt;&amp;lt;requestedExecutionLevel level=&amp;quot;requireAdministrator&amp;quot; uiAccess=&amp;quot;false&amp;quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;E para embeber o manifesto no exe:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://xamlpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chaves/image_5F00_6C8E2669.png"&gt;&lt;img height="176" width="244" src="http://xamlpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chaves/image_5F00_thumb_5F00_20FED2E5.png" alt="image" border="0" title="image" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;O utilizador v&amp;ecirc; o ficheiro .exe no browser e se no seu caso a empresa possuir um certificado assinado por uma das bem conhecidas CA&amp;rsquo;s n&amp;atilde;o dever&amp;aacute; existir qualquer problema, no nosso caso, os utilizadores dever&amp;atilde;o confiar no nosso certificado, para que seja poss&amp;iacute;vel visualizar a demo correctamente :)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://xamlpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chaves/image_5F00_74E1D5F3.png"&gt;&lt;img height="170" width="244" src="http://xamlpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chaves/image_5F00_thumb_5F00_7662F207.png" alt="image" border="0" title="image" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Depois o certificado fullsix CA fica instalado no computador tal como se pode ver abaixo:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://xamlpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chaves/image_5F00_4A45F516.png"&gt;&lt;img height="225" width="244" src="http://xamlpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chaves/image_5F00_thumb_5F00_09A3A8A7.png" alt="image" border="0" title="image" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Agora a aplica&amp;ccedil;&amp;atilde;o XBAP est&amp;aacute; devidamente assinada e &amp;eacute; confiada pelo browser e tudo corre em modo full trust.&lt;/p&gt;
&lt;p&gt;Nota:&lt;/p&gt;
&lt;p&gt;- WPF threading module. &amp;Eacute; um pouco doloroso entender para quem est&amp;aacute; mais familiriarizado com o modo de threading do silverlight como &amp;eacute; o nosso caso. Em WPF existem algumas diferen&amp;ccedil;as, o que significia que &amp;eacute; necess&amp;aacute;rio pensar sobre esta quest&amp;atilde;o para que n&amp;atilde;o se bloqueie a thread da Interface. Imaginando por exemplo uma anima&amp;ccedil;&amp;atilde;o de loading enquando a comunica&amp;ccedil;&amp;atilde;o com o Outlook &amp;eacute; feita. Um bom artigo para ajudar nesta quest&amp;atilde;o:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms741870.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms741870.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Para evitar o bloqueio da thread principal da interface, lan&amp;ccedil;amos o m&amp;eacute;todo de interac&amp;ccedil;&amp;atilde;o com o Outlook noutra thread da seguinte forma:&lt;/p&gt;
&lt;p&gt;var myDispatcher = new Thread(new ParameterizedThreadStart(s =&amp;gt; { StartRetriveContacts(); }));&lt;/p&gt;
&lt;p&gt;Depois no regresso &amp;aacute; thread original:&lt;/p&gt;
&lt;pre&gt;private void StartRetriveContacts()&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &amp;hellip;&lt;/pre&gt;
&lt;pre&gt;UIDispatcher.BeginInvoke(DispatcherPriority.Background, (SendOrPostCallback)delegate { ProcessContacts(contactList); },&lt;/pre&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; contactList);&lt;/pre&gt;
&lt;p&gt;Usando este tipo de &amp;ldquo;roteamento&amp;rdquo; entre as threads permite-nos fazer um update constante na interface de modo a dar feedback constante ao utilizador sobre as opera&amp;ccedil;&amp;otilde;es que decorrem em background.&lt;/p&gt;
&lt;p&gt;E pronto :) &amp;eacute; isto, podem testar. &lt;a href="http://labs.fullsix.pt/projects/xbapoutlookdemo/default.aspx"&gt;http://labs.fullsix.pt/projects/xbapoutlookdemo/default.aspx&lt;/a&gt;&amp;nbsp;e j&amp;aacute; agora dar uma vista de olhos nos outros projectos que est&amp;atilde;o no fullsix Labs.&lt;/p&gt;
&lt;p&gt;Queria deixar tamb&amp;eacute;m uma nota de agradecimento aos meus colegas Antoine e Fiel pela ajuda no desenvolvimento.&lt;/p&gt;
&lt;p&gt;Merci.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[EN]&lt;/p&gt;
&lt;p&gt;Hi all,&lt;/p&gt;
&lt;p&gt;In order for a internal project we need some kind of an &lt;a href="http://en.wikipedia.org/wiki/ActiveX"&gt;activeX&lt;/a&gt; in a web page from Outlook contact email addresses importation, such has like &lt;a href="http://www.linkedin.com/"&gt;linkedIn&lt;/a&gt; has.&lt;/p&gt;
&lt;p&gt;So why use a &lt;a href="http://en.wikipedia.org/wiki/ActiveX"&gt;activeX&lt;/a&gt; when we have XBAP apps? Sweet hum? Here is how we&amp;#39;ve done the little app. First of all keep in mind this is something to interop with an Microsoft Office application, right? The &lt;a href="http://msdn.microsoft.com/en-us/library/d2tx7z6d%28VS.80%29.aspx"&gt;Visual Tools for Office&lt;/a&gt; have the right libraries for it! &lt;/p&gt;
&lt;p&gt;Steps:&lt;/p&gt;
&lt;p&gt;1) Import the Microsoft Interop Namespace:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;using &lt;/span&gt;Microsoft.Office.Interop.Outlook;&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;easy as butter&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;2) Create the right types to exchange with outlook and load content&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;private &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;MAPIFolder &lt;/span&gt;oContactsFolder = &lt;span style="color:blue;"&gt;null&lt;/span&gt;;&lt;/pre&gt;
&lt;pre class="code"&gt;&lt;span style="color:green;"&gt;//load outlookcontacts
           &lt;/span&gt;&lt;span style="color:blue;"&gt;var &lt;/span&gt;oApp = &lt;span style="color:blue;"&gt;new &lt;/span&gt;Microsoft.Office.Interop.Outlook.&lt;span style="color:#2b91af;"&gt;Application&lt;/span&gt;();
           &lt;span style="color:#2b91af;"&gt;NameSpace &lt;/span&gt;oNS = oApp.GetNamespace(&lt;span style="color:#a31515;"&gt;&amp;quot;MAPI&amp;quot;&lt;/span&gt;);
           oContactsFolder = oNS.PickFolder();
      
           &lt;span style="color:blue;"&gt;string &lt;/span&gt;filter = &lt;span style="color:#a31515;"&gt;&amp;quot;[MessageClass] = \&amp;quot;IPM.Contact\&amp;quot;&amp;quot;&lt;/span&gt;;
           &lt;span style="color:#2b91af;"&gt;Items &lt;/span&gt;oContactItems = oContactsFolder.Items.Restrict(filter);

           &lt;span style="color:blue;"&gt;foreach &lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;ContactItem &lt;/span&gt;oContact &lt;span style="color:blue;"&gt;in &lt;/span&gt;oContactItems)
           {
                
               &lt;span style="color:blue;"&gt;var &lt;/span&gt;item = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;EmailContact&lt;/span&gt;();
               

               &lt;span style="color:blue;"&gt;if &lt;/span&gt;(oContact != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)
               {
                   item.ContactEmail = oContact.Email1Address;
                   item.ContactName = oContact.FullName;

                   &lt;span style="color:green;"&gt;//before add the email let&amp;#39;s see that&amp;#39;s is valid

                   &lt;/span&gt;&lt;span style="color:blue;"&gt;if &lt;/span&gt;(ValidateEmailAdd(item.ContactEmail) &amp;amp;&amp;amp; !&lt;span style="color:#2b91af;"&gt;String&lt;/span&gt;.IsNullOrEmpty(item.ContactEmail))
                   {
                       contactList.Add(item);
                   }
               }&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;span style="font-family:Courier New;"&gt;&lt;/span&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;3) Define your UI and the rest of the behaviors&lt;/p&gt;
&lt;p&gt;We choose a XBAP application in order to have the WPF capabilities in a regular web page but you must be aware of some &lt;strong&gt;important settings:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="color:#333333;"&gt;- XBAP app needs to run in a full &lt;strong&gt;trust mode, &lt;/strong&gt;so that requires a &lt;a href="http://en.wikipedia.org/wiki/Digital_certificate"&gt;DigitalCertificate&lt;/a&gt; to sign your code and the browser needs to trust on that.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://xamlpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chaves/image_5F00_693CB48E.png"&gt;&lt;img height="244" width="215" src="http://xamlpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chaves/image_5F00_thumb_5F00_1C9877EB.png" alt="image" border="0" title="image" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;"&gt;So we created a fullsix CA certificate. Something that follows here:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa194055%28office.11%29.aspx" title="http://msdn.microsoft.com/en-us/library/aa194055%28office.11%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa194055%28office.11%29.aspx&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;"&gt;You can see a quite nice post&amp;rsquo;s about this at:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/maxim/archive/2008/03/05/wpf-xbap-as-full-trust-application.aspx" title="http://blogs.microsoft.co.il/blogs/maxim/archive/2008/03/05/wpf-xbap-as-full-trust-application.aspx"&gt;http://blogs.microsoft.co.il/blogs/maxim/archive/2008/03/05/wpf-xbap-as-full-trust-application.aspx&lt;/a&gt;&lt;span style="color:#333333;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;"&gt;and for the certificate extraction&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/maxim/archive/2008/03/31/how-to-run-wpf-xbap-application-in-full-trust-mode-post-2-certificate-extraction.aspx" title="http://blogs.microsoft.co.il/blogs/maxim/archive/2008/03/31/how-to-run-wpf-xbap-application-in-full-trust-mode-post-2-certificate-extraction.aspx"&gt;http://blogs.microsoft.co.il/blogs/maxim/archive/2008/03/31/how-to-run-wpf-xbap-application-in-full-trust-mode-post-2-certificate-extraction.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;"&gt;to automate this process we develop a simple console application that you download first and installs on your computer our fullsix CA certificate, that signs the code sign certificate that we use previously to sign the xbap code. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://xamlpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chaves/image_5F00_2D9CA5CE.png"&gt;&lt;img height="167" width="199" src="http://xamlpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chaves/image_5F00_thumb_5F00_741995D6.png" alt="image" border="0" title="image" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;"&gt;Here is the code for that:&lt;/span&gt;&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;try
           &lt;/span&gt;{

               &lt;span style="color:blue;"&gt;var &lt;/span&gt;myStream = &lt;span style="color:#2b91af;"&gt;Assembly&lt;/span&gt;.GetExecutingAssembly().GetManifestResourceStream(&lt;span style="color:#a31515;"&gt;&amp;quot;InstallXBAPOutlookCert.Console.f6signing.cer&amp;quot;&lt;/span&gt;);

               &lt;span style="color:blue;"&gt;byte&lt;/span&gt;[] b = &lt;span style="color:blue;"&gt;new byte&lt;/span&gt;[myStream.Length];

               myStream.Read(b, 0, b.Length);

               &lt;span style="color:#2b91af;"&gt;X509Certificate2 &lt;/span&gt;cert = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;X509Certificate2&lt;/span&gt;(b);

               &lt;span style="color:#2b91af;"&gt;X509Store &lt;/span&gt;store = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;X509Store&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;StoreName&lt;/span&gt;.AuthRoot, &lt;span style="color:#2b91af;"&gt;StoreLocation&lt;/span&gt;.LocalMachine);

               store.Open(&lt;span style="color:#2b91af;"&gt;OpenFlags&lt;/span&gt;.ReadWrite);

               store.Add(cert);

               store.Close();

               store = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;X509Store&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;StoreName&lt;/span&gt;.TrustedPublisher, &lt;span style="color:#2b91af;"&gt;StoreLocation&lt;/span&gt;.LocalMachine);

               store.Open(&lt;span style="color:#2b91af;"&gt;OpenFlags&lt;/span&gt;.ReadWrite);

               store.Add(cert);

               store.Close();

               System.&lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;Certificate Successfully Installed...!&amp;quot;&lt;/span&gt;);

               System.&lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.Read();
           }
           &lt;span style="color:blue;"&gt;catch &lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;Exception &lt;/span&gt;ex)
           {
               
               System.&lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;Error &amp;quot; &lt;/span&gt;+ ex.ToString());
           }&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;&lt;span style="color:#333333;"&gt;Don&amp;rsquo;t forget to embed the application manifest in the exe file, you need that for auto Admin rights permissions to install :) like this in your manifest file:&lt;/span&gt;&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;requestedExecutionLevel &lt;/span&gt;&lt;span style="color:red;"&gt;level&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;requireAdministrator&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;uiAccess&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;false&lt;/span&gt;&amp;quot; &lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;&lt;span style="color:#333333;"&gt;and to embed it on the exe:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://xamlpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chaves/image_5F00_6C8E2669.png"&gt;&lt;img height="176" width="244" src="http://xamlpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chaves/image_5F00_thumb_5F00_20FED2E5.png" alt="image" border="0" title="image" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;"&gt;The user see&amp;rsquo;s the .exe on the browser and if your company has a certificate that&amp;rsquo;s signed by one of very well known CA you should haven&amp;rsquo;t any trouble. In this case our users must have trust on us :)&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://xamlpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chaves/image_5F00_74E1D5F3.png"&gt;&lt;img height="170" width="244" src="http://xamlpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chaves/image_5F00_thumb_5F00_7662F207.png" alt="image" border="0" title="image" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;"&gt;then you have the fullsix CA in your machine as you can see here:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://xamlpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chaves/image_5F00_4A45F516.png"&gt;&lt;img height="225" width="244" src="http://xamlpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chaves/image_5F00_thumb_5F00_09A3A8A7.png" alt="image" border="0" title="image" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;So now XBAP application is signed and User grant a full trust environment for it. &lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;"&gt;Note:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#333333;"&gt;- &lt;strong&gt;WPF threading module&lt;/strong&gt;. It&amp;rsquo;s some kind of &amp;ldquo;pain&amp;rdquo;, for those who are more familiar with Silverlight like me, in WPF there are some differences, which means that you have to think about threading block handling, in order to avoid frozen the main UI thread, that can being display, for example, a loading animation of the contact import progress. for that there are also a nice article:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ms741870.aspx" title="http://msdn.microsoft.com/en-us/library/ms741870.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms741870.aspx&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;To avoid the main UI thread block we launched the Outlook interop method in another thread, here&amp;rsquo;s the way:&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;var &lt;/span&gt;myDispatcher = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;(&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ParameterizedThreadStart&lt;/span&gt;(s =&amp;gt; { StartRetriveContacts(); }));&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;then to get back on the main UI:&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;private void &lt;/span&gt;StartRetriveContacts()
       { &amp;hellip;&lt;/pre&gt;
&lt;pre class="code"&gt;UIDispatcher.BeginInvoke(&lt;span style="color:#2b91af;"&gt;DispatcherPriority&lt;/span&gt;.Background, (&lt;span style="color:#2b91af;"&gt;SendOrPostCallback&lt;/span&gt;)&lt;span style="color:blue;"&gt;delegate &lt;/span&gt;{ ProcessContacts(contactList); },
                                    contactList);&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Using this kind of &amp;ldquo;routed threading model&amp;rdquo; we were able to provide an UI update with some animation and application update state.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;span style="color:#777777;"&gt;And that&amp;rsquo;s it..! you can try for your self&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#777777;"&gt;&lt;a href="http://labs.fullsix.pt/projects/xbapoutlookdemo/default.aspx"&gt;http://labs.fullsix.pt/projects/xbapoutlookdemo/default.aspx&lt;/a&gt;&lt;a href="http://labs.fullsix.pt/projects/xbapoutlookdemo/demo.htm" title="http://labs.fullsix.pt/projects/xbapoutlookdemo/demo.htm"&gt;&lt;/a&gt; , and take a look into our others &lt;a href="http://labs.fullsix.pt"&gt;fullsix labs&lt;/a&gt; projects.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#777777;"&gt;Also a thanks to Antoine and Fiel for their help on this development. &lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://xamlpt.com/aggbug.aspx?PostID=1065" width="1" height="1"&gt;</description><category domain="http://xamlpt.com/blogs/chaves/archive/tags/wpf/default.aspx">wpf</category><category domain="http://xamlpt.com/blogs/chaves/archive/tags/outlook/default.aspx">outlook</category><category domain="http://xamlpt.com/blogs/chaves/archive/tags/xbap/default.aspx">xbap</category><category domain="http://xamlpt.com/blogs/chaves/archive/tags/certificados/default.aspx">certificados</category></item><item><title>Silverlight: Colors in Hexadecimal values</title><link>http://xamlpt.com/blogs/chaves/archive/2009/11/02/silverlight-colors-in-hexadecimal-values.aspx</link><pubDate>Mon, 02 Nov 2009 15:11:43 GMT</pubDate><guid isPermaLink="false">7e8b0034-b719-4475-a4b6-24c681638f0a:1063</guid><dc:creator>Gonçalo Chaves</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://xamlpt.com/blogs/chaves/rsscomments.aspx?PostID=1063</wfw:commentRss><comments>http://xamlpt.com/blogs/chaves/archive/2009/11/02/silverlight-colors-in-hexadecimal-values.aspx#comments</comments><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;[PT]&lt;/p&gt;  &lt;p&gt;Gostaria de deixar um pequeno truque para se trabalhar com cores nos controlos de Siverlight. Imaginem que instanciam um controlo como por exemplo uma textbox:&lt;/p&gt;  &lt;p&gt;&lt;span style="color:blue;"&gt;var &lt;/span&gt;newTextBox = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;TextBox&lt;/span&gt;();&lt;/p&gt;  &lt;p&gt;Agora, gostaria de mudar a color de fundo para preto, vermelho, verde, etc…&lt;/p&gt;  &lt;p&gt;Então será necessário escrever algo como: myTextBox.Background = new Brush(Opacity bla blabla, etc); etc, e mais bla… Mas eu só queria algo como .Background = Colors.Red;&lt;/p&gt;  &lt;p&gt;Ok, eis algo que pode ajudar e muito. Criem um método para extraír de um valor Hexadecimal a vossa cor como por ex:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;private &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;SolidColorBrush &lt;/span&gt;GetColorFromHex(&lt;span style="color:blue;"&gt;string &lt;/span&gt;myColor)
{
    &lt;span style="color:blue;"&gt;return new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;SolidColorBrush&lt;/span&gt;(
        &lt;span style="color:#2b91af;"&gt;Color&lt;/span&gt;.FromArgb(
            &lt;span style="color:#2b91af;"&gt;Convert&lt;/span&gt;.ToByte(myColor.Substring(1, 2), 16),
            &lt;span style="color:#2b91af;"&gt;Convert&lt;/span&gt;.ToByte(myColor.Substring(3, 2), 16),
            &lt;span style="color:#2b91af;"&gt;Convert&lt;/span&gt;.ToByte(myColor.Substring(5, 2), 16),
            &lt;span style="color:#2b91af;"&gt;Convert&lt;/span&gt;.ToByte(myColor.Substring(7, 2), 16)
        )
    );
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Agora, é mais simples atribuir ao nosso controlo:&lt;/p&gt;

&lt;p&gt;newTextBox.Background = GetColorFromHex(&lt;span style="color:#a31515;"&gt;&amp;quot;#00FFFFFF&amp;quot;&lt;/span&gt;);&lt;/p&gt;

&lt;p&gt;Cool! não?&lt;/p&gt;

&lt;p&gt;[EN]&lt;/p&gt;

&lt;p&gt;Just a tip, if you want in your code work with an color in Hexadecimal format maybe a little complicate.&lt;/p&gt;

&lt;p&gt;Imagine that you create a new control such as:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;var &lt;/span&gt;newTextBox = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;TextBox&lt;/span&gt;();&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;Now you want give a color to it, right? So to do something like myTextBox.Background = new Brush(Opacity … etc, etc, etc). :s I just want a simple red, white… or something similar…&lt;/p&gt;

&lt;p&gt;Here’s a tip, create a method to extract a color from an Hexadecimal value:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;private &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;SolidColorBrush &lt;/span&gt;GetColorFromHex(&lt;span style="color:blue;"&gt;string &lt;/span&gt;myColor)
      {
          &lt;span style="color:blue;"&gt;return new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;SolidColorBrush&lt;/span&gt;(
              &lt;span style="color:#2b91af;"&gt;Color&lt;/span&gt;.FromArgb(
                  &lt;span style="color:#2b91af;"&gt;Convert&lt;/span&gt;.ToByte(myColor.Substring(1, 2), 16),
                  &lt;span style="color:#2b91af;"&gt;Convert&lt;/span&gt;.ToByte(myColor.Substring(3, 2), 16),
                  &lt;span style="color:#2b91af;"&gt;Convert&lt;/span&gt;.ToByte(myColor.Substring(5, 2), 16),
                  &lt;span style="color:#2b91af;"&gt;Convert&lt;/span&gt;.ToByte(myColor.Substring(7, 2), 16)
              )
          );
      }&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;now it’s more simple to use on your control:&lt;/p&gt;

&lt;pre class="code"&gt;newTextBox.Background = GetColorFromHex(&lt;span style="color:#a31515;"&gt;&amp;quot;#00FFFFFF&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;Cool! Isn’t it? 

&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://xamlpt.com/aggbug.aspx?PostID=1063" width="1" height="1"&gt;</description></item><item><title>Silverlight: Creating Silverlight animations with code</title><link>http://xamlpt.com/blogs/chaves/archive/2009/11/02/silverlight-creating-silverlight-animations-with-code.aspx</link><pubDate>Mon, 02 Nov 2009 14:29:00 GMT</pubDate><guid isPermaLink="false">7e8b0034-b719-4475-a4b6-24c681638f0a:1062</guid><dc:creator>Gonçalo Chaves</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://xamlpt.com/blogs/chaves/rsscomments.aspx?PostID=1062</wfw:commentRss><comments>http://xamlpt.com/blogs/chaves/archive/2009/11/02/silverlight-creating-silverlight-animations-with-code.aspx#comments</comments><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;[PT]&lt;/p&gt;  &lt;p&gt;Na semana passada estive a desenvolver uma aplicação em Silverlight para um cliente, e com algumas modificações que foram solicitadas, foi necessário desenvolver uma animação totalmente dinâmica… portanto o Blend deixou de servir para o efeito e tudo passou a ser feito por código C#.&lt;/p&gt;  &lt;p&gt;Ok, então comecei por tentar mapear a mesma estrutura de código na parte de animação em XAML mas em C#. As linhas de código que seguem, serviram para fazer uma pequena animação de &lt;i&gt;fade in&lt;/i&gt; e &lt;i&gt;fade out&lt;/i&gt; a um &lt;i&gt;usercontrol&lt;/i&gt;, instanciado no momento de execução e adicionado ao &lt;i&gt;layoutroot&lt;/i&gt;. Uma vez que esta animação seria usada várias vezes.&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:green;"&gt;// Dymanic Storyboard with the animation
&lt;/span&gt;&lt;span style="color:blue;"&gt;var &lt;/span&gt;currentStb = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Storyboard&lt;/span&gt;();

&lt;span style="color:green;"&gt;//EasyDoubleKeyFrames
&lt;/span&gt;&lt;span style="color:blue;"&gt;var &lt;/span&gt;stbkey = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;EasingDoubleKeyFrame&lt;/span&gt;();
stbkey.KeyTime = &lt;span style="color:#2b91af;"&gt;KeyTime&lt;/span&gt;.FromTimeSpan(&lt;span style="color:#2b91af;"&gt;TimeSpan&lt;/span&gt;.FromSeconds(0));
stbkey.Value = 0;
&lt;span style="color:blue;"&gt;var &lt;/span&gt;stbkey2 = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;EasingDoubleKeyFrame&lt;/span&gt;();
stbkey2.KeyTime = &lt;span style="color:#2b91af;"&gt;KeyTime&lt;/span&gt;.FromTimeSpan(&lt;span style="color:#2b91af;"&gt;TimeSpan&lt;/span&gt;.FromSeconds(3));
stbkey2.Value = 1;
&lt;span style="color:blue;"&gt;var &lt;/span&gt;stbkey3 = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;EasingDoubleKeyFrame&lt;/span&gt;();
stbkey3.KeyTime = &lt;span style="color:#2b91af;"&gt;KeyTime&lt;/span&gt;.FromTimeSpan(&lt;span style="color:#2b91af;"&gt;TimeSpan&lt;/span&gt;.FromSeconds(6));
stbkey3.Value = 0;

&lt;span style="color:green;"&gt;//DoubleAnimationKeyFrame declaration
&lt;/span&gt;&lt;span style="color:blue;"&gt;var &lt;/span&gt;myDoubleAnim = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;DoubleAnimationUsingKeyFrames&lt;/span&gt;();
myDoubleAnim.KeyFrames.Add(stbkey);
myDoubleAnim.KeyFrames.Add(stbkey2);
myDoubleAnim.KeyFrames.Add(stbkey3);

&lt;span style="color:green;"&gt;//wich property is targeted: opacity
&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Storyboard&lt;/span&gt;.SetTargetProperty(myDoubleAnim, &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;PropertyPath&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;(UIElement.Opacity)&amp;quot;&lt;/span&gt;));
            
&lt;span style="color:green;"&gt;//adding into the layout resources
&lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.Resources.Add(&lt;span style="color:#a31515;"&gt;&amp;quot;uniqueId&amp;quot;&lt;/span&gt;+_countName.ToString(),currentStb);

&lt;span style="color:green;"&gt;//adding into the current layoutRoot
&lt;/span&gt;currentStb.Children.Add(myDoubleAnim);
currentStb.SetValue(&lt;span style="color:#2b91af;"&gt;Storyboard&lt;/span&gt;.TargetNameProperty, newTextBox.Name);&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;span style="color:green;"&gt;//adding some logical stuff then the stb begins&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;currentStb.Begin();&lt;/pre&gt;

&lt;p&gt;Recapitulando, não é assim tão complicado como estava à espera, ou pelo menos no primeiro contacto, mas não é obvio, o truque reside em “copiar” a mesma estrutura que o Blend gera em XAML, mas desta em código. Portanto inicialmente define-se os &lt;i&gt;keyframes &lt;/i&gt;que contêm os tempos de animação e o &lt;i&gt;values &lt;/i&gt;para as propriedades que pretendemos afectar ao controlo animado. Seguidamente, definimos os “alvos” para os &lt;i&gt;DoubleAnimationKeyFrame &lt;/i&gt;que compõe a metada da animação em questão, e por fim, o nosso storyboard recebe esta informação e define qual é o tipo de objecto “afectado”, neste caso, um UIElement, e que tipo de animação será feita. Daí a afectação da propriedade &lt;i&gt;Opacity&lt;/i&gt;.&lt;/p&gt;

&lt;p&gt;É importante reter o seguinte, após criar um storyboard por esta maneira, é necessário dar-lhe um nome &lt;b&gt;&lt;i&gt;único &lt;/i&gt;&lt;/b&gt;e adicioná-lo aos &lt;i&gt;resources &lt;/i&gt;do nosso &lt;i&gt;layoutRoot.&lt;/i&gt; É só desta forma que tudo funcionará correctamente, e uma vez que a nossa animação fica a pertencer aos recursos locais do controlo, podemos usar a mesma várias vezes na aplicação :)&lt;/p&gt;

&lt;p&gt;Espero que vos seja útil, e deixou uma leitura muito recomendável sobre este assunto.&lt;/p&gt;

&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/cc189069(VS.95).aspx" href="http://msdn.microsoft.com/en-us/library/cc189069(VS.95).aspx"&gt;http://msdn.microsoft.com/en-us/library/cc189069(VS.95).aspx&lt;/a&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Merci.&lt;/p&gt;

&lt;p&gt;[EN]&lt;/p&gt;

&lt;p&gt;Last week I was developing a Silverlight application for a customer, and after a few modifications it was necessary to make an dynamic animation … so no storyboards with Blend… get in the code and do everything with C#.&lt;/p&gt;

&lt;p&gt;Okay… so I started by mapping the same XAML animation structure, into the code. The next few lines show us a simple &lt;em&gt;fade in&lt;/em&gt; and &lt;em&gt;fade out&lt;/em&gt; animation effect with a new &lt;em&gt;usercontrol&lt;/em&gt; (a simple textbox) created at the moment and placed on &lt;em&gt;LayoutRoot. &lt;/em&gt;This animation is used several times, during the application.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:green;"&gt;// Dymanic Storyboard with the animation
&lt;/span&gt;&lt;span style="color:blue;"&gt;var &lt;/span&gt;currentStb = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Storyboard&lt;/span&gt;();

&lt;span style="color:green;"&gt;//EasyDoubleKeyFrames
&lt;/span&gt;&lt;span style="color:blue;"&gt;var &lt;/span&gt;stbkey = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;EasingDoubleKeyFrame&lt;/span&gt;();
stbkey.KeyTime = &lt;span style="color:#2b91af;"&gt;KeyTime&lt;/span&gt;.FromTimeSpan(&lt;span style="color:#2b91af;"&gt;TimeSpan&lt;/span&gt;.FromSeconds(0));
stbkey.Value = 0;
&lt;span style="color:blue;"&gt;var &lt;/span&gt;stbkey2 = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;EasingDoubleKeyFrame&lt;/span&gt;();
stbkey2.KeyTime = &lt;span style="color:#2b91af;"&gt;KeyTime&lt;/span&gt;.FromTimeSpan(&lt;span style="color:#2b91af;"&gt;TimeSpan&lt;/span&gt;.FromSeconds(3));
stbkey2.Value = 1;
&lt;span style="color:blue;"&gt;var &lt;/span&gt;stbkey3 = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;EasingDoubleKeyFrame&lt;/span&gt;();
stbkey3.KeyTime = &lt;span style="color:#2b91af;"&gt;KeyTime&lt;/span&gt;.FromTimeSpan(&lt;span style="color:#2b91af;"&gt;TimeSpan&lt;/span&gt;.FromSeconds(6));
stbkey3.Value = 0;

&lt;span style="color:green;"&gt;//DoubleAnimationKeyFrame declaration
&lt;/span&gt;&lt;span style="color:blue;"&gt;var &lt;/span&gt;myDoubleAnim = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;DoubleAnimationUsingKeyFrames&lt;/span&gt;();
myDoubleAnim.KeyFrames.Add(stbkey);
myDoubleAnim.KeyFrames.Add(stbkey2);
myDoubleAnim.KeyFrames.Add(stbkey3);

&lt;span style="color:green;"&gt;//wich property is targeted: opacity
&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Storyboard&lt;/span&gt;.SetTargetProperty(myDoubleAnim, &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;PropertyPath&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;(UIElement.Opacity)&amp;quot;&lt;/span&gt;));
            
&lt;span style="color:green;"&gt;//adding into the layout resources
&lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.Resources.Add(&lt;span style="color:#a31515;"&gt;&amp;quot;uniqueId&amp;quot;&lt;/span&gt;+_countName.ToString(),currentStb);

&lt;span style="color:green;"&gt;//adding into the current layoutRoot
&lt;/span&gt;currentStb.Children.Add(myDoubleAnim);
currentStb.SetValue(&lt;span style="color:#2b91af;"&gt;Storyboard&lt;/span&gt;.TargetNameProperty, newTextBox.Name);&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;span style="color:green;"&gt;//adding some logical stuff then the stb begins&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;currentStb.Begin();&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;To recap, it’s not so complicated, first we create the storyboard, then the keyframes that contains the times and the values for the animation sequence, then we define the target properties, such as the DoubleAnimation, the Opacity property target and the storyboard to apply on the current &lt;em&gt;usercontrol&lt;/em&gt; or the UIElement.&lt;/p&gt;

&lt;p&gt;Just regard that after you create an Storyboard this has to belong into the current layout resource in order to work, with a &lt;strong&gt;unique Id&lt;/strong&gt;. So that can be re-used in your application.&lt;/p&gt;

&lt;p&gt;A recommended lecture:&lt;/p&gt;

&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/cc189069(VS.95).aspx" href="http://msdn.microsoft.com/en-us/library/cc189069(VS.95).aspx"&gt;http://msdn.microsoft.com/en-us/library/cc189069(VS.95).aspx&lt;/a&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Thanks.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://xamlpt.com/aggbug.aspx?PostID=1062" width="1" height="1"&gt;</description></item><item><title>Silverlight: Routed Events and Silverlight toolkit</title><link>http://xamlpt.com/blogs/chaves/archive/2009/10/20/silverlight-routed-events-and-silverlight-toolkit.aspx</link><pubDate>Mon, 19 Oct 2009 23:16:44 GMT</pubDate><guid isPermaLink="false">7e8b0034-b719-4475-a4b6-24c681638f0a:1059</guid><dc:creator>Gonçalo Chaves</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://xamlpt.com/blogs/chaves/rsscomments.aspx?PostID=1059</wfw:commentRss><comments>http://xamlpt.com/blogs/chaves/archive/2009/10/20/silverlight-routed-events-and-silverlight-toolkit.aspx#comments</comments><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;[PT]&lt;/p&gt;  &lt;p&gt;Hoje, enquanto estava a desenvolver um aplicação em Silverlight, reparei num comportamento um pouco estranho quando a aplicação era iniciada… basicamente passado algum tempo a aplicação em Silverlight bloqueava e por consequência o browser também. Ok, até aqui tudo bem, costumam dizer que o problema reside entre a cadeira e o teclado, portanto fui analisar dentro das últimas alterações que tinha feito. Descobri que o problema estava relacionado com uma animação que estava a tentar fazer que envolvia algumas Storyboard que definiam a sequência da animação. Uma vez que necessitava de saber quando é que as storyboards terminavam para dar sequência na animação, declarei como normalmente se faz os &lt;i&gt;routedevents &lt;/i&gt;para saber quando “agir” segundo o objectivo.&lt;/p&gt;  &lt;pre class="code"&gt;StoryboardTagLinePos1.Completed += &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;EventHandler&lt;/span&gt;(StoryboardTagLinePos1_Completed);
StoryboardTagLinePos2.Completed += &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;EventHandler&lt;/span&gt;(StoryboardTagLinePos2_Completed);
StoryboardTagLinePos3.Completed += &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;EventHandler&lt;/span&gt;(StoryboardTagLinePos3_Completed);&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Até aqui tudo parace bem, mas o erro está no facto da declaração destes eventHandlers estar dentro do método que era chamado para dar seguimento na lógica da animação… ora isto gera algo como… stack overflow… porque são referenciadas muitas referências para os mesmos eventos! A maneira correcta e recomendada é que estas definições sejam feitas no método ini do controlo que estamos a utilizar, mas o que queria aqui destacar, é que não se trata de um erro de linguagem ou lógica, mas sim de fluxo da utilização das referências para os eventos. Além da aplicação ficar “gelada” e o browser também, o que é de destacar, a dificuldade em depurar este tipo de problemas ou mesmo existirem ferramentas para tal… mesmo o &lt;a href="http://silverlightspy.com/"&gt;Silverlight spy&lt;/a&gt; também bloqueou. Todavia, é de salvar que o sistema operativo isolou o “problema” impedindo que este lindo e útil erro se propagasse na memória que nem um louco! Lol.&lt;/p&gt;

&lt;p&gt;Ok, é só uma dica para ter em atenção quando estamos a desenvolver aplicações em Sl.&lt;/p&gt;

&lt;p&gt;Já agora, saiu a versão de Outubro do Silverlight toolkit: &lt;a href="http://silverlight.codeplex.com/"&gt;http://silverlight.codeplex.com/&lt;/a&gt;, basicamente um turbo para as aplicações em sl.&lt;/p&gt;

&lt;p&gt;Obrigado.&lt;/p&gt;

&lt;p&gt;[EN]&lt;/p&gt;

&lt;p&gt;Today when, I was developing a Silverlight application I noticed that after a while that application was launched on the browser, the application frozen… and even more frozen the browser… &lt;/p&gt;

&lt;p&gt;So obviously I thought that was something related with a latest change on my project and it was related with some kind of animation that I was trying to do. I used some storyboards in order to give a sequence on the animation, and I need to know in the application when each storyboard ended so has usual I declared the routed events… something like:&lt;/p&gt;

&lt;pre class="code"&gt;StoryboardTagLinePos1.Completed += &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;EventHandler&lt;/span&gt;(StoryboardTagLinePos1_Completed);
StoryboardTagLinePos2.Completed += &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;EventHandler&lt;/span&gt;(StoryboardTagLinePos2_Completed);
StoryboardTagLinePos3.Completed += &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;EventHandler&lt;/span&gt;(StoryboardTagLinePos3_Completed);&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;But the slight mistake was that this declarations were inside of the method that I call each time that I need to do something with the animation… yeah… the stack and memory went crazy!! Many and multiple repeated references to the same trigger events! Lol &lt;/p&gt;

&lt;p&gt;So obviously the right way is declare the same routed event but outside the method… usually and the recommended way is on the control init method to avoid situation like that. &lt;/p&gt;

&lt;p&gt;But besides my “donkey” mistake, what I really notice is that I couldn’t find any tool to help on this issue, even &lt;a href="http://silverlightspy.com/"&gt;Silverlight spy&lt;/a&gt; went frozen… so one good thing is that the OS in somehow protected the rest by “frizzing” the application and prevent a full stack overflow… &lt;/p&gt;

&lt;p&gt;Just a thing to keep in mind when developing sl applications.&lt;/p&gt;

&lt;p&gt;Btw the October Silverlight toolkit release is out: &lt;a href="http://silverlight.codeplex.com/"&gt;http://silverlight.codeplex.com/&lt;/a&gt; this is a very very powerful “toy” to boost sl apps :P&lt;/p&gt;

&lt;p&gt;Thanks.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;[cross posted from: &lt;/em&gt;&lt;a title="http://blogs.fullsix.pt/2009/10/20/silverlight-routed-events-and-silverlight-toolkit/" href="http://blogs.fullsix.pt/2009/10/20/silverlight-routed-events-and-silverlight-toolkit/"&gt;&lt;em&gt;http://blogs.fullsix.pt/2009/10/20/silverlight-routed-events-and-silverlight-toolkit/&lt;/em&gt;&lt;/a&gt;&lt;em&gt;]&lt;/em&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://xamlpt.com/aggbug.aspx?PostID=1059" width="1" height="1"&gt;</description></item><item><title>Umbraco – Sem nós na árvore de documentos mas com conteúdos...</title><link>http://xamlpt.com/blogs/chaves/archive/2009/10/19/umbraco-sem-n-243-s-na-225-rvore-de-documentos-mas-com-conte-250-dos.aspx</link><pubDate>Mon, 19 Oct 2009 21:26:33 GMT</pubDate><guid isPermaLink="false">7e8b0034-b719-4475-a4b6-24c681638f0a:1058</guid><dc:creator>Gonçalo Chaves</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://xamlpt.com/blogs/chaves/rsscomments.aspx?PostID=1058</wfw:commentRss><comments>http://xamlpt.com/blogs/chaves/archive/2009/10/19/umbraco-sem-n-243-s-na-225-rvore-de-documentos-mas-com-conte-250-dos.aspx#comments</comments><description>&lt;p&gt;[PT]&lt;/p&gt;  &lt;p&gt;Olá a todos. Não sei se já se depararam com o seguinte cenário, na abertura de uma instância de umbraco num dado site:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://xamlpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chaves/umbraco_5F00_issue_5F00_2.jpg"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="umbraco_issue" border="0" alt="umbraco_issue" src="http://xamlpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chaves/umbraco_5F00_issue_5F00_thumb.jpg" width="244" height="144" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Como podem ver na imagem, a árvore de conteúdos do CMS está, ou aparenta, estar vazia. Mas o mais “estranho” foi verificar que tanto o site estava sem qualquer anomalia, como também na base de dados do CMS, tudo estava aparentemente bem. Inclusivé, as várias tabelas do umbraco continham os dados...&lt;/p&gt;  &lt;p&gt;Pois bem. À uns dias ao aceder ao umbraco de um dado site, deparei-me com este cenário... e sem ter efectuado alterações na sua estrutura, em qualquer DocumentType, Media element, Template ou outro elemento pertencente à base de umbraco.&lt;/p&gt;  &lt;p&gt;Após várias tentativas para perceber o que estava a acontecer, experimentámos usar a mesma base de dados em questão mas como uma nova “instância limpa” de umbraco. Para qual foi do nosso espanto que tudo estava bem. A estrutura de nós estava devidamente correcta e tudo o resto estava como se esperava.&lt;/p&gt;  &lt;p&gt;Posto isto, a decisão foi &lt;b&gt;&lt;i&gt;publicar novamente toda a estrutura de umbraco&lt;/i&gt;&lt;/b&gt; para o site em questão, uma vez que nos pareceu ser um caminho para a solução. E não é que resolveu o problema?? Então o que deu origem a tal coisa? Não tenho resposta certa para o caso, mas uma das soluções plausíveis para o caso, foi talvez algum ficheiro que tenha ficado danificado durante publicação do site em questão! Daí que a re-publicação da estrutura de umbraco, tenha solucionado o problema.&lt;/p&gt;  &lt;p&gt;Caso conheçam ou tenham mais informações sobre este tipo de questões ou problemas, não deixem de partilhar. :)&lt;/p&gt;  &lt;p&gt;Obrigado a todos, e também ao Antoine pela sua ajuda neste processo.&lt;/p&gt;  &lt;p&gt;[EN]&lt;/p&gt;  &lt;p&gt;Hi all, I would like to share with you a little issue that happened with me a few days ago with an umbraco installation. Has you can see in the above picture I opened the cms of one site, and I saw that the content tree was empty… I thought… OMG! But the site was good with all the content and even the database was correct, and all tables with the right content… So we tried to figure out what happened and the cause. After some experiences, we tried first using that database with a brand new umbraco installation… and viola! Everything was fine! &lt;/p&gt;  &lt;p&gt;Ok, so let’s try to re-publish the umbraco structure with all files and content… and it works! So what was the cause? We can’t know for sure, but one possible reason is related with the first publish of the site… maybe one of the umbraco’s files went corrupted during the upload process.&lt;/p&gt;  &lt;p&gt;So we solved by re-publishing all umbraco’s structures files, if you know some related issues or other solution please share with us :)&lt;/p&gt;  &lt;p&gt;Thanks for reading and also thanks for the help that Antoine provided.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;[cross posted from: &lt;/em&gt;&lt;a title="http://blogs.fullsix.pt/2009/10/19/umbraco-sem-ns-na-rvore-de-documentos-mas-com-contedos/" href="http://blogs.fullsix.pt/2009/10/19/umbraco-sem-ns-na-rvore-de-documentos-mas-com-contedos/"&gt;&lt;em&gt;http://blogs.fullsix.pt/2009/10/19/umbraco-sem-ns-na-rvore-de-documentos-mas-com-contedos/&lt;/em&gt;&lt;/a&gt;&lt;em&gt;]&lt;/em&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://xamlpt.com/aggbug.aspx?PostID=1058" width="1" height="1"&gt;</description></item><item><title>Microsoft Remix09 passa em Portugal</title><link>http://xamlpt.com/blogs/chaves/archive/2009/09/02/microsoft-remix09-passa-em-portugal.aspx</link><pubDate>Wed, 02 Sep 2009 17:18:38 GMT</pubDate><guid isPermaLink="false">7e8b0034-b719-4475-a4b6-24c681638f0a:1014</guid><dc:creator>Gonçalo Chaves</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://xamlpt.com/blogs/chaves/rsscomments.aspx?PostID=1014</wfw:commentRss><comments>http://xamlpt.com/blogs/chaves/archive/2009/09/02/microsoft-remix09-passa-em-portugal.aspx#comments</comments><description>&lt;p&gt;No próximo dia 2 de Outubro irá passar em Portugal a comitiva de alguns oradores do evento passado &lt;a href="http://www.visitmix.com"&gt;Mix09&lt;/a&gt;, para um &lt;a href="http://www.microsoft.com/portugal/remix/index.aspx"&gt;Remix&lt;/a&gt; na Reitoria da Universidade Nova de Lisboa.&lt;/p&gt;  &lt;p&gt;Além da qualidade já reconhecida das sessões e dos seus oradores é uma excelente opurtunidade para aprender mais sobre: Silverlight, Surface, ASP.NET, Windows Azure, etc.&lt;/p&gt;  &lt;p&gt;Para os membros da comunidade &lt;a href="http://xamlpt.com"&gt;XAMLPT&lt;/a&gt; existe um desconto de 20% na inscrição do evento. Para mais informações os membros deverão consultar o &lt;a href="http://xamlpt.com/blogs/tiagonmas/archive/2009/09/02/desconto-para-membros-do-xaml-pt-no-evento-remix.aspx"&gt;post do Tiago Andrade e Silva&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Até lá :)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://xamlpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chaves/remix_5F00_logo_5F00_701D1798.gif"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="remix_logo" border="0" alt="remix_logo" src="http://xamlpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chaves/remix_5F00_logo_5F00_thumb_5F00_76D0211B.gif" width="138" height="65" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://xamlpt.com/aggbug.aspx?PostID=1014" width="1" height="1"&gt;</description></item><item><title>Silverlight and MEF</title><link>http://xamlpt.com/blogs/chaves/archive/2009/08/03/silverlight-and-mef.aspx</link><pubDate>Mon, 03 Aug 2009 20:30:35 GMT</pubDate><guid isPermaLink="false">7e8b0034-b719-4475-a4b6-24c681638f0a:988</guid><dc:creator>Gonçalo Chaves</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://xamlpt.com/blogs/chaves/rsscomments.aspx?PostID=988</wfw:commentRss><comments>http://xamlpt.com/blogs/chaves/archive/2009/08/03/silverlight-and-mef.aspx#comments</comments><description>&lt;p&gt;Aproveitando o &lt;a href="http://xamlpt.com/blogs/nunogodinho/archive/2009/07/31/silverlight-3-com-suporte-ao-mef.aspx"&gt;post do Nuno Godinho&lt;/a&gt;, eis mais uns links sobre o assunto:&lt;/p&gt;  &lt;p&gt;&lt;a title="Silverlight MEF - Extensible Applications" href="http://development-guides.silverbaylabs.org/Video/Silverlight-MEF"&gt;Silverlight MEF - Extensible Applications&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://development-guides.silverbaylabs.org/Video/Silverlight-MEF" href="http://development-guides.silverbaylabs.org/Video/Silverlight-MEF"&gt;http://development-guides.silverbaylabs.org/Video/Silverlight-MEF&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="Managed Extensibility Framework - Home" href="http://www.codeplex.com/MEF"&gt;Managed Extensibility Framework – Home&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://blogs.msdn.com/brada/archive/2008/11/07/managed-extensibility-framework-mef-demo.aspx" href="http://blogs.msdn.com/brada/archive/2008/11/07/managed-extensibility-framework-mef-demo.aspx"&gt;http://blogs.msdn.com/brada/archive/2008/11/07/managed-extensibility-framework-mef-demo.aspx&lt;/a&gt; (video)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://xamlpt.com/aggbug.aspx?PostID=988" width="1" height="1"&gt;</description><category domain="http://xamlpt.com/blogs/chaves/archive/tags/silverlight/default.aspx">silverlight</category><category domain="http://xamlpt.com/blogs/chaves/archive/tags/silverlight+3/default.aspx">silverlight 3</category><category domain="http://xamlpt.com/blogs/chaves/archive/tags/silverlight+2/default.aspx">silverlight 2</category><category domain="http://xamlpt.com/blogs/chaves/archive/tags/mef/default.aspx">mef</category></item><item><title>Silverlight and others for the weekend</title><link>http://xamlpt.com/blogs/chaves/archive/2009/07/31/silverlight-and-others-for-the-weekend.aspx</link><pubDate>Fri, 31 Jul 2009 11:10:46 GMT</pubDate><guid isPermaLink="false">7e8b0034-b719-4475-a4b6-24c681638f0a:982</guid><dc:creator>Gonçalo Chaves</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://xamlpt.com/blogs/chaves/rsscomments.aspx?PostID=982</wfw:commentRss><comments>http://xamlpt.com/blogs/chaves/archive/2009/07/31/silverlight-and-others-for-the-weekend.aspx#comments</comments><description>&lt;p&gt;Olá a todos!&lt;/p&gt;  &lt;p&gt;Queria partilhar convosco alguns links para o fim de semana:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Silverlight:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Data forms Control (Ria services) - &lt;a title="http://dotnetslackers.com/articles/silverlight/Silverlight-3-and-the-Data-Form-Control-part-I.aspx" href="http://dotnetslackers.com/articles/silverlight/Silverlight-3-and-the-Data-Form-Control-part-I.aspx"&gt;http://dotnetslackers.com/articles/silverlight/Silverlight-3-and-the-Data-Form-Control-part-I.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Dynamic forms (com XSDs) - &lt;a title="http://weblogs.asp.net/rabeehabla/archive/2009/07/22/dynamic-silverlight-forms.aspx" href="http://weblogs.asp.net/rabeehabla/archive/2009/07/22/dynamic-silverlight-forms.aspx"&gt;http://weblogs.asp.net/rabeehabla/archive/2009/07/22/dynamic-silverlight-forms.aspx&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;MEF (Extensible applications) - &lt;a title="http://development-guides.silverbaylabs.org/Video/Silverlight-MEF" href="http://development-guides.silverbaylabs.org/Video/Silverlight-MEF"&gt;http://development-guides.silverbaylabs.org/Video/Silverlight-MEF&lt;/a&gt; / &lt;a title="http://www.sparklingclient.com/2009/07/30/" href="http://www.sparklingclient.com/2009/07/30/"&gt;http://www.sparklingclient.com/2009/07/30/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Portfólio:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;O site desta semana é: &lt;a href="http://www.silverlighttoys.com/"&gt;http://www.silverlighttoys.com/&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;ASP.NET MVC:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Saíu a segunda versão do MVC para asp.net, ainda em versão ctp. - &lt;a title="http://weblogs.asp.net/scottgu/archive/2009/07/31/asp-net-mvc-v2-preview-1-released.aspx" href="http://weblogs.asp.net/scottgu/archive/2009/07/31/asp-net-mvc-v2-preview-1-released.aspx"&gt;http://weblogs.asp.net/scottgu/archive/2009/07/31/asp-net-mvc-v2-preview-1-released.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Foto da semana:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://xamlpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chaves/88"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="Man_vs__art_by_nienor_hl[1]" border="0" alt="Man_vs__art_by_nienor_hl[1]" src="http://xamlpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/chaves/Man_5F00_vs_5F005F00_art_5F00_by_5F00_nienor_5F00_hl1_5F00_thumb_5F00_2C4DA196.jpg" width="244" height="142" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;( &lt;a title="http://nienor-hl.deviantart.com/art/Man-vs-art-123300721" href="http://nienor-hl.deviantart.com/art/Man-vs-art-123300721"&gt;http://nienor-hl.deviantart.com/art/Man-vs-art-123300721&lt;/a&gt; )&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://xamlpt.com/aggbug.aspx?PostID=982" width="1" height="1"&gt;</description></item><item><title>RIA Services at fullsix.pt</title><link>http://xamlpt.com/blogs/chaves/archive/2009/07/27/ria-services-at-fullsix-pt.aspx</link><pubDate>Mon, 27 Jul 2009 18:19:00 GMT</pubDate><guid isPermaLink="false">7e8b0034-b719-4475-a4b6-24c681638f0a:978</guid><dc:creator>Gonçalo Chaves</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://xamlpt.com/blogs/chaves/rsscomments.aspx?PostID=978</wfw:commentRss><comments>http://xamlpt.com/blogs/chaves/archive/2009/07/27/ria-services-at-fullsix-pt.aspx#comments</comments><description>&lt;div class="navigation"&gt;
&lt;div class="alignleft"&gt;&lt;strong&gt;Intro&lt;/strong&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="post" id="post-261"&gt;
&lt;div class="entry"&gt;
&lt;p&gt;Com o lan&amp;ccedil;amento da vers&amp;atilde;o 3 do &lt;a href="http://www.silverlight.net/"&gt;Silverlight&lt;/a&gt;, as novidades e funcionalidades quem t&amp;ecirc;m sido desenvolvidas neste produto, aproximam-se cada vez mais de uma melhor experi&amp;ecirc;ncia de utiliza&amp;ccedil;&amp;atilde;o (UX) para o comportamento da aplica&amp;ccedil;&amp;atilde;o, mas n&amp;atilde;o se esquece a camada de neg&amp;oacute;cio e a camada de servi&amp;ccedil;os disponibilizados para dar &amp;ldquo;alimento&amp;rdquo; &amp;agrave;s novas &amp;ldquo;RIAs&amp;rdquo; (&lt;a href="http://en.wikipedia.org/wiki/Rich_Internet_application"&gt;Rich Internet Applications&lt;/a&gt;) que v&amp;atilde;o aparecendo, cada vez mais na web.&lt;/p&gt;
&lt;p&gt;Uma aplica&amp;ccedil;&amp;atilde;o RIA tem como arquitectura a separa&amp;ccedil;&amp;atilde;o entre a l&amp;oacute;gica da apresenta&amp;ccedil;&amp;atilde;o, e a l&amp;oacute;gica dos servi&amp;ccedil;os, como demonstra a seguinte imagem:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://blogs.fullsix.pt/wp-content/uploads/2009/07/clip-image0026-thumb.jpg" border="0" style="max-width:550px;" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;Eacute; neste contexto que a Microsoft nos apresenta a nova &amp;ldquo;Framework&amp;rdquo; .net RIA Services. E resumidamente podemos dizer que se tratam de um conjunto de bibliotecas adicionais a uma qualquer aplica&amp;ccedil;&amp;atilde;o desenvolvida com base na .net Framework para a Web, neste caso o Silverlight.&lt;/p&gt;
&lt;p&gt;Assim &amp;eacute; complementado sobre o conjunto de ofertas da Microsoft, para o desenvolvimento das aplica&amp;ccedil;&amp;otilde;es Web.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.fullsix.pt/wp-content/uploads/2009/07/clip-image0046.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://blogs.fullsix.pt/wp-content/uploads/2009/07/clip-image0046-thumb.jpg" border="0" style="max-width:550px;" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Em .net clients, aparecem o Silverlight e o WPF, para que o Silverlight possa disponibilizar o modelo RIA acima, &amp;eacute; ent&amp;atilde;o disponibilizada a .net Ria Services Framework. Com um roadmap bastante curto, est&amp;aacute; neste momento em vers&amp;atilde;o de CTP (community technology preview), vers&amp;atilde;o dispon&amp;iacute;vel para as comunidades, onde se obt&amp;eacute;m feedback sobre as funcionalidades actuais e sobre as desejadas, &lt;a href="http://www.microsoft.com/DOWNLOADS/details.aspx?FamilyID=76bb3a07-3846-4564-b0c3-27972bcaabce&amp;amp;displaylang=en"&gt;July 2009 preview CTP&lt;/a&gt; &amp;eacute; a vers&amp;atilde;o actual. Est&amp;aacute; previsto o lan&amp;ccedil;amento da vers&amp;atilde;o beta durante a confer&amp;ecirc;ncia anual &lt;a href="http://www.microsoftpdc.com/"&gt;PDC&lt;/a&gt;, e a sua vers&amp;atilde;o final ser&amp;aacute; conjunta com a vers&amp;atilde;o 4 da .NET Framework.&lt;/p&gt;
&lt;p&gt;O nosso objectivo principal, &amp;eacute; demonstrar as capacidades desta Framework, aplicadas a um contexto real de uma aplica&amp;ccedil;&amp;atilde;o. Para tal vamos abordar alguns dos t&amp;oacute;picos mais importantes, aplicados a uma demo dispon&amp;iacute;vel em: &lt;a href="http://labs.fullsix.pt/f6riademo"&gt;http://labs.fullsix.pt/f6riademo&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;h3&gt;&lt;strong&gt;Instala&amp;ccedil;&amp;atilde;o&lt;/strong&gt;&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Para utilizar a .net Ria Services Framework vers&amp;atilde;o: July 2009 CTP &amp;eacute; necess&amp;aacute;rio seguir os seguintes passos:&lt;/p&gt;
&lt;p&gt;1) Remover instala&amp;ccedil;&amp;otilde;es pr&amp;eacute;vias caso existam, sejam elas vers&amp;otilde;es anteriores a:&lt;/p&gt;
&lt;p&gt;Silverlight 3 SDK RTW&lt;/p&gt;
&lt;p&gt;Silverlight 3 Plugin RTW&lt;/p&gt;
&lt;p&gt;Silverlight 3 toos para o Visual Studio 2008 RTW&lt;/p&gt;
&lt;p&gt;2) Instalar a .NET framework 3.5 SP1 e seguidamente o SP1 para o Visual Studio 2008 &lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/vstudio/cc533448.aspx"&gt;http://msdn.microsoft.com/en-us/vstudio/cc533448.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3) A partir do site &lt;a href="http://www.silverlight.net"&gt;www.silverlight.net&lt;/a&gt; instalar:&lt;/p&gt;
&lt;p&gt;a. Silverlight 3 RTW&lt;/p&gt;
&lt;p&gt;b. Silverlight 3 SDK RTW&lt;/p&gt;
&lt;p&gt;c. Silverlight 3 tools para o Visual Studio 2008 SP1&lt;/p&gt;
&lt;p&gt;4) Instalar a .NET Ria Services: , &lt;a href="http://www.microsoft.com/DOWNLOADS/details.aspx?FamilyID=76bb3a07-3846-4564-b0c3-27972bcaabce&amp;amp;displaylang=en"&gt;July 2009 preview CTP&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Para verificar que tudo correu como esperado, no Visual Studio 2008 no menu de novo projecto dever&amp;aacute; estar como na seguinte imagem:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.fullsix.pt/wp-content/uploads/2009/07/clip-image0066.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;img src="http://blogs.fullsix.pt/wp-content/uploads/2009/07/clip-image0066-thumb.jpg" border="0" style="max-width:550px;" alt="" /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Silverlight Application&lt;/b&gt; &amp;ndash; Aplica&amp;ccedil;&amp;atilde;o normal em Silverlight, tal como na vers&amp;atilde;o anterior.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Silverlight Navigation Application &amp;ndash; &lt;/b&gt;Aplica&amp;ccedil;&amp;atilde;o Silverlight, com a utiliza&amp;ccedil;&amp;atilde;o &amp;ldquo;out of the box&amp;rdquo; das funcionalidades de navega&amp;ccedil;&amp;atilde;o integradas com o browser, acima descritas.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Silverlight Class Library&lt;/b&gt; &amp;ndash; Cria&amp;ccedil;&amp;atilde;o de bibliotecas usuais para aplica&amp;ccedil;&amp;otilde;es silverlight, tamb&amp;eacute;m semelhante &amp;aacute; vers&amp;atilde;o anterior.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Silverlight Business Application &amp;ndash; &lt;/b&gt;cria&amp;ccedil;&amp;atilde;o de aplica&amp;ccedil;&amp;otilde;es Silverlight sobre a .NET Ria Services Framework, &amp;eacute; este o template que gera a estrutura ideal para a utiliza&amp;ccedil;&amp;atilde;o das funcionalidades de neg&amp;oacute;cio que a Framework Ria services nos d&amp;aacute;. Acima j&amp;aacute; descrita.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;h3&gt;&lt;strong&gt;Utilizando a framework&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Acrescentando &amp;agrave; nossa aplica&amp;ccedil;&amp;atilde;o esta Framework, disponibiliza imediatamente e totalmente &amp;ldquo;out of the box&amp;rdquo; servi&amp;ccedil;os como:&lt;/p&gt;
&lt;p&gt;- &lt;b&gt;Acesso a dados&lt;/b&gt; facilitando por liga&amp;ccedil;&amp;atilde;o directa entre a Entidade de dados e o controlo na aplica&amp;ccedil;&amp;atilde;o. Exemplo: liga&amp;ccedil;&amp;atilde;o de uma tabela em SQL com uma dataGrid na nossa aplica&amp;ccedil;&amp;atilde;o.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;riaControls:DomainDataSource x:Name=&amp;quot;ContactListDataSource&amp;quot; LoadSize=&amp;quot;20&amp;quot; QueryName=&amp;quot;GetPLURAL_Contacts&amp;quot; AutoLoad=&amp;quot;True&amp;quot; &amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;riaControls:DomainDataSource.DomainContext&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;ds:ContactListContext/&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;/riaControls:DomainDataSource.DomainContext&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;/riaControls:DomainDataSource&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;data:DataGrid Height=&amp;quot;Auto&amp;quot; MinHeight=&amp;quot;100&amp;quot; IsReadOnly=&amp;quot;True&amp;quot; ItemsSource=&amp;quot;{Binding Data, ElementName=ContactListDataSource}&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;x:Name=&amp;quot;dataGrid1&amp;quot; /&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Acima, &amp;eacute; definido em XAML, sem recorrer a qualquer linha de c&amp;oacute;digo, um controlo de DomainDataSource, que tem uma Query como propriedade, esta query est&amp;aacute; definida no servi&amp;ccedil;o da camada de acesso aos dados. Seguidamente a defini&amp;ccedil;&amp;atilde;o de uma DataGrid, que tem como fonte de dados o controlo anteriormente definido. Utilizando apenas estes dois controlos a liga&amp;ccedil;&amp;atilde;o &amp;eacute; feita entre os dados e a nossa aplica&amp;ccedil;&amp;atilde;o. Mais &amp;agrave; frente est&amp;aacute; a explica&amp;ccedil;&amp;atilde;o de como &amp;eacute; definida a entidade de liga&amp;ccedil;&amp;atilde;o aos dados.&lt;/p&gt;
&lt;p&gt;- &lt;b&gt;Autentica&amp;ccedil;&amp;atilde;o&lt;/b&gt;, sim! Lembram-se do &lt;i&gt;Membership&lt;/i&gt; em asp.net? Porqu&amp;ecirc; mexer, se o que temos funciona lindamente? Nem mais, membership &amp;ldquo;out of the box&amp;rdquo; para a nossa aplica&amp;ccedil;&amp;atilde;o. Em tudo semelhante na sua arquitectura, e com utiliza&amp;ccedil;&amp;atilde;o diferente mas simples. Vejamos o seguinte exemplo:&lt;/p&gt;
&lt;p&gt;Para uma chamada a um servi&amp;ccedil;o de inser&amp;ccedil;&amp;atilde;o de dados, informamos a nossa aplica&amp;ccedil;&amp;atilde;o que: &amp;eacute; necess&amp;aacute;rio que o utilizador esteja devidamente autenticado.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;[RequiresAuthentication()]&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;public void InsertPLURAL_CastingRegistrations(PLURAL_CastingRegistrations pLURAL_CastingRegistrations)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;{&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;pLURAL_CastingRegistrations.RegGuid = Guid.NewGuid();&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;pLURAL_CastingRegistrations.ts = DateTime.Today;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;this.Context.AddToPLURAL_CastingRegistrations(pLURAL_CastingRegistrations);&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;}&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Como se pode ver acima, o m&amp;eacute;todo InsertPlural_CastingRegistrations tem uma anota&amp;ccedil;&amp;atilde;o de &amp;ldquo;RequiresAutentication()&amp;rdquo;. Desta simples forma, seja qual for a entidade que invoque este m&amp;eacute;todo, s&amp;oacute; &amp;eacute; executado cado existe um utilizador autenticado em sess&amp;atilde;o.&lt;/p&gt;
&lt;p&gt;- &lt;b&gt;Navega&amp;ccedil;&amp;atilde;o contextualizada, &lt;/b&gt;para quem j&amp;aacute; experimentou desenvolver ou a utilizar mais intensivamente aplica&amp;ccedil;&amp;otilde;es em silverlight, deparou-se certamente com o problema de navega&amp;ccedil;&amp;atilde;o dentro da aplica&amp;ccedil;&amp;atilde;o, e que esta esteja devidamente integrada com o browser. Certamente que recorrer &amp;agrave;s fun&amp;ccedil;&amp;otilde;es de retroceder ou avan&amp;ccedil;ar do browser n&amp;atilde;o t&amp;ecirc;m o comportamento esperado com a aplica&amp;ccedil;&amp;atilde;o em silverlight. Apesar de j&amp;aacute; existirem algumas t&amp;eacute;cnicas para &amp;ldquo;resolver&amp;rdquo; este problema em Silverlight 2, tal como a utiliza&amp;ccedil;&amp;atilde;o de JQuery, ou de ASP.NET AJAX, para guardar o hist&amp;oacute;rico da navega&amp;ccedil;&amp;atilde;o e interagir com os evento gerados pelo browser dos comandos acima utilizados. A navegation framework, vem resolver este problema de uma forma simples e bastante eficaz, ora se n&amp;atilde;o vejamos o exemplo:&lt;/p&gt;
&lt;p&gt;Na p&amp;aacute;gina principal colocamos o controlo &amp;ldquo;navigation&amp;rdquo;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;navigation:Frame x:Name=&amp;quot;ContentFrame&amp;quot; Style=&amp;quot;{StaticResource ContentFrameStyle}&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source=&amp;quot;/Home&amp;quot; Navigated=&amp;quot;ContentFrame_Navigated&amp;quot; NavigationFailed=&amp;quot;ContentFrame_NavigationFailed&amp;quot; Background=&amp;quot;{x:Null}&amp;quot;&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;navigation:Frame.UriMapper&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;uriMapper:UriMapper&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;uriMapper:UriMapping Uri=&amp;quot;&amp;quot; MappedUri=&amp;quot;/Views/Home.xaml&amp;quot;/&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;uriMapper:UriMapping Uri=&amp;quot;/{pageName}&amp;quot; MappedUri=&amp;quot;/Views/{pageName}.xaml&amp;quot;/&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;/uriMapper:UriMapper&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;/navigation:Frame.UriMapper&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;/navigation:Frame&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Como podemos ver, basicamente &amp;eacute; definino uma forma de como &amp;eacute; mapeado e interpretado os endere&amp;ccedil;os URLs, que s&amp;atilde;o colocados no browser. &amp;Eacute; conhecido como o m&amp;eacute;todo de URL re-writting. E neste caso podemos ver que &amp;eacute; definido um &amp;ldquo;contentor&amp;rdquo; que vai permitir o carregamento de outras p&amp;aacute;ginas em XAML que estejam na directoria de Views/pagina.xaml. Portanto qualquer p&amp;aacute;gina que esteja na directoria definida permite que seja referenciada e carregada na vista actual. Assim &amp;eacute; guardado o hist&amp;oacute;ricos pelas &amp;ldquo;vistas&amp;rdquo; que vamos fazendo sobre a nossa aplica&amp;ccedil;&amp;atilde;o.&lt;/p&gt;
&lt;p&gt;Para navegar entre as p&amp;aacute;ginas basta definir um link: &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;HyperlinkButton x:Name=&amp;quot;Link4&amp;quot; Style=&amp;quot;{StaticResource LinkStyle}&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;NavigateUri=&amp;quot;/ContactList&amp;quot; TargetName=&amp;quot;ContentFrame&amp;quot; Content=&amp;quot;contact list&amp;quot;/&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Apenas definimos o contentor para onde a p&amp;aacute;gina estar&amp;aacute; a ser carregada, o texto do nosso link, neste caso &amp;ldquo;contact list&amp;rdquo;, e o nome da &amp;ldquo;vista&amp;rdquo;, p&amp;aacute;gina correspondente, com o c&amp;oacute;digo XAML e se necess&amp;aacute;rio o &lt;i&gt;code behind&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Estrutura&amp;ccedil;&amp;atilde;o de camadas: Servi&amp;ccedil;os e Apresenta&amp;ccedil;&amp;atilde;o, &lt;/b&gt;utilizando esta framework, a aplica&amp;ccedil;&amp;atilde;o fica devidamente estruturada tanto a n&amp;iacute;vel da camada dos servi&amp;ccedil;os, como a n&amp;iacute;vel de apresenta&amp;ccedil;&amp;atilde;o. Conjuga assim os padr&amp;otilde;es MVVM (Model View-View Model) e MVC (Model View Control), quer permitem dar &amp;agrave; aplica&amp;ccedil;&amp;atilde;o a m&amp;aacute;xima abstrac&amp;ccedil;&amp;atilde;o da camada dos servi&amp;ccedil;os que a &amp;ldquo;alimentam&amp;rdquo;, mas tamb&amp;eacute;m a versatilidade da cria&amp;ccedil;&amp;atilde;o de vistas independentes, que s&amp;atilde;o os v&amp;aacute;rios &amp;ldquo;ecr&amp;atilde;s&amp;rdquo; da aplica&amp;ccedil;&amp;atilde;o.&lt;/p&gt;
&lt;p&gt;A imagem abaixo, demostra esta estrutura&amp;ccedil;&amp;atilde;o dado ao projecto, utilizando o &amp;ldquo;Silverlight Business Application&amp;rdquo; template para o Visual Studio 2008.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.fullsix.pt/wp-content/uploads/2009/07/clip-image0086.jpg"&gt;&lt;img height="244" width="171" src="http://blogs.fullsix.pt/wp-content/uploads/2009/07/clip-image0086-thumb.jpg" alt="clip_image008&lt;img src="http://xamlpt.com/emoticons/emotion-14.gif" alt="Devil" /&gt;" border="0" style="display:inline;border-width:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Como se pode ver, a nossa solu&amp;ccedil;&amp;atilde;o &amp;eacute; constitu&amp;iacute;da por dois projectos, a aplica&amp;ccedil;&amp;atilde;o em Silverlight, e a aplica&amp;ccedil;&amp;atilde;o Web que far&amp;aacute; o &lt;i&gt;hosting&lt;/i&gt; da aplica&amp;ccedil;&amp;atilde;o em si. Do lado da aplica&amp;ccedil;&amp;atilde;o em Silverlight temos:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;Assets&lt;/b&gt;, para todos os recursos da aplica&amp;ccedil;&amp;atilde;o que sejam partilh&amp;aacute;veis, ex: m&amp;iacute;dia&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Libs&lt;/b&gt;, para as depend&amp;ecirc;ncias externas, ex: AjaxControl Toolkit, ActivityControl, Windows.Controls, etc.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Views, &lt;/b&gt;comt&amp;eacute;m os v&amp;aacute;rios &amp;ldquo;ecr&amp;atilde;s&amp;rdquo; da nossa aplica&amp;ccedil;&amp;atilde;o. Ex: about.xaml, clientRegistration.xaml, etc&lt;/p&gt;
&lt;p&gt;O ficheiro &lt;b&gt;MainPage.xaml&lt;/b&gt;, j&amp;aacute; cont&amp;eacute;m as refer&amp;ecirc;ncias necess&amp;aacute;rias para a utiliza&amp;ccedil;&amp;atilde;o das v&amp;aacute;rias vistas e da integra&amp;ccedil;&amp;atilde;o com o hist&amp;oacute;rico do browser.&lt;/p&gt;
&lt;p&gt;Do lado da aplica&amp;ccedil;&amp;atilde;o web temos:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;ClientBin, &lt;/b&gt;por defeito o direct&amp;oacute;rio com o ficheiro xap complidado da aplica&amp;ccedil;&amp;atilde;o Silverlight.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Services, &lt;/b&gt;como o nome sugere, todos os ficheiros que representam as interfaces aos servi&amp;ccedil;os da nossa aplica&amp;ccedil;&amp;atilde;o. S&amp;atilde;o nos dados os seguintes: &lt;/p&gt;
&lt;p&gt;&lt;b&gt;AuthenticationService.cs &amp;ndash; &lt;/b&gt;Respons&amp;aacute;vel pela activa&amp;ccedil;&amp;atilde;o do servi&amp;ccedil;o de existir uma &amp;ldquo;autentica&amp;ccedil;&amp;atilde;o&amp;rdquo; da nossa aplica&amp;ccedil;&amp;atilde;o. Neste caso em membership&lt;/p&gt;
&lt;p&gt;&lt;b&gt;UserInformation.cs &amp;ndash; &lt;/b&gt;Express&amp;otilde;es regulares para a valida&amp;ccedil;&amp;atilde;o dos campos de registo de um utilizador.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;UserRegistrationService.cs&lt;/b&gt; &amp;ndash; Este &amp;eacute; a interface do servi&amp;ccedil;o de membership, portanto cont&amp;eacute;m os v&amp;aacute;rios m&amp;eacute;todos normais para este cen&amp;aacute;rio. Cria&amp;ccedil;&amp;atilde;o de utilizador, Obter Utilizador, etc.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;Eacute; assim que a nossa aplica&amp;ccedil;&amp;atilde;o fica estruturada para a utiliza&amp;ccedil;&amp;atilde;o da framework .net ria services.&lt;/p&gt;
&lt;h3&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3&gt;&lt;strong&gt;fullsix .NET RIA Services Demo&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Para a nossa demo sobre esta Framework, utiliz&amp;aacute;mos o template de &lt;i&gt;Business application, &lt;/i&gt;pois facilmente estrutura o nosso projecto sobre os modelos de MVVM e MVC, aplica os servi&amp;ccedil;os de navega&amp;ccedil;&amp;atilde;o integrada com o browser, faz a integra&amp;ccedil;&amp;atilde;o com o servi&amp;ccedil;o de &lt;i&gt;membership&lt;/i&gt;, e importa as v&amp;aacute;rias &lt;i&gt;namespaces&lt;/i&gt; que comp&amp;otilde;em a Framework.&lt;/p&gt;
&lt;p&gt;NOTA: a demo, utiliza dados, e nomes, totalmente fict&amp;iacute;cios cujo &amp;uacute;nico objectivo &amp;eacute; de demonstra&amp;ccedil;&amp;atilde;o das funcionalidades dadas pela tecnologia utilizada.&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/h4&gt;
&lt;h4&gt;&lt;strong&gt;O cen&amp;aacute;rio de utiliza&amp;ccedil;&amp;atilde;o&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Pens&amp;aacute;mos num cen&amp;aacute;rio real, onde esta aplica&amp;ccedil;&amp;atilde;o poderia ser utilizada, mas como aplica&amp;ccedil;&amp;atilde;o prim&amp;aacute;ria para uma determinada fun&amp;ccedil;&amp;atilde;o e n&amp;atilde;o apenas uma aplica&amp;ccedil;&amp;atilde;o de acess&amp;oacute;rio a um cen&amp;aacute;rio j&amp;aacute; existente.&lt;/p&gt;
&lt;p&gt;Neste caso pens&amp;aacute;mos como um backoffice de um dado site&amp;hellip; perfeito!! Ora vejamos:&lt;/p&gt;
&lt;p&gt;1) Adicionar dados ao site em produ&amp;ccedil;&amp;atilde;o. OK&lt;/p&gt;
&lt;p&gt;2) Dispon&amp;iacute;vel atrav&amp;eacute;s do browser em qualquer lugar. OK&lt;/p&gt;
&lt;p&gt;3) Devidamente protegida para acessos indevidos. OK&lt;/p&gt;
&lt;p&gt;4) Facilidade de utiliza&amp;ccedil;&amp;atilde;o e com um UX e design atraentes. OK (bom aqui n&amp;atilde;o s&amp;oacute; us&amp;aacute;mos os novos &lt;i&gt;behaviours &lt;/i&gt;que o silverlight 3 nos d&amp;aacute;, mas tamb&amp;eacute;m &amp;eacute; necess&amp;aacute;rio ter em conta o desenvolvimento de algum design para a aplica&amp;ccedil;&amp;atilde;o.)&lt;/p&gt;
&lt;p&gt;Passando estes pontos, parece-nos que &amp;eacute; um cen&amp;aacute;rio ideal e real para ser utilizada. &lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/h4&gt;
&lt;h4&gt;&lt;strong&gt;P&amp;aacute;gina inicial&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Ent&amp;atilde;o na p&amp;aacute;gina principal aproveitamos os v&amp;aacute;rios controlos que o Silverlight 3 Toolkit nos oferece, e disponibilizamos um gr&amp;aacute;fico com os acessos ao site principal, para qual este backoffice est&amp;aacute; a ser utilizado.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.fullsix.pt/wp-content/uploads/2009/07/clip-image0106.jpg"&gt;&lt;img height="176" width="244" src="http://blogs.fullsix.pt/wp-content/uploads/2009/07/clip-image0106-thumb.jpg" alt="clip_image010&lt;img src="http://xamlpt.com/emoticons/emotion-14.gif" alt="Devil" /&gt;" border="0" style="display:inline;border-width:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Podemos observar no gr&amp;aacute;fico o n&amp;uacute;mero de &lt;i&gt;page hits &lt;/i&gt;para o m&amp;ecirc;s de Maio do site em quest&amp;atilde;o.&lt;/p&gt;
&lt;p&gt;Mas aproveitando os &lt;i&gt;behaviours &lt;/i&gt;do Silverlight 3, aplicou-se o &amp;ldquo;drag and drop&amp;rdquo; a todos os elementos e permite assim ao utilizador definir a forma de como deseja ver os elementos na p&amp;aacute;gina principal, fazendo clique e arraste como habitualmente. Assim os objectos s&amp;atilde;o &amp;ldquo;livres&amp;rdquo; dentro da p&amp;aacute;gina inicial:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.fullsix.pt/wp-content/uploads/2009/07/clip-image0126.jpg"&gt;&lt;img height="178" width="244" src="http://blogs.fullsix.pt/wp-content/uploads/2009/07/clip-image0126-thumb.jpg" alt="clip_image012&lt;img src="http://xamlpt.com/emoticons/emotion-14.gif" alt="Devil" /&gt;" border="0" style="display:inline;border-width:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/h4&gt;
&lt;h4&gt;&lt;strong&gt;Navega&amp;ccedil;&amp;atilde;o entre p&amp;aacute;ginas (vistas)&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Utilizando partido da navigation Framework, acrescentou-se facilmente na p&amp;aacute;gina principal da aplica&amp;ccedil;&amp;atilde;o, dois links adicionais: &amp;ldquo;casting list&amp;rdquo; e &amp;ldquo;contact list&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Basicamente s&amp;atilde;o listagens de dados poss&amp;iacute;veis do site. Neste caso uma lista de utilizadores que se subscreveram a um casting, e uma lista de contactos feitos pelo site principal.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.fullsix.pt/wp-content/uploads/2009/07/clip-image0146.jpg"&gt;&lt;img height="30" width="244" src="http://blogs.fullsix.pt/wp-content/uploads/2009/07/clip-image0146-thumb.jpg" alt="clip_image014&lt;img src="http://xamlpt.com/emoticons/emotion-14.gif" alt="Devil" /&gt;" border="0" style="display:inline;border-width:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;At&amp;eacute; a este ponto, cri&amp;aacute;mos mais duas &amp;ldquo;vistas&amp;rdquo;, dois ficheiros xaml: &lt;i&gt;castinglist.xaml&lt;/i&gt; e &lt;i&gt;contactlist.xaml&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;E na p&amp;aacute;gina inicial, junto do componente de navega&amp;ccedil;&amp;atilde;o que se v&amp;ecirc; no cabe&amp;ccedil;alho da aplica&amp;ccedil;&amp;atilde;o, acrescent&amp;aacute;mos os dois links:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;Rectangle x:Name=&amp;quot;Divider1&amp;quot; Style=&amp;quot;{StaticResource DividerStyle}&amp;quot;/&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;HyperlinkButton x:Name=&amp;quot;Link3&amp;quot; Style=&amp;quot;{StaticResource LinkStyle}&amp;quot; NavigateUri=&amp;quot;/Casting&amp;quot; TargetName=&amp;quot;ContentFrame&amp;quot; Content=&amp;quot;casting list&amp;quot;/&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;Rectangle x:Name=&amp;quot;Divider2&amp;quot; Style=&amp;quot;{StaticResource DividerStyle}&amp;quot;/&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;HyperlinkButton x:Name=&amp;quot;Link4&amp;quot; Style=&amp;quot;{StaticResource LinkStyle}&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;NavigateUri=&amp;quot;/ContactList&amp;quot; TargetName=&amp;quot;ContentFrame&amp;quot; Content=&amp;quot;contact list&amp;quot;/&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;O elemento Rectangle, &amp;eacute; apenas o separador visual na barra de navega&amp;ccedil;&amp;atilde;o. &lt;/p&gt;
&lt;p&gt;E avan&amp;ccedil;&amp;aacute;mos para os servi&amp;ccedil;os da camada de dados&amp;hellip;&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/h4&gt;
&lt;h4&gt;&lt;strong&gt;Acesso a dados e servi&amp;ccedil;os&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Uma vez que j&amp;aacute; temos a nossa aplica&amp;ccedil;&amp;atilde;o preparada para os novos &amp;ldquo;ecr&amp;atilde;s&amp;rdquo; que v&amp;atilde;o servir para mostrar os dados, &amp;eacute; necess&amp;aacute;rio agora criar o servi&amp;ccedil;o que far&amp;aacute; a liga&amp;ccedil;&amp;atilde;o com os dados e a nossa vista.&lt;/p&gt;
&lt;p&gt;Para esta fase nada melhor que o uso da Entity Framework, que em conjunto com a .net Ria services Framework, facilita muito o processo! E porqu&amp;ecirc;? Al&amp;eacute;m de permitir a selec&amp;ccedil;&amp;atilde;o das tabelas, ou vistas sobre a base de dados, atrav&amp;eacute;s de &amp;ldquo;drag and drop&amp;rdquo;, gera automaticamente os ficheiros de servi&amp;ccedil;o, com os m&amp;eacute;todos CRUDE (inser&amp;ccedil;&amp;atilde;o, selec&amp;ccedil;&amp;atilde;o, actualiza&amp;ccedil;&amp;atilde;o, etc..).&lt;/p&gt;
&lt;p&gt;Aqui o LinQ tem um papel fundamental, &amp;eacute; atrav&amp;eacute;s desta linguagem que s&amp;atilde;o criadas as &lt;i&gt;queries&lt;/i&gt; necess&amp;aacute;rias para suportar as opera&amp;ccedil;&amp;otilde;es anteriormente anunciadas. Apesar de serem geradas as &lt;i&gt;queries&lt;/i&gt; standards, &amp;eacute;-nos dada a liberdade de as alterar e personalizar &amp;agrave;s nossas necessidades. Para este caso, uma listagem simples, nada que um SELECT * n&amp;atilde;o resolva&amp;hellip; e j&amp;aacute; agora um update, insert, delete, etc&amp;hellip; sim, tudo autom&amp;aacute;tico por favor!&lt;/p&gt;
&lt;p&gt;Adicionamos ent&amp;atilde;o uma ADO.NET Entity Data Model, com o nome de PluralCasting, onde escolhemos a tabela apropriada&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.fullsix.pt/wp-content/uploads/2009/07/clip-image0166.jpg"&gt;&lt;img height="244" width="83" src="http://blogs.fullsix.pt/wp-content/uploads/2009/07/clip-image0166-thumb.jpg" alt="clip_image016&lt;img src="http://xamlpt.com/emoticons/emotion-14.gif" alt="Devil" /&gt;" border="0" style="display:inline;border-width:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;E foi gerada a classe PluralCastingService.cs que cont&amp;ecirc;m os m&amp;eacute;todos todos prontinhos a serem utilizados&amp;hellip; J.&lt;/p&gt;
&lt;p&gt;Recorde-se que o elemento ADO.NET entity, foi mapeado para uma tabela da base de dados, mas este tamb&amp;eacute;m &amp;eacute; poss&amp;iacute;vel sobre uma Stored Procedure ou outro qualquer elemento relacional de dados.&lt;/p&gt;
&lt;p&gt;Neste momento apenas nos falta fazer os elementos UI para dar suporte a esta listagem. Ent&amp;atilde;o no ficheiro de &lt;i&gt;castinglist.xaml&lt;/i&gt; acrescentamos a nossa DataGrid:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;data:DataGrid Height=&amp;quot;Auto&amp;quot; MinHeight=&amp;quot;100&amp;quot; IsReadOnly=&amp;quot;True&amp;quot; ItemsSource=&amp;quot;{Binding Data, ElementName=CastingDataSource}&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;x:Name=&amp;quot;dataGrid1&amp;quot; &amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;i:Interaction.Behaviors&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;il:FluidMoveBehavior Duration=&amp;quot;00:00:04&amp;quot;&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;il:FluidMoveBehavior.EaseX&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;BackEase EasingMode=&amp;quot;EaseIn&amp;quot;/&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;/il:FluidMoveBehavior.EaseX&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;il:FluidMoveBehavior.EaseY&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;BackEase EasingMode=&amp;quot;EaseOut&amp;quot; Amplitude=&amp;quot;2&amp;quot;/&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;/il:FluidMoveBehavior.EaseY&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;/il:FluidMoveBehavior&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;/i:Interaction.Behaviors&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;/data:DataGrid&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;(j&amp;aacute; agora com os movimentos fluidos&amp;hellip; um pouco de anima&amp;ccedil;&amp;atilde;o&amp;hellip;)&lt;/p&gt;
&lt;p&gt;E o nosso Ria data source que cont&amp;eacute;m os dados em si:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;riaControls:DomainDataSource x:Name=&amp;quot;CastingDataSource&amp;quot; LoadSize=&amp;quot;20&amp;quot; QueryName=&amp;quot;GetPLURAL_CastingRegistrations&amp;quot; AutoLoad=&amp;quot;True&amp;quot; &amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;riaControls:DomainDataSource.DomainContext&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;ds:PluralCastingContext/&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;/riaControls:DomainDataSource.DomainContext&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;riaControls:DomainDataSource.SortDescriptors&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;riaData:SortDescriptor PropertyPath=&amp;quot;age&amp;quot; Direction=&amp;quot;Ascending&amp;quot;/&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;riaData:SortDescriptor PropertyPath=&amp;quot;gender&amp;quot; Direction=&amp;quot;Ascending&amp;quot;/&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;/riaControls:DomainDataSource.SortDescriptors&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;riaControls:DomainDataSource.FilterDescriptors&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;riaData:FilterDescriptorCollection&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;riaData:FilterDescriptor PropertyPath=&amp;quot;age&amp;quot; Operator=&amp;quot;IsGreaterThanOrEqualTo&amp;quot;&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;riaData:ControlParameter ControlName=&amp;quot;ageText&amp;quot; PropertyName=&amp;quot;Text&amp;quot; RefreshEventName=&amp;quot;TextChanged&amp;quot; /&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;/riaData:FilterDescriptor&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;/riaData:FilterDescriptorCollection&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;/riaControls:DomainDataSource.FilterDescriptors&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;/riaControls:DomainDataSource&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Utilizando como query todos os registos da nossa tabela&amp;hellip; e j&amp;aacute; agora posso ter um filtro? Sim, vamos ent&amp;atilde;o filtrar por idade&amp;hellip; e a idade &amp;eacute; o utilizador que coloca numa caixa de texto, e assim os dados s&amp;atilde;o filtrados no instante.&lt;/p&gt;
&lt;p&gt;Hum&amp;hellip; interessante, e posso agora ter pagina&amp;ccedil;&amp;atilde;o sobre estes milhares de registos da tabela? Sim, basta utilizar o &lt;i&gt;datapager&lt;/i&gt;:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;data:DataPager PageSize=&amp;quot;5&amp;quot; Source=&amp;quot;{Binding Data, ElementName=CastingDataSource}&amp;quot; Margin=&amp;quot;0,-1,0,0&amp;quot;&amp;gt;&amp;lt;/data:DataPager&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Simples&amp;hellip; n&amp;atilde;o?&lt;/p&gt;
&lt;p&gt;Eis o resultado:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.fullsix.pt/wp-content/uploads/2009/07/clip-image0186.jpg"&gt;&lt;img height="95" width="244" src="http://blogs.fullsix.pt/wp-content/uploads/2009/07/clip-image0186-thumb.jpg" alt="clip_image018&lt;img src="http://xamlpt.com/emoticons/emotion-14.gif" alt="Devil" /&gt;" border="0" style="display:inline;border-width:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Agora, gostar&amp;iacute;amos de dar a possibilidade ao utilizador de alterar ou adicionar um novo registo a esta listagem. E para que seja poss&amp;iacute;vel, ser&amp;aacute; necess&amp;aacute;rio que os nossos servi&amp;ccedil;os criados anteriormente, suportem as devidas opera&amp;ccedil;&amp;otilde;es de inser&amp;ccedil;&amp;atilde;o e actualiza&amp;ccedil;&amp;atilde;o. Mas uma vez utilizado a Entity para esta tabela, j&amp;aacute; existem estas opera&amp;ccedil;&amp;otilde;es definidas no servi&amp;ccedil;os, portanto s&amp;oacute; nos falta mesmo a interface.&lt;/p&gt;
&lt;p&gt;Para que tenhamos o formul&amp;aacute;rio para edi&amp;ccedil;&amp;atilde;o ou adi&amp;ccedil;&amp;atilde;o de um novo registo, utilizamos tamb&amp;eacute;m mais um controlo da Framework Ria Services: o &lt;i&gt;DataForm, &lt;/i&gt;da seguinte forma:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;dataForm:DataForm x:Name=&amp;quot;dataForm1&amp;quot; Header=&amp;quot;Casting Candidate Information&amp;quot; AutoGenerateFields=&amp;quot;False&amp;quot; AutoEdit=&amp;quot;False&amp;quot; AutoCommit=&amp;quot;False&amp;quot; CurrentItem=&amp;quot;{Binding SelectedItem, ElementName=dataGrid1}&amp;quot; Margin=&amp;quot;0,12,0,0&amp;quot;&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;dataForm:DataForm.EditTemplate&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;DataTemplate&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;StackPanel&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;dataForm:DataField Label=&amp;quot;User ID&amp;quot;&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;TextBox Text=&amp;quot;{Binding id, Mode=TwoWay}&amp;quot; /&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;/dataForm:DataField&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;dataForm:DataField Label=&amp;quot;Name&amp;quot;&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;TextBox Text=&amp;quot;{Binding name, Mode=TwoWay}&amp;quot; /&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;/dataForm:DataField&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt; &amp;hellip; &amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;Button x:Name=&amp;quot;submitButton&amp;quot; Width=&amp;quot;75&amp;quot; Height=&amp;quot;23&amp;quot; Content=&amp;quot;Submit&amp;quot; Margin=&amp;quot;4,0,0,0&amp;quot; Click=&amp;quot;submitButton_Click&amp;quot;/&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;/StackPanel&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;/StackPanel&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;/DataTemplate&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;/dataForm:DataForm.EditTemplate&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;/dataForm:DataForm&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Em muito semelhante ao controlo FormView utilizado para ASP.NET. Com a utiliza&amp;ccedil;&amp;atilde;o dos templates, Edit Template, Insert Template e ItemTemplate. Utilizamos estes templates para definir o comportamento do nosso formul&amp;aacute;rio consoante o tipo de opera&amp;ccedil;&amp;atilde;o que pretendemos fazer. Neste caso estamos a ver o Edit template, que tem uma StackPanel, com todos os campos DataField que sejam eles ou label ou textbox, fazem binding com o campo da nossa tabela que se encontra devidamente mapeada no nosso Entity model do servi&amp;ccedil;o.&lt;/p&gt;
&lt;p&gt;Podemos tamb&amp;eacute;m observar que a liga&amp;ccedil;&amp;atilde;o deste formul&amp;aacute;rio com a nossa DataGrid criada anteriormente &amp;eacute; feita atrav&amp;eacute;s da propriedade de &lt;i&gt;CurrentItem. &lt;/i&gt;Assim, o elemento actual que estiver seleccionado na nossa dataGrid, &amp;eacute; &amp;ldquo;passado&amp;rdquo; ao nosso DataForm, para que possa ser editado.&lt;/p&gt;
&lt;p&gt;Mas antes de qualquer opera&amp;ccedil;&amp;atilde;o sobre estes dados, autentica&amp;ccedil;&amp;atilde;o! Se faz favor&amp;hellip; ok, n&amp;atilde;o h&amp;aacute; problema. Uma vez que utilizamos a metatag de RequiredAuthentication() acima sobre as opera&amp;ccedil;&amp;otilde;es no servi&amp;ccedil;o, a .net Ria Services Framework, uma vez que implementa &amp;ldquo;out of the box&amp;rdquo; o servi&amp;ccedil;o de autentica&amp;ccedil;&amp;atilde;o, gera os automatismos necess&amp;aacute;rio, para em caso de pedido de autentica&amp;ccedil;&amp;atilde;o, desenha sobre o ecr&amp;atilde; actual a janela de autentica&amp;ccedil;&amp;atilde;o, como se pode ver na imagem:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.fullsix.pt/wp-content/uploads/2009/07/clip-image0206.jpg"&gt;&lt;img height="177" width="244" src="http://blogs.fullsix.pt/wp-content/uploads/2009/07/clip-image0206-thumb.jpg" alt="clip_image020&lt;img src="http://xamlpt.com/emoticons/emotion-14.gif" alt="Devil" /&gt;" border="0" style="display:inline;border-width:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Introduzimos as nossas credenciais:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Username: gchaves&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Password: 1234567/&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;E voil&amp;aacute;, j&amp;aacute; podemos agora utilizar o nosso formul&amp;aacute;rio sobre os dados dispon&amp;iacute;veis pela dataGrid. Aproveitamos tamb&amp;eacute;m os novos controlos de valida&amp;ccedil;&amp;atilde;o de campos dados tamb&amp;eacute;m &amp;ldquo;out of the Box&amp;rdquo; pela Framework. Assim para o campo &amp;ldquo;Gender&amp;rdquo;, s&amp;oacute; faz sentido que seja introduzido algo como &amp;ldquo;m&amp;rdquo; ou &amp;ldquo;f&amp;rdquo;, definimos no c&amp;oacute;digo da seguinte forma:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;dataForm:DataField Label=&amp;quot;gender&amp;quot;&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;TextBox Text=&amp;quot;{Binding gender,&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Mode=TwoWay,NotifyOnValidationError=True,&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;ValidatesOnExceptions=True }&amp;quot; /&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;/dataForm:DataField&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Com o NotifyValidationError e o Validates onExecptions definidos automaticamente pela gera&amp;ccedil;&amp;atilde;o do furmul&amp;aacute;rio, os tipos de restri&amp;ccedil;&amp;otilde;es sobre os campos s&amp;atilde;o j&amp;aacute; conhecidos pelo nosso objecto de Entity, que cont&amp;eacute;m toda a estrutura e restri&amp;ccedil;&amp;otilde;es definidas na base de dados. Assim facilita-nos imenso o processo de valida&amp;ccedil;&amp;atilde;o e verifica&amp;ccedil;&amp;atilde;o&amp;hellip; certo? Sim o campo &amp;ldquo;gender&amp;rdquo; tem como restri&amp;ccedil;&amp;atilde;o &amp;ldquo;tamanho=1&amp;rdquo; portanto, j&amp;aacute; nos &amp;eacute; dada alguma valida&amp;ccedil;&amp;atilde;o:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.fullsix.pt/wp-content/uploads/2009/07/clip-image0226.jpg"&gt;&lt;img height="177" width="244" src="http://blogs.fullsix.pt/wp-content/uploads/2009/07/clip-image0226-thumb.jpg" alt="clip_image022&lt;img src="http://xamlpt.com/emoticons/emotion-14.gif" alt="Devil" /&gt;" border="0" style="display:inline;border-width:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;OK!&lt;/p&gt;
&lt;p&gt;Podemos ent&amp;atilde;o observar, que para edi&amp;ccedil;&amp;atilde;o e visualiza&amp;ccedil;&amp;atilde;o de dados, a .net Ria Services framework, d&amp;aacute;-nos efectivamente uma colec&amp;ccedil;&amp;atilde;o de controlos e servi&amp;ccedil;os muito &amp;uacute;teis e f&amp;aacute;ceis de personalisar para que a nossa aplica&amp;ccedil;&amp;atilde;o responda &amp;agrave;s necessidades espec&amp;iacute;ficas de cada problema.&lt;/p&gt;
&lt;p&gt;Aproveitamos a estrutura que este template nos oferece, e criamos a janela de &amp;ldquo;CastingCandidateRegistrationWindow&amp;rdquo;, pois permite facilmente ser manuseada em c&amp;oacute;digo, e uma vez que extende do novo controlo &lt;i&gt;ChildWindow,&lt;/i&gt;o efeito de &amp;ldquo;Shadow&amp;rdquo; que vemos na imagem &amp;eacute; tamb&amp;eacute;m gerado automaticamente pela aplica&amp;ccedil;&amp;atilde;o J.&lt;/p&gt;
&lt;p&gt;O c&amp;oacute;digo que utiliz&amp;aacute;mos para fazer o &lt;i&gt;handle&lt;/i&gt; entre a ac&amp;ccedil;&amp;atilde;o de editar ou inserir dados, e o utilizador est&amp;aacute; autenticado, foi o seguinte:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;void Authentication_LoggedIn(object sender, AuthenticationEventArgs e)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;{&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;CastingCandidateResgistrationWindow addUser = new CastingCandidateResgistrationWindow();&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;addUser.Closed += new EventHandler(addUser_Closed);&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;addUser.Show();&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;}&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;void addUser_Closed(object sender, EventArgs e)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;{&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;CastingCandidateResgistrationWindow user = (CastingCandidateResgistrationWindow)sender;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;if (user.NewCastingUser != null)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;{&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;PluralCastingContext _PluralnContext = (PluralCastingContext)(CastingDataSource.DomainContext);&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;_PluralnContext.PLURAL_CastingRegistrations.Add(user.NewCastingUser);&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;CastingDataSource.SubmitChanges();&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;}&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;}&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Com estes dois m&amp;eacute;todos, definimos o comportamento ap&amp;oacute;s o utilizador se autentique, foi o redireccionamento sobre a ac&amp;ccedil;&amp;atilde;o dada pela Framework, que notifica a aplica&amp;ccedil;&amp;atilde;o que o utilizador est&amp;aacute; autenticado. E sendo assim, &amp;eacute; poss&amp;iacute;vel ent&amp;atilde;o instanciar a nossa janela de inser&amp;ccedil;&amp;atilde;o e muito importante, &amp;eacute; passar-lhe o objecto de &lt;i&gt;DomainContext&lt;/i&gt; que tr&amp;aacute;s consigo toda a informa&amp;ccedil;&amp;atilde;o actual sobre a &amp;ldquo;vista&amp;rdquo; que temos do nosso objecto de dados.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;Behaviours e UX&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Utiliz&amp;aacute;mos alguns dos behaviours que o Silverlight 3 j&amp;aacute; nos disponibiliza, tais como, o drag and drop, fluid e drop shadow. Atrav&amp;eacute;s do Expression Blend aplic&amp;aacute;mos aos v&amp;aacute;rios controlos estes comportamentos. Sendo a sua defini&amp;ccedil;&amp;atilde;o em xaml assim:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;il:MouseDragElementBehavior/&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;il:FluidMoveBehavior Duration=&amp;quot;00:00:03&amp;quot;&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;DropShadowEffect Direction=&amp;quot;310&amp;quot;/&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Com estes comportamentos, e utilizando a estrutura dada pela .net ria services, facilmente conseguimos um pequeno projecto aplicado a um cen&amp;aacute;rio real, mas com uma interface e comportamento bastante atractivo.&lt;/p&gt;
&lt;p&gt;Uma vez que estes &lt;i&gt;behavious&lt;/i&gt;, s&amp;atilde;o bastante intuitivos e f&amp;aacute;ceis de serem usados, muito em breve haver&amp;aacute; uma vasta colec&amp;ccedil;&amp;atilde;o que permita facilmente dar um bom aspecto e comportamento &amp;agrave; aplica&amp;ccedil;&amp;atilde;o.&lt;/p&gt;
&lt;p&gt;Ex: &lt;a href="http://gallery.expression.microsoft.com/en-us/MIXBehaviorPack"&gt;http://gallery.expression.microsoft.com/en-us/MIXBehaviorPack&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;O floatable window (&lt;a href="http://floatablewindow.codeplex.com/"&gt;http://floatablewindow.codeplex.com/&lt;/a&gt;) &amp;eacute; outro bom exemplo de como podemos dar um comportamento &amp;agrave; l&amp;aacute; Windows aos nossos controlos.&lt;/p&gt;
&lt;p&gt;Duplo clique do rato: &lt;a href="http://weblogs.asp.net/eecsaky/archive/2009/07/26/doble-click-en-silverlight-usando-behaviors.aspx"&gt;http://weblogs.asp.net/eecsaky/archive/2009/07/26/doble-click-en-silverlight-usando-behaviors.aspx&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;h3&gt;&lt;strong&gt;Conclus&amp;otilde;es&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Sabemos que o desenvolvimento das RIAs &amp;ldquo;s&amp;oacute; agora come&amp;ccedil;ou&amp;rdquo;, e ainda muito se fala e pouco se vai vendo, contudo &amp;eacute; muito importante que as ferramentas se preparem e ofere&amp;ccedil;am v&amp;aacute;rias op&amp;ccedil;&amp;otilde;es aos utilizadores, n&amp;atilde;o s&amp;oacute; para que se desenvolvam novas aplica&amp;ccedil;&amp;otilde;es com UX cada vez mais atractivas e funcionais, mas tamb&amp;eacute;m, para contribuir na facilidade e disponibiliza&amp;ccedil;&amp;atilde;o de servi&amp;ccedil;os aos utilizadores.&lt;/p&gt;
&lt;p&gt;A .NET Ria Services Framework &amp;eacute; um &amp;ldquo;&lt;i&gt;must have&lt;/i&gt;&amp;rdquo; na fam&amp;iacute;lia .net. e posiciona-se numa &amp;aacute;rea de extrema import&amp;acirc;ncia e utiliza&amp;ccedil;&amp;atilde;o &amp;ldquo;Web&amp;rdquo;, e portanto &amp;eacute; o primeiro passo da Microsoft nesta &amp;aacute;rea e na minha opini&amp;atilde;o pessoal, um passo certo e no caminho direito &lt;img src="http://blogs.fullsix.pt/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /&gt; N&amp;atilde;o s&amp;oacute; pelas funcionalidade &amp;ldquo;out of theBox&amp;rdquo; que nos d&amp;aacute;, mas pela sua simplicidade e estrutura&amp;ccedil;&amp;atilde;o, da aplica&amp;ccedil;&amp;atilde;o sobre a arquitectura ideal das aplica&amp;ccedil;&amp;otilde;es para este tipo de cen&amp;aacute;rios.&lt;/p&gt;
&lt;p&gt;Com a pr&amp;oacute;xima vers&amp;atilde;o beta a ser lan&amp;ccedil;ada no PDC, estou expectante sobre o que mais esta Framework nos ir&amp;aacute; oferecer, e que novas tools venham a ser apresentadas.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Algumas refer&amp;ecirc;ncias externas e exemplos:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://xamlpt.com/blogs/nunogodinho/archive/2009/07/21/net-ria-services.aspx"&gt;http://xamlpt.com/blogs/nunogodinho/archive/2009/07/21/net-ria-services.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://silverlight.net/forums/53.aspx"&gt;http://silverlight.net/forums/53.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://xamlpt.com/media/12/default.aspx"&gt;http://xamlpt.com/media/12/default.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/magazine/dd419663.aspx" title="THE MODEL-VIEW-VIEWMODEL (MVVM) DESIGN PATTERN FOR WPF"&gt;THE MODEL-VIEW-VIEWMODEL (MVVM) DESIGN PATTERN FOR WPF&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.riapt.org/" title="http://www.riapt.org/"&gt;http://www.riapt.org/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="tag" href="http://blogs.fullsix.pt/tag/silverlight/"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://xamlpt.com/aggbug.aspx?PostID=978" width="1" height="1"&gt;</description><category domain="http://xamlpt.com/blogs/chaves/archive/tags/silverlight+3/default.aspx">silverlight 3</category><category domain="http://xamlpt.com/blogs/chaves/archive/tags/RIA+Services/default.aspx">RIA Services</category></item><item><title>Some links to read…</title><link>http://xamlpt.com/blogs/chaves/archive/2009/07/23/some-links-to-read.aspx</link><pubDate>Thu, 23 Jul 2009 08:50:17 GMT</pubDate><guid isPermaLink="false">7e8b0034-b719-4475-a4b6-24c681638f0a:968</guid><dc:creator>Gonçalo Chaves</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://xamlpt.com/blogs/chaves/rsscomments.aspx?PostID=968</wfw:commentRss><comments>http://xamlpt.com/blogs/chaves/archive/2009/07/23/some-links-to-read.aspx#comments</comments><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://blogs.msdn.com/katriend/archive/2009/07/19/3-on-blend-3-7-sketchflow-composition-screens-and-navigation.aspx" href="http://blogs.msdn.com/katriend/archive/2009/07/19/3-on-blend-3-7-sketchflow-composition-screens-and-navigation.aspx"&gt;http://blogs.msdn.com/katriend/archive/2009/07/19/3-on-blend-3-7-sketchflow-composition-screens-and-navigation.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.silverlightshow.net/news/Import-Photoshop-Files-to-Blend-3.aspx" href="http://www.silverlightshow.net/news/Import-Photoshop-Files-to-Blend-3.aspx"&gt;http://www.silverlightshow.net/news/Import-Photoshop-Files-to-Blend-3.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://floatablewindow.codeplex.com/" href="http://floatablewindow.codeplex.com/"&gt;http://floatablewindow.codeplex.com/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.microsoft.com/downloads/details.aspx?FamilyID=827122a5-3ca0-4389-a79e-87af37cbf60d&amp;amp;displaylang=en" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=827122a5-3ca0-4389-a79e-87af37cbf60d&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=827122a5-3ca0-4389-a79e-87af37cbf60d&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://blogs.msdn.com/expression/archive/2009/07/06/hatching-effect-shader-for-both-siverlight-and-wpf.aspx" href="http://blogs.msdn.com/expression/archive/2009/07/06/hatching-effect-shader-for-both-siverlight-and-wpf.aspx"&gt;http://blogs.msdn.com/expression/archive/2009/07/06/hatching-effect-shader-for-both-siverlight-and-wpf.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://timheuer.com/blog/archive/2009/07/17/build-silverlight-2-and-3-apps-with-visual-studio-2008.aspx" href="http://timheuer.com/blog/archive/2009/07/17/build-silverlight-2-and-3-apps-with-visual-studio-2008.aspx"&gt;http://timheuer.com/blog/archive/2009/07/17/build-silverlight-2-and-3-apps-with-visual-studio-2008.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://blogs.msdn.com/brada/archive/2009/07/20/simple-example-using-managed-extensibility-framework-in-silverlight.aspx" href="http://blogs.msdn.com/brada/archive/2009/07/20/simple-example-using-managed-extensibility-framework-in-silverlight.aspx"&gt;http://blogs.msdn.com/brada/archive/2009/07/20/simple-example-using-managed-extensibility-framework-in-silverlight.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://timheuer.com/blog/archive/2009/07/21/mix-keynote-bouncing-plane-demo-updated-for-silverlight-3.aspx" href="http://timheuer.com/blog/archive/2009/07/21/mix-keynote-bouncing-plane-demo-updated-for-silverlight-3.aspx"&gt;http://timheuer.com/blog/archive/2009/07/21/mix-keynote-bouncing-plane-demo-updated-for-silverlight-3.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://visualstudiomagazine.com/articles/2009/05/27/handling-concurrency-with-entity-framework.aspx" href="http://visualstudiomagazine.com/articles/2009/05/27/handling-concurrency-with-entity-framework.aspx"&gt;http://visualstudiomagazine.com/articles/2009/05/27/handling-concurrency-with-entity-framework.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.dotnetcurry.com/ShowArticle.aspx?ID=302&amp;amp;AspxAutoDetectCookieSupport=1" href="http://www.dotnetcurry.com/ShowArticle.aspx?ID=302&amp;amp;AspxAutoDetectCookieSupport=1"&gt;http://www.dotnetcurry.com/ShowArticle.aspx?ID=302&amp;amp;AspxAutoDetectCookieSupport=1&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://xamlpt.com/aggbug.aspx?PostID=968" width="1" height="1"&gt;</description></item><item><title>Evento XAMLPT - Launch</title><link>http://xamlpt.com/blogs/chaves/archive/2009/07/16/evento-xamlpt-launch.aspx</link><pubDate>Thu, 16 Jul 2009 20:53:41 GMT</pubDate><guid isPermaLink="false">7e8b0034-b719-4475-a4b6-24c681638f0a:932</guid><dc:creator>Gonçalo Chaves</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://xamlpt.com/blogs/chaves/rsscomments.aspx?PostID=932</wfw:commentRss><comments>http://xamlpt.com/blogs/chaves/archive/2009/07/16/evento-xamlpt-launch.aspx#comments</comments><description>&lt;p&gt;Pois é :) Foi ontem que se realizou o primeiro evento XAMPT :)&lt;/p&gt;  &lt;p&gt;Tivémos a presença da comunidade e de outras pessoas interessadas no evento. Podem consultar as informações sobre a agenda em: http://xamlpt.com /launch e ficam algumas fotografias, para mais tarde recordar&lt;/p&gt;  &lt;p&gt;&lt;a title="http://xamlpt.com/media/p/931.aspx" href="http://xamlpt.com/media/p/931.aspx"&gt;http://xamlpt.com/media/p/931.aspx&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Obrigado a todos os que compareceram e a todos os que mostraram interesse em participar na comunidade.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;um abraço.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://xamlpt.com/aggbug.aspx?PostID=932" width="1" height="1"&gt;</description></item><item><title>Silverlight 3 Live now!!</title><link>http://xamlpt.com/blogs/chaves/archive/2009/07/09/silverlight-3-live-now.aspx</link><pubDate>Thu, 09 Jul 2009 18:09:23 GMT</pubDate><guid isPermaLink="false">7e8b0034-b719-4475-a4b6-24c681638f0a:916</guid><dc:creator>Gonçalo Chaves</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://xamlpt.com/blogs/chaves/rsscomments.aspx?PostID=916</wfw:commentRss><comments>http://xamlpt.com/blogs/chaves/archive/2009/07/09/silverlight-3-live-now.aspx#comments</comments><description>&lt;p&gt;E ainda nem é dia 10 e já temos aí as versões finais RTW, do Silverlight 3 :)&lt;/p&gt;  &lt;p&gt;Eis os links:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://tr.im/rBeT"&gt;Plugin&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://tr.im/rBj5"&gt;Tools para o VS2008 SP1&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://xamlpt.com/aggbug.aspx?PostID=916" width="1" height="1"&gt;</description></item></channel></rss>