Мне нужно скопировать элементы между списками (добавляя больше материала к каждому элементу, чтобы не использовать поток), я испытываю ошибку, когда, если исходный список превышает 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>
список источника: 2 элемента, Неделюраспределено: 3 элемента
- первый и второй запуск: до 8 (выполнено)
Список источников: 109 элементов, выделено недель: 1item
Первый запуск: до 2
2,3: до 5
4: до 2
5-8: до 5
9: до 8 (выполнено)
Список источников: 109 предметов, выделено недель: 100 предметов
первые 33 прогона: до 5
34: до 8 (завершено)
Так что я прав, полагая, что в случае сбоя скрипта файл обещает возвратиться до того, какзавершена?если так, как я могу обойти это?