首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用ListItem更新Sharepoint ListItem?

如何用ListItem更新Sharepoint ListItem?
EN

Stack Overflow用户
提问于 2018-05-08 13:48:52
回答 2查看 424关注 0票数 0

基本上,我查询Sharepoint并获得一个ListItems列表。我预先查看了列表,并检查该项是否需要从外部db更新(该代码不存在)。

下面是我运行的不更新Sharepoint ListItem的代码。我甚至试过不同的证件,但都没有用。

代码语言:javascript
复制
using(ClientContext ctx = new ClientContext(searchsiteurl)) {
    //NetworkCredential credit = new NetworkCredential(prg.userName, prg.password, prg.domain);
    //ctx.Credentials = credit;
    Web web = ctx.Web;

    List list = web.Lists.GetById(new Guid(site.ListGUID));

    var q = new CamlQuery();
    if (Fullsync) {
        q.ViewXml = "<View><Query><Where><And><BeginsWith><FieldRef Name='SrNumber' /><Value Type='Text'>1</Value></BeginsWith>" + "<Eq><FieldRef Name='_ModerationStatus' /><Value Type='ModStat'>Draft</Value></Eq></And></Where></Query></View>";
    }
    else {

        q.ViewXml = "<View><Query><Where><And><Contains><FieldRef Name='SrNumber' /><Value Type='Text'>1-</Value></Contains><And>" + "<Eq><FieldRef Name='_ModerationStatus' /><Value Type='ModStat'>Approved</Value></Eq>" + "<Gt><FieldRef Name='Modified' /><Value IncludeTimeValue='TRUE' Type='DateTime'>" + last24hours + "</Value></Gt>" + "</And></And></Where></Query></View>";
    }

    var r = list.GetItems(q);
    ctx.Load(r);
    ctx.ExecuteQuery();
    foreach(SP.ListItem lit in r) {
        //do a whole bunch of stuff....

        // this does NOT WORK
        lit.FieldValues["Linked_x0020_CSRs"] = LinkedSRs;
        lit.Update();
        ctx.ExecuteQuery();

    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-08 13:48:52

文档的问题是,它没有显式地指示您必须使用.GetItemById()函数来检索ListItem以更新该ListItem。

因此,下面的代码应该可以帮助未来的人们寻找这个答案。我花了很长时间才弄明白这件事。

代码语言:javascript
复制
                 using (ClientContext ctx = new ClientContext(searchsiteurl))
                {
                    //NetworkCredential credit = new NetworkCredential(prg.userName, prg.password, prg.domain);
                    //ctx.Credentials = credit;
                    Web web = ctx.Web;

                    List list = web.Lists.GetById(new Guid(site.ListGUID));


                   var q = new CamlQuery();
                    if (Fullsync)
                    {
                        q.ViewXml = "<View><Query><Where><And><BeginsWith><FieldRef Name='SrNumber' /><Value Type='Text'>1</Value></BeginsWith>" +
                            "<Eq><FieldRef Name='_ModerationStatus' /><Value Type='ModStat'>Draft</Value></Eq></And></Where></Query></View>";
                    }
                    else
                    {

                        q.ViewXml = "<View><Query><Where><And><Contains><FieldRef Name='SrNumber' /><Value Type='Text'>1-</Value></Contains><And>" +
                                "<Eq><FieldRef Name='_ModerationStatus' /><Value Type='ModStat'>Approved</Value></Eq>" +
                                "<Gt><FieldRef Name='Modified' /><Value IncludeTimeValue='TRUE' Type='DateTime'>" + last24hours + "</Value></Gt>" +
                                "</And></And></Where></Query></View>";
                    }


                    var r = list.GetItems(q);
                    ctx.Load(r);
                    ctx.ExecuteQuery();
                    foreach (SP.ListItem lit in r)
                    {
                                //do a whole bunch of stuff....


                                /* this does NOT WORK
                                lit.FieldValues["Linked_x0020_CSRs"] = LinkedSRs;
                                lit.Update();
                                ctx.ExecuteQuery();
                                */

                                // this works!
                                    var KAToModify = list.GetItemById(lit.Id);
                                    KAToModify["Linked_x0020_CSRs"] = LinkedSRs;
                                    KAToModify.Update();
                                    ctx.ExecuteQuery();

                    }
            }
票数 0
EN

Stack Overflow用户

发布于 2018-05-13 18:52:12

它是行不通的,您可以使用此枚举器方法。

enter code here

代码语言:javascript
复制
 foreach (var i in cv)
            {
               var items = new ListItemCreationInformation();
               var item = lists.AddItem(items);
                item["Title"] = i.Title;

item.Update();
                    ctx.Load(item);
                    ctx.ExecuteQuery();

    }`

如果您想要使用GetById()的列表中的特定项,您将得到所有的列表项

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50235258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档