После переноса различных JavaScript-приложений SharePoint 2013 в SharePoint 2016 мне пришлось взглянуть на странное явление API отдыха SharePoint 2016:
предположим, что у вас есть 2 вызова ajax
- Загрузить файл -> возвращает spFile
получить элемент списка для загруженного файла -> возвращает spItem
jQuery.ajax({
url: "/sites/mysite/_api/web/getFolderByServerRelativeUrl('/sites/mySite/myLibrary')/files/add(overwrite=true, url='test1.txt')",
type: "POST",
data: params.arraybuffer,
processData: false,
headers: { "Accept": "application/json;odata=verbose", "X-RequestDigest": params.digest, "X-HTTP-Method": "POST","If-Match": "*" },
success: function (file) {
//get listItem for uploaded file
jQuery.ajax({
url: file.d.ListItemAllFields.__deferred.uri,
type: "GET",
headers: { "accept": "application/json;odata=verbose" },
success: function (result) {
//after first upload: OK
var id = result.d.ID;
}
});
}
});
Если файл не имеетпока существует по этому URL, все ок.SharePoint создает новый элемент списка, и вы получите новый элемент с правильным идентификатором во втором вызове. Предположим, мы получили идентификатор 1.
Если файл с таким именем уже существовал под этим URL, ипозже он был удален, SharePoint создает новый элемент с новым идентификатором.Это как и ожидалось.НО: в этом случае SharePoint Rest API возвращает неправильный элемент списка.Вместо нового созданного элемента списка (идентификатор 2) вы получите старый удаленный элемент с идентификатором 1.
В SharePoint 2013 эта ошибка не возникает.В SharePoint 2016 - эта ошибка возникает только в случае одного и того же контекста браузера для вызова ajax 1 и вызова ajax 2. Обычно эта ошибка затрагивает вас, если вы загружаете файл и одновременно вы обновляете некоторые мета значения.
Кажется, это ошибка в SharePoint 2016. Полагаю, MS внедрила более строгий алгоритм кэширования и справилась с задачей.