2015-04-30 56 views
0

我想要使用CSOM爲1個特定文件檢索1列,這些可以位於任何位置,因此可以在任何文件夾類型的內容類型(包括文檔集)中找到。caml查詢來查詢包含文檔集內的文件

因此,我可以先檢查,然後...如果結果= 0,然後遍歷文件夾,看看排隊的父母是否是文檔集...然後再進行檢查,但我想知道如果沒有查詢了更加便利的方式

下面的代碼工作,但「無論是在lib和內容類型中,如文檔,只要它是一個文件中設置」 ....如果該文件將無法正常工作在文件集內。

    var baseUrl = uri.GetLeftPart(UriPartial.Authority); 
        var fileServerRelativeUrl = uri.ToString().Replace(baseUrl, string.Empty); 
        logger.Log(LogLevel.Debug, " fileserverrelativeurl is " + fileServerRelativeUrl.ToString()); 
        var file = context.Web.GetFileByServerRelativeUrl(fileServerRelativeUrl);     

        List list = file.ListItemAllFields.ParentList; 
        context.Load(list); 
        context.ExecuteQuery(); 
        logger.Log(LogLevel.Debug, " list is loaded: " + list.Title.ToString()); 

        CamlQuery camlQuery = new CamlQuery(); 
        camlQuery.ViewXml = 
         "<View><Query><Where><Eq><FieldRef Name='" + fieldRefName + "'/>" + 
         "<Value Type='Text'>" + fieldRefValue + "</Value></Eq></Where>" + 
         "<RowLimit>1</RowLimit></Query></View>"; 
        logger.Log(LogLevel.Debug, " caml is " + camlQuery.ViewXml.ToString()); 

        ListItemCollection listItems = list.GetItems(camlQuery); 
        context.Load(listItems); 
        try 
        { 
         context.ExecuteQuery(); 
        } 
        catch 
        { 
         logger.Log(LogLevel.Debug, " caml exec FAILED !! "); 
         // e.g. : no access or the listname as incorrectly deduced 
         throw; 
        } 
        logger.Log(LogLevel.Debug, " items found: " + listItems.Count.ToString()); 
        // and now retrieve the items needed 
        if (listItems.Count == 1) 
        { 
         logger.Log(LogLevel.Debug, " listitem found "); 
         ListItem item = listItems[0]; 
         foreach (string column in columns) 
         { 
          if (item.FieldValues.ContainsKey(column)) 
          { 
           logger.Log(LogLevel.Debug, " column found: " + column); 

           if (item[column] is Dictionary<string, object>) 
           { 
            Dictionary<string, object> clientTaxonomyObject = item[column] as 
             Dictionary<string, object>; 
            if (clientTaxonomyObject.ContainsKey("_ObjectType_") && 
             clientTaxonomyObject.ContainsKey("TermGuid") && 
             clientTaxonomyObject.ContainsKey("Label") && 
             clientTaxonomyObject["_ObjectType_"].Equals("SP.Taxonomy.TaxonomyFieldValue")) 
            { 
             values.Add(column, clientTaxonomyObject["Label"].ToString()); 
            } 
            else 
            { 
             values.Add(column, item[column].ToString()); 
            } 

           } 
           else 
           { 
            values.Add(column, ""); 
           } 
          } 
         } 
        } 
       } 

裁判

UPDATE

啊!更簡單的是,不需要caml查詢,只需要file.listitemallfields,然後只是拋棄該字段的分類標籤。解決:)

回答

0

而不是使用CAML查詢,這是可以做到與

listitem li = file.listitemallfields; 
    context.load(li) 
    context.ExecuteQuery(); 

容易得多這讓直接例如li [「whatever」]