J'essaie donc de créer une méthode essentiellement utilisée pour modifier la valeur d'un champ dans SharePoint.
C'est ce que j'ai jusqu'à présent ... P>
static String fieldName1 = "Title"; static String fieldName2 = "Keywords"; static String title = "A Beautiful Sunset"; static String keywords1 = "test1"; static String keywords2 = "test2"; static String keywords3 = "test3"; static NetworkCredential credentials = new NetworkCredential(username, password, domain); static ClientContext clientContext = new ClientContext(URL); static Web site = clientContext.Web; static List list = site.Lists.GetByTitle(listName); static FileCreationInformation newFile = new FileCreationInformation(); private static void updateFields() { clientContext.Load(list); FieldCollection fields = list.Fields; clientContext.Load(fields); clientContext.Load(list.RootFolder); ListItemCollection listItems = list.GetItems(CamlQuery.CreateAllItemsQuery()); clientContext.Load(listItems); clientContext.ExecuteQuery(); foreach (var listItem in listItems) { Console.WriteLine("Id: {0} Title: {1}", listItem.Id, listItem["Title"]); clientContext.Load(listItem.File); clientContext.ExecuteQuery(); Console.WriteLine("listItem File Name: {0}", listItem.File.Name); if (listItem.File.Name.Contains("Sunset")) { ////???????? } listItem.Update(); } clientContext.ExectueQuery(); }
4 Réponses :
Le champ de terrain strong> décrit le schéma Consultez cette procédure décrite sur MSDN pour plus d'arrière-plan sur SharePoint et le modèle d'objet client: http://msdn.microsoft.com/en-us/library/ee857094.aspx#sp2010clientom_the_managed_client_Object_model p> Donc, dans ce cas, le code d'échantillon suivant de la page MSDN ci-dessus illustre: p> en particulier la valeur d'un élément de liste déposée est extraite comme suit: p> il utilise la syntaxe de l'indexer. p> p>
Ce n'est pas l'intégralité du code, j'ai chargé les éléments de la liste. J'ai juste besoin de savoir comment accéder aux valeurs de terrain. Edit: J'ai également inclus un peu plus de mon code dans le message d'origine.
La façon dont je regarde cela, si ma liste est "Images de site", est-ce que cela ne fait pas que retourner toutes les images de la bibliothèque d'images, pas les champs individuels de chaque image?
La mise à jour d'un champ avec le modèle d'objet client est assez simple:
ClientContext ctx = new ClientContext("http://yoursite"); List list = ctx.Web.Lists.GetByTitle("ListName"); ListItemCollection items = list.GetItems(CamlQuery.CreateAllItemsQuery()); ctx.Load(items); // loading all the fields ctx.ExecuteQuery(); foreach(var item in items) { // important thing is, that here you must have the right type // i.e. item["Modified"] is DateTime item["fieldName"] = newValue; // do whatever changes you want item.Update(); // important, rembeber changes } ctx.ExecuteQuery(); // important, commit changes to the server
Wow, je pense vraiment que cela m'a sur la bonne voie. J'ai mis à jour mon code dans mon message d'origine, mais je suis coincé sur quoi écrire dans ma déclaration If-inscrite lorsque je rencontre l'image que je veux. Utilisation de votre exemple, il semble que ce ne soit pas comme items.file ["titre"] code>. Des pensées?
NVM, j'ai pu comprendre. C'était toujours très utile. Merci beaucoup!
Désolé, je n'étais pas sur le fil. Ravi de voir que vous avez compris vous-même. J'ai été ravi de vous aider;)
Merci pour cela. Juste pour vous faire savoir que j'ai utilisé cet extrait de code sur SPOVERFLOW: SharePoint.stackexchange.com/questions/22229/...
Bonjour Jumbo, pourriez-vous nous donner l'exemple pour mettre à jour le champ dans la bibliothèque de documents?
@WILLYU Il ne devrait y avoir aucune différence, vous pouvez également utiliser ce code pour la liste et le DOCLIB.
J'espère que cela aide quelqu'un à sortir de la route. Merci à tous pour votre entrée!
private static void updateFields() { //Loads the site list clientContext.Load(list); //Creates a ListItemCollection object from list ListItemCollection listItems = list.GetItems(CamlQuery.CreateAllItemsQuery()); //Loads the listItems clientContext.Load(listItems); //Executes the previous queries on the server clientContext.ExecuteQuery(); //For each listItem... foreach (var listItem in listItems) { //Writes out the item ID and Title Console.WriteLine("Id: {0} Title: {1}", listItem.Id, listItem["Title"]); //Loads the files from the listItem clientContext.Load(listItem.File); //Executes the previous query clientContext.ExecuteQuery(); //Writes out the listItem File Name Console.WriteLine("listItem File Name: {0}", listItem.File.Name); //Looks for the most recently uploaded file, if found... if (listItem.File.Name.Contains("Sunset")) { //Changes the Title field value listItem["Title"] = title; //Changes the Keywords field value listItem["Keywords"] = keywords1 + keywords2 + keywords3; //Writes out the item ID, Title, and Keywords Console.WriteLine("Id: {0} Title: {1} Keywords: {2}", listItem.Id, listItem["Title"], listItem["Keywords"]); } //Remember changes... listItem.Update(); } //Executes the previous query and ensures changes are committed to the server clientContext.ExecuteQuery(); }
N'oubliez pas que chaque champ a un nom interne. Lorsque vous interrogez la valeur du champ, utilisez indexer, vous devez lui donner le nom interne, pas celui que nous voyons dans le SharePoint Online.
Par exemple, vous ajoutez une colonne nommée téléphone, vous devez interroger la valeur comme celle-ci: p>