Neptune DXP 23.10.0003 Changelog

February 22, 2024


Prevent Initial Hash Navigation

The launchpad will always use a semantic object (hash navigation) in the URL to identify the current screen or the currently opened application. Users can save the launchpad link with the semantic object as a browser favorite, the launchpad will then navigate straight to that action on startup. In some scenarios, this is not desirable because certain customer-specific actions must be performed before any navigation occurs. If "Prevent Initial Hash Navigation" is enabled in the Cockpit Launchpad configuration tool, the initial hash navigation will not be performed! The initial hash will be stored in the AppCache.initHash property, use that in the enhancement spot "After Unlock" if needed.

23.10.0003 Prevent Initial Hash Navigation
Handle Back Button Press

Having a back button inside an application can be confusing because the end user can have difficulties understanding when to use the Launchpad back button and when to use the back button in each application. Instead of adding a back button in each application, you can now handle the launchpad back button click from within each of your applications. Depending on the situation, you might want the back button to navigate from a detail page back to a list page. If special handling is needed from your application on a back button click, you can return true from the HandleBackButton function. If the default back button handling should be performed, you just return nothing or false.

if (sap.n) {
    sap.n.Launchpad.HandleBackButton = () => {
        if (App.getCurrentPage() === PageDetail) {
            return true;
        return false;

You’ll find a code example in the Code Snippet tool.

23.10.0003 Handle Back Button Press
Hash Navigation in Fiori Tiles

When a Fiori application is set up to run inside the Neptune Launchpad, the Fiori URL will be loaded inside an iFrame. The URL would get the new DXP23 hash navigation parameter added at the end. This would interfere with the semantic hash object added to the Fiori URL.

Sidepanel View (20859)

Support for the Neptune Launchpad Sidepanel on mobile devices has been added. Additionally, it is now easier for the end user to close and reopen the sidepanel when needed. Resizing is now also supported, so that the sidepanel will remain on the screen if the launchpad canvas is resized due to changes in the screen rotation or opening of menus.

Complex Pincode

When pincode is enabled in a PWA/Mobile Client, it’s possible to turn on "Complex Pincode". The complexity requirements have been loosened a bit. Now the pincode can include the same number twice. The complexity function checks that the pincode does not have numbers in sequence and that the pincode does not contain all the same numbers. Examples of rejected pincodes: 1111, 5555, 2345, 4567, 5432. You can implement the "Complex Pincode Check" enhancement spot if you want to create a customer-specific check function. See below for details.

Open Application Mouse Over (20969)

The hover menu for opened applications represented by an icon in the launchpad header has been brought back. The hover menu was initially removed in DXP 23, but we see that this hover menu has more usage than expected!

"Remote Debug" might lead to an error (20978)

If you have "Remote Debug" enabled and call console.log with either an undefined or no argument you would have gotten a JavaScript error. This is now resolved.

Launchpad Enhancement

Complex Pincode Check

New enhancement spot for complex pincode check. Implement this enhancement spot if you want to create your very own logic for pincode check. Requirement: "Complex Pincode" must be enabled in the PWA/Mobile Client settings.

Cockpit Mobile Client

Disabled Publish Fields (1)

If a mobile client is not published to the Neptune Public Client, all configuration fields will now be hidden.

Application Runtime

Text Formatters (20896)

Declaration of UI5 runtime formatters have been moved down below the application code block declaration. It is now possible to use functions declared inline in application code blocks in UI5 formatters. Neptune still recommends that functions used in formatters are defined in a broader scope so that they can be used globally.

Mobile Client

Android SQLite plugin (8-20806)

Plugin cordova-sqlite-evcore-extbuild-free is now enabled by default for both Android and iOS when selected from the Plugin Library. Please see this page for more background and details:

Small Screen Support (20971)

On very small mobile device screens, the info on the pincode screen would not fit within the canvas.

App Designer

Import & Paste From Older Systems (20911)

Transportation of applications and code is only fully supported between systems of the same main Neptune DXP versions. We do make our best effort to support importing apps and pasting code from older Neptune DXP versions. The container property of applications has been altered in Neptune DXP 23, allowing support for more standard UI5 aggregations in the App Designer. The container property will now be migrated when importing older apps or pasting code from older apps. Also, the model path migration on table and list controls will be performed on import/paste.

Native reauthentication (10-20749)

With the Authentication option "Native" an improvement has been implemented to handle the expiration of logon sessions. When an Ajax call fails because reauthentication is needed, the user will stay in the same app/screen after the necessary reauthentication has been completed. A message is provided to inform that reauthentication was successful, and the last performed action must be repeated.

Error caused by objects in Resources folder (10-20884)

When objects were added to the resources folder and the checkbox "Do not add to View, only declare" was not ticked, the error "DOM element with ID 'Resources' not found in page, but application tries to insert content." would occur when running the application. This has now been fixed.

Editor Code Removed from Canvas (20914)

App Designer code is loaded into Monaco Editor models, so that the Monaco Linter can reference code across all open scripts. The version management app is running embedded in the App Designer. Script code in the version management app will also be loaded into models in the same context. This operation would remove models from the main App Designer. Opening the scripts again would bring the code back. Now, the version management Monaco models will not interfere with the Monaco models in the App Designer.

Error Messages

Error messages in the App Designer can now include both a title and a description. Navigation to the field causing the error has also been enabled.

Paste From File

It’s possible to copy separate parts of an app to a file and paste this into another app, across systems and platforms. The file selection would allow all filetypes. Now, only files with .planet8copy and .planet9copy file extensions will be displayed in the file selection dialog.

abapGit Integration

The following changes are relevant for abapGit Integration v1.0.3.

Duplicated files Dump

A dump would occur when two objects have the same name. This dump was caused due to two files having the same name since the object also had the same name. To correct this, the ID of the object is now also included in the file name.

Ignore subpackages checkbox

In the abapGit local repository settings, there is a checkbox to "Ignore Subpackages", that was not passed down to the abapGit user exits. In our integration, the subpackages were always taken into consideration. Since abapGit version 1.127, this setting is now passed down to the abapGit exit class ZCL_ABAPGIT_USER_EXIT method CHANGE_TADIR that is required for the user to implement, as explained in abapGit Integration.

To take into account this new setting, the code implementation now needs to be something like this:

  "Include Neptune DXP Artifacts in the internal tadir table
  method zif_abapgit_exit~change_tadir.

    data lt_neptune_tadir type /neptune/cl_abapgit_user_exit=>ty_tadir_tt.
    data ls_neptune_tadir like line of lt_neptune_tadir.
    data ls_tadir like line of ct_tadir.

    lt_neptune_tadir = /neptune/cl_abapgit_user_exit=>change_tadir(
      iv_package            = iv_package
      iv_ignore_subpackages = iv_ignore_subpackages
    loop at lt_neptune_tadir into ls_neptune_tadir.
      move-corresponding ls_neptune_tadir to ls_tadir.
      append ls_tadir to ct_tadir.