none
comment peupler un lookup sharepoint avec SSIS? RRS feed

  • Question

  • Bonjour,

    Je débute sur sharepoint...

    J'utilise business intelligence development studio pour créer un package afin de peupler des listes sharepoint à partir d'une base oracle (8i).
    site sharepoint 2007 dernière version avec WSS 3.0

    un premier flow prend une table oracle (source ADO NET) pour peupler ma liste A
    un deuxieme flow prend une autre table oracle pour peupler ma liste B

    J'ai un type de donnée lookup dans sharepoint qui met en relation plusieurs éléments de ma liste A à un seul élément de ma liste B.
    cette relation est enregistré dans une table oracle (contenant 2 champs avec les 2 id des 2 listes). Comment faire pour importer cette relation?

    J'essaye avec la transformation de donnée de type lookup mais je n'arrive pas à ce que je cherche (peut etre l'ai-je mal paramétré).

    merci de votre aide ou au moins quelques pistes si vous en avez...
    • Modifié doubsfai1 mercredi 19 août 2009 11:55
    jeudi 13 août 2009 16:15

Toutes les réponses

  • Finalement j'essaye en utilisant un "script component"

    J'utilise une source OLE pour me connecter à ma base de donnée qui arrive en input sur mon script.

    et en output j'ai créé 2 colonnes, find et not find en mettant bien les propriétés ExclusiongGroup à 1 et SynchronousInput au numéro donné dans input column.

    J'ai aussi ajouter une connection manager qui pointe sur http:\\monsite\_vti_bin\lists.asmx?WSDL

    Dans mon script, j'ai ajouté une référence Web (efindLists1) sur ma liste sharepoint http:\\monsite\_vti_bin\lists.asmx?WSDL

    voici mon code

    using System;
    using System.Data;
    using System.Xml;
    using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
    using Microsoft.SqlServer.Dts.Runtime.Wrapper;
    using SC_ca6870e5b1bc4a048a702c2c74823931.csproj.efindLists1;
    [Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute] public class ScriptMain : UserComponent { private Lists malist = new Lists(); public override void Input0_ProcessInputRow(Input0Buffer Row) { XmlDocument xmlDoc = new XmlDocument(); XmlNode noeud, queryList, fieldList, optionQuery, nodeId, nodeMap; string res,ListGUID, ViewGUID; malist.Credentials = System.Net.CredentialCache.DefaultCredentials; malist.Url = "http://monsite/_vti_bin/lists.asmx"; queryList = xmlDoc.CreateNode(XmlNodeType.Element,"Query",""); fieldList = null; // xmlDoc.CreateNode(XmlNodeType.Element, "ViewFields", ""); optionQuery = xmlDoc.CreateNode(XmlNodeType.Element,"QueryOptions",""); queryList.InnerXml = "<Where>" + "<Gt>" + "<FieldRef Name='ASSET_ID0' />" + "<Value type=\"Text\">\"" + (Row.ASSETID).ToString() + "\"</Value>" + "</Gt> "+ "</Where>" ; /* j'ai commenté ce code car j'ai vu sur certain site qu'il fallait aussi utilisé le GUID des champs mais je n'ai pas réussi à le trouver fieldList.InnerXml = "<FieldRef Name = 'ID' />" + "<FieldRef Name = 'Map_x0020_Obejct' />" + "<FieldRef Name = 'ASSET_ID0' />"; */ optionQuery.InnerXml = "<IncludeMandatoryColumns>TRUE</IncludeMandatoryColumns>"; ListGUID = "{A9DCCAA8-93F0-4781-A7D8-94D5EC4EACC4}"; //maListe ViewGUID = "{325E11FE-C3E9-4F3B-9AE3-3A59E4727ABE}"; //detailed view noeud = malist.GetListItems(ListGUID,ViewGUID,queryList,fieldList,null,optionQuery,null); res = "//*[@ows_ID]"; nodeId = noeud.SelectSingleNode(res); res = "//*[@ows_Map_x0020_Obejct]"; nodeMap = noeud.SelectSingleNode(res);

     

    Mais j'ai une erreur à l'éxécution

    exception of type "microsoft.sharepoint.soapServerExceptions" was thrown

    avec le détail suivant :

    at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)

    at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)

    at SC_ca6870e5b1bc4a048a702c2c74823931.csproj.efindLists1.Lists.GetListItems(String listName, String viewName, XmlNode query, XmlNode viewFields, String rowLimit, XmlNode queryOptions, String webID)

    at ScriptMain.Input0_ProcessInputRow(Input0Buffer Row)

    at UserComponent.Input0_ProcessInput(Input0Buffer Buffer)

    at UserComponent.ProcessInput(Int32 InputID, PipelineBuffer Buffer)

    at Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.ProcessInput(Int32 inputID, PipelineBuffer buffer)

    Je n'arrive pas à trouver de solution...

    • Modifié doubsfai1 mercredi 19 août 2009 15:28
    mercredi 19 août 2009 09:51