7
votes

Mise à jour de la valeur du champ dans SharePoint à l'aide du modèle client-objet

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();
}


0 commentaires

4 Réponses :


1
votes

Le champ de terrain décrit le schéma des éléments de la liste . Vous devez charger des éléments de la liste réelle pour accéder à leurs valeurs!

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

Donc, dans ce cas, le code d'échantillon suivant de la page MSDN ci-dessus illustre: xxx

en particulier la valeur d'un élément de liste déposée est extraite comme suit: xxx

il utilise la syntaxe de l'indexer.


2 commentaires

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?



15
votes

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


6 commentaires

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"] . 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.



0
votes

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();
        }


0 commentaires

3
votes

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: xxx


0 commentaires