Hi there AppWorks fans,
Welcome to a new installment of AppWorks tips.
Yes…the new GA AppWorks platform version 20.4 (also known as version 20 EP4) is available. And as you (probably) already know this is available since Q4 2020 and in this post we’ll have an update on the new features that are released in this version!
Let get right into it…
Normally I start this type of posts with an installation of the platform and I give you an update on what is changed related to what we normally follow from the main installation menu. This time I updated the installation menu posts with this latest and greatest release as it was dependent on the older 16.6 release. We want to depend on the latest release without switching between posts during an installation! It’s also easier to maintain and provided that steady structure we need during the installation of the platform. So, from now on you can always depend on a latest release installation manual in the main menu!
🆕 Update on the available changes in 20.4 🆕
With a new version of the platform we also get a lot of new functionality. This will give you a proper overview of the ‘new stuff’.
Let’s just jump through the list of new features in the release notes and see what’s up in this release.
Swagger ReST API
Yes…finally…ReST endpoints for our entity modeling! At the moment we have indeed the ‘Web service’ BB that enables the CRUD operations on an entity instance, but these expose the operations over a SOAP HTTP protocol and this brand new feature exposes the operations over a ReST HTTP protocol which makes it much easier to communicate with AppWorks via all the fancy frameworks we know in these days like ‘Spring’, ‘AngularJS’, ‘NodeJS’, ‘React’, ‘jQuery’, ‘VueJS’ or ‘Aurelia’.
Limitation note: Properties, relationships, and actions from building blocks are not (yet!) exposed through the API.
But my dear ‘AppWorks guy’…Don’t we have a ReST layout available already through the deployment of ‘BPMService.war’ that is delivered from our installation package…Aha…are we getting smart here?
That’s a valid question and this is the answer I got from OpenText: The Entity ReST API gives an interface to the entity data and the building blocks. These will always be in the ‘entity context’. Like handling a lifecycle, rules, or workflow in the entity context. The ‘old’ ReST API (that BPMService.war) does not have that ‘entity context’. These ‘old’ ReST services are interfaces on top of the task and workflow SOAP services, which are not specific to the entity world.
Other nice things about this new ReST API:
- They are generated on the fly during publication of the project
- The link to this layer is exposed via the administration site
- It’s fully documented with ‘SwaggerIO’. And if you’re into the “Swag” then you probably also know that we are enriched with a highly interactive set of documentation and that is what we will try out now…
Create a nicely generated ‘todo’ entity into our ‘entities’ folder of the project.
Publish it to runtime and create some instances of this entity.
Did you notice that new header…You can’t get around it!…CE?…Yes, it’s the Cloud Edition! Ok, but is there a ‘normal’ edition too? Not that I’m aware of. I think it’s just a nice way to present that AppWorks is cloud ready!
Now for the “Swagger” part…Open the
app/admin, select your application and open the ‘ReST API’
A new tab will be opened with an URL like this (in my case!): http://192.168.56.107:8080/home/appworks_tips/app/entityservice/AppWorksTipsproj_gen
What I also noticed is that also the other 2 ‘default’ solutions for the ‘Identity package’ and ‘Task management’ have a ReST API available through these 2 URL’s:
O-boy-o-boy…Let’s open that ‘todo’ section and view ‘beware’ the power of the ‘Swagger’
Let’s do a simple ‘GET’ and ‘read’ an entity we’ve just created in runtime! Click on that ‘GET’ thing and you will see a ‘Try it out’ button…
You can fill-in an ID (not the ‘ItemID’!) of an instanced ‘todo’ entity. How do you know what ID to use? You can show the ID column in the list BB in runtime of you can open and instanced ‘todo’ entity in runtime and check the URL where the value after the dot is the ID: home/appworks_tips/app/start/web/item/080027069dbea1eb847aab72c34b1abd.1
Hit that ‘Execute’ button to see the result:
Touch down…How nice!
Time for you to try out the other exposed API operations…On my backlog is an item to use a nice framework to create my own UI which consumes this ReST API…Looking forward to that one!
Multi ‘Create’ UI
Now we get to a nice option as we were always limited to the ‘Create’ form or a ‘Layout’ with the option ‘To create new items’ to create new instances of an entity. This time we get a 2.0 option that let the end-user choose what form/layout to start with for creating a new instance of an entity!
Oh yeah…Tell me how!?
Let’s say we have 2 forms; A ‘Simple’ form and an ‘Advanced’ form. For the demonstration we also create 2 separate layouts with the name ‘CreateSimple’ and ‘CreateAdvanced’ (with in them off-course a form panel with the corresponding form selected…duh!). There is no need to mark the option ‘To create new items’ as we have a new option in town!
Of course you can still use the ‘Default’ form for viewing and the ‘Create’ form for creation!
Now go to the ‘DefaultList’ BB and behold the bright shining option ‘Allow users to create items’ (from the ‘Advanced configuration’ panel) which exposes a nice config table where we can select our ‘Form’ and/or ‘Layout’ as create option to our end-users…Ohhhh mama!!
Quickly do a publish and see what will happen in runtime…
That is an extension of the create button…Nice!!
Open as new tab on a result list item
Maybe you already noticed the other option in that same ‘DefaultList’ BB? Almost hidden in the bottom of the screen!
The disadvantage is that you move away from the application as you create a new tab on a ‘view’ action for an entity instance. On the other hand it’s also a common way of browsing through the internet (where you
<Ctrl> + <MouseClick> to open a link in a new tab). With the browser short key
<Ctrl> + <w> you quickly close that tab and you’re back where you left…I think it’s a nice option to be able to config.
Ok, let’s just create a new document in the project folder ‘layouts’ and see what will come up!
And there you have it:
3 nice options:
‘Regular’ is a normal ‘Homepage’
‘Reusable’ is the formal ‘Layout’ (that is indeed reusable!)
‘Tabbed’ is our new layout type
Hit that ‘Configure’ button for some nice tab configuration…
Just create 2 new tabs with those 2 basic homepages. Or be a bit more creative and create some ‘Reusable’ layouts that can be selected too!
After a publish you will get what is promised:
Customize header bar buttons (max. 4)
Back to our ‘Homepage’ layout we’ve just created! Maybe you saw it already…Scroll a bit lower (below the ‘Header image’ section) and check out that new section ‘Header actions’
It will let you add 4 custom actions in the top left header in runtime! Why only 4? Well, it’s the maximum space available for that location…according to OpenText support.
Ok…Add those 4 actions with the ‘Plus-sign’ and see what happens:
Publish it to runtime and you will start see things like this:
That’s indeed a nice feature that will probably be used a lot!
Scrollable layout panel
Back to the layout BB (and you may have noticed it already) and you see that a new type of layout is introduced when you create a new one on your entity:
After you hit that ‘Add’ button you will get the good old layout drag & drop panels screen, but this time it ‘feels’ a bit different…You will start to see it when you add new panels to it…
Let’s add this ‘Scrollable’ layout to one of the ‘Create’ options available in that new ‘Lists’ option and see the result in runtime…You get the trick…right?
It will show you a scrollable layout:
Hmmm…interesting option…We’ll keep that one in mind when we need a larger viewport on our metadata!
This scrollable layout is also available from the ‘Reusable’ layout type that you can select on a new ‘Homepage layout’ document
Dynamic list filtering with expressions (on a ‘date’ property)
Ok…continue the grind…
For this feature we are required to have a date property…Let’s add one ‘todo_start_date’ of just type ‘Date’. Add it to your forms and to your list so you can play with it…
Jump into your ‘DefaultList’ list BB and open the ‘Filter’ tab where you can do fancy expression like this example:
For you to copy:
But there are even more possibilities like these examples:
$(date(2020, 10, 21))
$(today + 1 end of months)
Have a search on
Advanced functionsin the ‘low-code guide’ and enter the open world of expressions!
I also thought to be smart and do this ‘filtering’ trick in runtime, but that’s not working! 😜
Interesting Documentum connector improvements
Next is more an interesting option for people that have a connection with Documentum and because I’m also a Documentum proponent I will share the new features on the Documentum connector with you in this post:
‘Mandatory properties’ make it possible to…yes, off-course! They make it possible to make properties mandatory in the AppWorks UI. For a little background…The Documentum (storage) connector makes it possible to directly use properties of a Documentum object in the AppWorks platform. The configuration for this is done in the ‘admin’ portal of the platform. I don’t have a screenshot to share more details (as I don’t have Documentum connected now), but if the release notes tell me that properties can be marked as mandatory they will for sure be mandatory. You will see it back through the UI in AppWorks with that red asterisk (*) for mandatory fields during ‘Upload’, ‘Check-in’ and ‘Property’ page for this type of content.
When you upload content in AppWorks and you have Documentum connected as storage you will can select the type of document that needs to be saved in document (for the insiders: that’s for example a type ‘dm_document’ or any another (sub)type). In the ‘admin’ portal of AppWorks you could only select 1 Documentum type that was related to the entity content. Now you can ‘add multiple Documentum types and choose which one is selected by default’ in runtime during the upload.
When content is saved in Documentum you can (automatically) request for a secondary rendition. This is another format of the same content type. For example a .docx Word file gets a rendition in PDF format which is a more broadly standard for viewing content. The Documentum connector has now ‘rendition support’ and in the ‘admin’ portal of AppWorks you can select which rendition must be used with AppWorks to view the content.
Some other interesting facts on content:
- Provide a meaningful name for the content template that gets uploaded. Default is ‘Default Template’.
- Group document mime-types in the content panel. So users can filter easy on audio, video, images, and office type of documents.
- The ‘File’ building block can be configured to allow/block the upload of files when there is an error on the form (from a rule or mandatory fields)
Limit concurrent user sessions
Interesting topic! But I couldn’t find anything about it in the documentation…Lucky for you that I have some inside contacts that gave me a clue into this direction:
Let’s edit this file:
sudo vi /opt/opentext/AppWorksPlatform/defaultInst/config/wcp.properties
And add these three rows:
Save and quite with
:wq and we just restart (to be sure) our VM and see what happens when we connect multiple times (not a new browser, but a real new browser session!) with a simple ‘awtest’ account that is only applied to the ‘Entity runtime user’ role!?
This is the test I do to try it out:
- Open 1 Chrome tab, 1 Internet explorer tab and 1 Edge tab
- Login to the AppWorks with ‘awtest’ on Chrome
- Login to the AppWorks with ‘awtest’ on IE
- Login to the AppWorks with ‘awtest’ on Edge
- Now refresh the first ‘Chrome’ tab again and see some interesting information!
I was expected to have an error during the third login on the screen itself, but it looks like the first session in signed out and the last 2 are active. The error is maybe not the friendliest in XML, but you will get redirected back to the login page when you open a new browser.
More, more, and even more…
In the Release Notes for this 20.4 release. Make sure you look in the ‘AppWorks Platform 20.4 Release Notes.pdf’ as the ‘AppWorks_20.4_Release_Notes.pdf’ refers to the OpenText support site!
And that’s it…Playground 20.4 is open and ready to be used. I give it a ‘DONE’ on this update post with a great overview of the new features for this GA EP4 release. Happy low code with this new release and I see you in the next one!
Don’t forget to subscribe to get updates on the activities happening on this site. Have you noticed the quiz where you find out if you are also “The AppWorks guy”?