Roberto Brunetti

ASP.NET - Mobility
Team System

SharePoint Conference

.NET Programming

Corsi

SharePoint

GAT: Projects in Solution

Giocando con EnvDTE è possibile recupeare tutti i progetti di una solution su cui viene lanciata una recipe GAT.

Ecco il codice

using System;

using System.ComponentModel;

using System.Data.Common;

using System.Data;

using System.Collections.Generic;

using Microsoft.Practices.Common;

using System.ComponentModel.Design;

using System.Configuration;

using Microsoft.Practices.RecipeFramework.VisualStudio;

using System.IO;

using System.Collections.Specialized;

using System.Globalization;

using EnvDTE;

using System.Collections;

using System.Windows.Forms;

namespace DevLeap.Converters

{

public class ProjectsInSolutionConverter : StringConverter

{

// Indica se pu• essere chiamato il metodo GetStandardValues

public override bool GetStandardValuesSupported(ITypeDescriptorContext context)

{

return true;

}

public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)

{

MessageBox.Show("Converter");

DTE dte = (DTE)context.GetService(typeof(DTE));

List<String> values = new List<String>();foreach (Project p in dte.Solution.Projects)

{

values.Add(p.Name);

}

return new StandardValuesCollection(values);

}

}

}

In questo caso ho usato un custom converter per fornire i valori ad un argument della recipe: una volta che lo sviluppatore ha selezionato il progetto l'argument avrà il nome del progetto indicato. Tramite la action (presente in GAT) GetProjectAction è possibile risalire al EnvDTE.Project per effetturare operazioni sul progetto.

Posted: lug 23 2008, 09.48 by rob | with no comments
Filed under: ,
GAT: Creare una Unbound Recipe

Dopo un giorno di consulenza in cui abbiamo anche affrontata l'argomento di generazione codice e automatizzazione procedure e abbiamo analizzato GAT per la parte di Recipe, Action, Template Reference, Bound Recipe e creazione di Action, Editor e Converters custom, visto che la documentazione sul prodotto è praticamente inesistente posto il codice per creare una unbound recipe, condivido i passi per la creazione di una unbound recipe reference.

Nel file .xml di definizione del Guidance Package occorre inserire una "BindingRecipe", ovvero la Recipe che viene eseguita quando si abilita un guidance package in un progetto Visual Studio.

<Recipe Name="BindingRecipe">

<Types>

<TypeAlias Name="RefCreator" Type="Microsoft.Practices.RecipeFramework.Library.Actions.CreateUnboundReferenceAction, Microsoft.Practices.RecipeFramework.Library"/>

</Types>

<Caption>Crea una reference unbound nella "BindingRecipe" </Caption> <Actions>

<Action Name="UnboundRecipe" Type="RefCreator" AssetName="MyUnboundRecipe"

ReferenceType="GATSteps07.References.MyUnboundReference, GATSteps07" /> </Actions>

</Recipe>

Nel mio caso il progetto GAT si chiama GATSteps07. Nel progetto è stata creata una classe (nella directory references) derivata da UnboundRecipeReference denominata MyUnboundReference. Il namespace utilizzato è GATSteps07.References.

Ecco il codice della classe (scusate l'eventuale indentazione sballata)

using System;

using System.Collections.Generic;

using System.Text;

using Microsoft.Practices.RecipeFramework;

namespace GATSteps07.References

{

public class MyUnboundReference : UnboundRecipeReference

{

public MyUnboundReference(string recipe) : base(recipe) { }

public override bool IsEnabledFor(object target)

{

return true;

}

public override string AppliesTo

{

get { return "Dove ti pare"; }

}

}

}

Il codice molto semplice indica true come valore di ritorno per la condizione di abilitazione della Unbound Recipe Reference quindi la reference viene attivata da qualunque elemento Visual Studio e sarà sempre presenta nel Guidance Package Navigator.

Fatto questo è sufficiente creare la Recipe MyUnboundRecipe (il nome deve corrispondere a quanto indicato in AssetName) come una qualunque altra Recipe del Package. L'unica particolarità è l'attributo Bound impostato a False.

A questo punto è sufficiente avere un progetto Visual Studio, abilitare il Guidance Package e richiamare la Recipe "Aggiunge una classe autogenerata per test".

Per completezza aggiungo la definizione della Recipe MyUnboundRecipe che è identica (per coloro che hanno seguito il nostro corso su GAT/GAX o le sessioni di DevCon) alla demo 04 dove appunto andavamo ad aggiungere al progetto corrente di Visual Studio una classe autogenerata con il T4 Template.

<Recipe Name="MyUnboundRecipe" Bound="false">

<Caption>Aggiunge una classe autogenerata per test</Caption>

<HostData>

<Icon ID="525" />

<CommandBar Name="Solution" />

<CommandBar Name="Solution Folder" />

<CommandBar Name="Project" />

<CommandBar Name="Folder" />

<CommandBar Name="Item" />

<CommandBar Name="Web Project" />

<CommandBar Name="Web Folder" />

<CommandBar Name="Web Item" />

</HostData>

<Arguments>

<!-- Recupero progetto corrente EnvDTE di VS 2005 -->

<Argument Name="CurrentProject" Type="EnvDTE.Project, EnvDTE, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">

<ValueProvider Type="Microsoft.Practices.RecipeFramework.Library.ValueProviders.FirstSelectedProject, Microsoft.Practices.RecipeFramework.Library" />

</Argument>

<!-- Recupero DefaultNamespace dalle propriet… del progetto -->

<Argument Name="ProjectSuffixName">

<ValueProvider Type="Microsoft.Practices.RecipeFramework.Library.ValueProviders.ExpressionEvaluatorValueProvider,Microsoft.Practices.RecipeFramework.Library"

Expression="$(CurrentProject.Properties.Item('DefaultNamespace').Value)" />

</Argument>

<!-- Nome per la classe da creare -->

<Argument Name="EntityClassName">

<Converter Type="Microsoft.Practices.RecipeFramework.Library.Converters.CodeIdentifierStringConverter, Microsoft.Practices.RecipeFramework.Library"/>

</Argument>

<!-- Nome del file della classe da creare -->

<Argument Name="EntityTargetFile">

<ValueProvider Type="Microsoft.Practices.RecipeFramework.Library.ValueProviders.ExpressionEvaluatorValueProvider,Microsoft.Practices.RecipeFramework.Library"

Expression="$(EntityClassName).cs">

<MonitorArgument Name="EntityClassName" />

</ValueProvider>

</Argument>

<!-- Quanti elementi (richiesti nel Wizard) creare -->

<Argument Name="HowMany" Type="System.Int32">

</Argument>

</Arguments>

<GatheringServiceData>

<Wizard xmlns="http://schemas.microsoft.com/pag/gax-wizards" SchemaVersion="1.0">

<Pages>

<Page>

<Title>GATStep07 Information </Title>

<LinkTitle>XXX Information Title</LinkTitle>

<Help>

Metti i' nome di' progetto !

</Help>

<Fields>

<Field ValueName="EntityClassName" Label="Nome Classe" InvalidValueMessage="Deve essere un nome di classe valido" />

<Field ValueName="HowMany" Label="Quanti" InvalidValueMessage="Deve essere un numero" />

</Fields>

</Page>

</Pages>

</Wizard>

</GatheringServiceData>

<Actions>

<Action Name="GenerateClass"

Type="Microsoft.Practices.RecipeFramework.VisualStudio.Library.Templates.TextTemplateAction, Microsoft.Practices.RecipeFramework.VisualStudio.Library"

Template="Text\Entity.t4">

<Input Name="ClassName" RecipeArgument="EntityClassName" />

<Input Name="TargetNamespace" RecipeArgument="ProjectSuffixName" />

<Input Name="HowMany" RecipeArgument="HowMany" />

<Output Name="Content" />

</Action>

<Action Name="AddEntityClass"

Type="Microsoft.Practices.RecipeFramework.Library.Actions.AddItemFromStringAction, Microsoft.Practices.RecipeFramework.Library"

Open="false">

<Input Name="Content" ActionOutput="GenerateClass.Content" />

<Input Name="TargetFileName" RecipeArgument="EntityTargetFile" />

<Input Name="Project" RecipeArgument="CurrentProject" />

</Action>

</Actions>

</Recipe>

Spero utile

Posted: lug 12 2008, 07.42 by rob | with no comments
Filed under:
Web Futures News

Altre novitá rilasciate per Silverlight:

Microsoft Silverlight Tools Beta 2 for Visual Studio 2008

Add-on for Visual Studio 2008 for developing applications for Silverlight 2 Beta 2.

Microsoft Silverlight 2 Software Development Kit Beta 2 (June 2008)

This SDK provides documentation, libraries, and tools for developing Silverlight applications.

Microsoft Expression Blend 2.5 June 2008 Preview

Microsoft Expression Blend 2 is the professional design tool used to create engaging Web-connected experiences for Microsoft Windows. The Expression Blend 2.5 June 2008 Preview allows you to create Microsoft Silverlight 2-based applications.

Sessione Web Futures

Quando si parla del futuro, non si é mai troppo avanti :-)

Il 30 maggio, giorno dopo la fine di DevCon 2008, e qualche ora dopo la fine della sessione su Web Futures é uscita la Preview 3 di ASP.NET MVC Framework.

Nella sessione avevamo parlato della versione Preview 2, ultima disponibile al momento della conferenza.

Non é cambiato molto, soprattutto nelle cose che abbiamo mostrato nella mini-introduzione durante la sessione.

Il download ASP.NET MVC Preview 3

ASP.NET 3.5 Extensions e .NET FW 3.5 SP1 Beta

Continua la marcia verso la release delle estensioni per ASP.NET 3.5.

Dopo il mio delirante :-) post in cui cercavo di far luce sulle varie componenti, ma soprattutto su dove si trovano e in che versione sono (si veda http://blogs.devleap.com/rob/archive/2008/04/18/asp-net-3-5-extension-futures-mvc-preview-2-extension-preview-data-service-dynamic-data-silverlight-dinamic-language-ado-net-sync-service-e-sync-framework.aspx) da qualche giorno è stata rivoluzionata la pacchettizzazione.

In pratica

1) ASP.NET Dynamic Data
2) ASP.NET AJAX Browser History
3) ADO.NET Data Service
4) ADO.NET Entity Framework che facevano parte di ASP.NET 3.5 Extension Preview di Dicembre 2007 sono stati inserire nel .NET Framework 3.5 SP1 Beta (scaricabile da http://www.microsoft.com/downloads/details.aspx?FamilyId=8C36ACA4-E947-4760-9B05-93CAC04C6F87&displaylang=en)

In questo nuovo pacchetto troviamo anche un "quasi" nuovo componente della famiglia: ASP.NET Script Combining che cerca di ottimizzare la quantità di codice Javascript per AJAX quando si utilizzano solo alcuni controlli o un più controlli dello stesso tipo.

Quesito della Susy :-). Cosa manca ?

1) ASP.NET MVC Framework che resta in versione Preview 2 di Marzo 2007
2) Silverlight Controls for ASP.NET che sono stati pacchettizzati nel Silverlight 2 SDK Beta 1 (visto che non esiste più neanche il Silverlight Tools Beta 1 for VS 2008, si trovano solo quì)

Il SP1 Beta del FW 3.5 comprende anche la versione rivista dei synchronization service di ADO.NET per l'utilizzo anche su device Windows Mobile e ADO.NET Entity Framework per SQL CE su device Windows Mobile come indicato in questo mio post: http://blogs.devleap.com/rob/archive/2008/05/17/microsoft-sql-server-compact-3-5-sp1-beta-synchronization-services-for-ado-net-v1-0-sp1-beta.aspx.

Ricordo anche che il SP1 Beta del FW 3.5 non comprende il SP1 Beta per VS 2008 che si può scaricare separatamente. Esiste anche l'installazione combinata di entrambi a questo indirizzo: http://download.microsoft.com/download/7/3/8/7382EA08-4DD6-4134-9B92-8585A5B07973/VS90sp1-KB945140-ENU.exe. Alla nostra DevCon abbiamo due sessioni dedicate a questi argomenti.

Microsoft SQL Server Compact 3.5 SP1 Beta / Synchronization Services for ADO.Net v1.0 SP1 Beta

E' stato rilasciato in versione beta il SP1 per SQL Server Compact Edition versione 3.5: non si tratta peró di una patch, ma di un aggiornamento per supportare ADO.NET Entity Framework. Oltre a LINQ to SQLCE abbiamo quindi la possibilitá (anche se per adesso é una beta) di usare query LINQ su ADO.NET Entity Framework verso SQL CE.

Il secondo componente, sempre incluso nello stesso download, é il SP1, sempre beta, dei Synch Services for ADO.NET V 1.0 (presente in .NET FW 3.5). La vera novitá é il supporto per device (la versione presente nel .NET FW 3.5 gira solo su Desktop).

Questi due componenti si presentano in vari MSI:

1) SSCEDeviceRuntime che rappresenta appunto il runtime di SQL CE 3.5 SP1 Beta per l'ambiente Windows Mobile. Si installa sul Desktop come sempre e va a incastrarsi in Visual Studio 2008 SP1 Beta

2) SSCERuntime é invece il componente analogo per il desktop. Installa anche SQL Server 2008 CTP e Visual Studio 2008 SP1 Beta. Installare prima questo componente

3) SSCEServerTools é la componente server per la replica Merge e/o RDA via IIS. Occorre come sempre disinstallare la versione precedente su IIS prima di installare questa nuova versione. Per qualche dettaglio sulle componenti client e server dare uno sguardo a questo mio articolo http://thinkmobile.it/blogs/rob/archive/2006/08/20/5712.aspx. L'articolo era basato su SQL CE 3.0, ma, versione a parte, le componenti sono le stesse.

Le feature disponibili sono:

  • Supporto per ADO.NET Entity Framework tramite query LINQ.
  • Case-sensitive collation a livello DB
  • SS Management Studio in SQL Server 2008 per amministrare DB SQL CE 3.5 (finalmente) 
  • Replica dei nuovi data type di SQL 2008 come datetimeoffset, geography e geometry.
  • Data replication con SQL Server 2000, SQL Server 2005 e SQL Server 2008 tramite Synchronization Services for ADO.NET v1.0 SP1 Beta sia per desktop che windows mobile
  • Data replication con SQL Server 2005 and SQL Server 2008 tramite merge replication e Remote Data Access (RDA).
  • Alla nostra conferenza annuale DevCon 2008 abbiamo una sessione sull'argomento: la sessione tratta la versione 3.5 ufficiale (quella uscita con .NET 3.5) per coprire la versione attuale, inquadrando anche questi nuovi componenti.

    ADO.NET Sync Services

    Ho appena pubblicato un mio articolo uscito su Computer Programming di Marzo 2008 che ripercorre l'inizio della sessione di DevCon 2008.

    VSTS Web Access

    Facendo riferimento al post precedente http://blogs.devleap.com/rob/archive/2008/04/19/vsts-nuovi-componenti-e-versioni.aspx, mi sono arrivate un paio di mail sul funzionamento di questo oggetto. Condivido qualche screenshot per far capire quali sono i componenti di TFS accessibili via web.

    Prendo il progetto che abbiamo visto in tante nostre conferenze e che abbiamo mostrato come demo al lancio ufficiale di Visual Studio 2008

    Home page: si possono selezionare i TFS Project (a cui abbiamo accesso in base al login effettuato)

    01Home

    Si possono vedere i work item del progetto (bugs nello screenshot)

    02Bugs

    Si possono inserire nuovi work item come dal Team Explorer

    02bNewWI

    Questo il form di inserimento di un nuovo Bug

    02cNewBug

    L'accesso ai Report era garantito anche dalla versione "normale" di TFS tramite il portale esposto da SharePoint. Questa la nuova interfaccia:

    03Report

    Accesso ad un singolo report

    03bReport

    Vista e gestione dei documenti ospitati in SharePoint

    04Documents

    Accesso al Controllo dei sorgenti e relative operazioni su un file

    05SCC

    Accesso alle Build effettuate nel passato

    06Build

    e accodamento manuale di una build

     06bAccoda

    Impostazioni delle Alert su un progetto

    07TeamAlerts

    E gestione della security

     08Security

    In pratica tutte (o quasi) le operazioni effettuabili da Team Explorer e dall'interfaccia web/based nativa possono essere effettuate da questa nuova interfaccia via web.

    Off Topic: mentre facevo questi screenshot, come le brave casalinghe, di domenica mattina, stavo facendo un po' di pulizie...sul PC si intende :-).

    Copiando 79 MB di dati sul disco esterno, mi é apparso questo. Date un occhio al tempo stimato  :-)

    Copia

    Aggiunta al post precedente

    Oltre a quanto indicato in http://blogs.devleap.com/rob/archive/2008/04/18/asp-net-3-5-extension-futures-mvc-preview-2-extension-preview-data-service-dynamic-data-silverlight-dinamic-language-ado-net-sync-service-e-sync-framework.aspx, é stato rilasciato anche Entity Framework per SQL CE.

    Il tutto si trova sotto http://www.microsoft.com/downloads/details.aspx?FamilyID=68539FAE-CF03-4C3B-AEDA-769CC205FE5F&displaylang=en. E' in versione SP1 Beta ed é allineato a ADO.NET Entity Framework Beta 3 e ai Tool della December 2007 CTP. Se veda il post indicato all'inizio per i link e il significato dei vari componenti.

    VSTS: nuovi componenti e versioni

    Rilasciato Visual Studio Team System Web Access 2008 SP1 Power Tool Community Tecnology Preview.

    Prodotto dal titolo piú lungo d'Europa per indicare una nuova versione del famoso TeamPlain, ovvero l'intefaccia web-based per l'accesso a Team Foundation Server.

    Si scarica da http://www.microsoft.com/downloads/details.aspx?FamilyID=A06ED577-DE38-426F-9341-3F78E46DA09A&displaylang=en.

    Riporto l'elenco delle funzionalitá.

  • NEW: Single instance with multiple languages
  • NEW: Direct links to new work items with initial values
  • NEW: Share ad-hoc work item queries
  • NEW: Shelveset viewer
  • NEW: Improved search support
  • Direct links to work items, query results, diffs, change sets and more
  • Display custom controls on work item forms
  • View queued builds, queue new builds
  • Add new work items or edit existing ones
  • Work with any type of work item, including custom ones
  • Add new work item queries or edit existing ones
  • View, download, upload, check-in and check-out documents on SharePoint team portal
  • View reports, export as PDF or Excel
  • Browse source control repositories, download files, view changesets, diffs, histories, and annotated views
  • View build results, start or stop builds
  • Search for keywords in work items
  • Nuova CTP (la dodicesima per la precisione) di Rosario, la prossima versione di Visual Studio Team System.

    Disponibile sotto forma di Virtual Machine giá installata (una gran cosa vista la durata del setup) divisa nei classici .rar da scompattare. 1GB di RAM consigliata: sul mio portatile ho assegnato 2GB e direi che va piuttosto bene.

    Il tutto a partire da questo link http://www.microsoft.com/downloads/details.aspx?FamilyID=65D0E3BD-9DF3-421A-804F-8F01BD90F0B4&displaylang=en.

    Vengono usati i classici account per Setup, Service e Reports.

  • Username: TFSSETUP, password: tfssetup
  • Username: TFSSERVICE, password: tfsservice
  • Username: TFSREPORTS, password: tfsreports
  • ASP.NET 3.5 Extension, Futures, MVC Preview 2, Extension Preview, Data Service, Dynamic Data, Silverlight, Dinamic Language, ADO.NET Sync Service e Sync Framework

    Titolo breve :-)

    Questo post cerca di individuare la situazione attuale di metà aprile rispetto alle mille novità per gli sviluppatori web (e non solo) che ci attendono nei prossimi giorni/settimane/mesi. Come sempre accade quando possiamo dare un'occhiata alle varie CTP e Beta, le cose cambiano, e molto, da versione a versione, e, spesso, la prima cosa che viene modificata è la pacchettizzazione.

    Cerco di fare luce sui vari componenti disponibili e la loro "pacchettizzazione":

    Luglio 2007
    Esce ASP.NET Futures (July 2007 CTP appunto)
    L'idea è quella di inserire nel pacchetto le aggiunte future ad ASP.NET rispetto a quanto già previsto nella versione 3.5.

    I componenti di questo download sono:

    • AJAX History Management: funzionalità che sfruttando le librerie AJAX consentono di gestire la "History" del browser. Attualmente questo componente è nel nuovo pacchetto ASP.NET 3.5 Extension Preview di Dicembre 2007 (vedi sezione apposita). E' quindi diventata obsoleta queta versione
    • Silverlight Control for ASP.NET: espone un componente MediaPlayer pilotabile da Javascript e un componente Silverlight per contenere XAP della versione 1.0 di Silverlight. Anche questo componente è obsoleto ed esiste una nuova versione sia in ASP.NET 3.5 Extension Preview Dic 2007, sia in versione ancora più aggiornata nel Silverlight Tools Beta1 for Visual Studio 2008. Vedi sezione apposita
    • ASP.NET Dynamic Data: l'idea è quella di generare in automatico (e ovviamente poter poi personalizzare il tutto) le pagine di gestione dei dati; si parte dalla definizione di un modello (LINQ to SQL e XML sono nativi) per creare in automatico le pagina di inserimento, modifica, cancellazione, lista, dettaglio e master/detail partendo proprio dalla definizione dello schema del modello. Esiste una nuova versione (3.6) in ASP.NET 3.5 Extension Preview Dic 2007.
    • ASP.NET Application Services: con ASP.NET 3.5 rilasciato è possibile agganciare da pagina AJAX (tramite lo ScriptManager) e da client Windows Form e WPF i servizi applicativi esposti da ASP.NET: Membership, RoleManager, Profile. In pratica l'idea è esporre tramite servizi (è un Handler ASP.NET che se ne occupa) le componenti di Autenticazione (Login e appartenenza ai ruoli) e il Profilo dell'utente, consentendo a client diversi (primo fra tutti un client web basato su AJAX) di accedervi.
      In questo componente vengono esposti altri due servizi per aggiungere servizi di Live Search e SiteMap.
    • Dynamic Language Support for ASP.NET: IronPython e Managed JScript diventano linguaggi utilizzabili in ASP.NET

    Questo componente è ancora disponibile a partire da questo link: http://www.asp.net/downloads/futures/. Perchè lo indico visto che il componente è obsoleto ? Perchè ci sono alcune cose che non sono nei nuovi "package" scaricabili. Ad esempio il supporto a linguaggi dinamici e gli application services non ci sono nelle nuove pacchettizzazioni.

    Dicembre 2007
    Esce ASP.NET 3.5 Extension Preview (Dec 2007 CTP)

    Anche in questo caso troviamo molti componenti ancora attuali.

    I componenti di questa versione sono:

    • AJAX History Management: funzionalità che sfruttando le librerie AJAX consentono di gestire la "History" del browser. Questa è l'ultima versione (ad oggi ovviamente)
    • Silverlight Control for ASP.NET: espone un nuovo componente MediaPlayer pilotabile da Javascript e un nuovo componente Silverlight per contenere XAP della versione 1.0 e 2.0 (novità) di Silverlight. Anche questo componente è però obsoleto ed esiste una nuova versione ancora più aggiornata nel Silverlight Tools Beta1 for Visual Studio 2008. Vedi sezione apposita
    • ASP.NET Dynamic Data: l'idea è quella di generare in automatico (e ovviamente poter poi personalizzare il tutto) le pagine di gestione dei dati; si parte dalla definizione di un modello (LINQ to SQL e XML sono nativi) per creare in automatico le pagina di inserimento, modifica, cancellazione, lista, dettaglio e master/detail partendo proprio dalla definizione dello schema del modello. E' una nuova versione che utilizza la versione 3.6.0.0 della System.Web.Extension. Quando create un progetto dai template di Visual Studio occhio a scegliere la versione corretta: partite da un progetto Dynamic Data per ottenere la configurazione nel config che, sfruttando il classico, bindingRedirect porta all'utilizzo di questa versione al posto della 3.5 inclusa nel .NET Framework
    • ASP.NET Application Services: non è inclusa in questa versione quindi è ancora valida la precedente July 2007 CTP.
    • Dynamic Language Support for ASP.NET: non è inclusa in questa versione quindi è ancora valida la precedente July 2007 CTP.
    • ADO.NET Data Service: anche questo componente sfrutta la versione 3.6.0.0 della System.Web.Extensions (occhio quindi alla configurazione nel web.config, si può usare il template apposito di VS per creare nuovi progetti). L'idea in questo caso è esporre un modello basato su ADO.NET Entity Framework (da installa a parte) tramite servizi che consentono l'interrogazione e l'aggiornamento dei dati. Il modello esposto da questi servizi sfrutta REST per lo scambio delle informazioni da e verso i client: Nella libreria è presente uno script per interagire con i servizi da pagina AJAX-based
    • ADO.NET Entity Framwork: nel setup di ASP.NET Extension Preview è incluso solo il runtime della Beta3: per creare i modelli tramite designer è necessario un componente separato (Beta 3 Designer...occhio che durante il setup afferma di essere la versione Beta2...ma non lo è). Il tutto si scarica da http://www.microsoft.com/downloads/details.aspx?FamilyId=D8AE4404-8E05-41FC-94C8-C73D9E238F82&displaylang=en.
      N.B. Per installare questo componente occorre prima installare il runtime e una patch.
      L'ordine corretto è quindi: installare ASP.NET 3.5 Extension Preview da http://www.microsoft.com/downloads/details.aspx?FamilyId=A9C6BC06-B894-4B11-8300-35BD2F8FC908&displaylang=en, poi la patch da http://go.microsoft.com/fwlink/?LinkID=104985 e poi il designer.
    • ASP.NET MVC Framework: ne parliamo nella prossima sezione (più avanti) in quanto a febbraio 2008 è uscita una nuova versione.

    Questo componente si scarica da  http://www.microsoft.com/downloads/details.aspx?FamilyId=A9C6BC06-B894-4B11-8300-35BD2F8FC908&displaylang=en.

    Febbraio 2008
    Una nuova versione della Preview, ma solo della parte MVC. Il componente si chiama ASP.NET MVC Preview 2 e si scarica da http://www.microsoft.com/downloads/details.aspx?FamilyId=38CC4CF1-773A-47E1-8125-BA3369BF54A3&displaylang=en

    L'idea è quella di poter sfruttare il pattern standard Model View Controller anche nel mondo ASP.NET. Questo componente installa un nuovo handler che redirige le richieste per i vari URI direttamente al Controller. Il Controller effettua le operazione sul Model (che può essere creato con LINQ to SQL, ADO.NET Entity Framework o dai più classici BIZ e DAL) e tramite il metodo RenderView invoca la View che presenta i dati all'utente.

    Il secondo pacchetto uscito a febbraio 2008 prende il nome di Silverlight Tools Beta 1 for Visual Studio 2008 (link incluso). Comprende una nuova versione del controllo Media Player (uscito nella July CTP) e del controllo Silverlight (supportata la 2.0). E' una nuova versione rispetto alle altre due citate in questo post che aggiunge anche:

    • Silverlight 2 Beta 1
    • Silverlight 2 SDK Beta 1
    • KB949325 for Visual Studio 2008
    • Silverlight Tools Beta 1 for Visual Studio 2008

    Si installano due nuovi template in Visual Studio 2008, un generatore di codice XAML e il pieno (quasi :-)) supporto per Intellisense. Il debug funziona abbastanza bene. Per adesso troviamo il supporto per chiamate native a Web Service.

    Varie
    Olte a ADO.NET Data Service, in beta, troviamo SQL Server Data Service (in Beta 1), la cui idea è quella di esporre alcune funzionalità di accesso ai dati tramite servizi.

    ADO.NET Sync Service, componente poco citato ma presente nel framework 3.5, vede subito una sua evoluzione verso il Sync Framework (che attualmente comprende ADO.NET Sync Service 2 Beta, la possibilità di sincronizzare Feed RSS e altri componenti sia client-to-server sia peer-to-peer). La direzione è quella di costruire un framework di sincronizzazione che possa sfruttare anche i servizi ADO.NET Data Service e SQL Server Data Service per poter accedere a dati remoti quando siamo online e/o sincronizzarli per poter poi lavorare offline.

     Alla DevCon 2008 abbiamo due sessioni: la prima Web Futures sarà una sessione plenaria in cui faremo una carrellata di tutte le novità che riguardano in qualunque forma il Web, accennate nella prima parte del post; sarà una sessione a sale congiunte. L'altra sessione è invece dedicata a ADO.NET Sync Service rilasciata con il framework 3.5 e Visual Studio 2008.

     

    Posted: apr 18 2008, 10.40 by rob | with 2 comment(s) |
    Filed under: ,
    System Center Mobile Device Manager 2008

    E' stato rilasciata la versione 2008 di MDM. Questo il link per il download http://www.microsoft.com/downloads/details.aspx?FamilyID=8D244DCD-F5E7-4C9B-83AF-55502EA2996B&displaylang=en.

    Si tratta di un componente per Widnows Server 2003 che consente di gestire i device con a bordo Windows Mobile 6.1 come membri dell'infrastruttura IT. E'possibile accedere ai servizi aziendali come Active Directory, distribuzione del software e certificati digitali.

    Il download é circa 18 MB per ogni lingua.

    Nuovo Corso DevLeap

    Ho appena pubblicato un nuovo corso DevLeap dedicato all'accesso e alla replica dei dati verso dispositivi mobile. Per dispositivo mobile si intende il classico palmare, i notebook, gli UMPC, i Tablet e perché no anche i normali Desktop.

    L'idea é nata dal fatto che sulla piazza troviamo diverse tecnologie di replica dei dati che trattiamo nei nostri corsi mobile. Con l'uscita di .NET 3.5 ha visto la luce anche ADO.NET Sync Service e quindi abbiamo pensato di creare un corso apposito per analizzare nel dettaglio le varie tecnologie mettendole a confronto. Visto che ADO.NET Sync Service usa SQL CE 3.5 come store di informazioni la prima parte del corso affronta le metodologie e le tecniche piú efficienti di accesso ai dati verso SQLCE, tecniche spesso differenti rispetto a SQLServer/SQLExpress.

    Se siete interessati ecco la scheda tecnica dettagliata.

    Workflow Foundation: State Machine Event

    Ieri, al lancio di Visual Studio 2008, mi è arrivata questa domanda dopo la mini-sessione su Workflow Foundation. Condivido la risposta con tutti.

    "Come posso sapere quali eventi attente il workflow a stati quando si trova in uno stato".

    Gli eventi inviati verso una workflow instance vengono inviati all'istanza tramite una coda. La coda viene creata dalle activity di tipo HandleExternalEventActivity (o derivate ovviamente) durante la sua inizializzazione. Questa coda, di tipo EventQueueName viene creata in questo modo:

    protected sealed override void Initialize(IServiceProvider provider)
    {
        if (provider == null)
        {
            throw new ArgumentNullException("provider");
        }
        if ((!base.IsDynamicActivity && !this.IsNestedUnderMultiInstanceContainer) || this.IsInitializingUnderMultiInstanceContainer)
        {
            Type interfaceType = this.InterfaceType;
            string eventName = this.EventName;
            IComparable comparable = null;
            if (CorrelationResolver.IsInitializingMember(interfaceType, eventName, null))
            {
                comparable = new EventQueueName(interfaceType, eventName);
            }
            base.SetValue(QueueNameProperty, comparable);
            CorrelationService.Initialize(provider, this, interfaceType, eventName, base.WorkflowInstanceId);
        }
    }
    

    Quando il workflow si trova in uno stato che accetta una serie di eventi la collezione di WorkflowQueueInfo ci mette a disposizione le informazioni sulle code. E' sufficiente quindi fare un ciclo su tale collezione, verificare che si tratti di una EventQueueName (potrebbero essere attive anche code che non riguardano gli eventi di scambio dati con l'host) e ottenere le informazioni sull'evento in ascolto.

    Ecco il codice:

    ReadOnlyCollection<WorkflowQueueInfo> queueInfoData = this.workflowInstance.GetWorkflowQueueData();
    if (queueInfoData != null)
    {
        foreach (WorkflowQueueInfo info in queueInfoData)
        {
           
    EventQueueName eventQueue = info.QueueName as EventQueueName;
            if (eventQueue != null)
               
    eventQueue.MethodName   // Otteniamo il nome dell'evento (occhio ai nomi: la proprietà si chiama MethodName)

         }
    }

    Workflow Foundation: Uno Spettacolo !

    Chi ci conosce sa che non facciamo pubblicità a prodotti e tecnologie: spesso cerchiamo di evidenziare quanto sia importante conoscere a fondo una tecnologia prima di utilizzarla. Da qualche anno gli strumenti di sviluppo semplificano sempre di più la vita agli sviluppatori, ma è diventato sempre più difficile mettere insieme i pezzi: le tecnologie sono sempre più legate l'una all'altra ed è impossibile sapere tutto di tutto. I prodotti, lasciati ai loro default, funzionano ad un livello medio: non potrebbe essere diversamente. Spesso ci sono oggetti o componenti che vanno benissimo in certi contesti, ma sono assolutamente inappropriati in altri; tanto per cambiare mi vengono in mente le Session di ASP.NET che utilizzate in contesti molto piccoli non danno nessun tipo di problema e aiutano nello sviluppo, ma portate in applicazioni più serie (voglio anche dire applicazioni in cui occorre sapere cosa c'è nella sessione di ogni utente: ad esempio il carrello della spesa su un sito di eCommerce) sono assolutamente inutilizzabili.

    Workflow Foundation rientra in questa categoria di tecnologie: nasce come prodotto per gestire Worfklow (punto). Come tale deve essere impiegato in scenari statefull e stateless, può gestire i processi di Business così come la User Interface. Settimana scorsa ho erogato il nostro corso su WF da un nostro cliente e come è accaduto per tutte le edizioni precedenti, la prima mattina vola via sulle caratteristiche principali; l'impatto sull'audience è notevole e i commenti più blasonati sono "Spettacolo", "Quanto si semplifica lo sviluppo e la manuteniblità", "Utilissimo per dare uno strumento di disegno a chi non scrive codice ma conosce la problematica e lo stesso strumento allo sviluppatore di Activity che eseguire le operazioni fisiche".

    Il pomeriggio del primo giorno si riprendono tutti gli argomenti e si comincia a scendere nei dettagli di Hosting e Runtime (senza ancora affrontare i servizi) e la giornata sta per concludersi con l'entusiamo alle stelle visti quanti servizi espone. Si affronta l'argomento asincrono, già perchè Wf lavora in asincrono per default e iniziano i primi dolori :-) Lavorare in asincrono è bello, oltre che efficace.

    La mattina seguente si affronta il ManualScheduler che esegue le workflow instance sullo stesso thread del chiamante e la fiducia ritorna ai massimi livelli: ci sono però molte controindicazioni a lavorare in sincrono e il modo con cui si affronta l'hosting in applicazioni server-side (ASP.NET ad esempio) ricomplica anche lo scenario sincrono in quanto per evitare persistenze inutili (e soprattutto pesanti) occorre prestare molta attenzione e scrivendo il codice bene e configurando il runtime e la persistenza nel modo corretto. Tutti i parametri spaventano a prima vista.

    Poi si apre lo scenario comunicazioni con l'esterno partendo da Eventi e Metodi di scambio dati con host, che si effettua sempre tramite interfacce, e di seguito si affronta la comunicazione con altri workflow e con servizi ASMX tramite Activity asincrone che si avvalgono di code: a prima vista è una cosa complicata da realizzare e il "terrore" negli occhi dei partecipanti è visibile anche a luce spenta :-) Subito dopo però si evidenziano i benefici di lavorare in questo modo e tutto diventa di nuovo entusiasmante.

    Si chiude il tutto (il terzo giorno di solito) con una analisi dei servizi di persistenza, traking, commit e work batch, IPending Work: sui primi la valutazione iniziale è "cacchio", non è esattamente questa l'escalmazione ma ci assomiglia molto soprattutto nelle prime due lettere :-), mentre sugli ultimi due punti ritorna il panico.

    Workflow è veramente un gran prodotto: serve solamente una buona preparazione e un po' di pratica; del resto su tutti i prodotti servono questi due ingredienti. Sicuramente si possono fare tanti casini e il prodotto è relativamente nuovo quindi chi non lo approccia nel modo corretto si trova un qualcosa che vive di vita propria; in realtà la configurazione e il corretto utilizzo consentono di fare cose eccellenti.

    La nostra prima applicazione su Workflow risale ormai a due anni fa (abbiamo iniziato con la Beta su un progetto reale) e, nonostante le varie prove semplici e lo studio che avevamo alle spalle prima di intraprendere questa strada, Paolo e io abbiamo dovuto spendere un po' di tempo prima di trovare la strada giusta per il tipo di applicazione. A distanza di due anni posso dire che abbiamo preso la strada giusta e alla fine, lo sviluppo, anche nei primi mesi dopo le elucubrazioni di cui sopra, è stato molto più che soddisfacente in termini di produttività e modifiche che abbiamo dovuto fare in corsa causa analisi incompleta. Modificare i flussi da un designer significa risparmiare molto, ma molto tempo, rispetto a dover riprendere in mano centinaia di righe di codice.

    Il nostro mondo è bello proprio perchè possiamo lavorare con tecnologie come questa: a mio avviso è il più bel prodotto che sia stato presentato negli ultimi anni e rapprensenta un notevole, per non dire enorme, passo avanti nella scrittura di applicazioni.

    Spero di avervi convinto a dare almeno un'occhiata a questa tecnologia.

    PS: per chi non ha mai visto questa tecnologia abbiamo pensato ad una sessione di quasi 4 ore alla nostra DevCon 2008 che si terrà a Milano a fine maggio.

    More Posts Next page »