Avec les utilitaires OSQL ou ISQL, il est possible d’exécuter des script SQL en lignes de commande :
osql /U mon_user /P mon_password /S mon_serveur /d ma_bdd /n /i mon_fichier_de_script.sql
Cependant, si le fichier mon_fichier_de_script.sql contient des caractères spéciaux, ça risque de planter.
En effet, l’option système « Automatic ANSI to OEM conversion » est sans doute activée. De plus, il faut utiliser ISQL.
Il faut donc modifier cette clé qui se trouve en base de registre.
Pour faire propre, voici ce qu’il faut ajouter dans votre .bat pour que tout aille mieux :
–> Sous Windows 2003, on va mettre la valeur de la clé à OFF si elle était à ON :
FOR /F "TOKENS=3 DELIMS= " %%A IN (’REG QUERY HKLMSOFTWAREMicrosoftMSSQLServerClientDB-Lib /v AutoAnsiToOem’) DO SET AUTOANSITOOEM=%%A
IF /i "%AUTOANSITOOEM%" EQU "ON" (REG ADD HKLMSOFTWAREMicrosoftMSSQLServerClientDB-Lib /v AutoAnsiToOem /t REG_SZ /d OFF /f)
–> Sous Windows XP, la même chose, sauf que la boucle FOR renvoie 4 entrée, il faut choisir la bonne (SKIP=3) :
FOR /F "SKIP=3 TOKENS=3 DELIMS= " %%A IN (’REG QUERY HKLMSOFTWAREMicrosoftMSSQLServerClientDB-Lib /v AutoAnsiToOem’) DO SET AUTOANSITOOEM=%%A
IF /i "%AUTOANSITOOEM%" EQU "ON" (REG ADD HKLMSOFTWAREMicrosoftMSSQLServerClientDB-Lib /v AutoAnsiToOem /t REG_SZ /d OFF /f)
Ensuite, il faut inclure la ou les commandes ISQL UNIQUEMENT (sinon, simplement remplacer OSQL par ISQL) :
isql /U mon_user /P mon_password /S mon_serveur /d ma_bdd /n /i mon_fichier_de_script.sql
Et pour finir, remettre en place la clé de la base de registre :
IF /i "%AUTOANSITOOEM%" EQU "ON" (REG ADD HKLMSOFTWAREMicrosoftMSSQLServerClientDB-Lib /v AutoAnsiToOem /t REG_SZ /d ON /f)
Notez que l’option « Automatic ANSI to OEM conversion » est directement modifiable via l’outil cliconfg.exe.
Article adapté de cette page en anglais
Catégorie : SQL Server
MOSS 2007 : Comment modifier une liste SharePoint via un WebService sous SSIS ?
Tutoriel.
SOMMAIRE
- 1. INTRODUCTION
- 2. VERIFIER L’EXISTENCE DU WEB SERVICE
- 3. CREER LA DLL DE PROXY
- 4. EXEMPLE DE PROJET SOUS SSIS
1. INTRODUCTION
1.1. Description
Voici une manière rapide de mettre à jour des métadonnées d’éléments d’une liste SharePoint grâce aux web services natifs de l’application. Ces web services seront appelés à partir de Microsoft SQL Server 2005 Integration Services (SSIS).
1.2. Pré-requis
Les logiciels suivants doivent être installés sur la machine :
- WSS 3.0 et MOSS 2007
- Visual Studio 2005
- SQL Server 2005
2. VERIFIER L’EXISTENCE DU WEB SERVICE
Sous IE, taper l’URL suivante : http://serveur:port/_vti_bin/lists.asmx
» serveur:port » étant un site SharePoint dans lequel vous souhaitez attaquer les listes.
L’écran suivant devrait s’afficher avec la liste complète des opérations que propose le Web Service :
3. CREER LA DLL DE PROXY
Une DLL de proxy fournit toutes les classes qui permettent de communiquer avec le Web Service. Il serait possible de développer soi-même ces classes, mais ce serait inutile, car la création de cette DLL est très simple. Elle nous permet de faire abstraction, entre autres, de l’utilisation du protocole SOAP et du formatage des requêtes à envoyer au serveur.
Une DLL de proxy = Un Web Service.
NB : SSIS est capable de communiquer directement avec des Web Services grâce à la » Web Service Task « . Cependant, le Web Service List.asmx contient des paramètres de type complex qui ne sont pas gérés par SSIS. D’où la création de cette DLL qui sera fournie à SSIS.
3.1. Création de la DLL
Ouvrir Visual Studio 2005, même une version Express gratuite suffit. Ici nous utiliserons Visual C# 2005 Express Edition.
Ajout d’une référence vers le Web Service :
- Faire Fichier > Nouveau Projet > Class Library
- Donner un nom du genre » MOSSWebService » et cliquer sur OK.
- Dans l’explorateur de solution, faites un clic-droit sur » Références » et cliquer sur » Ajouter une référence Web » :
- Dans la fenêtre qui apparait, renseigner l’URL du Web Service (la page comme vue précédemment devrait s’afficher en aperçu), et donner un nom à la référence (ici, MOSSWebService_Lists) :
- Cliquer sur » Ajouter la référence « .
- NB : A partir de ce moment là, Visual Studio va générer automatiquement tout le code adapté au Web Service en utilisant WSDL.exe (qu’on aurait pu aussi utiliser » à la main » directement en ligne de commande).
- Sauvegarder la solution dans un répertoire quelconque.
Avant de compiler notre solution, il va falloir signer l’assembly :
- Faire un clic-droit sur le projet (MOSSWebService), et faites » Propriétés « .
- Cliquer sur l’onglet » Signature « .
- Cliquer sur » Signer l’assembly «
- Dans la liste déroulante en dessous, faire » <nouveau�> «
- Une fenêtre surgit, donner un nom au fichier de clé (ici, MOSSWebService_Lists)
- Décocher la case » Protéger mon fichier par un mot de passe «
- Faire OK, vous devriez obtenir cet écran :
- Faites CTRL + S avant de cliquer-droit sur la solution et cliquer sur » Générer la solution « .
3.2. Enregistrement dans le GAC
- Copier la DLL, présente dans » Repertoire_de_la_solution / MOSSWebService / bin / Release / « , vers le répertoire » C: WINDOWS Microsoft.NET Framework v2.0.xxxxx « .
- Ouvrir une fenêtre de commandes MSDOS.
- Aller dans le répertoire » C:WINDOWSMicrosoft.NETFrameworkv2.0.xxxxx « .
- Taper » gacutil –i MOSSWebService.dll » et faites ENTREE.
- L’assembly et ajoutée dans le cache et est disponible pour SSIS.
-
NB : Certains diront qu’il suffit de faire un glisser-déposer de la DLL pour la placer dans le GAC. A cela je réponds : « C’est en faisant n’importe quoi qu’on devient n’importe qui » (L.Briand).
4. EXEMPLE DE PROJET SOUS SSIS
- Lancer SQL Server Business Intelligence Development Studio, et faire » Fichier > Nouveau > Projet » puis sélectionner » Project Integration Service » et faire OK.
- Faire un » Glisser – déposer » d’une tâche de script de la boite à outils vers la page Flux de contrôle :
- Double-cliquer sur la tache de script.
- Une fenêtre d’édition de la tâche s’ouvre. Cliquer sur » Script » à gauche, puis sur le bouton » Créer un script » en bas :
- Une nouvelle fenêtre Visual Studio s’ouvre, avec du code source prédéfini.
- Dans l’ » explorateur de projet » (ici à gauche), faire un clic-droit sur » Références » et cliquer sur » Ajouter une référence » :
- Choisir la nouvelle DLL fraichement créée (MOSSWebService.dll), faire » Ajouter » puis » OK « .
- Faire de même pour les deux DLL suivantes :
- System.XML.dll
- System.Web.Services.dll
- Modifier le code comme suit :
- Ajouter deux lignes d’import :
Imports MOSSWebService
Imports MOSSWebService.MOSSWebService_Lists
- Dans le corps de la fonction Main(), ajouter le code suivant :
- Ajouter deux lignes d’import :
-
Public Sub Main() Try ’’’ URL du Web Service Dim sUrl As String = "http://URL/_vti_bin/lists.asmx" ’’’ Objet représentant le Web Service Dim oListWS As New Lists oListWS.Credentials = System.Net.CredentialCache.DefaultCredentials oListWS.Url = sUrl ’’’ Génération de la requête CAML de mise à jour de la liste Dim xDoc As New System.Xml.XmlDocument Dim xBatch As System.Xml.XmlElement = xDoc.CreateElement("Batch") xBatch.SetAttribute("OnError", "Return") ’’’ Corps de la requête CAML : Cette requête va simplement changer la metadonnée "Title" ’’’ de l’item d’identifiant 20. Dim sBatch As String = "" sBatch += "20" sBatch += "Nouveau Titre" sBatch += "" xBatch.InnerXml = sBatch ’’’ Lancement de la fonction de MAJ de la liste "Bibliothèque des sinistres". Dim xReturn As System.Xml.XmlNode = oListWS.UpdateListItems("Bibliothèque des sinistres", xBatch) ’’’ Affichage de la réponse renvoyée par le serveur. Dts.Events.FireInformation(1, "", xReturn.InnerXml, "", 0, False) ’’’ La tâche s’est bien passée Dts.TaskResult = Dts.Results.Success Catch Ex As Exception ’’’ La tâche a échoué Dts.TaskResult = Dts.Results.Failure End Try End Sub
- Faire CTRL + S, et fermer la fenêtre Visual Studio.
- De retour sur le SSIS, faire F5 pour lancer le package.
- L’item d’identifiant 20 (s’il existe) aura son titre à » Nouveau Titre » (à vérifier sous le site SharePoint).