如何使用CSOM

时间:2015-08-18 01:28:31

标签: c# sharepoint sharepoint-2013 csom

我使用客户端服务对象模型加载SharePoint列表(SharePoint 2013内部部署)。我使用以下代码:

private void buttonRefreshOrders_Click(object sender, RoutedEventArgs e)
{
    using (var ctx = new ClientContext("http://sharepoint/ci/resources"))
    {
        var list = ctx.Web.Lists.GetByTitle("Resource Order Form Content");

        var query = new CamlQuery
                        {
                            ViewXml =
                                @"<Where><Or><Eq><FieldRef Name=""Status""></FieldRef><Value Type=""Text"">Approved</Value></Eq><IsNotNull><FieldRef Name=""Status"" /></FieldRef></IsNotNull></Or></Where>"
                        };

        var collListItem = list.GetItems(query);

        ctx.Load(collListItem);
        ctx.ExecuteQuery();

        if (collListItem.Count == 0)
        {
            MessageBox.Show(
                "No orders are currently within the queue.",
                "Information Center",
                MessageBoxButton.OK,
                MessageBoxImage.Information);
        }
        else
        {
            MessageBox.Show("Success!");

            foreach (var item in collListItem)
            {
                MessageBox.Show(item["Status"].ToString());
            }
        }
    }

}

我收到例外:

  

未处理的类型异常   &#39; Microsoft.SharePoint.Client.PropertyOrFieldNotInitializedException&#39;   发生在Microsoft.SharePoint.Client.dll

通常情况下,我相信当以下行中引用的名称与SharePoint的后端中的名称不匹配时会发生这种情况:

MessageBox.Show(item["Status"].ToString());

但是我不明白这是怎么回事,因为我在我的CamlQuery中使用了这个完全相同的命名。我还使用了SP Caml Query Helper 2013,字段名称似乎是正确的。

如何找到我应该引用的正确字段名称?

1 个答案:

答案 0 :(得分:1)

转到您的sharepoint网站上的列表,转到列表设置,然后点击您想要获得正确名称的列,它将在地址栏中。

EG:YourSite / _layouts / FldEdit.aspx?List = {Guid}&amp; Field = Cost%5Fx0020%5FCentre%5Fx0020%5FCode

在这种情况下,您想要的字段的名称是Cost_x0020_Centre_x0020_Code (%5F是“_”%20是空格等,您可能需要查找这些列表。)

这不是一个完整的列表,但它有大多数http://www.werockyourweb.com/url-escape-characters/