Passer au contenu principal

dnt91's Blog [MVP SharePoint]

Lancer la recherche
dnt91's Blog [MVP SharePoint]
  

dnt91's Blog [MVP SharePoint] > Catégories
Un nouvel ouvrage sur SharePoint 2007 à paraitre

Marc BENISTY, que j'ai eu l'occasion de rencontrer lors d'une de mes interventions chez Dassault Systèmes, sortira d'ici quelques jours son livre sur SharePoint 2007.

Ce livre sera pour certains d'entre vous l'occasion de revisiter les concepts d'administration de SharePoint.

Voici la liste des chapitres que vous pourrez lire dans ce livre :

  1. Avant-propos
  2. Présentation des technologies SharePoint
  3. Les nouveautés apportées par Moss 2007
  4. Installation de Moss 2007
  5. Configurer et administrer Moss 2007
  6. Les services partagés
  7. Recherche et indexation
  8. Business Intelligence et Excel Services
  9. Administration d'Office Forms Server 2007

N'hésitez pas à me poster un commentaire si vous l'avez vu et me donner une critique (constructive) du livre, je me ferai un plaisir de lui retransmettre. J

Pour ceux qui veulent directement le contacter, son blog : http://adminmoss.blogspot.com/

[SP2010] Du nouveau contenu pour les développeurs SharePoint 2010

Pour tout ceux qui veulent se mettre au développement à SharePoint, voici quelques liens intéressants que je vous conseille absolument de visiter !

Bon apprentissage !

Contenus Technet & Msdn pour SharePoint 2010

Pour ceux qui sont friands de contenus Technet et Msdn et passionnés par SharePoint, sachez que votre vœu a été exaucé, du moins en partie.

En effet, depuis quelques temps maintenant, le contenu « complet », et non pas seulement la bibliothèque de classes, sur SharePoint 2010 a été publié.

Ainsi, vous pouvez retrouver :

Bien évidemment ce contenu va encore évoluer entre les différentes sorties beta et rtm, mais c'est déjà un moyen de prendre de l'avance.

Vous noterez au passage que les produits ont (encore) changé de nom :

  • WSS 3.0 a évolué en SharePoint Foundation 2010, qui a mon sens est plus approprié,
  • MOSS 2007 a évolué en SharePoint Server 2010.

Il ne vous reste plus qu'à attendre la beta publique pour torturer ce nouveau joujou, que personnellement, j'ai déjà adopté J

Bonne lecture.

Installer Moss 2007 sur un Windows Server 2008 R2

Ayant déjà le regard tourné vers l'avenir et travaillant depuis quelques mois déjà sur Moss 2010 (ce qui explique l'absence de billets sur mon blog, car tout est sous NDA, mais plus pour longtemps ;)), j'ai déjà mis à jour l'ensemble de mes machines avec des produits comme :

  • Windows Server 2008 R2 / Windows 7 ultimate
  • SQL Server 2008 R2
  • Moss 2010
  • Visual Studio 2010
  • Exchange Server 2010
  • Office Professional 2010

Bref au plus près des futures technologies qui arrivent à grands pas.

Le problème c'est que les projets clients ne sont pas aussi près ; et étant donné qu'il nous toujours un environnement le plus proche possible de celui du client, j'ai été confronté au problème d'installation d'un Moss 2007 sur un Windows Server 2008 R2.

Quel est le problème ? Ben, il faut tout simplement un Moss 2007 avec le SP2 ; problème c'est que via msdn, on n'a que du moss 2007 ou du moss avec le sp1.

Il nous faut donc construire notre propre source d'installation avec le SP2.

Pour vous aider à réaliser cela, je vous renvoie vers ce lien sur Technet qui explique comment procéder > http://technet.microsoft.com/en-us/library/cc261890.aspx

Dans les grandes lignes, il vous faut :

  1. Créer un dossier et y copier le cd d'intallation
  2. Télécharger les services pack de wss 3.0 & de moss 2007, pour le wss sp2, c'est ici et pour le moss sp2, la.
  3. Extraire les données des service packs et les copier dans le dossier Updates du dossier contenant les sources Moss 2007
  4. Supprimer la dll wsssetup.dll du dossier updates

Une fois ces actions réalisées, vous pourrez aisément installer Moss en version SP2 sur votre Windows Server 2008 R2

[SPDesigner 2007] Comment créer une page web dans un site SharePoint en 5 clics ?

Simple comme bonjour !

Positionnez vous sur la racine de votre site ou dans une bibliothèque de documents*.

Ici nous nous positionnons sur la bibliothèque « Pages », faites un clic droit > nouveau > ASPX (2 clics).

Donnez-lui ensuite un nom, puis double-cliquez dessus afin de l'ouvrir en mode édition dans SPDesigner.

Une fois sur la page sélectionnée, cliquez ensuite sur Format > Page maitre > Attacher la page maitre (2 clics)

Sélectionnez enfin la page maitre souhaitée, puis cliquez sur Ok (1 clic)

Et voila le résultat !

Et dans le navigateur, voici ce que ca donne :

Il ne vous reste plus qu'à y rajouter du contenu.

Je vous rappelle que SP Designer 2007 est gratuit depuis le 1er Avril 2009, alors profitez en.

Attention cependant à ne pas mettre ce logiciel entre toutes les mains, les conséquences pour vos sites pourraient désastreuses L. A consommer donc avec modération !

*Il est préférable de créer une page web dans une bibliothèque de documents plutôt qu'à la racine, car cela pour permet de pouvoir appliquer les même fonctionnalités à votre page web que celles liés à un document (gestion des autorisations, gestion du ciblage du contenu, versionning, extraction, etc.…)

[SP2007]Erreur : La période d’essai a expiré…. Mais pas à cause du SP2.

Depuis quelques temps, sur mon environnement de développement, je suis confronté à des bugs incessants de mon environnement SharePoint, celui-ci allant même jusqu'à m'interdire de rajouter mes webparts custom dans les galeries de collections de sites !

Le message d'erreur affiché est la période d'essai du produit a expiré, pourtant ma clé est bien une clé valide !

Cependant ce message ne s'affiche que lorsque j'essaye de réaliser des taches nécessitant des autorisations avancées, comme configurer des workflows sur des listes, ou encore ou me connecter à 1 site project server.

Ayant pris le temps d'auditer le problème, je me suis rendu compte (au bout d'un certain temps tout de meme !) que la légèreté avec laquelle je crée mes applications web (la plupart des paramètres est laissée par défaut), m'a amené à faire tourner mes sites sharepoint avec le compte SERVICE RESEAU au niveau de mes pools d'application, ce qui n'est pas toujours une bonne choses, car comme vous le savez, en fonction de vos actions, il faut mettre le bon compte dans le bon groupe, sinon ca ne passe pas tout simplement !

Dans ce scénario, en remplacant le SERVICE RESEAU par un compte qui est membre des groupes IIS_WPG et WSS_WPG, ca passe d'un coup sans problème J

La solution complète ici > http://blogs.msdn.com/murthygs/archive/2009/04/20/moss-2007-error-trial-period-for-this-product-has-expired.aspx

Et plus d'informations sur la configuration des comptes ici > http://technet.microsoft.com/en-us/library/cc263445.aspx

[SP2007]Quelques rappels C# 3.0 et leur utilisation dans SharePoint

Comme vous le savez tous, je suis quelqu'un qui apprécie particulièrement le partage de code source, et donc il m'arrive très fréquemment, d'envoyer des bouts de codes à des internautes en détresse, des clients ayant identifié un besoin qui me prend 5 min à régler, ou tout simplement sur mon blog.

Aujourd'hui encore, beaucoup (trop ??) de personnes me demandent de traduire mon code, car il n'arrive à le comprendre. Non pas que le code que je fournis soit trop compliqué, mais tout simplement parce qu'il tire pleinement partie des fonctionnalités de C# 3.0 et du .net 3.5 de manière générale.

Au départ, cela ne me posait aucun souci, mais avec le temps, je dois avouer que c'est de plus en plus contraignant, surtout lié au nombre de lignes supplémentaires à écrire en .net 2.0 et à la complexité que cela peut parfois rajouter, notamment lorsque l'on fait un usage intensif des divers Linq Providers.

L'objectif de ce post, est donc de vous proposer un rappel des nouveautés apportées par C# 3.0 à l'époque, et de commencer à migrer en douceur vers un modèle de développement orienté C# 4.0

Commencons donc sans plus tarder notre rappel C# 3.0 :

Les types implicites avec le mot clé var

Le mot clé var permet au développeur de laisser le soin au compilateur de déduire le type d'une variable, il évite ainsi au développeur, dans des situations « complexes » (notamment avec Linq) de se casser la tête à résoudre les types ou des situations avec un type de longueur kilométrique (merci les génériquesJ). Un simple mot clé var, combiné à l'utilisation de l'intellisense nous simplifie grandement la vie !

   1:  //au lieu d'écrire... (C# 2.0)
   2:  using (SPSite siteColl = new SPSite("http://ws2008dc01:10000")) {
   3:    using (SPWeb currentWeb = siteColl.OpenWeb()) {
   4:      foreach (SPList list in currentWeb.Lists) {
   5:        if (!list.Hidden) Console.WriteLine(list.Title);
   6:      }
   7:    }
   8:  }
   9:   
  10:  //...écrivez plutot (C# 3.0)
  11:  using (var siteColl = new SPSite("http://ws2008dc01:10000")) {
  12:    using (var currentWeb = siteColl.OpenWeb()) {
  13:      foreach (SPList list in currentWeb.Lists) {
  14:        if (!list.Hidden) Console.WriteLine(list.Title);
  15:      }
  16:    }
  17:  }

Les initialisateurs d'objets

Les initialisateurs d'objets permettent d'initialiser les propriétés publiques d'une classe, sans forcément passer par un constructeur, entrainant la plupart du temps un gain de temps considérable.

   1:  //au lieu d'écrire... (C# 2.0)
   2:  using (SPSite siteColl = new SPSite("http://ws2008dc01:10000")) {
   3:    siteColl.AllowUnsafeUpdates = true;
   4:    siteColl.CatchAccessDeniedException = true;
   5:    siteColl.PortalName = "My Portal";
   6:    siteColl.PortalUrl = "http://portal";
   7:                  
   8:    using (SPWeb currentWeb = siteColl.OpenWeb()) { }
   9:  }
  10:   
  11:  //...écrivez plutot (C# 3.0)
  12:  using (var siteColl = new SPSite("http://ws2008dc01:10000") {
  13:    AllowUnsafeUpdates = true, CatchAccessDeniedException = true,
  14:    PortalName = "My Portal", PortalUrl = "http://portal"
  15:  }) {
  16:    using (SPWeb currentWeb = siteColl.OpenWeb()) { }
  17:  }

Les méthodes d'extension

Les méthodes d'extension nous permettent d'étendre une classe existente en y rajoutant des méthodes à la volée.

   1:  //au lieu d'écrire... (C# 2.0 + beaucoup de farniente)
   2:  foreach (SPListItem item in cList.Items) { 
   3:    string title = item["Title"]==null?"":item["Title"].ToString();
   4:    string name= item["Name"]==null?"": item["Name"].ToString();
   5:   
   6:    XmlSerializer serializer = new XmlSerializer(typeof(Employee));
   7:    string data = (item["Employee"]==null)? "": item["Employee"].ToString();
   8:    if (data=="")throw new Exception("La colonne employee ne contient pas d'informations sérialisées.");
   9:    MemoryStream stream = new MemoryStream(Encoding.Default.GetBytes(data));
  10:    var employeeData = (Employee)serializer.Deserialize(stream);
  11:  }
  12:   
  13:   
  14:  //....écrivez plutot (C# 3.0)
  15:  foreach (SPListItem item in cList.Items) {
  16:    var title = item.IfNullReturnEmpty("Title");
  17:    var name = item.IfNullReturnEmpty("Name");
  18:    var employeeData = item.DeserializeAsEmployee("Employee");
  19:  }
  20:  //Avec en plus nos methodes d'extension
  21:  public static class Extensions {
  22:          
  23:    public static string IfNullReturnEmpty(this SPListItem item, string Column) {
  24:      return item[Column] == null ? "" : item[Column].ToString();
  25:    }
  26:   
  27:    public static Employee DeserializeAsEmployee(this SPListItem item, string Column) {
  28:      var serializer = new XmlSerializer(typeof(Employee));
  29:      var data = item.IfNullReturnEmpty(Column);
  30:      if (data == "") throw new Exception("La colonne employee ne contient pas d'informations sérialisées.");
  31:      var stream = new MemoryStream(Encoding.Default.GetBytes(data));
  32:      return (Employee)serializer.Deserialize(stream);
  33:    }
  34:  }

Le mot clé this dans la signature de la méthode d'extension permet de déterminer le type auquel sera rattachée la méthode (ici les méthodes sont rattachées aux classes SPListItem).

Les types anonymes

A l'instar des méthodes anonymes, les types anonymes vont être intéressants lorsque l'on souhaite implémenter rapidement et localement un type.

   1:  //au lieu d'écrire... (C# 2.0)
   2:  public class Contact {
   3:    string m_firstName;
   4:    public string FistName {
   5:      get { return this.m_firstName; }
   6:      set { this.m_firstName = value; }
   7:    }
   8:   
   9:    string m_lastName;
  10:    public string LastName {
  11:      get { return this.m_lastName; }
  12:      set { this.m_lastName = value; }
  13:    }
  14:   
  15:    string m_company;
  16:    public string Company {
  17:      get { return this.m_company; }
  18:      set { this.m_company = value; }
  19:    }
  20:  }
  21:   
  22:  //puis
  23:  Contact appContact1 = new Contact();
  24:  appContact1.FistName = item["FirstName"].ToString();
  25:  appContact1.LastName = item["LastName"].ToString();
  26:  appContact1.Company = item["Company"].ToString();
  27:  string msg;
  28:  msg = string.Format("Contact {0} {1} of {2} has been added !", appContact1.FistName,
  29:    appContact1.LastName, appContact1.Company);
  30:   
  31:   
  32:  //...écrivez plutot (C# 3.0)
  33:  var appContact2 = new {
  34:    FirstName = item["FirstName"].ToString(), LastName = item["LastName"].ToString(),
  35:    Company = item["Company"].ToString()
  36:  };
  37:  msg = string.Format("Contact {0} {1} of {2} has been added !", appContact2.FistName,
  38:    appContact2.LastName, appContact2.Company);

Les expressions Lambda

Les expressions Lambda sont des fonctions anonymes.

   1:  //au lieu d'écrire... (C# 2.0)
   2:  SPSecurity.RunWithElevatedPrivileges(delegate() {
   3:    cItem["Created"] = DateTime.Now;
   4:    cItem.SystemUpdate();
   5:  });
   6:   
   7:  //...écrivez plutot (C# 3.0)
   8:  SPSecurity.RunWithElevatedPrivileges(() => {
   9:    cItem["Created"] = DateTime.Now;
  10:    cItem.SystemUpdate();
  11:  });

L'opérateur Lambda '=>' se lit 'conduit à'

Les propriétés automatiques

Les propriétés automiques vont partie des apports les plus appréciables. Plus besoin d'implémenter les champs de stockage pour vos propriétés, le compilateur sais désormais les gérer automatiquement !

Précisez simplement dans votre code l'accessibilité de votre propriété (get et/ou set), et le compilateur se chage du reste. Ainsi nous pouvons réécrire la classe Contact précédemment définie comme ceci :

   1:  public class Contact2 {
   2:    public string FirstName { get; set; }
   3:    public string LastName { get; set; }
   4:    public string Company { get; set; }
   5:  }

3 lignes !

Vraiment appréciable.

Les méthodes partielles

Un des mécanismes que j'utilise le moins.

Vous pouvez donc désormais utiliser le mot clé partial sur vos méthodes pour séparer la déclaration de votre méthode de l'implémentation dans plusieurs fichiers de code.

Linq

Une véritable révolution !

Linq est un modèle de requêtage de données qui permet d'unifier l'accès aux données.

Que vous souhaitiez récupérer des données stockées dans vos objets métiers ou dans votre base de données ou un fichier texte, ou, etc…

Vous pouvez utiliser Linq de manière totalement transparente et homogène ; ce dernier fait abstraction de la source de données sous-jacente.

   1:  //au lieu d'écrire... (C# 2.0)
   2:  List<SPListItem> specialItems = new List<SPListItem>();
   3:  foreach (SPListItem item in list.Items) {
   4:    if (item["Title"].ToString().StartsWith("special_"))
   5:      specialItems.Add(item);
   6:  }
   7:              
   8:   
   9:  //...écrivez plutot (C# 3.0)
  10:  var specialItem = from SPListItem item in list.Items
  11:                    where item["Title"].ToString().StartsWith("special_")
  12:                    select item;

voila, vous êtes désormais paré à écrire du code C# 3.0 dans vos développements SharePoint !

[SP2007]Besoin d’aide sur l’administration de fermes volumineuses ? ce webcast est pour vous !

Si vous avez une multitude de sites à gérer et que vous êtes à la recherche d'une méthode claire, simple et efficace, alors je vous propose de visualiser ce webcast le mardi 2 Juin à 11h, heure de Paris, durant lequel vous verrez comment Fabrice Romelard [MVP SharePoint] s'y prend.

Ca pourrait être très instructif, alors profitez en !

[SP] Débugger des webparts et autres joyeusetés sous SharePoint.

On me pose souvent la question au sujet du débugage sous SharePoint :

« Comment débugguer mes webparts sous sharepoint ? »

Ben tout simple ! Il suffit de positionner un point d'arrêt dans le code, compiler le projet en mode debug puis copier le fichier .dll dans le bin de mon application web.

Ensuite, dans visual studio, dans le menu Outils, sélectionnez Options. Selectionnez ensuite Débogage > Général, puis décochez l'option « Activer uniquement mon code (Managé seulement) ».

Ca y'est, c'est fait !

Une fois ceci réalisé, retournez dans visual studio, dans le menu outils, sélectionner Attacher au processus, puis sélectionner le processus w3wp

Puis lancer IE, se connecter à une page contenant mon composant pour déclencher le code et l'intercepter grâce à votre point d'arrêt.

Généralement la question qui suit est :

« Oui mais comment je fais si je déploie ma dll dans le GAC ou si je veux débugger des composants comme les event receivers qui nécessite un passage obligé par le GAC ? »

En fait, c'est exactement la même chose, sauf qu'il faut signer l'assembly avant de la déployer dans le GAC.

Un exemple ci-dessous avec un event receiver.

Bon courage dans vos développements J

[SP]Ajouter des éléments à une liste SP à partir d’une base de données SQL grâce aux déclencheurs CLR et aux web services

Qui a dit que l'intégration du CLR dans le moteur de SGDB SQL Server ne servait à rien ?

Dans cet article, je vais vous montrer comment utiliser cette fonctionnalité pour ajouter des éléments à une liste SharePoint depuis une base de données SQL Server.

Création de notre liste exemple.

Nous allons dans un 1er temps créer notre liste exemple.

Pour cela, nous allons simplement partir d'une liste personnalisée, l'objectif étant de travailler sur un exemple simple, clair et concis.

Nommons notre liste ExempleMaj, et rajoutons lui une colonne de type texte nommée DB_ID

Création de notre base de données exemple.

A présent, créons la base de données que nous allons utiliser pour publier les données dans SharePoint

Pour cela, exécutez le script suivant :

   1:  CREATE DATABASE ExempleMaj_DB
   2:  GO
   3:   
   4:  USE [ExempleMaj_DB]
   5:  GO
   6:   
   7:  CREATE TABLE [dbo].[ExempleMaj](
   8:      [ID] [uniqueidentifier] NOT NULL,
   9:      [Title] [nvarchar](50) NULL,
  10:   CONSTRAINT [PK_ExempleMaj] PRIMARY KEY CLUSTERED 
  11:  (
  12:      [ID] ASC
  13:  )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
  14:  ) ON [PRIMARY]
  15:   
  16:  GO
  17:   
  18:  ALTER TABLE [dbo].[ExempleMaj] ADD  CONSTRAINT [DF_ExempleMaj_ID]  DEFAULT (newid()) FOR [ID]
  19:  GO

Ce script crée une base de données nommée ExempleMaj_DB, qui contient une table ExempleMaj, qui à son tour contient 2 colonnes ; une colonne ID et une colonne Title.

Création de nos déclencheurs

C'est à ce moment que nous allons créer le code qui permettra de mettre à jour notre liste SharePoint à partir de notre base de données.

Pour cela, créons un projet de type SQL Server.

Puis rajoutons la directive using suivante :

   1:  using Microsoft.SqlServer.Server;

Ci-dessous, voici le code de notre trigger.

L'attribut Name spécifie le nom de notre trigger tel qu'il sera connu par SQL Server ; l'attribut Target précise la base de données cible et enfin, l'attribut Event précise le type d'événement qui sera capturé.

La 1ère partie de ce code va interroger la table spéciale « Inserted » afin de récupérer les enregistrements mis à jour

La 2ème partie du code fait appel au web service Lists de SharePoint pour rajouter la donnée insérée dans Sharepoint (il faut pour cela rajouter une web référence vers notre service web)

   1:  [SqlTrigger(Name = "Trig_Insert", Target = "ExempleMaj", Event = "FOR INSERT")]
   2:  public static void InsertTrigger() {
   3:    SqlTriggerContext context = SqlContext.TriggerContext;
   4:    Guid id = Guid.Empty;
   5:    string title = null;
   6:    if (context.TriggerAction == TriggerAction.Insert) {
   7:      string connectionString = "context connection=true";
   8:      DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.SqlClient");
   9:      using (IDbConnection connection = factory.CreateConnection()) {
  10:        connection.ConnectionString = connectionString;
  11:        using (IDbCommand command = connection.CreateCommand()) {
  12:          command.CommandText = "select * from inserted";
  13:          command.CommandType = CommandType.Text;
  14:          connection.Open();
  15:          using (IDataReader reader = command.ExecuteReader()) {
  16:            while (reader.Read()) {
  17:              id = reader.GetGuid(0);
  18:              title = reader.GetString(1);
  19:            }
  20:          }
  21:        }
  22:      }
  23:    }
  24:    if (id!=Guid.Empty) {
  25:      Lists ws = new Lists();
  26:      ws.UseDefaultCredentials = true;
  27:      ws.Url = "http://ws2008dc01/dev/_vti_bin/lists.asmx";
  28:      string batch = string.Format(@"<Batch OnError='Continue'><Method ID='0' Cmd='New'>
  29:          <Field Name='DB_ID'>{0}</Field>
  30:        <Field Name='Title'>{1}</Field>
  31:        </Method></Batch>", id, title);
  32:      XmlDocument doc = new System.Xml.XmlDocument();
  33:      doc.LoadXml(batch);
  34:      XmlNode node = doc.DocumentElement;
  35:      try {
  36:        ws.UpdateListItems(m_ListName, node);
  37:      }
  38:      catch { }
  39:    }
  40:  }

A présent compilons notre projet.

Maintenant, si nous essayons d'importer notre assembly, tout le processus d'import se déroulement correctement, cependant, au moment de l'insertion d'une ligne, notre déclencheur va générer une exception telle que celle la.

En gros, étant donné que nous appelons un web service, SQL Server a besoin d'informations de sérialisation sur notre dll.

Il nous faut donc générer ces informations.

Puis tapez « sgen /a :SPTriggers.dll » afin de générer l'assembly SPTriggers.XmlSerializers.dll.

Ca y'est, maintenant tout est ok.

Import de notre assembly dans SQL Server

A ce stade, il ne nous reste plus qu'à importer notre assembly et créer notre trigger dans SQL Server comme suit :

   1:  -- Activation du CLR
   2:  sp_configure 'clr enabled', 1
   3:  go
   4:   
   5:  reconfigure
   6:  go
   7:   
   8:  -- Utilisation de notre base de données
   9:  use ExempleMaj_DB
  10:  go
  11:   
  12:  -- Modification du niveau de confiance de la base
  13:  ALTER DATABASE ExempleMaj_DB SET TRUSTWORTHY ON
  14:  go
  15:   
  16:  -- Import de l'assembly
  17:  drop trigger Trig_Insert
  18:  go
  19:  drop assembly TriggersAssembly
  20:  go
  21:   
  22:  CREATE ASSEMBLY TriggersAssembly
  23:  FROM
  24:  'C:\Users\Administrator\Documents\Visual Studio 2008\Projects\Coforcert.SharePoint\SPTriggers\bin\Debug\SPTriggers.dll'
  25:  WITH PERMISSION_SET = UNSAFE
  26:  GO
  27:   
  28:  -- Création de nos triggers
  29:  create trigger Trig_Insert
  30:  on dbo.ExempleMaj
  31:  for insert
  32:  as
  33:  external name TriggersAssembly.[Coforcert.SharePoint.Triggers.SPTriggers].InsertTrigger
  34:  go
  35:   
  36:  -- Obligatoire ici, car nous appelons un web service dans notre trigger.
  37:  CREATE ASSEMBLY TriggersAssemblyXml
  38:  FROM
  39:  'C:\Users\Administrator\Documents\Visual Studio 2008\Projects\Coforcert.SharePoint\SPTriggers\bin\Debug\SPTriggers.xmlserializers.dll'
  40:  WITH PERMISSION_SET = UNSAFE
  41:  Go

Maintenant, si nous saisissons des données dans notre table, ces dernières sont automatiquement rajoutées dans notre liste SharePoint.

Voila, c'est fait !

Attention :

Cet article a vocation uniquement de démonstrateur. En aucun cas, il ne doit être implémenté tel quel sur un serveur de production, car cela pourrait altérer considérablement les performances, si plusieurs utilisateurs insèrent régulièrement des données dans votre base de données. Dans ce cas, il faudrait adapter le code de cet article afin de passer par des jobs SharePoint à la place des déclencheurs.

1 - 10 Suivant