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

VisionX 5.6 - New quick design mode

With VisionX 5.6 it will be possible to open the design mode a little bit faster. Simply start an application, press Shift + Ctrl and click the element with left or right mouse. The left mouse key will start the design mode and automatically selects the element. The right mouse key will open the customizer as well.

The quick design mode also shows the name of the element, if you need the information for css customization.

And this is how it looks like:

Quick design

Quick design

VisionX 5.6 - New hidden feature for developers

Upcoming version 5.6 has two hidden features. More interesting for Java developers than for Citizen developers. The first feature makes it possible to include external application directories.

Usually, you start creating a new application with VisionX. The location is <visionx_install_folder>/rad/apps/<appname>. This is not the best place if you have your own directory structure or if you want to use a VCS like git or subversion. In this case, no worries. Simply copy the application folder to the right place and drag the folder back into VisionX. An information message will be shown and everything is done. If you delete such "linked" application, only the link will be removed. This hidden feature replaces manual usage of apps.xml in your rad directory. It was a manual task which is not necessary anymore.

The second hidden feature is in the main screen of VisionX. If you press Shift + Alt, two new icons will appear for every application:

New options for an application

New options for an application

A click on the first icon will open the application directory in system explorer and the second icon will import or open the application in a running Eclipse installation, if EPlug is installed.

Both features are a big help in your daily work with VisionX.

Screencasts with VisionX 5.6

VisionX 5.6 will have awesome new features like

  • VisionX Cloud support
  • Dashboard support
  • Chart support
  • Scheduler
  • AuditLog (optional)
  • REST action calls

The new release will be available by the end of this week!

And another new big feature is our Video recorder:

VisionX Recorder

VisionX Recorder

The recorder is a small bar under VisionX, if enabled:

VisionX with recorder

VisionX with recorder

To enable this bar, press Shift + Alt (MacOS: Shift + Option). It makes it possible to record a video of the whole screen or just the application. It's also possible to take a screenshot instead of a Video. The videos are compressed with Techsmith Screen Capture Codec. So it's required to install this codec in your OS to playback recorded videos. It's also possible to use VLC as video player. On macOS the elmedia Player is a good option.

If you want a standard video format, it's possible to automatic convert the videos. Simply download the Videoconverter archive and extract its content into the lib directory of your VisionX installation folder. If converter is available, all recorded videos will be converted automatically into the converted folder of your recordings directory. The format is AVI with MPEG4 codec. This should playback well under most OS'.

The recorder should be used especially if you talk to our support. It's easier to find problems if you record them.

VisionX 5.5 with more features than ever

Our latest release is now available, just in time for the holidays. Our elves… ahem, our developers... have been very busy this year building the functionality you’ve been asking for. With this release you should be able to build amazing applications with even more functions, faster and easier!

Native mobile client

We’ve put our existing native clients on completely new technological footing. The mobile client is developed with Google’s Flutter framework, which makes it possible to develop truly native mobile apps for iOS and Android with a single code base. This means that apps can look identical on both platforms or iOS apps can have the typical Apple look (Cupertino Controls) while Android apps appear in Google Material Design.

The user interfaces of VisionX mobile applications are now 1:1 identical with the web applications, so any mobile application can be implemented according to the customer’s individual requirements. If very specific UI elements or features are needed, the mobile app can be extended at the Dart code level in the Flutter framework, or even with native Object C or Android SDK code. Customizing examples are provided, as well as an API. With all of these changes, visual designability in VisionX is still preserved. And while we’re talking about mobile, the new comprehensive responsive functionality of VisionX is very helpful - see below.

Previously you could only preview mobile views directly on a device. Now you can look at a live preview in your browser with the mobile simulator. This makes designing for mobile much faster and more intuitive.

Screenshot of VisionX app with login & user settings

And if all of this is Greek to you, don’t worry. It simply translates to easier design and testing of mobile apps with better user interfaces.

Platform responsive design

Responsive design refers to a flexible web design approach that “responds” to the size and capabilities of the device. For example, on a phone users would see content shown in a single column view; a tablet might show the same content in two columns. Images may be resized and menus might be displayed in a completely different form.

We have made our existing responsive design designable through the VisionX User Interface Designer. You can now determine which group of elements are automatically wrapped on smartphones, or if you should determine yourself how the elements should be arranged. The frequently used editing panel already contains the typical default settings, and so all new screens are automatically responsive, including detail view. This applies immediately not only to web apps but also to mobile and desktop applications. So you can be sure your apps look great, no matter what device the user has or what size the window is.

CRUD REST service control

Most apps don’t stand on their own; they connect with internal or third-party apps and databases to send or retrieve information, most often through REST APIs. VisionX support for REST services just got easier.

In addition to REST support in the workflow engine, we’ve now added powerful CRUD REST support. This makes working with REST services as easy as working with database tables, with just a few clicks. Out of the box we support more than 50 REST services from various standard software and SaaS services. Through Zapier (an amazing web app that allows you to automate actions between different web apps) we can actually support over 2000 apps with countless services.

Screenshot of REST Service Configuration in VisionX

Just a few of the many popular applications we directly support: SAP, Salesforce, Sharepoint, Zapier, OData, Asana, ClickSend, Google, Jira, OneSignal, Slack, Stripe, Trello, Twitter and Cronetwork.

You can also configure CRUD REST services yourself for other REST services more easily than with other vendors, in order to integrate any system with your VisionX applications.

Query editor

With the new Query Editor, even business users / citizen developers can easily query data and use it in screens, dashboards or reports. Links between tables are automatically taken into account and group functions such as sum, average, etc. can be used. This makes it much easier to develop advanced automation for report generation and much more.

Screenshot of Query Editor in VisionX

210+ actions and improved action editor

We provide a huge library of built-in actions, like sending an email or getting approval, so you don’t have to reinvent the wheel. With a total of more than 210 actions, business users can add a lot more functions and logic to their applications. For this purpose, we have also greatly improved the function of the Action Editor. This includes action categories, intuitive action search function and action documentation. Many new visual entry helpers are available for selecting action parameters to make it very easy to use, for instance color selection, moving actions and much more.

Screenshot of Action Editor in VisionX

Here is a selection of new functions:

  • Parameters to pass to screens or to save temporary values
  • Duplicate record
  • Make values in columns unique
  • Set all kinds of UI properties
  • Set style and more

User Profiles Add On - Improved:

  • Save filters by name
  • AND / OR support
  • More filter operators
  • Exclude columns from full-text filters

Usability improvement and more features:

  • Preview function in the new Screen Wizard to preview the results of the selected screen layout
  • Improved screen layout
  • User interface designer usability improved (especially with the Advanced FormLayout)
  • Performance improvements in the User Interface Designer
  • Performance improvements with big data models at Postrges and Oracle
  • Comboboxes have been extended with a new Master Data Edit Screen, so that the selectable values of the combobox can be edited immediately
  • Installer provided with trusted Windows Certificate

And last but not least, more than 150 bugs were fixed.

The download area already contains links to the latest version of VisionX.

Please report any problems as usual and have fun turning your vision into reality!

Some customer applications

Sometimes it's better to show real-world applications than writing about features and possibilities.

VisionX is an awesome platform and in this blog posting I want to show you some of our customer applications - as good as possible!

The first one is SNOWsat Maintain. Our customer is Pistenbully. There are some official details available on our customers website. A short YouTube video, in German, as well.

The prototype of an S5 audit administration tool was created by Dr. Werner Smekal. It's not production ready, but the screenshot looks really clear.

A really cool scientific project management software was created by TU Darmstadt. Really impressive.

News collection

It's some time ago that I wrote here. The year was so unexpected and we had so many challenges. I don't mean Covid-19, I want to write about our hot stuff from our dev team.

Best news first: Next VisionX release will be available before Christmas. It's outstanding and the best version since our first release.

But some advertising first :)

We had a talk about Low-Code and VisionX on December 2nd at Berlin Low-Code Solution Week 2020. Our talk is in German, but very interesting and fresh. Watch the video.

Another thing we want to introduce, is our VisionX academy site. It contains a lot of new explainer videos. Simply check our explainer videos. Most are not longer than 2 minutes.

And now the big news!

Our new VisionX release has a brand new Connectivity AddOn and also a brand new Query Editor AddOn. The Connectivity AddOn enables you to use any REST service in your application. We tried to keep the Service integration as simple as possible and support about 20 Service providers with about 50 services - out of the box. Some services providers are SAP, Salesforce, Trello, Slack, Jira, OData, ...

Our brand new Query Editor is end-user friendly and super easy to use:

Query Editor

Query Editor

Simply define your own queries and use them in any screen.

Another key-changer is our brand new mobile client. It's a complete rewrite of our old clients. It's based on Flutter and it's fully OpenSource. The repo is available on Github. A demo application is also available on Github.

The client is more powerful than the old client and supports all Layout features of VisionX. The old didn't support any layout customization. And the key-changer here is that the live preview runs in any web browser. You don't need a mobile device to test the mobile preview!

Are you curious yet?

More is coming...

What exactly? VisionX cloud infrastructure and automatic cloud deployment!

Es fluttert gewaltig - Artikel

Es gibt seit kurzem einen neuen Artikel über unsere brandneue Flutter App in der deutschen Presse. Hier das Intro:

Wer eine App für mobile Geräte entwickeln möchte, steht zumindest vor einer wichtigen Frage: Mit welcher Technologie soll die App realisiert werden? Da es aktuell verschiedenste Möglichkeiten gibt, ist die Antwort nicht sofort klar. Mit diesem Problem war das Framework-Team von SIB Visions ebenfalls konfrontiert, als es darum ging, einen Client für das Open Source Application Framework JVx zu entwickeln. Wie
vor allem was umgesetzt wurde, wird ...

Der vollständige Artikel ist hier zu finden. Prädikat lesenswert :)

VisionX with Docker support

The next VisionX release will support Docker. If you are not familiar with Docker, it's worth a try. It offers super fast deployment and app delivery without additional hardware or software installation. If you're interested in Docker simply use Google.

The whole Docker technology is a big plus for application developers and also for our low-code platform VisionX. We will support Docker deployment with our next release.

Every application, created with VisionX, requires a Java application server like Tomcat and a relational database like Postgresql in order to run. If you don't own such runtime environment, it might be tricky to roll out your application! Sure, there are very cheap hosting provider which offers root server and application hosting, but this requires lots of IT skills. With docker, deployment is getting easier for you.

With next VisionX, it will be possible to create a pre-defined docker container in seconds. Use this container to create your own docker image and use Docker to run your application.

We'll show you some impressions how this will work:

Docker support

And it will also be possible to use existing Docker Hosting Provider to run your application.
We tried it out with sloppy.io:

sloppy.io

Our docker container uses our own Tomcat definition, which can be found here. Feel free to use our tomcat image in your environment. It solves some common configuration problems like custom port definition, username, password.

VisionX update release 5.4.3900 is available

VisionX 5.4.3900 is available!

It's a small bugfix release with following improvements:

  • Fixed using server storage in combobox

    It wasn't possible to use a server storage in the data wizard.

  • FilterEditor API improved

    The FilterEditor API change was needed to support new features of Profiles and Filter AddOn. It's now possible to better group And/Or and to disable "expert mode".

The download area already contains links to latest VisionX binaries.

Please report any problems as usual and have fun with VisionX.

Adding new paths for native libraries at runtime in Java

If you want to add some native libraries at runtime, it was tricky with Java 8+:

This was a valid solution:

final Field fldUsrPaths = ClassLoader.class.getDeclaredField("usr_paths");
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
final String[] saNewPaths = Arrays.copyOf(saPath, saPath.length + 1);
saNewPaths[saNewPaths.length - 1] = pPath;
fldUsrPaths.set(null, saNewPaths);

Since Java 10+ it's not possible anymore, because of: JDK-8210522
Some details from Stackoverflow

If someone still needs a solution for Java 10+, here it is:

Lookup cl = MethodHandles.privateLookupIn(ClassLoader.class, MethodHandles.lookup());
VarHandle usr_paths = cl.findStaticVarHandle(ClassLoader.class, "usr_paths", String[].class);
String[] path = (String[])usr_paths.get();

...

usr_paths.set(new String[] {"A", "B"});

This code won't work if you are using Java 8. If you want support for e.g. Java < 10, simply use reflection :)
Sounds simple, but it is not simple.....

Here's a working solution: toPDF project (search for addLibraryPath(String pPath)).

The code in detail:

Class<?> clsMHandles = Class.forName("java.lang.invoke.MethodHandles");
       
Method mStaticLookup = clsMHandles.getMethod("lookup");
Object oStaticLookup = mStaticLookup.invoke(null);

Method mLookup = clsMHandles.getMethod("privateLookupIn", Class.class, Class.forName("java.lang.invoke.MethodHandles$Lookup"));
Object oLookup = mLookup.invoke(null, ClassLoader.class, oStaticLookup);

Method mFindStatic = oLookup.getClass().getMethod("findStaticVarHandle", Class.class, String.class, Class.class);

Object oVarHandle = mFindStatic.invoke(oLookup, ClassLoader.class, "usr_paths", String[].class);

//MethodHandle mh = MethodHandles.lookup().findVirtual(VarHandle.class, "get", MethodType.methodType(Object.class));
//mh.invoke(oVarHandle);

Method mFindVirtual = oStaticLookup.getClass().getMethod("findVirtual", Class.class, String.class, Class.forName("java.lang.invoke.MethodType"));

Class<?> clsMethodType = Class.forName("java.lang.invoke.MethodType");
Method mMethodType = clsMethodType.getMethod("methodType", Class.class);

Object oMethodHandleGet = mFindVirtual.invoke(oStaticLookup, Class.forName("java.lang.invoke.VarHandle"), "get", mMethodType.invoke(null, Object.class));

Method mMethodHandleGet = oMethodHandleGet.getClass().getMethod("invokeWithArguments", Object[].class);

String[] saPath = (String[])mMethodHandleGet.invoke(oMethodHandleGet, new Object[] {new Object[] {oVarHandle}});

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

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

//MethodHandle mh = MethodHandles.lookup().findVirtual(VarHandle.class, "set", MethodType.methodType(Void.class, Object[].class));
//mh.invoke(oVarHandle, new String[] {"GEHT"});

mMethodType = clsMethodType.getMethod("methodType", Class.class, Class.class);

Object oMethodHandleSet = mFindVirtual.invoke(oStaticLookup, Class.forName("java.lang.invoke.VarHandle"), "set", mMethodType.invoke(null, Void.class, Object[].class));

Method mMethodHandleSet = oMethodHandleSet.getClass().getMethod("invokeWithArguments", Object[].class);

mMethodHandleSet.invoke(oMethodHandleSet, new Object[] {new Object[] {oVarHandle, saNewPaths}});

Not simple!!!

Summarized: It's not easy but it's still possible. So.... why are things getting more and more complex?