【问题标题】:Sharepoint field has not been initialized in C#Sharepoint 字段尚未在 C# 中初始化
【发布时间】:2014-05-07 10:56:57
【问题描述】:

我正在编写一个代码,它将遍历共享点列表中的每个列表项并查找一个空字段。如果找到空字段,则会通过电子邮件通知列表项的负责人。

我在val = oListItem[field.Title]; 的行中遇到了错误

属性或字段尚未初始化。它尚未被请求或请求尚未执行。可能需要明确请求。

在我看来,我已经在该行之前初始化了所有内容。

static void Main()
{
    ClientContext context    = new ClientContext("https://****");
    context.Credentials      = new NetworkCredential("****", "****");
    List oList               = context.Web.Lists.GetByTitle("TestBI");
    FieldCollection fieldcol = oList.Fields;

    context.Load(oList);
    context.Load(fieldcol);
    context.ExecuteQuery();

    ListItem oListItem = oList.GetItemById(1);
    object val = null;

    for (int i = 1; i <= 4; i++)
    {
        oListItem = oList.GetItemById(i);
        foreach (Field field in fieldcol)
        {
            val = oListItem[field.Title];
            if(val == null)
            {
                //Send e-mail
            }
        }
    }
    context.ExecuteQuery();
}

【问题讨论】:

    标签: c# list sharepoint field csom


    【解决方案1】:

    欢迎来到 SharePoint CSOM 地狱。

    您确实加载了 List 和 FieldCollection,但您还必须加载每个 Field。事实上,您必须加载要从中获取属性的每个 SharePoint 对象。

    for (int i = 1; i <= 4; i++)
    {
        oListItem = oList.GetItemById(i);
        
        foreach (Field field in fieldcol)
        {
            context.Load(field);
            context.ExecuteQuery();
            val = oListItem[field.Title];
            if(val == null)
            {
                //Send e-mail
            }
        }
    }
    

    编辑: 8 年后,我已经很久没有使用 SharePoint,但现在我看这个答案,我认为最好不要在中调用 context.ExecuteQuery()循环。您可能应该使用第一个循环来 .Load 每个感兴趣的字段,然后调用 .ExecuteQuery,最后再执行另一个循环来处理新加载的字段。

    当涉及到网络请求时,尽量多一些,而不是喋喋不休:努力限制您发出的请求数量(当然,只要它是有意义的)。

    【讨论】:

    • 我试过了,但它现在在加载字段后在 ExecuteQuery 处给我一个错误......“项目不存在。它可能已被另一个用户删除。”。有什么建议吗?
    • 这很可能是另一个问题。看看这里stackoverflow.com/questions/15790926/… 并搜索权限问题,遗憾的是我在 SharePoint 的这一方面工作不多。
    • 我不确定这是否是问题所在。我使用的帐户可以完全控制网站和列表。
    • 所以可能是 ID 问题 stackoverflow.com/questions/6672604/…stackoverflow.com/questions/13184873/… ...但实际上,我不能一直为您搜索这些;p 再一次,这似乎是另一个问题,也许您应该开始一个新问题。
    • 您之前的建议奏效了。你说得对,第二个问题是我的共享点列表。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2022-07-27
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 2021-12-29
    • 2022-01-16
    • 1970-01-01
    相关资源
    最近更新 更多