2014-05-07 29 views
2

我正在编写一个代码,该代码将遍历SharePoint列表中的每个列表项并查找空字段。如果找到空字段,则通过电子邮件通知负责该列表项目的人员。Sharepoint字段尚未在C#中初始化

我在其中指出

的属性或字段尚未初始化行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(); 
} 

回答

13

欢迎来到SharePoint CSOM地狱。

您确实加载了您的列表和FieldCollection,但您也必须加载每个字段。实际上,您必须加载您打算获取属性的每个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 
     } 
    } 
} 
+0

我试过了,但现在在加载字段后,它给我一个ExecuteQuery错误......“项目不存在,它可能已被其他用户删除。有什么建议么? – user3158291

+0

这很可能是整个其他问题。看看这里http://stackoverflow.com/questions/15790926/client-object-model-get-item-by-id-item-does-not-exist-it-may-have-been-delete并搜索许可问题,我很遗憾在SharePoint的这一方面工作不多。 – Kilazur

+0

我不确定这是否是问题所在。我正在使用的帐户可以完全控制网站和列表。 – user3158291