Использование jQuery.sap.includeScript(). Then() в HCP Firori Launchpad

Я пытаюсь включить googlemaps в sapui5

jQuery.sap.includeScript({
                url: "https://maps.googleapis.com/maps/api/js?key=XXXX",
                promisify: true
            }).then(function() { ... } )

Это Promise отлично работает, когда я работаю в Hanatrial Webide, но когда я разверну его на облачной платформе Hana, он не работает. Это сообщение об ошибке дает мне:

InterceptService.js: 1 Uncaught (в обещании) TypeError: u.indexOf не является функцией (…) sap.ushell.cloudServices.interceptor.InterceptService._invokeFilters @ InterceptService.js: 1

jQuery.sap.includeScript @ InterceptService.js: 1

onAfterRendering @ Worklist.controller.js: 37

Поэтому я открываю InterceptService.js, фрагмент кода в библиотеке, которая вызвала эту ошибку

{if(u.indexOf('/sap/fiori/../../')>0){u=u.replace('/sap/fiori/../../','/');}

Я использую HCP Portal Service для создания платформы HCP Fiori Launchpad. Как это исправить? Что я сделал не так?

Большое спасибо!

2 ответа

Решение

Это действительно проблема InterceptorService, который не поддерживает синтаксис includeScript с объектом в качестве первого аргумента.

Я передал код решения команде внедрения службы портала HCP, и он будет исправлен в следующем выпуске.

Пока что вы можете достичь той же функциональности с помощью следующего обходного пути:

new Promise(function(fnResolve, fnReject) {
    jQuery.sap.includeScript(
        "https://maps.googleapis.com/maps/api/js?key=XXXX", 
        "mapsScriptId", fnResolve, fnReject
    );
}).then(function() { ... } )

Посмотрите, как UI5 реализует это: https://github.com/SAP/openui5/blob/rel-1.38/src/sap.ui.core/src/jquery.sap.global.js#L4387-L4389

Похоже, что InterceptService пока не поддерживает новейшую подпись jQuery.sap.includeScript (где параметры предоставляются в объекте конфигурации, а не в качестве отдельных аргументов).

В середине срока InterceptService должен быть улучшен / исправлен. В краткосрочной перспективе вы можете вернуться к старой подписи jQuery.sap.includeScript (url, id, onload, onerror). К сожалению, нет способа получить Обещание со старой подписью.

Другие вопросы по тегам