2015-11-17 16 views
0

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

以下是代码以获取列表项

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

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(); 

使用在ViewFields CAML查询

使用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();