SharePoint Lookup ListItem未加载值

时间:2015-07-29 19:09:54

标签: c# sharepoint sharepoint-list sharepoint-clientobject

我正在将数据库导入SharePoint列表。我有一份由公司拥有的植物清单。

植物的栏目为"植物名称","公司","州","地址"等等。 "工厂名称"和"地址"都是单行文字,但"公司"和"州"是查找类型。 "公司"列应该在"公司"上查找名称列出并链接到它。对于"州"列链接到" 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;

1 个答案:

答案 0 :(得分:1)

我现在解决了。

似乎这一行context.ExecuteQuery();导致了问题,我在更新ListItem之前过早地执行了查询。

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

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
    ...
}