Получение большого списка в списке SharePoint до сбоя 4-10 раз перед работой (JavaScript) - PullRequest
0 голосов
/ 02 июня 2018

Мне нужно скопировать элементы между списками (добавляя больше материала к каждому элементу, чтобы не использовать поток), я испытываю ошибку, когда, если исходный список превышает 100 элементов, сценарий завершается при запросе в исходный список (первое, что происходит при нажатии кнопки), примерно как 4-10 раз, тогда это работает.

Я использую обещания, чтобы убедиться, что все происходит по порядку, но это не проблема, но вместо этогозапрос не выполнен, на первом шаге в структуре обещания.

Это не предел строки в запросе, так как для него установлено значение 1000, а количество строк составляет около 200.

Здесьпример кода, который отлично работает с небольшим количеством элементов, но требует многократных запусков, когда оба списка содержат около 100 элементов:

<head>
    <script
  src="https://code.jquery.com/jquery-3.3.1.js"
  integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60="
  crossorigin="anonymous"></script>
    <script>

    function update() {
        console.log("1")
  var dfd = $.Deferred(function () {
    var updateBtnCLientContextForSourceList = 
      new SP.ClientContext.get_current();
    var getSourceList = updateBtnCLientContextForSourceList
        .get_web()
        .get_lists()
        .getByTitle("SourceList");
    var camlQueryForSourceList = new SP.CamlQuery();
    camlQueryForSourceList.set_viewXml('<View><Query><Where><Geq><FieldRef Name=\'ID\'/>' +
      '<Value Type=\'Number\'>1</Value></Geq></Where></Query><RowLimit>4000</RowLimit></View>');
    var SourceListtStore = getSourceList.getItems(camlQueryForSourceList);
    updateBtnCLientContextForSourceList.load(SourceListtStore);
    updateBtnCLientContextForSourceList.executeQueryAsync(
      function () {
        dfd.resolve(SourceListtStore);
      },
      function (sender, args) {
        dfd.reject(args);
      }
    );
  });
         console.log("2")
  return dfd.promise();
}

acadcount = 0;

function check() {
  update()
  .then(
    function (SourceListtStore) {
         console.log("3")
      acadcount = SourceListtStore.get_count()
         console.log("4")
      var dfd = $.Deferred(
        function () {
          var updateBtnCLientContextForWeeksAllocated = 
            SP.ClientContext.get_current();
          var getWeeksAllocated = 
            updateBtnCLientContextForWeeksAllocated
              .get_web()
              .get_lists()
              .getByTitle("Weeks Allocated");
          var camlQueryForWeeksAllocated = new SP.CamlQuery();
          camlQueryForWeeksAllocated.set_viewXml('<View><Query><Where><Geq><FieldRef Name=\'ID\'/>' +
            '<Value Type=\'Number\'>1</Value></Geq></Where></Query><RowLimit>1000</RowLimit></View>');
          var weeksAllocatedListStore = 
            getWeeksAllocated.getItems(camlQueryForWeeksAllocated);
          updateBtnCLientContextForWeeksAllocated.load(weeksAllocatedListStore);
          updateBtnCLientContextForWeeksAllocated.executeQueryAsync(
            function () {
              dfd.resolve(weeksAllocatedListStore);
            },
            function (sender, args) {
              dfd.reject(args);
            }
          );
        }
      );
         console.log("5")
      return dfd.promise()
    }
  ).then(
    function (waListStore) {
         console.log("6")
      if (waListStore.get_count() === acadcount) {
           console.log("7")
        alert("All items have been copied")
      }
      else {
           console.log("8")
        alert("Please try again")
      }
    }
  );
}

    </script>


</head>

<body>
    <button onClick="check()">Check</button>


</body>
  • stage 2 = непосредственно перед возвратом запроса списка источниковрезультат

  • этап 5 = непосредственно перед возвратом запроса списка выделенных недель
    результат

список источника: 2 элемента, Неделюраспределено: 3 элемента

  • первый и второй запуск: до 8 (выполнено)

Список источников: 109 элементов, выделено недель: 1item

  • Первый запуск: до 2

  • 2,3: до 5

  • 4: до 2

  • 5-8: до 5

  • 9: до 8 (выполнено)

Список источников: 109 предметов, выделено недель: 100 предметов

  • первые 33 прогона: до 5

  • 34: до 8 (завершено)

Так что я прав, полагая, что в случае сбоя скрипта файл обещает возвратиться до того, какзавершена?если так, как я могу обойти это?

1 Ответ

0 голосов
/ 05 июня 2018

Страница перезагружалась до того, как у JS была возможность полностью выполнить большое количество элементов, отключено обновление по нажатию кнопки, и теперь она работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...