2016-01-19 20 views
2

我有一個場景,我想使用REST API從多個文件夾中獲取所有文件。我想以這種方式過濾數據,以便我可以忽略文件夾並僅提取所有文件中的文件。我有CAML查詢來執行遞歸的所有活動,但是當我與REST API集成時,它會拋出錯誤的請求錯誤。我在IE中檢查了網絡標籤,看起來好像我的代碼中的查詢沒有從REST API返回任何數據,並且在使用「GetItems」時失敗。有人可以讓我知道如何在REST API中集成CAML查詢。使用REST API和CAML查詢在單個REST調用中獲取多個文件夾中的文件

var getContent = function (listTitle) { 

       var deferred = $q.defer(); 

       if (listTitle == 'CandidateReports') { 


    var query = appweburl + "_api/SP.AppContextSite("+ hostweburl +")/web/lists/GetByTitle('" + listTitle + "')/GetItems"; 



       var executor = new SP.RequestExecutor(appweburl); 
       executor.executeAsync({ 

        url: query, 
        method: "POST", 
        headers: { 
         "Accept": "application/json; odata=verbose", 
         "X-RequestDigest": $("#__REQUESTDIGEST").val(), 
         "content-Type": "application/json;odata=verbose" 
        }, 
        data: JSON.stringify({ 
         query: { 
          __metadata: { 
           type: "SP.CamlQuery" 
          }, 
          ViewXml: "<ViewFields><FieldRef Name='FileLeafRef' /> <FieldRef Name='Title' /> </ViewFields> <QueryOptions> <ViewAttributes Scope='RecursiveAll' /> </QueryOptions> <Where> <Eq> <FieldRef Name='FSObjType' /> <Value Type='Integer'>0</Value> </Eq> </Where>" 
         } 
        }), 
        success: function (data, textStatus, xhr) { 
         console.log(data); 
         deferred.resolve(JSON.parse(data.body)); 
        }, 
        error: function (xhr, textStatus, errorThrown) { 
         deferred.reject(JSON.parse(xhr.body).error); 
        } 
       }); 

       return deferred.promise; 

      }; 

      return { 

       getContent: getContent 

      }; 
+0

您是否找到解決方案?我也試圖將CAML實現爲Angular $ http方法... – Anton

回答

0

我認爲客戶端對象模型中不支持QueryOptions。你爲什麼不嘗試以下方法

<View Scope="RecursiveAll"><Query><Where> <Eq> <FieldRef Name='FSObjType' /> <Value Type='Integer'>0</Value> </Eq> </Where></Query></View>

P.S:我注意到<Query>標籤在你的CAML語句中缺少。使用CAML查詢構建器輕鬆映射列表字段。

相關問題