SAP Knowledge Base Article - Public

3587472 - SAC Story : Story failed to lbe loaded after using "Default bookmark" functionality after QRC Q1 2025

Symptom

  • After executing the SAC analytic reports and using 'saved bookmark as default' option by changing the period input control, while trying to re-run the same report, we are getting Blank page (white screen). It failed to be loaded. 
  • As workaround : delete the default bookmark saved, and the report can be loaded again
  • The issue with the default bookmark occurs after QRC Q1 2025. 
  • Errors in Console :
    169.main.2ea78b4….js:19 Script execution failed for event "Application.onInitialization" STORE_COMMIT_TRANSACTION/1 failed as store has been destroyed
    app.chunk.appBuildin…eb4670dd334b8c.js:1 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'getContainer') at c.<anonymous>
    169.main.2ea78b4….js:19 [Unified Store] Atomic or eventual listener or external refresh triggered error, ignoring: [FailedAction - Action: store.refreshExternalState@[{"app":"MAIN_APPLICATION"},{"story":"storyID"},{"pageFilterWidget":"cf0a35a3-26d9-41c4-8556-8f35609fd2dc"}] - Error: Store.HandlerInvalid/External component for pageFilterWidget not found] at Error: [FailedAction - Action: store.refreshExternalState@[{"app":"MAIN_APPLICATION"},{"story":"storyID"},{"pageFilterWidget":"cf0a35a3-26d9-41c4-8556-8f35609fd2dc"}] - Error: Store.HandlerInvalid/External component for pageFilterWidget not found]
    at new t
    Error: [FailedAction - Action: store.refreshExternalState@[{"app":"MAIN_APPLICATION"},{"story":"storyID"},{"pageFilterWidget":"cf0a35a3-26d9-41c4-8556-8f35609fd2dc"}] - Error: Store.HandlerInvalid/External component for pageFilterWidget not found]
    at new t
    169.main.2ea78b4….js:19 Error: [FailedAction - Action: SET_SELECTED_MEMBERS@[{"app":"MAIN_APPLICATION"},{"story":"storyID"},{"pageFilterWidget":"cf0a35a3-26d9-41c4-8556-8f35609fd2dc"}] - Error: Store.UnhandledError/Unhandled failure during external write operation.] Unknown throwable: Protocol Error: Error [Protocol]: (#73) Connection is already released

Environment

  • SAP Analytics Cloud 2025.1.5

Cause

The API NavigationUtils.openApplication("9B880501041DDEC2250600DF1D25A0C4", urlParam, false); is called in onInitialization() event, and since there are other scripts to be executed on the current page, the page navigation is failed. The issue is rare and it depends on specific pages and scripts, so, we encourage users can use workarounds to resolve the issue.
In the old version, it has fewer features than QRC 2025.01, so functions are executed faster than QRC 2025.01, so it is less likely to have navigation fail. It is still possible that the old version has the same issue if there are more functions in  Oninitialization. So, using Timer is a better practice.

Resolution

Users can just change the way they apply the default bookmark.
There are several solutions. Users can pick any one of them to resolve the issue.

  1. If users just need to open the report and make it apply the default bookmark, they do not need to write any scripts in Application – onInitialization. They can add the parameter :
    &bookmarkId=DEFAULT in the URL to open the default bookmark. 
    For example, the original application URL is
    https://tenantxxxx/sap/fpa/ui/tenants/f5e3d/app.html#/analyticapp&/aa/9B880501041DDEC2250600DF1D25A0C4/?mode=present

  the changed URL to open the default bookmark should be
  https://tenantxxxx/sap/fpa/ui/tenants/f5e3d/app.html#/analyticapp&/aa/9B880501041DDEC2250600DF1D25A0C4/?mode=present&bookmarkId=DEFAULT
using this URL can open the application with default bookmark.

2. If users want to use NavigationUtils.openApplication, users can set the latest argument to true, so a new web page will be opened to load the bookmark successfully.
For example, NavigationUtils.openApplication("9B880501041DDEC2250600DF1D25A0C4", urlParam, true);

3. If users do want to open the application on the same page, they can add a Timer from the outline, and call openApplication in the Timer timeout event.
For example, add Timer_1.start(5); in Application – onInitialization(), and then add 
var urlParam= UrlParameter.create("bookmarkId","12208900-3539-4319-3732-734539941713");
NavigationUtils.openApplication("9B880501041DDEC2250600DF1D25A0C4", urlParam, false);
in Timer_1 - onTimeout
So, NavigationUtils.openApplication will work after the Application – onInitialization() is fully executed (wait for 5 seconds).

4. If users do not want to use Timer to delay NavigationUtils.openApplication, they can make sure NavigationUtils.openApplication is the latest executed code in Application – onInitialization . It means no other code will be called after NavigationUtils.openApplication . In those case, users may add
var isNew = false; at the beginning of Application – onInitialization, and then

        if (bookmarks[i].isDefault === true) 
        {
             isNew = true;
             ...;
        NavigationUtils.openApplication("9B880501041DDEC2250600DF1D25A0C4", urlParam, false);
        }
and then

        if(!isNew) {
    Panel_load.setVisible(true);
    Panel_hidden_lov.setVisible(false);
    SCRO_Date.FUN_Def_Date();
    SCRO_Load.FUN_Version_Load();
    SCRO_Entity.FUN_Load();
    Panel_load.setVisible(false);
        }

So, Panel_load.setVisible(true); will not be called if NavigationUtils.openApplication will be used to apply bookmark. So, no code will affect NavigationUtils.openApplication and NavigationUtils.openApplication can work well.
(please note this solution may fail in rare cases, though it can work in the current story. Timer is the best solution we suggest)

5. If users do not like adding one more variable, they can use BookmarkSet_1.apply to replace NavigationUtils.openApplication to load the bookmark.
For example,
BookmarkSet_1.apply(bookmarks[i].id);
// there two lines are not required:
// var urlParam= UrlParameter.create("bookmarkId",bookmarks[i].id);
// NavigationUtils.openApplication("9B880501041DDEC2250600DF1D25A0C4", urlParam, false);
So, the bookmark can be loaded without calling NavigationUtils.openApplication.

=====

The final changed scripts would be :

---Oninitialization:

if (BookmarkSet_1.getAppliedBookmark() === undefined) {
    //check if default bookmark is saved
    var bookmarks = BookmarkSet_1.getAll();
    if (bookmarks.length > 0) {
        for (var i = 0; i < bookmarks.length; i++) {

            if (bookmarks[i].isDefault === true) {
                Timer_1.start(5);
            }
        }
    }
    Panel_load.setVisible(true);
    Panel_hidden_lov.setVisible(false);
    SCRO_Date.FUN_Def_Date();
    SCRO_Load.FUN_Version_Load();
    SCRO_Entity.FUN_Load();
    Panel_load.setVisible(false);
}

---Timer_1 - onTimeout

if (BookmarkSet_1.getAppliedBookmark() === undefined) {
    //check if default bookmark is saved
    var bookmarks = BookmarkSet_1.getAll();
    if (bookmarks.length > 0) {
        console.log("SEL");
        console.log(Selectedkeys);
        for (var i = 0; i < bookmarks.length; i++) {

            if (bookmarks[i].isDefault === true) {
                var urlParam = UrlParameter.create("bookmarkId", bookmarks[i].id);
                NavigationUtils.openApplication("9B880501041DDEC2250600DF1D25A0C4", urlParam, false);
            }
        }
    }
}

See Also

Keywords

Default bookmark, Timer, Timeout, NavigationUtils, UrlParameter.create , KBA , LOD-ANA-AD-INF , Analytics Designer Infrastructure , Problem

Product

SAP Analytics Cloud all versions