Случайная ошибка "Исключение из HRESULT: 0x80131904" при попытке добавить элемент в пустой список на новом дочернем сайте, созданном при предыдущем вызове REST
В приложении Angular5 в SharePoint Online мы генерируем 2 дочерних сайта на основе пользовательского ввода через API REST с использованием ранее сохраненных шаблонов сайта:
updateNewAPP(newAPP: Anteproyecto, tmplAnteProyecto: string, tmplInfoCliente: string) {
const bodyObj = {
'__metadata': { 'type': 'SP.Data.Proyectos_x0020_AnteproyectosListItem' },
'N_x00ba__x0020_de_x0020_anteproy': newAPP.noDeAnteproyecto,
'Title': newAPP.title
};
const bodyObj2 = {
'parameters': {
'__metadata': { 'type': 'SP.WebInfoCreationInformation' },
'Url': newAPP.noDeAnteproyecto,
'Title': newAPP.noDeAnteproyecto,
'Description': newAPP.title,
'Language': 3082,
'WebTemplate': tmplAnteProyecto,
'UseUniquePermissions': false
}
};
const bodyObj3 = {
'parameters': {
'__metadata': { 'type': 'SP.WebInfoCreationInformation' },
'Url': newAPP.noDeAnteproyecto + '-InfoCliente',
'Title': newAPP.noDeAnteproyecto + '-InfoCliente',
'Description': newAPP.title + ' - Info Cliente',
'Language': 3082,
'WebTemplate': tmplInfoCliente,
'UseUniquePermissions': false
}
};
return Observable.forkJoin(
this._sharepointService.SPUpdateItem('Proyectos Anteproyectos', bodyObj, newAPP.id.toString()),
this._sharepointService.SPAddSubsite(bodyObj2),
this._sharepointService.SPAddSubsite(bodyObj3)
);
}
где SPAddSubSite() отправляет POST в конечную точку /_api/web/webinfos/add. При успешном возвращении наблюдаемых следующий шаг в коде генерирует один элемент в списке на обоих новых дочерних сайтах:
addLinksNewAPP(newAPP: Anteproyecto) {
const observables = [];
const bodyObj = {
'__metadata': { 'type': 'SP.Data.EnlacesListItem' },
'Title': newAPP.noDeAnteproyecto + '-InfoCliente',
'enlace': {
'__metadata': { 'type': 'SP.FieldUrlValue' },
'Description': newAPP.title + ' - Info Cliente',
'Url': _spPageContextInfo.webServerRelativeUrl + this.urlPrefix + newAPP.noDeAnteproyecto + '-InfoCliente'
}
};
observables.push(this._sharepointService.SPAddItemSubSite('Enlaces', bodyObj, newAPP.noDeAnteproyecto));
const bodyObj2 = {
'__metadata': { 'type': 'SP.Data.EnlacesListItem' },
'Title': newAPP.noDeAnteproyecto,
'Enlace': {
'__metadata': { 'type': 'SP.FieldUrlValue' },
'Description': newAPP.title,
'Url': _spPageContextInfo.webServerRelativeUrl + this.urlPrefix + newAPP.noDeAnteproyecto
}
};
observables.push(this._sharepointService.SPAddItemSubSite('Enlaces', bodyObj2, newAPP.noDeAnteproyecto + '-InfoCliente'));
return Observable.forkJoin(observables);
}
где SPAddItemSubSite отправляет POST в конечную точку /...subsitio.../_api/web/lists/getByTitle('listname')/items. Затем процесс продолжается только после получения успешного ответа от вызовов REST для дальнейшей модификации дочерних сайтов.
Обычно этот процесс работает правильно, занимая от 30 до 45 секунд для создания 2 дочерних сайтов, но иногда (примерно 1 из 10) после создания дочерних сайтов, один из следующих 2 вызовов REST для создания элементов в списках на дочерних сайтах завершается с 500 и сообщением об ошибке:
код: "-2146262060, Microsoft.SharePoint.SPException"
сообщение: {lang:"es-ES", значение: "Исключение из HRESULT: 0x80131904"}
В предыдущих версиях SharePoint этот код исключения указывал на проблему с SQL Server, такую как нехватка места на диске - список неполадок с кодом и его возможными причинами можно найти здесь - https://social.technet.microsoft.com/wiki/contents/articles/37416.sharepoint-20132010-troubleshooting-exception-hresult-0x80131904.aspx
Кажется, что ни одна из этих причин не подходит к этому случаю, поскольку процесс обычно работает правильно, сбой только в десятой части времени.
Служба поддержки Office365 не смогла помочь (API REST НЕ покрывается ими), но они предположили, что это может быть связано с разрешениями.
Поскольку эта ошибка возникает только изредка и, по-видимому, возникает сразу после создания дочернего сайта, я подозреваю, что успешный возврат вызовов REST для создания сайтов может быть отправлен слишком рано, до того, как сайты будут полностью созданы.
Кто-нибудь знает, верно ли мое подозрение или кто-то испытывал подобные попытки, пытаясь изменить сайт сразу после его создания? Есть ли способ определения, когда сайт был полностью сгенерирован, кроме ответа на вызов REST, который создает сайт?
Есть ли какая-то другая причина, почему мы можем видеть эту ошибку только иногда?