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

Développement Sharepoint .NET Discussion :

Ajouter/Lire éléments à une liste existante via VBA et XMLHTTP


Sujet :

Développement Sharepoint .NET

  1. #1
    Membre averti
    Inscrit en
    Février 2013
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 14
    Par défaut Ajouter/Lire éléments à une liste existante via VBA et XMLHTTP
    Bonjour,

    J'ai trouvé via ce forum un code qui réponds à mon besoin mais je n'arrive pas à l'adapter à mon Sharepoint et j'aimerai des explications afin d'y arriver.

    Mon but est de remplir une liste sharepoint existante automatiquement depuis un excel (qui est stocké sur mon Sharepoint mais que je dois ouvrir pour faire tourner une macro)

    dans ce sujet http://www.developpez.net/forums/d15...via-excel-vba/ , je trouve le code suivant:
    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
     
    Private Sub CommandButton21_Click()
     
     
     
    Add_Item "TESTLIST", "http://Sharepointsite/", "My new Value", "Title"
     
     
     
    End Sub
     
     
    Sub Add_Item(ListName As String, SharepointUrl As String, ValueVar As String, FieldNameVar As String)
     
        Dim objXMLHTTP As MSXML2.XMLHTTP
     
        Dim strListNameOrGuid As String
        Dim strBatchXml As String
        Dim strSoapBody As String
     
        Set objXMLHTTP = New MSXML2.XMLHTTP
     
        strListNameOrGuid = ListName
     
        strBatchXml = _
           "<Batch OnError=""Continue"" ListVersion=""1"">" & _
               "<Method ID=""1"" Cmd=""New"">" & _
                   "<Field Name='ID'>New</Field>" & _
                   "<Field Name=""" & FieldNameVar & """>" & ValueVar & "</Field>" & _
               "</Method>" & _
          "</Batch>"
     
     
     
        objXMLHTTP.Open "POST", SharepointUrl + "_vti_bin/Lists.asmx", False
        objXMLHTTP.setRequestHeader "Content-Type", "text/xml; charset=""UTF-8"""
        objXMLHTTP.setRequestHeader "SOAPAction", "http://schemas.microsoft.com/sharepoint/soap/UpdateListItems"
     
     
        strSoapBody = "<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' " _
         & "xmlns:xsd='http://www.w3.org/2001/XMLSchema' " _
         & "xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'><soap:Body><UpdateListItems " _
         & "xmlns='http://schemas.microsoft.com/sharepoint/soap/'><listName>" & strListNameOrGuid _
         & "</listName><updates>" & strBatchXml & "</updates></UpdateListItems></soap:Body></soap:Envelope>"
     
         ActiveCell.Value = strSoapBody
     
         objXMLHTTP.send strSoapBody
     
        If objXMLHTTP.Status = 200 Then
            ActiveCell.Value = objXMLHTTP.responseText
        '   Do something with response
        End If
     
        Set objXMLHTTP = Nothing
     
    End Sub
    prmièrement, quelle url mettre pour mon sharepoint? celle de la page d'accueil, celle de ma liste? Pour l'example, voici le lien de ma liste à mettre à jour: https://.../projects/A035000082072/T.../AllItems.aspx

    J'ai essayé plusieurs combinaisons en ajoutant le _vti_bin/Lists.asmx mais je tombe toujours sur la page "List" qui me done la liste des opérations supportées.

    Ensuite pour FieldNameVar et ValueVar c'est explicite: le nom du champ que je veux remplir et sa valeur. Par contre, vu que je veux importer des lignes entières, il me faut surement préciser les champs 1 par 1?

    Merci d'avance

    Sinon, un peu de background:
    J'ai crée une macro excel qui se connecte à SAP pour extraire des listes d'objets sur lesquel nous travaillons. Je traite mes extraits puis stocke tout sur une worksheet bien propre avec des champs libres que des utilisateurs vont devoir remplir manuellement (ex: commentaire sur l'objet).
    L'idée est d'avoir l'excel contenant la macro dans sharepoint comme ça on peux la lancer de quasiment n'importe quel pc et sortir nos KPIs. Ces KPIs sont automatiquement affichés dans le Sharepoint.
    Pour la partie remplissage, plutôt que tous les utilisateurs ouvrent le même fichier excel, je veux que ma macro écrive les listes à compléter dans une liste sharepoint. Elle récupérera ensuite les donnéees entrées par les utilisateurs la prochaine fois qu'elle sera exécutée.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 486
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 486
    Par défaut
    Bonjour,

    L'url de site devrait etre la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    https://.../projects/A035000082072/Test/
    Pour le nom de liste (to_SAP est le nom statique), rendez-vous sur la liste concernee pour avoir son nom d'affichage.
    Encore mieux, puisque le nom d'affichage peut changer dans le temps, vous pouvez utiliser le Guid de la liste qui est recuperable depuis la page d'administration de la liste (dans l'url de la page d'admin il y a le parametre ListId=****).
    L'un ou l'autre est acceptable.

    Consulter une adresse en _vti_bin/Lists.asmx dans le navigateur n'a pas d'autre effet que d'afficher les operations disponibles (un wdsl user-friendly).
    cf.: https://msdn.microsoft.com/en-us/lib...(v=vs.90).aspx

    Vous devrez effectivement modifier la fonction qui en l'etat ne permet d'inserer un item qu'avec un seul champ/valeur.
    Faites attention aux types des champs a traiter et pensez a bien echapper les caracteres delimiteurs de chaine ( " ' ).

  3. #3
    Membre averti
    Inscrit en
    Février 2013
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 14
    Par défaut
    Merci de l'aide nonoxp.

    J'ai récupéré le guid de ma liste {BE6DC4EA-DB24-44E8-9B69-E8AE287DD058} que j'utilise lors ded l'appel de la procédure Add_Item.
    Pas de résultats pour le moment cepandant.

    le code crée t'il une nouvelle colonne ou va t'il insérer dans une colonne existante? Le Field Name='ID' est il à adapter dans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    strBatchXml = _
           "<Batch OnError=""Continue"" ListVersion=""1"">" & _
               "<Method ID=""1"" Cmd=""New"">" & _
                   "<Field Name='ID'>New</Field>" & _
                   "<Field Name=""" & FieldNameVar & """>" & ValueVar & "</Field>" & _
               "</Method>" & _
          "</Batch>"
    Le code cidessus ajoute une colonne nommée ID puis ajoute la valeur donnée (ValueVar) dans le champ donné (FieldNameVar)?

    Autre question: la procédure ne contient aucune sorte d'authentification auprès du Sharepoint. Il serait logique d'avoir comme une chaine de connexion, non? Je vais chercher dans cette direction.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 486
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 486
    Par défaut
    Ok pour le guid.

    Cette procedure ne cree pas de colonnes -> elle ne modifie pas la structure de la liste.
    Elle sert a creer un nouvel item (Cmd="New") dans la liste et remplit ses proprietes, chaque propriete devant exister au prealable dans la structure de la liste.
    Il faut veiller a remplir toutes les colonnes declarees comme obligatoires.
    Attention a bien utiliser le nom interne des colonnes et pas le nom d'affichage.
    Pour retrouver le nom interne depuis le navigateur, il faut aller dans la page de gestion de la liste et cliquer sur le nom de la colonne concernee, vous verrez dans l'url le parametre "Field=***".

    Concernant l'ID, c'est une colonne a part qui existe dans toutes les liste SharePoint par defaut, il faut laisser le script en l'etat.
    Il est attribue automatiquement par le systeme et est donc inconnu avant la creation de l'item.
    Je reconnais que la valeur de colonne "New" peut etre deroutante dans ce cas, c'est juste un marqueur.

    Ne brulez pas les etapes, essayez d'abord avec une custom list de base qui ne contient que la colonne Title non obligatoire (et ID).
    Essayez aussi de regarder la valeur de retour objXMLHTTP.Status et responseText, il vous donnera une idee de ce qu'il se passe cote SharePoint notamment en cas d'erreur et nous aidera a vous aider.

    Un exemple d'utilisation :
    http://stackoverflow.com/a/11125010

    Concernant l'authentification, dans quel environnement SharePoint travaillez-vous ? (Version)
    En supposant que vous etes sur de l'intranet avec une authentification Windows de base ou Kerberos, le fait d'executer la macro dans Excel va utiliser le cache de Credentials du profil windows actif (l'identite de l'utilisateur executant Excel).

  5. #5
    Membre averti
    Inscrit en
    Février 2013
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 14
    Par défaut
    Encore merci de l'aide nonoxp, je pense avoir bien compris le code dorénavant.
    J'arrive maintenant à ajouter de nouveaux éléments avec leur valeur pour différentes colonnes!

    Pour l'identification, elle passe par excel/windows en effet, donc je n'ai pas à m'en soucier dans le code.

    Voilà, maitenant je peux jouer avec mes listes et explorer plus loin: lire la liste et mettre à jour des éléments precis

    Encore merci pour ton temps.

  6. #6
    Nouveau candidat au Club
    Inscrit en
    Avril 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 2
    Par défaut Merci de mettre le code VBA pour cette macro, A bientôt
    Citation Envoyé par ornicus31 Voir le message
    Encore merci de l'aide nonoxp, je pense avoir bien compris le code dorénavant.
    J'arrive maintenant à ajouter de nouveaux éléments avec leur valeur pour différentes colonnes!

    Pour l'identification, elle passe par excel/windows en effet, donc je n'ai pas à m'en soucier dans le code.

    Voilà, maitenant je peux jouer avec mes listes et explorer plus loin: lire la liste et mettre à jour des éléments precis

    Encore merci pour ton temps.

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

Discussions similaires

  1. Ajouter un élément à une liste
    Par izulah dans le forum Prolog
    Réponses: 5
    Dernier message: 17/03/2009, 08h57
  2. Ajouter un élément à une "List" - à l'aide!
    Par WinNew dans le forum Flex
    Réponses: 2
    Dernier message: 23/01/2009, 13h20
  3. Ajouter un élément à une liste
    Par circe dans le forum R
    Réponses: 2
    Dernier message: 24/10/2008, 18h00
  4. [Importation]Lier un csv a une table existante via VBA
    Par Baya44 dans le forum VBA Access
    Réponses: 10
    Dernier message: 03/04/2007, 15h34
  5. Réponses: 2
    Dernier message: 29/03/2007, 13h29

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