SharePoint查找列表项未加载值

本文关键字:加载 查找 列表 SharePoint | 更新日期: 2023-09-27 18:05:20

我正在导入一个数据库到SharePoint列表。我有一份公司拥有的工厂清单。

植物有"植物名称"、"公司"、"州"、"地址"等列。"工厂名称"answers"地址"都是单行文本,但"公司"answers"州"是查找类型。"公司"一栏应该在"公司"列表中查找名称并链接到该名称。链接到"State"列表的"State"列也一样。

下面是我的代码片段:

SP.ClientContext context = new SP.ClientContext("http://localhost");
...
newPlantLocation["Company"] = GetItemId(context, "Title", companyName, "Companies");
newPlantLocation["State"] = GetItemId(context, "Title", plantState, "States");
newPlantLocation["Title"] = plantName;
newPlantLocation["Address_x0020_Line_x0020_1"] = plantAddressLine1;
...
newPlantLocation.Update();

这里是返回项目ID的函数,它不是最有效的,但很容易理解:

private static int GetItemId(SP.ClientContext context, string columnName, string displayName, string listName)
{
    SP.List list = context.Web.Lists.GetByTitle(listName);
    SP.CamlQuery query = new SP.CamlQuery();
    SP.ListItemCollection items = list.GetItems(query);
    context.Load(items);
    context.ExecuteQuery();
    foreach (SP.ListItem listItem in items)
    {
        if (listItem[columnName].Equals(displayName))
        {
            return listItem.Id;
        }
    }
    return 0;
}

我遇到的问题是,当进口商运行时,植物填充"植物"列表,但"公司"字段是空白的。我很困惑,因为"状态"字段做了几乎相同的方式,它以某种方式最终填充。我已经调试了它,GetItemId函数返回了公司的正确整数,它只是没有显示或保存到项目中。

如果我执行以下操作,它会突然开始工作:

newPlantLocation["Company"] = 4;

SharePoint查找列表项未加载值

我现在解决了。

似乎这一行context.ExecuteQuery();引起了麻烦,我在更新listtitem之前过早地执行了查询。

所以我改变了我的GetItemId函数,在做任何事情之前更新listtitem。

private static int GetItemId(SP.ClientContext context, string columnName, string displayName, string listName, SP.ListItem thisItem)
{
    thisItem.Update();
    //this rest of the code is the same
    ...
}