无法使用CSOM获取托管元数据字段。字段未初始化错误

时间:2015-11-17 13:40:45

标签: sharepoint-2013 taxonomy csom sharepoint-online

我无法使用CSOM通过内部名称获取新添加的托管元数据字段。但是,相关的隐藏文本字段字段可以使用该值。以下语句抛出 Microsoft.SharePoint.Client.PropertyOrFieldNotInitializedException

以下是获取列表项的代码

  List lst= context.Web.Lists.GetByTitle(<ListName>);
  CamlQuery camlQuery = new CamlQuery
                    {
                        ViewXml = @"<View>  
                                         <Query> 
                                               <Where>
                                                      <Or>
                                                          <Eq>
                                                              <FieldRef Name='SCStatus' />
                                                              <Value Type='TaxonomyFieldType'>Approved</Value>
                                                          </Eq>
                                                          <Eq>
                                                               <FieldRef Name='SCStatus' />
                                                               <Value Type='TaxonomyFieldType'>UpdateRequested</Value>
                                                          </Eq>
                                                      </Or>
                                               </Where>
                                         </Query> 
                                   </View>";
                    };

  ListItemCollection listItems = lst.GetItems(camlQuery);

  context.Load(listItems);
  context.ExecuteQuery();

以下语句获取字段值

(listItem[<InternalName>] as TaxonomyFieldValue).Label

请注意,其他分类学字段可以正常使用。

1 个答案:

答案 0 :(得分:1)

由于error未返回指定字段,因此需要明确请求Load<T>(T, \[\]) method

您可以考虑以下选项:

使用Include方法

明确指定要通过Load<T>(T, \[\]) method检索的字段,例如:

var qry = new CamlQuery();
var items = list.GetItems(qry);
ctx.Load(items,
             icol => icol.Include(
                i => item.Id,
                i => item.DisplayName,
                i => item["TaxFieldName"]));  //specify taxonomy field 
ctx.ExecuteQuery();

在CAML查询中使用ViewFields

使用ViewFields元素指定要检索的字段,例如:

var qry = new CamlQuery();
qry.ViewXml = "<View>" +
                 "<ViewFields>" + 
                    "<FieldRef Name='ID'/>" + 
                    "<FieldRef Name='Title'/>" + 
                    "<FieldRef Name='TaxFieldName'/>" +
                 "</ViewFields>" + 
              "</View>";
var items = list.GetItems(qry);
ctx.Load(items);
ctx.ExecuteQuery();