This website uses cookies for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information

Category: Development

VisionX 5.11.615 is out

We're happy to announce VisionX 5.11.615

The new version is fully backwards compatible and contains many improvements. It also fixes some reported problems and brings new features. This version is the last version of series 5 and we didn't change bigger blocks. The 5.11.615 should be a great final version of VisionX 5. We already started development of VisionX 6 and it will bring some bigger changes because we'll update to Java 21. We also will update our embedded postgresql database. We'll update to our latest react based UI and also to latest mobile app. We have some great features in the pipeline for all of you.

... back to VisionX 5.11.615

What's new?

  • NEW calculated field
    Calculated field

    Calculated field

    Use this field for sum, average, min, max calculation or simple record counts. The calculated value can be changed after calculation or you can define custom formulas. It's on you. It's super easy to use and you can access the calculated fields in any action.

  • Actions and Functions

    Our new actions are:

    • Perform search

      If you have a "manual" Search button in your screen, automatic search is disable automatically. With this action it's possible to force search)

    • Download URL

      Save data from an URL.

    • Contains (value, search, case_sensitive)

      Checks if a search value is part of a specific value. case_sensitive means (B is not the same as b; but case insensitive means B is the same as b)

    • Starts with (value, search, case_sensitive)

      Checks if a value starts with a specific search value

    • Ends with (value, search, case_sensitive)
    • for loop with fixed number of iterations
    • Checks if a value ends with a specific search value

    Changed actions:

    • E-Mail
      It's now possible to set dynamic text as subject instead of fixed text.

    We have some totally useful new functions for you:

    • length (text)

      Counts the number of characters

    • substring (text, start)

      Creates a sub string from start to the end

    • substring (text, start, count)

      Creates a sub string from start and maximum count characters

    • countAll (column)

      Counts all records. Compared to count(column) which counts all records where the value is not empty.

    The description of an action shows possible functions as well:

    Detailed description

    Detailed description

  • Improved field selection
    Choose field

    Choose field

  • Messages now support feedback input

    Feedback input

    Feedback input

  • Changing license is now possible without "invalid license" warning
  • Changed some icons in elements area of visual designer
  • Creation of XML reports fixed

Starting with VisionX 5.11.615 it will be possible to use updates of following AddOns:

  • Embedding 1.8-4
  • Audit Log 1.2-11
  • REST 1.14-ea10
  • Query Editor 1.4.6

As usual, VisionX 5.11.615 is available in the download area for our customers or as trial.

Have fun!

Adding new paths for native libraries at runtime in Java (part 2)

Part 1 of this article is available here.

Since Java 14, ClassLoader was changed a little bit and usr_paths it not available as field anymore. It's still possible to change the java.library.path at runtime, but it's still tricky and dirty:

Method getDeclaredFields0 =
    Class.class.getDeclaredMethod("getDeclaredFields0", boolean.class);
getDeclaredFields0.setAccessible(true);

Field[] fieldsClassLoader =
    (Field[])getDeclaredFields0.invoke(ClassLoader.class, Boolean.FALSE);

for (Field fldClassLoader : fieldsClassLoader) {
  if ("libraries".equals(fldClassLoader.getName())) {
    fldClassLoader.setAccessible(true);

    Class<?>[] classesClassLoader =
        fldClassLoader.getType().getDeclaredClasses();

    for (Class<?> clLibraryPaths : classesClassLoader) {
      if ("jdk.internal.loader.NativeLibraries$LibraryPaths".equals(
              clLibraryPaths.getName())) {
        Field[] fieldsLibraryPaths =
            (Field[])getDeclaredFields0.invoke(clLibraryPaths, Boolean.FALSE);

        for (Field fldLibPath : fieldsLibraryPaths) {
          if ("USER_PATHS".equals(fldLibPath.getName())) {
            final Field fldUsrPaths = fldLibPath;
            fldUsrPaths.setAccessible(true);

            // get array of paths
            final String[] saPath = (String[])fldUsrPaths.get(null);

            // check if the path to add is already present
            for (String path : saPath) {
              if (path.equals(pPath)) {
                return;
              }
            }

            // add the new path
            String[] saNewPaths = Arrays.copyOf(saPath, saPath.length + 1);
            saNewPaths[saNewPaths.length - 1] = pPath;

            Object unsafe;

            // Unsafe is a hack

            Class<?> clsUnsafe = Class.forName("sun.misc.Unsafe");

            final Field unsafeField = clsUnsafe.getDeclaredField("theUnsafe");
            unsafeField.setAccessible(true);
            unsafe = unsafeField.get(null);

            Method m1 = clsUnsafe.getMethod("staticFieldBase", Field.class);
            Method m2 = clsUnsafe.getMethod("staticFieldOffset", Field.class);

            Object fieldBase = m1.invoke(unsafe, fldUsrPaths);
            Long fieldOffset = (Long)m2.invoke(unsafe, fldUsrPaths);

            Method m3 = clsUnsafe.getMethod("putObject", Object.class,
                                            long.class, Object.class);

            m3.invoke(unsafe, fieldBase, fieldOffset, saNewPaths);
          }
        }
      }
    }

    return;
  }
}

Here's the complete solution: toPDF project (search for addLibraryPath(String pPath))

Above code requires:

--add-opens java.base/java.lang=ALL-UNNAMED
--add-opens java.base/jdk.internal.loader=ALL-UNNAMED

for JDK > 14.

VisionX 5.10.851 is out

What a great day!

We're happy to announce VisionX 5.10.851

The version comes with the latest release build of our react user interface and support for our latest mobile application.

We recommend the update because it's backwards compatible and you get all bugfixes which were reported by all VisionX users.

What's new?

The main focus was on bugfixes but we alwo have two new features:

  • Configure a home screen for your application
    The home screen is always shown if no other screen is open.
  • Export a Docker definition for the application without database container

As usual, VisionX 5.10.851 is available in the download area for our customers.
Have fun!

VisionX EA 5.11.50 is available

VisionX 5.11.50 EarlyAccess version is available for all our customers.

The version contains our latest libraries and bugfixes, especially our react UI and flutter UI. Both UIs are included in VisionX 5.11.50.

The mobile Browser previewer is now built with Flutter 3.19.2.

With EA version it's now possible to create a docker container definition file only for the application server. Usually both containers were created as docker compose definition file. The EA version also tries to solve the problem with different database ports for the embedded database. It should just work without limitations.

An EA version is not intended for production use, but is great for development.

Have fun!

VisionX Previewer App 3.1.0 is available

Our VisionX Previewer App 3.1.0 is available.

It's a small feature release for dark mode support.

Some impressions

App overview black

App overview black

Splash black

Splash black

Menu black

Menu black

App overview

App overview

Splash

Splash

Menu

Menu

Login black

Login black

Screen black

Screen black

Menu black

Menu black

Login

Login

Screen

Screen

Menu

Menu

Settings black

Settings black

Settings

Settings

A full changelog is available here and information about the 3.1.0.

VisionX Previewer App 3.0.3 is available

Our VisionX Previewer App 3.0.3 is available.

It's a feature release!

  • Save file action AND optional Show file
  • ReadOnlyChecker support
  • Change base URL for multiple apps with same base URL
  • Activate Screen support
  • Charts and Gauges reimplementation
  • Native push support
  • Barcode support for (QR) Scanner
  • Application now knows dark/light mode
  • ...
  • Bugfixes

A full changelog is available here and information about the 3.0.3, 3.0.2, 3.0.1, 3.0.0

VisionX 5.10 is out

What a great day!

We're happy to announce VisionX 5.10. It's a really powerful version.
The exact version number is 5.10.511.

The version comes with the latest release build of our react user interface and support for our latest mobile application. We recommend react UI but we still have our good old vaadin UI on board. Our vaadin UI is still a good decision and we also continue development. No worries. As we told you in VisionX 5.9 release notes, all new cool features will be available for react UI only. In latest react UI we also bundled our latest design mode feature.

We recommend the update to 5.10 of all previous versions because it's backwards compatible and you get lots of new features and all bugfixes which were reported of all VisionX users. If we release AddOn updates, we target the new VisionX version and it's not guaranteed that old VisionX versions will get the updates.

If you plan using mobile apps, also update to 5.10 because we'll release an update of our VisionX app in the next days. This app requires VisionX 5.10 or later.

What's new?

The main focus was on bugfixes, react UI and mobile.

  • New calendar component
  • Using application specific web content folder
  • Native mobile app production ready (enhancement)
  • reactUI production ready (enhancement)
  • VisionX app ready (enhancement)

As usual, VisionX 5.10.511 is available in the download area for our customers.
Have fun!

VisionX Previewer App 2.9.0 is available

Our VisionX Previewer App 2.9.0 is available.

It's a feature release!

  • It's now possible to close a screen via menu (small x beside the text).
  • The table selection is now super fast. We removed the delay between click and select record.
  • It's now possible to change the application name
  • Linked cell editors now support concat masks
  • Improved offline sync and user messages
  • New retry feature for offline -> online
  • Html editor support for contenttype/html
  • ...
  • Bugfixes

A full changelog is available here and information about the 2.9.0, 2.8.0, 2.7.0

VisionX EA 5.9.700 is available

VisionX 5.9.700 EarlyAccess version is available for all our customers.

The version contains our latest libraries and bugfixes. As usual, react UI and flutter UI got some updates. Both UIs are included in VisionX 5.9.700.

Our reactUI is already production ready, but it's still not the default UI for web browsers. We'll change this in one of the next releases.
The mobile Browser previewer app is now built with Flutter 3.10.4.

The EA version doesn't contain many new features, because we took time to work on something new. We can't tell you details, but it's incredibly cool!

What's next?

We plan to release an update of our mobile VisionX app with version number 2.9.0. It's already feature complete, but needs some tests. Should be ready by the end of next week.

An EA version is not intended for production use, but is perfect for development.

Have fun!

VisionX Previewer App 2.6.0 is available

Our VisionX Previewer App 2.6.0 is available.

It's not just an update release, it's a release with many new features!

An impression is available here.

The new app overview makes our previewer app a multi previewer app. Use one application to manage all your VisionX applications and switch between the apps.

A full changelog is available here