在javascript中解析来自异步Sharepoint列表查询的结果

时间:2018-03-16 15:15:48

标签: javascript sharepoint odata

我正在使用Javascript来汇总sharepoint列表中的数据。我已经让查询工作并返回OK,我可以从控制台看到它正在返回我需要的所有东西,但是我无法解决它如何解析它。

jQuery.fromJSON会返回错误,就像我尝试过的其他大量内容一样。除了做一些正则表达式或其他我不知所措。

任何人都可以建议如何解析这种类型的sharepoint响应,这样我就可以使用每一行中的对象/数据。

由于

function GetProductInformation(){
                var query = '<View><Query><Where> <And><Geq><FieldRef Name="Data_x0020_Due_x0020_Date"/><Value IncludeTimeValue="FALSE" Type="DateTime">2017-07-01</Value></Geq><Leq><FieldRef Name="Data_x0020_Due_x0020_Date"/><Value IncludeTimeValue="FALSE" Type="DateTime">2018-06-29</Value></Leq></And> </Where><GroupBy Collapse="TRUE"><FieldRef Name="Analyser"/></GroupBy></Query><ViewFields><FieldRef Name="Analyser"/><FieldRef Name="Number_x0020_of_x0020_products"/></ViewFields><Aggregations Value="On"><FieldRef Name="Number_x0020_of_x0020_products" Type ="SUM"/></Aggregations></View>';


                console.log("Query is " + query);   

    var clientContext = new SP.ClientContext.get_current();
    var oList = clientContext.get_web().get_lists().getByTitle('Work tracker - Products');

    console.log("GetProductInformation Async Request") 

    jsonResult = oList.renderListData(query);

    clientContext.executeQueryAsync(Function.createDelegate(this, this.onGetProductQuerySucceeded), Function.createDelegate(this, this.onGetProductQueryFailed));        
                //clientContext.executeQueryAsync(onGetProductQuerySucceeded, onGetProductQueryFailed);
                console.log("GetProductInformation Async Requested")     
}


function onGetProductQuerySucceeded(sender, args) {
                console.log('Query Success');
                var dataFromYou = jsonResult
                console.log(dataFromYou);

                var data = dataFromYou.Row[0]; //This bit doesn't work
                console.log(data)

在下面找到一些示例输出:

"{ "Row" : 
[{
"Analyser": [{"lookupId":1,"lookupValue":"Accounts Payable 
Analyser","isSecretFieldValue":false}],
"Analyser.urlencoded": "%3B%23Accounts%20Payable%20Analyser%3B%23",
"Analyser.COUNT.group": "363",
"Analyser.newgroup": "1",
"Analyser.groupindex": "1_",
"Number_x0020_of_x0020_products.SUM": "14,694",
"Number_x0020_of_x0020_products.SUM.agg": "658"
}
,{
"Analyser": [{"lookupId":2,"lookupValue":"Accounts Receivable 
Analyser","isSecretFieldValue":false}],
"Analyser.urlencoded": "%3B%23Accounts%20Receivable%20Analyser%3B%23",

2 个答案:

答案 0 :(得分:1)

在示例中:

var result = list.renderListData(qry.get_viewXml());

SP.List.renderListData method返回SP.Result个对象,列表数据可以像这样检索:

var listData = result.get_value();

由于列表数据作为JSON字符串返回,因此可以很容易地解析它:

var jsonVal = JSON.parse(result.get_value());
if(jsonVal.Row.length > 0)
    console.log(jsonVal.Row[0]);   //get first row data

示例

var ctx = SP.ClientContext.get_current();
var list = ctx.get_web().get_lists().getByTitle(listTitle);
var qry = SP.CamlQuery.createAllItemsQuery();
var result = list.renderListData(qry.get_viewXml());

ctx.executeQueryAsync(
   function(){
       var jsonVal = JSON.parse(result.get_value());
       if(jsonVal.Row.length > 0)
           console.log(jsonVal.Row[0]);
   },
   function(sender,args){
      console.log(args.get_message()); 
   });

答案 1 :(得分:-1)

我使用以下方法找到了相同问题的解决方案:

var results = JSON.parse(data.d.RenderListData).Row;

这给了我一个返回的listdata对象数组。