Blog du Pôle .NET

Partager pour mieux développer...

Linq et le tri générique

clock August 26, 2008 06:17 by author aequoy

Il y a quelques temps (avant l'arrivée de Linq) j'avais implémenté pour un client un GenericSorter, classe héritant de List<T> et IComparer<T> afin de gérer les problématiques de tri dans des collections.

En utilisant Linq chez un client hier, voici une possibilité d'implémenter un tri générique sur n'importe quelle colonne d'un objet. 

1) Cas simple : J'ai une collection de Client que je veux pouvoir trier sur n'importe quelle colonne passée en paramètre en tant que chaîne :

public List<Client> OrdonneClient(List<Client> lesAdherents, string colonneOrder, bool ascendant)
        {

            IEnumerable<Client> lesClients;
            if (ascendant)
            {
                lesClients = from c in lesAdherents
                             orderby c.GetType().GetProperty(colonneOrder).GetValue(c, null) ascending
                             select c;
            }
            else
            {
                lesClients = from c in lesAdherents
                             orderby c.GetType().GetProperty(colonneOrder).GetValue(c, null) descending
                             select c;
            }

return lesObjetsEnumerables.ToList(); 

     }

  2) Poussons le bouchon un peu plus loin pour atteindre une généricité au niveau de la collection d'objet:

public List<T> OrdonneCollection<T>(List<T> lesObjets, string colonneOrder, bool ascendant)
        {
            try
            {
                IEnumerable<T> lesObjetsEnumerables;
                if (ascendant)
                {
                    lesObjetsEnumerables = from c in lesObjets
                                           orderby c.GetType().GetProperty(colonneOrder).GetValue(c, null) ascending
                                           select c;
                }
                else
                {
                    lesObjetsEnumerables = from c in lesObjets
                                           orderby c.GetType().GetProperty(colonneOrder).GetValue(c, null) descending
                                           select c;
                }
                return lesObjetsEnumerables.ToList();
            }
            catch { throw new NotImplementedException("Colonne non implémentée");}
        }

Tout ceci n'a de sens que dans le cas où l'on vous passe une colonne en chaîne de caractère comme les SortExpression des gridView d'ASP.NET.

Si vous connaissez la colonne sur laquelle trier, il suffit de faire :

maCollection.OrderBy(element=>element.Property);

3) Tiens puisqu'on parle de lambda, simplifions la dernière méthode :

public static List<T> OrdonneCollectionLambda<T>(List<T> lesObjets, string colonneOrder, bool ascendant)
        {           
            try
            {
                if (ascendant)
                    return lesObjets.OrderBy(element => element.GetType().GetProperty(colonneOrder).GetValue(element, null)).ToList();
                else
                    return lesObjets.OrderByDescending(element => element.GetType().GetProperty(colonneOrder).GetValue(element, null)).ToList();
            }
            catch { throw new NotImplementedException("Colonne non implémentée"); }
        }

Alexandre Equoy

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Installation du Service Pack 1 de Visual Sudio 2008

clock August 22, 2008 05:26 by author mdam

Afin d'installer le SP1 de Visual Studio 2008, il vous faudra désinstaller les mises à jours suivantes :

  • Microsoft Silverlight Tools Beta 1
  • Microsoft Visual Studio 2008 - KB949325
  • Microsoft Visual Studio 2008 - KB944899 (v1)
  • Microsoft Visual Studio 2008 - KB945140 (SP1 Beta) 

Pour vous éviter de le faire manuellement, MS fournit un patch. Il est téléchargeable à l'adresse http://www.microsoft.com/downloads/details.aspx?FamilyId=A494B0E0-EB07-4FF1-A21C-A4663E456D9D&displaylang=en

 Manh

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Workflow Foundation Part #1

clock August 14, 2008 09:00 by author dox

J'étais parti pour faire un article sur WCF, mais comme tout a déjà été dit, ça attendra un peu.
Cet article est le premier d'une série consacrée à Workflow Foundation (WF). Je vais essayer tout au long de ces articles, d'illustrer quelques une des fonctionnalités de WF, entre autres :

  • les workflows séquentiels
  • les workflows à états
  • les activités parallèles, conditionnelles et les conditions
  • la persistence dans Workflow Foundation
  • le tracking...

On va commencer doucement, avec un premier workflow de type séquentiel. Et pour ça, nous allons partir d'un exemple : Il fait beau dehors et Bob aimerait poser quelques jours de congés. Bob va donc déposer une demande de congés, qui devra être validée par son chef, puis par les ressources humaines. Une fois sa demande acceptée, Bob sera notifié qu'il peut aller profiter du soleil.
Cool

Première Etape : Le Workflow

Pour réaliser tout ça, nous allons avoir besoin d'un workflow (de type séquentiel ici, puisque les étapes se déroulent les unes après les autres). Voilà à quoi pourrait ressembler notre workflow

 

Il est composé de 3 activités de type HandleExternalEvent, et d'une activité CallExternalMethod qui vont permettre de :

  • d'abord réagir à une demande de congés
  • ensuite réagir à la validation par le supérieur de Bob
  • puis celle des ressources humaines
  • et enfin, appeler une méthode qui notifiera Bob de l'état de sa demande.

Deuxième Etape : L'interface 

Puisque notre workflow réagit à des événements et qu'il appelle une méthode externe, il nous faut définir ces éléments. Pour cela, nous crééons une interface qui contient les définitions suivantes :

[ExternalDataExchange]
public interface IDemandeCongesService {
  event EventHandler<DemandeCongesEventArgs> CongesDemandes;
 
event EventHandler<DemandeCongesEventArgs> ValidesSuperieur;
 
event EventHandler<DemandeCongesEventArgs> ValidesRH;
 
void NotifierDemandeAcceptee(Guid instanceId, DemandeCongesData data);
}

Ce qu'il faut noter dans la définition de cette interface :

  • L'interface est marquée de l'attribut ExternalDataExchange pour indiquer qu'elle sert à communiquer avec un workflow.
  • Les événements sont typés et héritent de la classe ExternalDataEventArgs. Ils sont également marqués de l'attribut Serializable.
  • L'objet DemandeCongesEventArgs contient une propriété de type DemandeCongesData. Cet objet contient les informations propres à notre demande de congés (nom de l'employé, le nombres de jours...), lui aussi marqué de l'attribut Serializable.

Il ne nous reste plus qu'à associer les propriétés de nos activités aux événements et méthodes correspondants.

Troisième Etape : L'implémentation et l'application hôte 

Un worfklow dans WF fonctionne un peu de la même façon qu'un service WCF. Il ne peut être démarré tel quel. Il a besoin d'une application hôte pour héberger le runtime de Workflow Foundation, qui se chargera ensuite de charger/créer une instance de notre workflow et de la démarrer.

Pour faire simple, nous regrouperons toute la logique métier dans une application de type Windows (le Web c'est mal Tongue out). Cette application contient une fenêtre principale et une classe qui contient l'implémentation de notre interface IDemandeCongesService. Voici un petit aperçu de notre application finale :

Ceci reste un exemple assez simple de ce qu'on peut faire avec Workflow Foundation. Les autres fonctionnalités de WF seront abordées dans les prochains articles de cette série. Dans le prochain épisode... Le workflow a états. En attendant, vous pouvez télécharger le contenu complet de l'exemple en suivant ce lien : WFpart01.zip (20,96 kb).

Par Dominique Thery,
To be continued...

Currently rated 4.3 by 3 people

  • Currently 4.333333/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


SQL SERVER 2008 Express disponible en téléchargement

clock August 13, 2008 05:21 by author aequoy

Une des 3 versions de SQL Express 2008 est disponible en téléchargement pour celles et ceux qui veulent tester la dernière mouture chez eux.

  • SQL Server 2008 Express 
    • Moteur SQL Server 2008
    • Disponible : Maintenant
  • SQL Server 2008 Express with Tools
    • Moteur SQL Server 2008
    • SQL Server Management Studio Basic - Visual database management tool 
    • Disponible : fin du mois d'août
  • SQL Server 2008 Express with Advanced Services
    • Moteur SQL Server 2008
    • SQL Server Management Studio Basic - Visual database management tool
    • Full-text Search 
    • Reporting Service
    • Disponible : fin du mois d'août
Tableau des features

Feature

SQL Server 2008 Express

SQL Server 2008 Express with Tools

SQL Server 2008 Express with Advanced Services

Management

 

 

 

PowerShell Integration

Y (Separate installation)*

Y

Y

Policy Based Management

Y (manual only)**

Y (manual only)*

Y (manual only)**

Management Studio Basic

N

Y

Y

SQL Engine

 

 

 

Integrated Full Text Search

N

N

Y

Merge & Upsert

Y

Y

Y

New Data type support

 

 

 

Filestream support

Y

Y

Y

New Date & Time data types

Y

Y

Y

Geodetic data types

Y

Y

Y

Advanced Spatial Libraries

Y

Y

Y

Support for Spatial Standards

Y

Y

Y

New Tools

 

 

 

Import/Export Wizard

Y

Y

Y

Replication

 

 

 

Change Tracking

Y

Y

Y

Synchronization Services

Y (Separate installation)***

Y

Y

Reporting Services

 

 

 

Increase RS Memory Limit

N

N

Y

RS Word/Rich Text Export

N

N

Y

IIS Agnostic Report Deployment

N

N

Y

Enhanced Gauges & Charting

N

N

Y

Business Intelligence Developer's Studio

N

N

Y

 

Téléchargement direct

Alexandre Equoy

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


SQL SERVER 2008 RTM!

clock August 8, 2008 05:23 by author aequoy

Microsoft vient de mettre à disposition SQL Server 2008 en vers RTM (Release to Manufacturing).

La nouvelle version de SQL Server est téléchargeable pour les abonnés MSDN.

De la compact edition à l'enterprise, 7 versions sont accessibles.

Source:

Annonce Microsoft

Alexandre Equoy

Currently rated 4.0 by 3 people

  • Currently 4/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Les PageMethods du Framework MS AJAX

clock August 1, 2008 05:22 by author yvue

Aujourd'hui je prends ma casquette "développeur Web capable de faire un peu de Javascript" ... pour vous faire découvrir les "PageMethods"

A quoi ça sert : tout simplement à exécuter du code serveur, côté client . Un simple appel javascript va permettre d'exécuter du code serveur (Enregistrement en base de données ou autres ...). Ceci permet simplement de réaliser des opérations côté serveur sans postback ... exactement le principe d'AJAX.

Pour cela 1ère étape : Activer les PageMethods sur le ScriptManager de votre page :

<
asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
</asp:ScriptManager>

Seconde étape : Marquer le code serveur que vous souhaitez exécuter.
La méthode doit :

  • être implémentée directement dans la page (pas dans un user control par exemple)
  • être statique
  • être marquée avec les attributs qui vont bien ...

[System.Web.Script.Services.ScriptMethod]
[System.Web.Services.
WebMethod]
public static void MakeSomeJob(string arg1, string arg2){
       .......
}

Troisième étape (La plus dure pour la plupart d'entre nous) : Le javascript 

Comme pour le code serveur, je vous incite à mettre le javascript dans la page et non dans un user control composant la page
La raison : Visual Studio 2008 permet désormais de débugger du code Javascript ... mais seulement lorsqu'il est dans une page ASPX

L'appel se fait à l'aide du mot clé "PageMethods", par exemple :

<script type="text/javascript">

function MakeCodeClient(arg1,arg2) {
    PageMethods.MakeSomeJob(arg1, arg2, MakeSomeJobSuccessCallback, MakeSomeJobFailedCallback);
}

function MakeSomeJobSuccessCallback(res, destCtrl) {
    alert('Cool ça a marché');
}

function MakeSomeJobFailedCallback(res, destCtrl) {
    alert('Zut ... ça n a pas marché');
}
</script>

Remarquez la présence des deux méthodes de callback permettant de gérer le succès ou l'échec de l'appel.
Rien ne vous empêche de réagir sur le succès de la méthode en récupérant un éventuel retour de la méthode et de mettre à jour une zone de votre page "à la façon Ajax"...


Amusez vous bien ... Le web n'est pas forcément votre ennemi ...

Yoann Vue

Currently rated 3.0 by 2 people

  • Currently 3/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Calendrier

<<  July 2010  >>
MoTuWeThFrSaSu
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678
Afficher en pleine page

Visiteurs