как получить элементы из списков в CAML QUERY sharepoint - PullRequest
0 голосов
/ 08 мая 2018

В моем проекте 3 списка

  • ListeBatiment с 2 полями (I DListeBatiment , CodeBatiment)
  • ListeEtage с 3 полями ( IDListeEtage , CodeEtage, IDListeBatiment)
  • ListeLocal с 3 полями ( IDListeLocal , CodeLocal, IDListeEtage)

Связывание полей

  • ListeBatiment и ListeEtage связываются в SHAREPOINT с помощью lookupField IDListeBatiment
  • ListeEtage и ListeLocal связывают SHAREPOINT с помощью lookupField IDListeEtage

Code JAVASCRIPT Для извлечения CodeEtage и CodeLocal:

var my_caml_query=
  "<View>"+
      "<ViewFields>"+
          "<FieldRef Name='CodeLocal' />"+
          "<FieldRef Name='CodeEtage' />"+
      "</ViewFields>"+
      "<Joins>"+
          "<Join Type='INNER' ListAlias='ListeEtage'>"+
              "<Eq>"+
                  "<FieldRef Name='IDListeEtage' RefType='ID' />"+
                  "<FieldRef Name='ID' List='ListeEtage' />"+
              "</Eq>"+
          "</Join>"+
      "</Joins>"+
      "<ProjectedFields>"+
          "<Field ShowField='CodeEtage' Type='Lookup' Name='CodeEtage' List='ListeEtage' />"+
      "</ProjectedFields>"+
  "</View>";

RecupCodeEtage('ListeEtage',my_caml_query);

function RecupCodeEtage(listName, CAML) {           
  var clientContext = SP.ClientContext.get_current();
  var oList = clientContext.get_web().get_lists().getByTitle(listName);
  var camlQuery = new SP.CamlQuery();
  camlQuery.set_viewXml(CAML);
  this.collListItem = oList.getItems(camlQuery);
  clientContext.load(collListItem);
  clientContext.executeQueryAsync(Function.createDelegate(this, function(){SuccessRecupCodeEtage(collListItem);}), Function.createDelegate(this, this.onQueryFailed));
};
function SuccessRecupCodeEtage(){
// code here if ok
}
function onQueryFailed()
{
// ;...
}

Итак, я не знаю, как я должен обработать, чтобы получить CodeLocal, CodeEtage и codeBatiment.

Есть ли у кого-нибудь решение или идея?

спасибо

1 Ответ

0 голосов
/ 09 мая 2018

Вот мой тестовый код для вашей справки.

enter image description here

<script type="text/javascript" src="https://code.jquery.com/jquery-1.12.4.js"></script>
    <script type="text/javascript">
        function useRESTwithCAML(listName, CAML) {
            var clientContext = new SP.ClientContext.get_current();
            var oList = clientContext.get_web().get_lists().getByTitle(listName);

            var camlQuery = new SP.CamlQuery();
            camlQuery.set_viewXml(CAML);
            this.collListItem = oList.getItems(camlQuery);

            clientContext.load(collListItem);
            clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));

        };

        var CAMLJoins =
               "<Joins>" +
               "<Join Type='INNER' ListAlias='ListeEtage'>" +
               "<Eq>" +
               "<FieldRef Name='IDListeEtage' RefType='Id'/>" +
               "<FieldRef List='ListeEtage' Name='ID'/>" +
               "</Eq>" +
               "</Join>" +
               "<Join Type='INNER' ListAlias='ListeBatiment'>" +
               "<Eq>" +
               "<FieldRef List='ListeEtage' Name='IDListeBatiment' RefType='Id'/>" +
               "<FieldRef List='ListeBatiment' Name='ID'/>" +
               "</Eq>" +
               "</Join>" +               
               "</Joins>";

        var CAMLProjFlds =
            "<ProjectedFields>" +
            "<Field Name='Batiment' Type='Lookup' List='ListeBatiment' ShowField='CodeBatiment'/>" +
            "<Field Name='Etage' Type='Lookup' List='ListeEtage' ShowField='CodeEtage'/>" +            
            "</ProjectedFields>";

        var ViewXml = "<View><Query></Query><ViewFields><FieldRef Name='Batiment'/><FieldRef Name='Etage'/><FieldRef Name='CodeLocal'/></ViewFields>" + CAMLProjFlds + CAMLJoins + "<RowLimit>100</RowLimit></View>";

        function onQuerySucceeded(sender, args) {

            var listItemInfo = '';

            var listItemEnumerator = collListItem.getEnumerator();

            while (listItemEnumerator.moveNext()) {
                var oListItem = listItemEnumerator.get_current();
                listItemInfo += '\nID: ' + oListItem.get_id() +
                    '\nTitle: ' + oListItem.get_item('Batiment').get_lookupValue() +
                    '\nDLastName: ' + oListItem.get_item('Etage').get_lookupValue() +
                    '\nDLastName: ' + oListItem.get_item('CodeLocal');
            }

            alert(listItemInfo.toString());
        }

        function onQueryFailed(sender, args) {

            alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
        }
    </script>

    <input id="Button1" onclick="useRESTwithCAML('ListeLocal', ViewXml)" type="button" value="testCAMLJoin" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...