SharePoint 2010 - Modèle d'objet client - Ajouter une pièce jointe à ListItem
J'ai une Liste SharePoint à laquelle je vais ajouter de nouveaux ListItems en utilisant le Modèle Objet Client.
L'ajout de ListItems n'est pas un problème et fonctionne très bien.
Maintenant, je veux ajouter des pièces jointes.
Je suis en utilisant le SaveBinaryDirect de la manière suivante:
File.SaveBinaryDirect(clientCtx, url.AbsolutePath + "/Attachments/31/" + fileName, inputStream, true);
Il fonctionne sans aucun problème, tant que le point que j'essaie d'ajouter de l'attachement à, a déjà une pièce jointe qui a été ajouté par le site SharePoint et de ne pas utiliser le Modèle Objet Client.
Lorsque j'essaie d'ajouter une pièce jointe à un élément qui ne marche pas toute les pièces jointes pourtant, j'obtiens les erreurs suivantes (les deux cas, mais pas avec les mêmes fichiers, mais ces deux messages apparaissent de manière régulière):
Le serveur distant a retourné une erreur: (409) Conflit
Le serveur distant a retourné une erreur: (404) Pas Trouvé
J'ai pensé que peut-être j'ai besoin de créer le dossier des pièces jointes d'abord pour cet article.
Quand j'ai essayer le code suivant:
clientCtx.Load(ticketList.RootFolder.Folders);
clientCtx.ExecuteQuery();
clientCtx.Load(ticketList.RootFolder.Folders[1]); //1 -> Attachment folder
clientCtx.Load(ticketList.RootFolder.Folders[1].Folders);
clientCtx.ExecuteQuery();
Folder folder = ticketList.RootFolder.Folders[1].Folders.Add("33");
clientCtx.ExecuteQuery();
Je reçois un message d'erreur disant:
Impossible de créer le dossier "Listes/Système de Ticket/Attachment/33"
J'ai plein de droits d'administrateur pour le site SharePoint/liste.
Toutes les idées que j'ai pu faire de mal?
Merci, Thorben
source d'informationauteur Thorben
Vous devez vous connecter pour publier un commentaire.
J'ai discuté de cette question avec Microsoft. Semble que la seule manière de créer des pièces jointes à distance est Liste.service web asmx. J'ai essayé de créer ce sous-dossier aussi et, sans succès.
J'ai lutté pendant un long moment avec ce problème aussi, donc je pensais que je poste un exemple de code complet montrant comment réussir à créer un élément de liste et ajouter une pièce jointe.
Je suis en utilisant le Client de l'Objet de l'API pour créer l'élément de la liste, et le web service SOAP pour ajouter la pièce jointe. C'est parce que, comme indiqué dans d'autres endroits sur le web, le Client API d'Objet ne peut être utilisé pour ajouter des pièces jointes à un article où l'élément de télécharger le répertoire existe déjà (par exemple. si l'article a déjà une pièce jointe). Sinon, il échoue avec une erreur 409 ou quelque chose. Le service web SOAP s'adapte à cette OK.
Remarque une autre chose que j'ai eu à surmonter a été que, même si j'ai ajouté le SAVON de référence à l'aide de l'URL suivante:
L'URL que VS effectivement ajoutée à l'application.config était:
J'ai dû modifier manuellement l'application.config vers la bonne URL, sinon je reçois le message d'erreur:
Voici le code:
Espère que cela aide quelqu'un.
Avec Sharepoint 2010, il n'y avait pas moyen de télécharger une première pièce jointe à un élément de la liste à l'aide de la COM. La recommandation est d'utiliser le service web de Listes inmstead.
Avec Sharepoint 2013, il fonctionne.
Cette méthode est utilisée dans http://www.mailtosharepoint.net/
Il reflète mal sur le Microsoft SharePoint team pour ne pas venir de l'avant avec un accusé de réception de la question et utilisable suggestion sur la façon de le résoudre. Voici comment j'ai traité avec lui:
Je suis en utilisant le nouveau SharePoint 2010 client géré livré avec le produit. Donc, j'ai déjà un SharePoint ClientContext avec des informations d'identification. La fonction suivante ajoute une pièce jointe à un élément de la liste:
La seule condition pour le code ci-dessus est à ajouter au projet (j'ai utilisé Visual Studio 2008), un _web_reference_ j'ai appelé sp2010 qui est créé à partir de l'URL: http:///_vti_bin/Lists.asmx
Chance Bon...
J'ai utilisé et j'ai essayé cette un sur mon COM application et ça marche pour moi
Remarque: ne fonctionne que si le dossier de l'élément a déjà été créé
HTML:
Événement dans le code behind :