Framework

Présentation du framework

Le Framework AreaProg est une solution regroupant plusieurs projets permettant de réaliser diverses opérations. Deux de ces projets (AreaProg.Framework et AreaProg.SharePoint.Framework) ne regroupent que des méthodes d'extension permettant d'améliorer la rapidité de développement en .NET et en SharePoint.

Une importante partie de ce Framework consiste en la gestion des content types. La façon dont SharePoint gère les content types étant parfois un peu faible, il n'est pas rare de se retrouver avec une plateforme instable à cause de corruptions dans les "content types, ce Framework a donc été développé avec l'idée d'améliorer cela. Grâce à ce dernier, nous pouvons créer des content types de cette façon:

[ContentType("{F7B7FED6-A159-4402-B232-8E6AAC06ED34}", Group = "AreaProg")]   
public class Country : Item   
{   
    [FieldRef("{7FF0B76A-98F5-4E86-BE7F-D77F9D0ED2E8}", Required = true)]   
    public virtual int Area { get; set; }   
    [FieldRef("{8467EB05-E924-4E21-8B94-AA499250785D}", Required = true)]   
    public virtual int Population { get; set; }   
    [FieldRef("{65E7469D-02A9-4BA3-A2AF-0127F05B8B14}", Required = true)]   
    public virtual string Currency { get; set; }   
    [FieldRef("{8B6ACC13-FB1A-40D4-8E1E-6B0A0A3C5C65}")]   
    public virtual DateTime Independence { get; set; }   
    [FieldRef("{8D5925DF-699B-4463-9636-5EE67A42A59D}", Required = true)]   
    public virtual Continent Continent { get; set; }   
}

En appelant une méthode dans un "feature receiver" (par exemple), le "Framework" se chargera de créer le content type correspondant à la définition de la classe. Nous pouvons également créer des champs de cette manière:

[FieldsContainer(Group = "AreaProg")]   
public class Fields   
{   
    [Field("{7FF0B76A-98F5-4E86-BE7F-D77F9D0ED2E8}")]   
    public int Area { get; set; }   
    [Field("{8467EB05-E924-4E21-8B94-AA499250785D}")]   
    public int Population { get; set; }   
    [Field("{65E7469D-02A9-4BA3-A2AF-0127F05B8B14}")]   
    public string Currency { get; set; }   
    [Field("{8B6ACC13-FB1A-40D4-8E1E-6B0A0A3C5C65}")]   
    public DateTime Independence { get; set; }   
}

De la même manière, une méthode permet d'analyser cette classe et d'en créer les champs. Les avantages sont:

La partie "Provisioning" permet également de créer des listes de manière simple et permet d'y lier des content type facilement. De cette manière, les lookups sont automatiquement résolus même si la liste n'existe pas au moment de la création du content type.

Un autre projet interessant de cette solution est "AreaProg.SharePoint.Abstraction". Celle ci permet de créer des éléments très facilement dans une liste:

SSP.UseList("http://pc-media:100/Lists/AreaProg/AllItems.aspx", l =>   
{   
    Country toCreate = l.Create<Country>();  
      
    toCreate.Name = c.Name;   
    toCreate.Demography = c.Demography;  
      
    l.ProcessQueue(OnErrorBehaviour.Continue);   
});

La différence entre cette implémentation et "LINQ For SharePoint" se situe dans deux points essentiels:

Un projet nommé "AreaProg.SharePoint.Linq" est également prévu permettant de faire des requêtes facilement:

l.Query<Country>().Count(c => c.Demography > 50000);

Documentation détaillée

Vous pouvez trouver la documentation détaillée de ce "Framework" dans la partie correspondante.