我正在编写一个代码,它将遍历共享点列表中的每个列表项并查找空字段。如果发现空字段,则会通过电子邮件通知负责该列表项的人员。
我在线路中遇到错误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();
}
欢迎来到 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
}
}
}
Edit:8年后,我已经很长一段时间没有使用SharePoint了,但现在我看到这个答案,我认为最好不要打电话context.ExecuteQuery()
在循环。您可能应该使用第一个循环.Load
每个感兴趣的领域,然后致电.ExecuteQuery
,最后再做一个循环来处理新加载的字段。
当涉及到 Web 请求时,请尝试使用大量的内容,而不是喋喋不休的内容:努力限制您发出的请求数量(当然,只要有意义)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)