#sharepoint #ag-grid #spfx
#sharepoint #ag-grid #spfx
Вопрос:
Я использую ag-grid react для SPFx в SharePoint.
Когда я пытаюсь экспортировать файл в workbench, он работает нормально. Но когда я развертываю пакет sppkg в sharepoint, экспорт не работает. URL-адрес большого двоичного объекта заменяет страницу SPFx и показывает 404 not found —
https://mytenant.sharepoint.com/sites/mysite/blob:/12012f34-cfb2-45a0-b8dd-539d39272848
Исследуя эту проблему, единственное отличие, которое я обнаружил, когда в workbench загрузка происходит со следующим кодом —
element.dispatchEvent(new MouseEvent('click', {
bubbles: false,
cancelable: true,
view: window
}));
Где, как и в развернутой версии кода, он не работает.
Любая помощь будет высоко оценена.
Заранее спасибо!
Ответ №1:
Я просмотрел документ ag-grid react и привел ниже демонстрацию, она отлично работает на моей странице SPO.
Экспорт Excel доступен только в ag-Grid Enterprise (для использования требуется лицензия):
BR
Комментарии:
1. Это отлично работает в workbench. Но когда я его развертываю, возникает ошибка 404. Вместо загрузки открывается URL-адрес blob-объекта в браузере.
Ответ №2:
Возможно, уже поздно, но я столкнулся с той же проблемой при экспорте AG-Grid в SPFX. Экспорт отлично работает в Workbench, но завершается сбоем после развертывания, даже если я использую полную лицензионную версию Ag-Grid.
Это не проблема AG-Grid, а то, как SPFX обрабатывает функции экспорта.
Попробуйте это:
Вместо использования функции exportDataAsExcel() используйте getDataAsExcel() для получения данных Excel из AG Grid API в виде большого двоичного объекта.
Этот код находится в React. Вы можете повторить то же самое в JS или Angular версии Ag-Grid
let blob = this.gridApi.getDataAsExcel();
const fileDownloadUrl = URL.createObjectURL(blob);
let link = document.createElement('a');
link.href = fileDownloadUrl;
link.download = fileName;
link.style.visibility = 'hidden';
// Followingline of code fixes the export issue in SPFX. The data interception needs to be set to false. You can research more on url interception in SPFX
link.dataset.interception = 'off';
document.body.appendChild(link);
link.click();
URL.revokeObjectURL(fileDownloadUrl);
document.body.removeChild(link);