Création d’une liste externe SharePoint 2013 en programmation


Cet article fait partie d’une série concernant la mise en oeuvre de liste externes et de workflows avec SharePoint. Les étapes seront passées en revue :

_______________________________________________________________________________________________

La liste externe va permettre d’exploiter le type de contenu externe précédemment créé dans SharePoint. Il existe différents moyens de la créer en programmation :

  • En mode déclaratif via une nouvelle instance de Liste (element.xml)
  • En utilisant le modèle objet et plus particulièrement SPListDatasource.BDCProperties

Comme nous l’avons déjà vu une liste externe peut également être créée via l’IHM SharePoint 2013 ainsi qu’avec SharePoint Designer 2013.

Le mode déclaratif

Créer une instance de liste externe via la Wizzard Visual Studio 2012 n’est pas possible. En effet le modèle de type « Liste externe » n’est pas disponible à la sélection, on peut rapidement en conclure que cette solution n’est pas celle privilégiée par Microsoft.

Nous allons tout de même voir comment y arriver en modifiant le fichier elements.xml correspondant à l’instance.

1 – Dans Visual Studio 2012 ajouter un nouvel élément de type Liste au projet.

liste externe SharePoint

2 – Choisir de créer uniquement une instance de liste basée sur n’importe quel modèle (« Annonces » par exemple) étant donné que nous allons le modifier par la suite.

liste externe SharePoint

liste externe SharePoint

3 – Une nouvelle feature ainsi qu’une nouvelle instance de liste viennent d’être créées. Trouver le fichier elements.xml correspondant à cette instance de liste.

liste externe SharePoint element.xml

4- Editer ce fichier et remplacer le code existant par la code suivant


<?xml version="1.0" encoding="utf-8"?>

<Elements xmlns="http://schemas.microsoft.com/sharepoint/">

<ListInstance Title="Personnes"

OnQuickLaunch="TRUE"

TemplateType="600"

FeatureId="00bfea71-d1ce-42de-9c63-a44004ce0104"

Url="Lists/Personnes"

Description="Liste Externe Personnes">

<DataSource>

<Property Name="LobSystemInstance" Value="AdventureWorksPerson" />

<Property Name="EntityNamespace" Value="SPAlex.Labs.ContentTypes.AdventureWorksPerson" />

<Property Name="Entity" Value="Personne" />

<Property Name="SpecificFinder" Value="ReadItem" />

</DataSource>

</ListInstance>

</Elements>

–          Il faudra noter le TemplateType qui est égal à 600 pour les listes externes

–          L’ajout d’un noeud DataSource avec un ensemble de propriétés que l’on peut facilement trouver via l’administration centrale si le type de contenu externe sur lequel se base cette liste a déjà été déployé une fois. Pour cela il faut se rendre sur l’application de service BDC et y trouver le type de contenu. Les informations dont vous avez besoin sont alors disponibles.

type de contenu externe administration centrale

Cliquer sur le type de contenu externe.

type de contenu externe sharepoint 2013

  • La valeur de « Nom » doit être utilisée pour « Entity ».
  • La valeur de « Espace de noms » pour « EntityNamespace »
  • La valeur de « Système externe » pour « LobSystemInstance »

5 – Déployer sur le site via Visual Studio et le tour est joué.

liste externe sharepoint

Modèle Objet

Cette solution semble privilégiée. Il est possible de créer une instance de liste via un feature receiver par exemple.

1 – dans Visual Studio 2012, ajouter une nouvelle fonctionnalité via clic droit sur l’élément « features ».

feature visual studio 2012

Nommer la feature.

feature sharepoint 2013 visual studio 2012

2 – Faire un clic droit sur la feature et lui ajouter un récepteur d’évènement (ou feature Receiver).

feature eceiver visual studio 2012 sharepoint

3 – Remplacer le code de la classe nouvellement créée par le code suivant :


using System;

using System.Runtime.InteropServices;

using System.Security.Permissions;

using Microsoft.SharePoint;

namespace SPAlex.Labs.Features.LissteExternePersonneDev

{

/// <summary>

/// Cette classe gère les événements déclenchés lors de l'activation, la désactivation, l'installation, la désinstallation et la mise à niveau de fonctions.

/// </summary>

/// <remarks>

/// Le GUID attaché à cette classe peut être utilisé lors de la compression et ne doit pas être modifié.

/// </remarks>

[Guid("e7c5fb55-26b4-43a1-8050-3d99c77e5f2b")]

public class LissteExternePersonneDevEventReceiver : SPFeatureReceiver

{

public override void FeatureActivated(SPFeatureReceiverProperties properties)

{

//défintion du datasource

SPListDataSource ds = new SPListDataSource();

ds.SetProperty(SPListDataSource.BDCProperties.LobSystemInstance, "AdventureWorksPerson");

ds.SetProperty(SPListDataSource.BDCProperties.EntityNamespace, "SPAlex.Labs.ContentTypes.AdventureWorksPerson");

ds.SetProperty(SPListDataSource.BDCProperties.Entity, "Personne");

ds.SetProperty(SPListDataSource.BDCProperties.SpecificFinder, "ReadItem");

//le scope de la feature est "web"

SPWeb currentWeb = (SPWeb) properties.Feature.Parent;

if (currentWeb != null)

{

currentWeb.Lists.Add("Personnes Dev", "Personnes Dev", "Lists/PersonnesDev", ds);

}

}

public override void FeatureDeactivating(SPFeatureReceiverProperties properties)

{

//le scope de la feature est "web"

SPWeb currentWeb = (SPWeb)properties.Feature.Parent;

if (currentWeb != null)

{

SPList myList = currentWeb.Lists.TryGetList("Personnes Dev");

if (myList != null)

{

currentWeb.Lists.Delete(myList.ID);

}

}

}

}

}

L’ajout de l’instance de liste se fait au moment de l’activation de la feature, la suppression au moment de la désactivation. Les propriétés de la datasource sont les mêmes que celles décrites dans la méthode précédente.

4 – Déployer la solution avec Visual Studio, la feature est alors automatiquement activée.

Package et features

La feature correspondant au type de contenu externe est déployée globalement au niveau Ferme, ce qui signifie que ce type de contenu sera accessible à toutes les applications web liées au Business Connectivity Service. Le même type de contenu externe ne peut donc pas être déployé 2 fois par 2 WSP différents sur la même ferme. Il convient donc de réfléchir en amont à l’organisation des solutions déployées.Mon WSP comprend donc :

  • 1 feature qui déploie mon type de contenu externe niveau ferme
  • 2 features qui déploient mes listes externes niveau web

Il convient de toujours nommer ses features en respectant des conventions de nommage définies au niveau de votre ferme SharePoint cible. Une petite image pour l’illustrer est toujours la bienvenue.

sharepoint package et features visual studio 2012

Publicités

15 réflexions au sujet de « Création d’une liste externe SharePoint 2013 en programmation »

  1. Ping : Création d’un type de contenu externe et utilisation du secure store service via Visual Studio 2012 | SharePoint 2013 - Blog technique d'Alexandre DAVID

  2. Ping : Utilisation de Business Connectivity Services dans SharePoint 2013 | SharePoint 2013 - Blog technique d'Alexandre DAVID

  3. Mikaël DELSOL

    Salut,
    On a eu l’occasion de se rencontrer sur un projet utilisant un serveur SharePoint (Pichet) et je chercher désespérément un moyen d’avoir accès à un serveur Sharepoint pour me permettre de réaliser des tests d’appels avec l’API SOAP. J’avais eu l’occasion de développer ce type d’application à Pichet mais depuis j’ai créé un projet à part entière pour l’appel de WS SOAP et j’aurais aimé validé l’utilisation du projet avec un Sharepoint pour faire des « case study ». Le problème est que le Sharepoint sur Office 365 est différent, en terme d’authentification, d’un serveur Sharepoint « local » et donc pas idéal.
    Une idée pour palier mon problème ?
    Merci d’avance

    Répondre
    1. Alexandre DAVID Auteur de l’article

      Salut Mickaël !
      Je me souviens très bien de toi 😉
      Quel type d’authent cherches-tu et sur quelle version de SP ?
      Sur un réseau d’entreprise tu auras souvent du NTLM (authent windows intégrée) et en effet un serveur SharePoint exposé sur le web auras plus souvent une authent en mode formulaire. Si tu veux un environnement NTLM je te conseillerais de te monter une VM SharePoint en local si tu dispose de suffisamment de puissance sur un serveur.
      Au plaisir !

      Répondre
      1. Mikaël DELSOL

        Je cherche en effet à avoir une authentification NTML type windows intégrée. Pour cela j’avais tenté de m’installer une Sharepoint sur un Wind Server 2008 R2 SP1 mais j’avoue que j’ai séché à l’installation de Sharepoint après, avoir il me semble, avoir installée le Miscroosft SQL Server :(.
        Une solution plus simple qu’une installation totale ?
        Merci dans tous les cas 😉

      2. Alexandre DAVID Auteur de l’article

        Difficile de ne l’installer que partiellement.
        Je ne connais pas de système de « bouchons » pour les webservices SharePoint, il faudrait peut être regarder du côté des framework de « Mock ».

        Si tu ne veux pas te prendre la tête avec l’install télécharge directement une VM complète comme ici par exemple pour SP2010 : http://blogs.msdn.com/b/vesku/archive/2010/01/27/sharepoint-2010-virtual-machine-for-customers-partners-now-available.aspx

        Mais tu auras surement d’autre liens.

  4. Ping : Configuration du Secure Store Service et ajout d’une application afin de créer un type de contenu externe | SharePoint 2013 - Blog technique d'Alexandre DAVID

  5. Ping : Créer une colonne de données externes et la référencer dans un type de contenu | SharePoint 2013 - Blog technique d'Alexandre DAVID

  6. Ping : Créer une colonne de données externes et la référencer dans une liste | SharePoint 2013 - Blog technique d'Alexandre DAVID

  7. Ping : Ajout d’un filtre de recherche pour un type de contenu externe SharePoint 2013 | SharePoint 2013 - Blog technique d'Alexandre DAVID

  8. Ping : Utilisation des workflows SharePoint 2013 | SharePoint 2013 - Blog technique d'Alexandre DAVID

  9. Ping : Création d’un workflow de type State Machine (machine à état) SharePoint 2013 | SharePoint 2013 - Blog technique d'Alexandre DAVID

  10. Ping : Event Handler de modification des autorisations sur les tâches d’un workflow SharePoint | SharePoint 2013 - Blog technique d'Alexandre DAVID

  11. Ping : Comment afficher les tâches affectées à un utilisateur SharePoint et à ses groupes | SharePoint 2013 - Blog technique d'Alexandre DAVID

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s