Readdy Write  
0,00 €
Your View Money
Views: Count
Self 20% 0
Your Content 60% 0

Users by Links 0
u1*(Content+Views) 10% 0
Follow-Follower 0
s2*(Income) 5% 0

Count
Followers 0
Login Register as User

SharePoint CamlQuery Sum

25.03.2020 (👁11353)


 

Summe abfragen in SharePoint mit einer CamlQuery

In SharePointOnline mit pnp/sp, React WebParts

 

 

Import der pnp/sp

//< pnp import >

import { sp,ICamlQuery,Web } from "@pnp/sp/presets/all";

import { Lists } from "@pnp/sp/lists"

//</ pnp import >

 

 

Dann muss man die Liste ermitteln, auf welche man eine CamlQuery Abfrage erstellen will

    // get the list by Id

    let subWeb = Web("https://comlinesetest.sharepoint.com/sites/Teamwebsite");

    let list=subWeb.lists.getByTitle("Liste01");

 

 

Zum serverseitigen Abfragen  in SharePoint (online und on premise) muss man einen XML String erstellen, welcher die Liste Gruppiert und summiert

//let sXML ="<view><viewfields><fieldref name='w3yl'/></viewfields></view>"  ;

    let sXML ="<view>" +

    "<Query>" +

    "  <GroupBy Collapse='TRUE'>"+

    "  <FieldRef Name='Title' /> "+

    "  </GroupBy> " +

      "<Where>"+

      "  <Eq>"+

      "    <FieldRef Name='Title' />" +

       "   <Value Type='Text'>Game 2</Value>"+

       " </Eq>"+

      "</Where>"+

    "</Query>"+

    "<ViewFields>"+

    "  <FieldRef Name='w3yl' />"+

    "</ViewFields>"+

    "<RowLimit>1000</RowLimit>"+

    "<Aggregations Value='On'>"+

    "  <FieldRef Name='w3yl' Type='SUM'/>"+

    "</Aggregations>"+

  "</view>"    ;

CamlQuery an SharePoint abfragen

Die richtige Abfrage funktioniert in 2020 nur mit list.renderListDataAsService(caml)

 // build the caml query object 

    const camlICamlQuery = {      

      ViewXml: sXML      

    };

  

    // // get list items

    let items_query = await list.renderListDataAsStream(caml);

 

 

Danach kann man sich die Liste, Reihen Ergebnisse in der Console ausgeben lassen oder in dem WebPart rendern lassen

    // log resulting array to console

    console.log(items_query);

    console.log(items_query.Row[0]["w3yl.SUM"]);

    //console.log(items_query["w3yl"]);

    let htmlTablestring = '';

    htmlTable  += `

    <table>

      <tr><td>Eintrag</td> <td>Punkte</td></tr>

      <tr><td>Game 1</td> <td>${items_query.Row[0]["w3yl.SUM"]}</td></tr>

    </table>

      `;

    const listContainerElement = this.domElement.querySelector('#placeholder_SumTable');

    listContainer.innerHTML = htmlTable;

Im Debug-Browser und WebPart sieht man dann die Array als rows

  private async _renderListAsync(): Promise<void> {

    //------< _renderListAsync() >------

    //----< Get_Caml_List >----

    // get the list by Id

    let subWeb = Web("https://comlinesetest.sharepoint.com/sites/Teamwebsite");

    let list=subWeb.lists.getByTitle("Liste01");

    

    //let sXML ="<view><viewfields><fieldref name='w3yl'/></viewfields></view>"  ;

    let sXML ="<view>" +

    "<Query>" +

    "  <GroupBy Collapse='TRUE'>"+

    "  <FieldRef Name='Title' /> "+

    "  </GroupBy> " +

      "<Where>"+

      "  <Eq>"+

      "    <FieldRef Name='Title' />" +

       "   <Value Type='Text'>Game 2</Value>"+

       " </Eq>"+

      "</Where>"+

    "</Query>"+

    "<ViewFields>"+

    "  <FieldRef Name='w3yl' />"+

    "</ViewFields>"+

    "<RowLimit>1000</RowLimit>"+

    "<Aggregations Value='On'>"+

    "  <FieldRef Name='w3yl' Type='SUM'/>"+

    "</Aggregations>"+

  "</view>"    ;

    // build the caml query object 

    const camlICamlQuery = {      

      ViewXml: sXML      

    };

  

    // // get list items

    let items_query = await list.renderListDataAsStream(caml);

    //let items_query = await list.getItemsByCAMLQuery(caml);

    //let items_query = await list.renderListData(sXML);

    // log resulting array to console

    console.log(items_query);

    console.log(items_query.Row[0]["w3yl.SUM"]);

    //console.log(items_query["w3yl"]);

    let htmlTablestring = '';

    htmlTable  += `

    <table>

      <tr><td>Eintrag</td> <td>Punkte</td></tr>

      <tr><td>Game 1</td> <td>${items_query.Row[0]["w3yl.SUM"]}</td></tr>

    </table>

      `;