IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SharePoint .NET Discussion :

Récupérer une partie du contenu d'une liste [SP-2007]


Sujet :

SharePoint .NET

  1. #1
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Points : 5 347
    Points
    5 347
    Billets dans le blog
    5
    Par défaut Récupérer une partie du contenu d'une liste
    Bonjour,

    Je commence dans le développement sharepoint et je suis un peut perdu...
    Je souahite créer un web services qui me permettrais de récupérer une partie d'une liste en fonction d'une chaine de caractère.

    Pour mieux comprendre la situation, j'ai une liste de 18000 lignes... Et je souhaite afficher une petite partie de cette liste dans une listbox infopath. Environ 2à éléments, hors il n'y a pas de moyen de le faire dans infopath, donc je souahite le faire à l'aide d'un WebService.

    J'ai trouvé ce post, mais je n'arrive pas à l'adapter à mes besoins... Quelqu'un peut il m'aider?

    Merci par avance

  2. #2
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Points : 5 347
    Points
    5 347
    Billets dans le blog
    5
    Par défaut
    re tout le monde.

    Ne réussissant pas à mettre en place mon web service, j'ai développé le mini algo dans un web part, histoire de l'avoir sous la main.
    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    using System;
    using System.Runtime.InteropServices;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Serialization;
     
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.WebControls;
    using Microsoft.SharePoint.WebPartPages;
    using System.Collections;
    using Microsoft.SharePoint.Utilities;
     
    namespace AtacossWebPart
    {
        [Guid("b02c4f06-2056-411b-980a-453753c5f642")]
        public class WebPartList : System.Web.UI.WebControls.WebParts.WebPart
        {
            [Personalizable]
            [WebBrowsable(true)]
            [WebDisplayName("Filter value")]
            public string Filter { get; set; }
     
            [Personalizable]
            [WebBrowsable(true)]
            [WebDisplayName("Nomber of records to display")]
            [WebDescription("Set to 0 for unlimited")]
            public int NbRecord { get; set; }
     
            public WebPartList()
            {
                NbRecord = 20;
            }
     
            protected override void CreateChildControls()
            {
                base.CreateChildControls();
     
                ListBox LB = new ListBox();
                LB.Items.Clear();
     
                SPSite oSiteCollection = SPContext.Current.Site;
                SPList oList = oSiteCollection.AllWebs[""].Lists["Donatir"];
     
                SPQuery oQuery = new SPQuery();
                if (Filter != null && Filter.Length >= 3)
                {
                    oQuery.Query = "<Where><BeginsWith><FieldRef Name='Title'/><Value Type='Text'>" + Filter + "</Value></BeginsWith></Where>";
                    SPListItemCollection oCollectionListItems = oList.GetItems(oQuery);
                    int nbRow = 0;
     
                   foreach (SPListItem oListItem in oCollectionListItems)
                    {
                        LB.Items.Add(SPEncode.HtmlEncode(oListItem["Title"].ToString()));
                        nbRow ++;
                    }
     
                }
                else
                {
                    LB.Items.Add("You must specify a 3 characters length filter");
                }
                if (LB.Items.Count == 0)
                {
                    LB.Items.Add("no record find...");
                }
     
                LB.Items.Capacity = NbRecord;
                this.Controls.Add(LB);
            }
        }
    }
    Celui-ci fonctionne parfaitement pas de soucis.

    Est ce que quelqu'un peut m'aider à l'adapter pour en faire un web service?
    Merci par avance

  3. #3
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    395
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juin 2008
    Messages : 395
    Points : 218
    Points
    218
    Par défaut
    Citation Envoyé par ludojojo Voir le message
    re tout le monde.

    Ne réussissant pas à mettre en place mon web service, j'ai développé le mini algo dans un web part, histoire de l'avoir sous la main.
    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    using System;
    using System.Runtime.InteropServices;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Serialization;
     
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.WebControls;
    using Microsoft.SharePoint.WebPartPages;
    using System.Collections;
    using Microsoft.SharePoint.Utilities;
     
    namespace AtacossWebPart
    {
        [Guid("b02c4f06-2056-411b-980a-453753c5f642")]
        public class WebPartList : System.Web.UI.WebControls.WebParts.WebPart
        {
            [Personalizable]
            [WebBrowsable(true)]
            [WebDisplayName("Filter value")]
            public string Filter { get; set; }
     
            [Personalizable]
            [WebBrowsable(true)]
            [WebDisplayName("Nomber of records to display")]
            [WebDescription("Set to 0 for unlimited")]
            public int NbRecord { get; set; }
     
            public WebPartList()
            {
                NbRecord = 20;
            }
     
            protected override void CreateChildControls()
            {
                base.CreateChildControls();
     
                ListBox LB = new ListBox();
                LB.Items.Clear();
     
                SPSite oSiteCollection = SPContext.Current.Site;
                SPList oList = oSiteCollection.AllWebs[""].Lists["Donatir"];
     
                SPQuery oQuery = new SPQuery();
                if (Filter != null && Filter.Length >= 3)
                {
                    oQuery.Query = "<Where><BeginsWith><FieldRef Name='Title'/><Value Type='Text'>" + Filter + "</Value></BeginsWith></Where>";
                    SPListItemCollection oCollectionListItems = oList.GetItems(oQuery);
                    int nbRow = 0;
     
                   foreach (SPListItem oListItem in oCollectionListItems)
                    {
                        LB.Items.Add(SPEncode.HtmlEncode(oListItem["Title"].ToString()));
                        nbRow ++;
                    }
     
                }
                else
                {
                    LB.Items.Add("You must specify a 3 characters length filter");
                }
                if (LB.Items.Count == 0)
                {
                    LB.Items.Add("no record find...");
                }
     
                LB.Items.Capacity = NbRecord;
                this.Controls.Add(LB);
            }
        }
    }
    Celui-ci fonctionne parfaitement pas de soucis.

    Est ce que quelqu'un peut m'aider à l'adapter pour en faire un web service?
    Merci par avance
    Après l'ajout de la référence de WebService (dans mon exemple nomé webservice) dans ton projet tu doit tout d'abord ajouter le netWorkCredentiel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    webservice.Lists listExterne = new webservice.Lists();
    listExterne.Credentials = new NetworkCredential("administrateur", "motdepasse", "nomduserveur");
    listExterne.Url = nomServeur + "/_vti_bin/Lists.asmx";
    puis tu peux manipuler tes liste SharePoint à l'aide du WebService.
    Pour ton cas consultation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
     string query = @" <Query>
                                   <OrderBy>
                                      <FieldRef Name='Title' />
                                   </OrderBy>
                                </Query>";
                query += @"<ViewFields><FieldRef Name=""Title"" /></ViewFields><QueryOptions></QueryOptions>";
                System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
                doc.LoadXml("<Document>" + string.Format(query, "titre") + "</Document>");
                XmlNode listQuery = doc.SelectSingleNode("//Query");
                XmlNode listViewFields = doc.SelectSingleNode("//ViewFields");
                XmlNode listQueryOptions = doc.SelectSingleNode("//QueryOptions");
                XmlNode listview = listExterne.GetListItems("ListeSharePoint", "", listQuery, listViewFields, "20(entier le nombre limite des éléments retournés)", listQueryOptions, "");
                foreach (XmlNode xml in listview.ChildNodes[1].ChildNodes)
                {
                    //"\n   " et le séparateur entre deux valeurs
                    if (xml.Value != "\n   ")
                    {
                        try
                        {
                            titreElement= xml.Attributes["ows_Title"].Value.ToString();
                        }
                        catch
                        {
                        }
                    }
                }

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 150
    Points : 152
    Points
    152
    Par défaut
    Salut,

    Si j'ai bien compris, tu souhaite ne récupéré qu'une partie de tes données contenu dans une liste SharePoint dans un formulaire InfoPath.

    Pour cela, le plus performant est de réalisé un web service comme tu l'a cité toi même.

    Ce web service devra être hébergé dans un site web qui se situe dans le même pool d'application que le site SharePoint.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    //Connexion au site Sharepoint
            using (SPSite site = new SPSite("http://site.url"))
            {
                //Ouverture du sous site si il y'en a un
                using (SPWeb web = site.OpenWeb("nom du sous site"))
                {
                    web.AllowUnsafeUpdates = true;
                    //Récupération de la liste dans laquel on doit enregistrer
                    SPList list = web.Lists["Nom de la liste"];
     
                    //Tu met ton code pour récupéré les données souhaité
                }
            }
    Par contre si tu ne peux accéder au site car tu n'as pas la possibilité de mettre ton web service dans le même pool d'application que ton site SharePoint, il te faudra passer par les web services Sharepoint afin de récupérer les éléments de ta liste (cf le post de hassine).

    Cdt,
    Spaeda

  5. #5
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Points : 5 347
    Points
    5 347
    Billets dans le blog
    5
    Par défaut
    En effet, il m'a suffit d'ajouter ces deux lignes dans mon code à la place de mon Context :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SPSite site = new SPSite("http://site.url")
    SPWeb web = site.OpenWeb("nom du sous site")
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Rechercher une partie du contenu d'une Cellule
    Par kuma_buzz dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/06/2008, 11h36
  2. [8i] Exporter une partie du contenu d'une table
    Par nicdo77 dans le forum Oracle
    Réponses: 1
    Dernier message: 12/12/2007, 14h59
  3. [VBA-E] Affecter une partie du contenu d'une cellule à une autre.
    Par CAFOUIN dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/02/2007, 10h03
  4. Excel : mettre une partie du contenu d'une cellule en gras
    Par cladsam dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/08/2006, 10h05
  5. [VBA-E] Inscrire dans le textbox une partie du contenu d'une cellule
    Par AliochaBada dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/08/2006, 08h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo