550 likes | 661 Views
Développement Web en 2007. Pierre Lagarde http://blogs.msdn.com/pierlag. Christophe Lauer http://blogs.msdn.com/clauer. Agenda. Positionnement de Silverlight Les bases avec Silverlight 1.0 Les nouveautés pour développement Web avec Silverlight 1.1 Langages dynamiques PopFly
E N D
Développement Web en 2007 Pierre Lagarde http://blogs.msdn.com/pierlag Christophe Lauer http://blogs.msdn.com/clauer
Agenda • Positionnement de Silverlight • Les bases avec Silverlight 1.0 • Les nouveautés pour développement Web avec Silverlight 1.1 • Langages dynamiques • PopFly • Silverlight avec Mono
Beaucoup à dire… Choix et arbitrages… mais : - TechDays 2007 : http://tinyurl.com/2yh868 - Mini Mix 2007 : http://tinyurl.com/3b9ogb
PleaseWelcomeourGuest! • Miguel de Icaza, Mono Project Lead, Novell.
Pourquoi Silverlight • Avoir une interface riche dans une application Web • Graphiques vectoriels • Des médias • Un moteur d’animation • Intégration facile avec les sites web existants • Intégration sur une simple page HTML • Exécution multi navigateur / multi plate forme • IE, FireFox, Safari • Windows, Macintosh (Intel – PPC)
Pourquoi Silverlight (suite) • Intégration parfaite Design / Développeur
Les 3 scénarii de base • Scénario Média • Codecs supportés • WMA, MP3 et WMV • HTTP progressive download • Fonctionne avec tous les serveurs web • Streaming • Supporte le 720 HD vidéo plein écran • Contenu dynamique et intéractif • Interface vectorielle et animée • Langage de description d’interface en XML (XAML) • RIA (Rich Internet Application) : futur
Rich Internet Application (RIA) • Non supporté dans la CTP • Contrôles Riches • Contrôles de base • Textbox, Bouton • ListView, Grille • Scrollbar, etc… • Databinding • Positionnement par Layout • Contrôles basés sur le Silverlight 1.1 • écrits en .NET
.NET for Silverlight Browser Host Data WPF Networking MS AJAX Library REST Extensible Controls LINQ XLINQ POX RSS BCL DLR JSON DOM Integration SOAP Generics Collections Ruby Python Légende CLR Execution Engine v1.1 Application Services XAML Légende v1.0 Presentation Core Deploy Inputs UICore DRM Media Keyboard Mouse Ink Friction-Free Installer Vector Text Media Controls Animation Images Auto- Updater Editing WMA MP3 Layout VC1
demo - Vidéo- PageTurn- Scribbler
demo - Debugging sur Mac
Comment fonctionneSilverlight ? • Silverlightest un contrôle qui s’installedans IE et un plug-in dans Firefox et Safari • Silverlight 1.0 se programme en Javascript, classiquementcomme pour Ajax • Les éléments HTML et du DOM XAML peuventêtremanipulésdans le même bloc de code • Le contenuSilverlightpeutêtreintégré à n’importequelélémentconteneur HTML (ie DIV) dansune document HTML • Les contrôles HTML peuvent se superposer au contenuSilverlight
Script de chargement <div id="SilverlightControlHost" class="silverlightHost"> <script type="text/javascript"> createSilverlight(); </script> </div> function createSilverlight() { var scene = new UntitledProject2.Scene(); Sys.Silverlight.createObjectEx({ source: "Scene.xaml", parentElement: document.getElementById("SilverlightControlHost"), id: "SilverlightControl", properties: { width: "100%", height: "100%", version: "0.9" }, events: { onLoad: Sys.Silverlight.createDelegate(scene, scene.handleLoad) } }); }
Exemple de XAML • Par exemple : <Canvas xmlns="..." xmlns:x="..."> <Rectangle Width="200" Height="150" Fill="Blue" /> <Ellipse Width="200" Height="150" Stroke="Orange" /> </Canvas>
Dessiner / Designer avec XAML • Vocabulaire de base des éléments XAML • Canvas • Brush • Formes de base • Rectangle, Ellipse, Line, Polygon, PolyLine, Path, etc… • TextBlock • Image
Canvas Canvas Rectangle • Est une surface de dessin • Les enfants ont des positions relatives <Canvas Width="250" Height="200"> <Rectangle Canvas.Top="25" Canvas.Left="25" Width="200" Height="150" Fill=“Yellow" /> </Canvas>
Integration des Médias • <MediaElement /> • Utilisé pour afficher des médiasmusiqueouvidéo • Contrôle de la vidéo par code • Pas de contrôles standards – Vousconstruisezvotre interface en XAML ! • Conventions de nommage • playButton, stopButton,pauseButton, … • volumeDownButton, … <Canvas xmlns="..." xmlns:x="..."> <MediaElement Source=“silverlight.wmv" /> </Canvas>
Accéder à Silverlight via JavaScript • Utiliser le classique document.getElementById() du nabigateur pour retrouver le contrôle Silverlight dans une page : • Ou bien le $get() de ASP.NET AJAX : var control = document.getElementById(“SilverlightControl”); var control = $get(“SilverlightControl”);
Retrouver un objet XAML en Javascript • Utilisation de la méthode findName(<Name>) <Canvas xmlns="..." xmlns:x="..."> <Ellipse x:Name="theCircle" Width="100" Height="100" Fill="Yellow" /> </Canvas> varsControl= document.getElementById(“SilverlightControl1"); vartheCircle = sControl.content.findName("theCircle"); if (theCircle != null) theCircle.opacity = 0.5;
Référencer les éléments “Child” • La Collection Canvas.Children : • Add() • Insert() • Remove() • RemoveAt() • GetItem() • Clear() • Count
MéthodeCreateFromXaml • Permet la création dynamique d’objets Silverlight et leur insertion dans l’arbre XAML • Permet des scénarios intéressants où le XAML est généré sur le client (Ajax) ou retourné par le serveur varsControl= document.getElementById(“SilverlightControl1"); var rootCanvas2 = sControl.content.findName("canvas2"); var fragment ='<Rectangle Fill="Red" Height="100" Width="100"/>'; varnewRect = sControl.content.createFromXaml(fragment); rootCanvas2.children.add(newRect);
EvènementsSilverlight Standards • Evènements Standards : • Loaded • MouseMove • MouseEnter • MouseLeave • MouseLeftButtonDown • MouseLeftButtonUp • Utilisez le pattern suivant : • KeyUp • KeyDown • GotFocus • LostFocus function onMouseEnter(sender, eventargs) { sender.Fill = “Red”; }
Exempled’évènement <Canvas xmlns="..." xmlns:x="..."> <Ellipse MouseEnter="javascript:onMouseEnter" MouseLeave="javascript:onMouseLeave" Height="100" Width="100" Fill="Teal" /> <Ellipse Canvas.Left="120“ MouseEnter="javascript:onMouseEnter" MouseLeave="javascript:onMouseLeave" Height="100" Width="100" Fill="Teal" /> </Canvas> function onMouseEnter(sender) { sender.Fill = “Coral”; } function onMouseLeave(sender) { sender.Fill = “Teal”; }
Animations avec XAML • Silverlight propose un système d’animations riche • Peuvent être définies en XAML • Peuvent être démarrées/contrôles par code • Modèle Complet : • Timeline, Triggers, DoubleAnimation, PointAnimation, ColorAnimation, etc… • KeyFrames • Discrete, Linear, Splines
Programmer les Animations • L’objet StoryBoard peut être contrôlé par code : • Begin() • Pause() • Resume() • Stop() • Seek() function onMouseEnter(sender) { varanimationSequence = sCtrl1.content.findName(“animationSequence”); animationSequence.Begin(); }
démo Silverlight 1.0 Bêta
.NET for Silverlight Browser Host Data WPF Networking MS AJAX Library REST Extensible Controls LINQ XLINQ POX RSS BCL DLR JSON DOM Integration SOAP Generics Collections Ruby Python Légende CLR Execution Engine v1.1 Application Services XAML Légende v1.0 Presentation Core Deploy Inputs UICore DRM Media Keyboard Mouse Ink Friction-Free Installer Vector Text Media Controls Animation Images Auto- Updater Editing WMA MP3 Layout VC1
Agenda • Accéder au DOM en code « Managed » • Web Services • IsolatedStorage • FileUpload
Accéder au DOM en .NET • Namespace • System.Windows.Browser • Instance accésible depuis • HtmlPage.
Hiérarchie des types HTMLSystem.Windows.Browser HtmlDocument HtmlElement ScriptableObject HtmlObject HtmlPage.Window
Appeler du code .NET depuis le Javascript • [Scriptable] • Propriétés, Méthodes, Evènement accessible depuis le JavaScript • Enregistrement dynamique par l’objet .NET WebApplication.Current. RegisterScriptableObject("exemple", this); • Appel en JavaScript • myControl.Content.[exemple].ManagedProperty
demo Coder une page HTML dynamique en .NET !
WebService • Comme pour ASP.NET 1.0 Ajax • [ScriptService] et [WebMethod] • Serialisation JSON • Génération du proxy avec slwsdl.exe • Code généré pour .NET Silverlight avec System.Windows.Browser.SoapHttpClientProtocol • Support l’appel Synchrone et Asynchrone • Les services ASP.NET • Profile_JSON_AppService.axd • Authentication_JSON_AppService.axd
Isolated Storage • Récupérer un handle sur le storage local : • IsolatedStorageFile.GetUserStoreForApplication() • Méthode create/read/write sur le handle • Support d’un « path » relatif • "directoryA\SomeFileInTheStore.txt" • Vérification de la taille du stockage • IsolatedStorageFile.CurrentSize
demo Web Services et IsolatedStorage
File Upload OpenFileDialog ofd = new OpenFileDialog(); ofd.EnableMultipleSelection = true; foreach (FileDialogFileInfo fdfi in ofd.SelectedFiles) { //fdfi.Name; SendFileWebService(…); }
demo FileUpload
Agenda • Positionnement de Silverlight • Les bases avec Silverlight 1.0 • Les nouveautés pour développement Web avec Silverlight 1.1 • Langages dynamiques • PopFly • Silverlight avec Mono
Langages Dynamiques Miguel de Icaza, Mono Project Lead, Novell
Public depuis le 18 Mai : Voir www.popfly.com
Popfly, qu’est-ce au juste ? • Editeur de Pages Web • Idem Office Live • Intégration des mash-ups • Création de « mash-ups » Web • Assemblage de blocs • Extensible (Your Name Here!) • Communauté • Réseau Social, … • Partage, invitations, …
Mash-up Editor: • Assemblage de blocs standards • Service, Traitement, Affichage • Possible de copier et modifier un mash-up • Les « Tweakers » • Possible de copier un bloc • Nécessite de connaitre JavaScript… • Possible d’ajouter du HTML, CSS ou JS Custom • Les « Power Users »…
Vos propres Blocs dans Popfly ! <YourNameHere/>
Ecrire un bloc dans Popfly ? • Blocs natifs et Blocs « Custom » • Pas de XAML dans la version actuelle… • Directement depuis Popfly • « Rippez » un bloc existant • Visual Studio pour la coloration syntaxique • Conventions de nommage • A voir… • Complexité ? • 90% des blocs de services peuvent dériver de RSS
Ecrire un bloc Custom • Un descripteur XML • Un fichier JS contenant la logique • Mise au point… • console.write • Intuition ;)
démo Ecrire un Bloc pour Popfly
Agenda • Positionnement de Silverlight • Les bases avec Silverlight 1.0 • Les nouveautés pour développement Web avec Silverlight 1.1 • Langages dynamiques / Interopérabilité • PopFly • Silverlight avec Mono