Hi there AppWorks fans,
Welcome to a new installment of AppWorks tips.
Who doesn’t like new features!? It’s like presents for your birthday. With AWP 24.2 (GA for Q2 2024), we’re ready to have a first look. Grab your snacks and party-poppers and have yourself an update on the latest features of OpenText AppWorks (spoiler alert; It’s beyond the AI!).
It’s about time to touch something new; Not that I’m hitting <F5>
all day, but I’m just ready for it…I don’t know what it is this time; I just have a feeling something great is entering the atmosphere of AppWorks. Maybe that’s also why delivery is a bit out of time (I write this on a Monday 4th of March) just as a preparation of the new release, waiting for what’s coming…
Let get right into it…
I’ll do fresh installation this time to have an opportunity to update my installation page. So, a fresh database, with fresh CARS/OpenLDAP, and fresh OTDS instance…Just because we can.
In this post we’ll review the OpenText AppWorks Platform CE 24.2 Release Notes. Double-check the PDF yourself too; We’ll dive through the latest futures delivered in this release.
The quick tag for this release would be #AppWorks24.2.
🆕 Update on the available changes in 24.2 🆕
I had some great sessions and a demo before this release came GA, let’s see if things are delivered as shiny as they passed the demo; You know what it is with demo’s…They always look great, fancy, and easy (otherwise the product won’t sell…I get it!), but let’s see what behind all the sales talk!
Before we start, I’ll first dive into the ‘/system’ space to first deploy some CAP packages (via the “package deployer” artifact…read here) which we need to successfully complete this post:
OpenText AI Client
OpenText AI Connector
OpenText AI Runtime
OpenText Aviator
(this one contains the new “Developer eXperience”!)
See the previous release for more details on these packages.
New application developer experience – Preview
Time to dive into the new “Developer eXperience” and when you deployed the OpenText Aviator
CAP package into your organization, you can access it with an extra /dev
behind the regular URL: http://192.168.56.107:8080/home/appworks_tips/dev
Niceeeee!! 😎 It’s great to see that developers get something new to play with (and not always the end-users!). It feels like getting presents for your birthday as well…So, OpenText! That’s a great accomplishment.
What do we see on screen?…First a Welcome-tile to greet you nicely as low-code developer. Next the Aviator-tile which we discuss in the next section. The Quick-help-tile that brings you to specific locations of the online documentation.
Interesting is the access to the online documentation. When I copy the URL to a new Incognito tab, I get an access error! Why must everything be accessible behind a wall of credentials?…I also don’t know the technique behind it and why it is accessible with a local AppWorks ticket; I guess it’s something in the header they check server side? Not for now.
The final words I want to spend on it: We as low-code developers are at the front at your customers to spread the word for your software, so why not make it all much easier to access it; “It” is in this case the documentation, software, and licenses…Have a comment if you agree with me or if you can live with it? Maybe it’s just the simple me.
Let’s continue…The Quick-links-tile brings you to:
- Application client (the runtime):
http://192.168.56.107:8080/home/appworks_tips/app/start/web
- Application administration:
http://192.168.56.107:8080/home/appworks_tips/app/admin
- System administration (the ‘/system’ or “Shared” space):
http://192.168.56.101:8080/home/system
Here I miss a link to the “Web Services Explorer” via
http://192.168.56.102:8080/home/appworks_tips/services
At the top right, you see three icons:
- The “Aviator” icon…It’s for the next section!
- The quick links (again!)
- The profile icon where you can sign out and switch from organization
…
Let’s open the already available workspace ws_aw_tips
(created by myself via the “Classic” UI):
Ohw mama…that smells fresh and shiny! 😍 Let me create a new entity:
After the creation we’ll get the regular property creation screen with BB generation option and pushing further will result in:
From the breadcrumb menu, you can move higher in the tree where you can also add additional workspaces and new projects:
After playing around a bit, creating several types of documents, and getting a grip of the new way of working I get enthusiastic. Basic stuff works with points to improve (see below), but it’s also a “Preview” release! So, excellent work…I know how hard it can be to create a new UI that people (in this case your low-code developer) can intuitively use and that need to make multiple types of users happy as well, but mission accomplished for now! 👌
You can always ask me for any UI input as well…During the Corona pandemic, I also gave feedback on other products during the innovation labs at the virtual OT World events.
…
List of feedback to improve in the next release (if I haven’t overseen them!):
- Manually add new links to the Quick-links-tile on the homepage
- The ability to create other types of documents; Like BPMs for example
- Start other developer specific artifacts; Like the PIM, CIM, and ‘Web Service Interface Explorer’
- A quicker way the switch between documents (like the bottom tabs in the “Classic” UI)
- According to the release notes PDF there should be a bookmarking feature for your artifacts (like an entity), but I couldn’t find it!?
- All folders collapse by default when returning to your project overview…Not very handy!
- In the entity overview screen (after creation), there is no option to set the abstraction and application re-usability option (yet!).
- After clicking around, I found this option in the properties of the entity itself (at project level!)
- Creating a new role still shows the good old xForm UI (
role.caf
) 😉 - During the creation of a new document (and you want to change the folder location), you can’t add new folder to the structure.
- The quick-links icon in the top right should have a link to the “Classic” UI.
AppWorks Aviator for developing applications – Preview
Now the best part of this release! That first click on the “Aviator” icon:
I’ll accept the first details and move to the next step to create a new application using AI prompting:
1 | I would like to build a simple todo application that structures my |
After hitting <Enter>
, the AI starts to do its work:
With a failure as a result!
Understandable, as where will it connect to from an AI/LLM standpoint? For this will grab back to the post of the previous 24.1
release where we connected ChatGPT to the system, but for this post we’ll connect “Google Bard” (or better “Gemini”)!
QUESTION to OpenText: Can we also connect a Local AI in the future?
Gemini in quick steps:
- Go to https://gemini.google.com/app
- Login with a current account (or create a new one)
- Follow the procedure to get an API key: https://ai.google.dev/tutorials/setup
- You get a forward to https://aistudio.google.com/app/apikey
- If you’re from Europe (like me) this is NOT working…Make sure to use a VPN connection to our American friends (like with the free Proton VPN)! 🤠
- In “Google AI Studio” you can create yourself a new API key with corresponding project
When the API-key is ready, you can first try it out from within your AppWorks VM:
1 | export GOOGLE_API_KEY={your_key} |
In my case, I couldn’t access the host
generativelanguage.googleapis.com
for some strange reason which I can access from my local laptop; To solve this, I placed an entry in the/etc/hosts
file like this:142.250.64.74 generativelanguage.googleapis.com
. I get the IP with the ping-command from my local laptop.
If the CURL command is receiving a response, it’s time to configure the AI in AppWorks (the highlighted artifact is available after the installation of the CAP files in the intro of this post!):
Now open the ‘Web Service Interface explorer’ artifact to do a quick test request:
1 | <SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/"> |
GREAT…Smells like victory to me! Let’s get back into our “Developer eXperience” to hit the RETRY button:
Ohwwwww YEAHHHH…There we go! NEXT…
You can view (and manipulate) the generated properties as well, but I’m just toooo curious on the default outcome.
Just say “Thank you!”…NEXT…
Hit the <Enter>
-key
WHAT…whatever; we’re in preview? Let’s try again…
Nice…Simply add a “Contents” building block (I guess)…Next…
That will be the “Dynamic Workflow” BB and the “Activity flow” (or a ‘Dynamic’ and ‘Static’ flow from the same BB!?)
No way…Next!
Too bad…I asked too much! 😛 (that’s because we’re in “Preview”-mode…right?)
…
I start over from scratch and skipped the workflow parts at the end. The new result has slightly different entities and relations, but this time we have a basic end-result:
It’s also directly published in runtime (but make sure to connect yourself to the generated roles for your AI-generated-app first):
After the role assignments, you can use your basic app in runtime!
I didn’t make an image as you should experience this one yourself. Spoiler alert; It’s a real basic application like you would normally generate entities from scratch…See also below.
My first thought…NICE, but not world-changing (for now!). I don’t think you want to deploy this app into production for consumption to your end-user, but it’s (for now!) a great demo to play with, which also sells the product a bit easier…In the end that’s as import as developing a solution itself; Let’s keep that in mind.
…
Time to look in the project and see the generated result:
Hmmm…That doesn’t smell like “eXpertise” to me! 😒 This drives me back to the cow-boy land that I like to always avoid at my customers!
BUT…Let’s not end negative here! It’s a great AI start of the week as a “Preview” feature to try things out. So, let’s see if this input will improve over time in a next release and see where we are in 5 years! Should we worry our jobs already? Well, not at all! Someone still needs to feed the AI with correct data and correct prompt which is an expertise on itself. We’ll also get robots, but somebody still needs to create the robots (at lease the thinking process). So, invest your time in AI as it will change your job as a consultant for the future…Just embrace it all and you’ll be fine!
Finally, you can also inject the AI Aviator via Excel files input…I haven’t tried it; The low-code documentation has a full chapter on how the Excel should look like in terms of rows, columns, and cells. AND there is always an option to use an out-of-the-box template as well (I’ll put this on my backlog as second try further in the era of AI):
Sorting results list on multiple columns
Time to leave the “Developer eXperience” and “Aviator AI” goodbye for now…Let’s dive into the classic UI with our regular demo project where we start with a simple ‘Case’ entity and relevant properties:
Publish this entity and move into runtime. At the result list, your end-users now have the option to set the sort order for multiple columns:
It took some time before I linked the mentioned “Setting option” from the release notes PDF to this icon!
The database saves this information (as a personal setting) for your future sessions. After you applied the ordering and start clicking yourself in the columns to re-order, this setting will get an update as well (except for the “Then by” part…see the image again!)
Ability to mark a record as read or unread
A nice option to help your end-users to track if an entity instance is already “Read/Seen/Opened”. From a design standpoint, you need to add the ‘Tracking’ BB and enable the flag:
Once this is in place, you can enable this option also on the ‘List’ BB:
In runtime by default an item is unread until you turn it around with the action button (or opening the instance for viewing):
We could easily implement this ourselves with business rules logic to set a style and updating a “helper” property to track it, but I agree…This makes it much simpler for us (as low-code developers). Inbox items (your tasks) have this behavior enabled by default!
Configurable tab sequence order for form controls
Finally, A feature we’ve been waiting for a long time:
Does it work? Owh yeahhhh…It works! We can now make sure that a user can <Tab>
through the form in the order we as low-coders designed it.
What I do still miss is to directly focus on the first field on opening the form! When you have a form open and refresh the screen it focusses on nothing; That first
<Tab>
component sounds logic to me. You can click on the form first and tab to the first component, but clicking the first should select the first one already; I do understand the problem with multiple forms on one screen, but OpenText can solve this by adding a tab index on the layout panels! Have it a ReThink on this extension thought.
Change in the error message behavior
Let’s first mimic an error message via a “short-lived” type (because of direct feedback in the UI) of BPM:
Learned something here as well…I always add one activity, but that’s not even required! 😏
Add a ‘Rule’ BB of type action with input like this:
A publication into runtime lets you push the button to receive the input for this new error behavior:
I’m not using the runtime that much, but the error normally hides automatically…right? Like a regular notification message would respond.
What I do miss in the error message is my detail information (see the image above):
Strange!?…A point of improvement?
User display name in business audit
I just enabled the ‘History’ BB on my case entity and did a double-check in runtime:
This doesn’t seem to show my “Display name”!? Is it something I need to extra enable?
This is my OTDS user:
This is my ‘ReadUser’ service data (after an extra OTDS consolidation and cleaning schema information):
1 | <data> |
The related ‘ReadPerson’ looks fine as well (cleaned from redundant information):
1 | <data> |
This is my user in the ‘User Manager’ artifact:
This is how it looks in my runtime profile:
All green flags as I can see; Did I miss something? You tell me…And “Yes”, I created a new entity after checking the above! 🙄
Let’s continue our journey…
Developer enhancements
Git support was already GA since version ‘22.3’. With this release, we get support for Azure Git and hosted Git repositories. Also, the performance improves using Git as Source Control Management.
…
The second improvement is the support of SVG images (Scalable Vector Graphics). With this I also take the chance to try out if the popular WebP images are also working within AppWorks…Just because we can, but I can quickly tell you it’s not working as they are not a selectable option when choosing an image (on my Boolean type of property!):
I use my own Web Library Definition post for implementation with this is a result:
Works also fine on a form:
These are my images:
circle_red_svg
circle_blue_svg
circle_black_webpI got the SVG from svgrepo.com and transformed it to WebP with IrfanView
Great! SVG is even better (and scalable) looking at the file sizes; SVG is the smallest for my sample files. Do your own research and use the correct file types for your images that match your use-case.
Support application in Russian language
It’s not my native language, but let’s deploy the corresponding language pack Cordys BOP Language Pack_ru
. In runtime, nothing will change as this is only on de design-time part of the platform. It also feels a bit limited, but you can find glimpses after clicking around after applying the ?language=ru
URL parameter or changing the language settings in the preferences artifact:
I leave it with you to further explore it…
Data Deletion
During my exploration of the features above, I already noticed an extra node in the left lists panel in runtime:
You can’t use it directly! You first need to enable what the end-user can delete at project level. That’s a right-click on your project:
You’ll get a new screen where you can select the allowed entities for deletion (in bulk) via this “deletion framework”:
After a save and publication, the end-users can create a new deletion policy in runtime:
On the right-side, you can check the impact of your policy (don’t expand it, but click on it):
From the bottom you can schedule the data deletion definition:
We simply hit run for now with an extra confirmation if we’re sure on our action:
Back on the home screen of the runtime, you can now see the results under the section “Deleted and archived history”…The strange thing here is that (in my case), I find nothing…Although the impact analysis told me it has an impact on certain cases…Weird!?
I also tried with other setting that would equal is ‘case_name’ value, but this didn’t change anything. In the background, I can see a BPM instance starts triggering a webservice call with my definition ID as an input:
1 | <executeEntityArchive> |
When I assess the service manually, I see an extra parameter executionType
passing by. Could it have to do with this extra element? And what would be the value? Searching the documentation for “executeEntityArchive” is not helpful…I guess it’s time for remote debugging!
The conclusion:
Well, #RTFM first! Why? I come to the conclusion that when you apply the ‘History’ BB to your entity (which we did for a previous “User display name in business audit” feature) a retention period of 356 days is (by default) applied; And because my entities are brand-new, the retention is preventing the deletion. 😒 How to solve? That’s an administration task within ‘/app/admin’:
After this change, I finally start to see my results:
Notes:
- Don’t fall in the trap of picking the wrong archive for your debugging. You need to search your path within
./components/cws/lib/com.opentext.entity.archive.jar
and NOT within./components/archiveframework/archivingengine.jar
.- Check also the “Delete and Archive Application Data” section of the low-code configuration guide for more details!
- What about the ‘executionType’ value…Looks like for a “normal” run it can be left empty; for a scheduled run it will check the value
schedule
(that’s what I saw during my remote debug session in methodperformEntityArchive
within the classEntityArchiveListenerBean
; part of theentityCore.jar
at TomEE level). 🤓…You’re welcome!
Time to continue the feature list…
Dynamic workflow enhancements
The ‘Dynamic workflow’ building block for an entity improves with each release since the first introduction. For this release again improvements (probably based on customer input that heavily uses this functionality in runtime). This is the list of enhancements:
- The name of the dynamic workflow name can now have 150 characters.
- The workflow audit activities show the user’s display name.
- Filter the audit of activities to display entries with task actions that have comments.
- Create tasks without assignment of a user or role.
- For both release and unreleased tasks:
- The Task properties action is available
- Display task-due-in and task-date (properties and values).
- Display the role name.
- Task properties display the assigned role name and send to all users or one of the users.
- Display the role with send-to details.
To be honest, I’ve never used the ‘Dynamic workflow’ BB in any of my projects (yet!). There is a planning going on to start using it in one of my projects, so hopefully I start to see the value of this BB more.
This is a building block intended for the business analyst role in runtime to quickly build a simple flow. I get it…Really!, but I always wondered how the production environment looks like after a couple of years in usage with uncontrolled creation of unlimited flows. Have a comment; I really love to hear about the positive side and if this BB (performance-wise) is still as special from what I expected when introduced to the platform.
Case-insensitive support for user and role picker
Nice…I guess; I wasn’t aware this was an issue!? So, we can now do a case-insensitive search for the users and role picker in the task assignments of a lifecycle, an activity flow, and the dynamic workflow; You try that one out yourself! 😱
AI connector enhancements
We now have support for “Google AI Gemini Pro”! You saw me already using it at the new AI feature in the top of this post…Maybe that’s the reason it all works so smoothly…It’s the “Pro” that did the trick! 🤣
Support for the HTTP/2 protocol
We can now do a deployment of the AppWorks platform on an HTTP/2 enable TomEE application server. It requires an SSL enabled TomEE instance where HTTP/2 is supported over TLS (called “h2”); To make the picture complete: It’s also possible to have non-TLS via HTTP (called “h2c”), but browsers never supported this for a variety of reasons (have a Google on it yourself).
In quick steps:
- Put TomEE in SSL mode (over the HTTPS protocol in your browser)
- Update the
server.xml
of TomEE with the element<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
for the connector element on default port8443
- Restart TomEE
- Verify the configuration from a developer console in your browser; The network traffic will show “h2” in the network tab.
Terminologies explained in this context:
- SSL: Stands for Secure Sockets Layer; It’s a technology that makes secure connections possible. On the one side (like a server) data encryption happens and the other side (like a client browser) can decrypt it. Via certifications, it’s also possible to do client authentication to proof that you are who you say you are.
- TLS: Stands for Transport Layer Security; It’s the secure technology before the introduction of SSL.
- HTTP/1.1: HyperText Transfer Protocol; The first versions were invented in 1989 for the World Wide Web, upgraded to 1.1 in 1997 and moved in 2015 to HTTP/2.0 to support mobility and video content. HTTP/3.0 will be the future with more privacy and default security.
- HTTPS: Is the secure variant of HTTP/1.1 over SSL/TLS
Other sources:
License viewer enhancements
In the previous version we saw already the change in licensing. The installation itself doesn’t have the annoying licensing screen anymore…Good for us, but in return we need to license ourselves via OTDS (which requires you to run an OTDS instance for authentication). Platform users can’t login anymore (except the ‘sysadmin’ account to initialize the licensing part and create a first organization). It’s what it is; You can still request a demo (non-production) type of license at the OT support desk to continue your journey. This will be a .lic
file with information like this:
1 | [APPWORKS_PLATFORM] |
You can use this file in OTDS:
Once in place, you can allocate it to your partition (as well to specific users):
Notes:
- You can find more license information here and in the administration documentation of the platform; section “Managing licenses with SPS”.
- You don’t need the Cordys Management Console (CMC) tool anymore to update your licensing.
- A price 🏆 question: Who knows where “SPS” is standing for? Let me know in the comments below; I couldn’t find any clue in the documentation.
The ‘License Viewer’ artifact (in /system) lets you download all the details:
In case you wonder why my license information is empty…I get an error
Could not find a given identity for 'cn=SYSTEM,cn=organizational users,o=AppWorks Tips,cn=cordys,cn=defaultInst,o=awtips.com'
which is valid as this entry should look like this:'cn=SYSTEM,cn=organizational users,o=appworks_tips,cn=cordys,cn=defaultInst,o=awtips.com'
. Do you see the difference? Looks like somebody made a mistake by reading the organization description instead of the value!? I could try to add a new entry in LDAP via theldapmodify
tool learned here, but that’s just one step too far for this post at this moment!
JMX monitoring for Business workspace and Content building blocks
First a question…How many of you use the JMX monitoring of the platform? Comment me below in the comments. If you have no clue what even JMX is?…Read section “Enhanced Monitoring framework (JMX)” first on this post.
I can’t show you the Business Workspace enhancements for this feature (because of a missing OTCS instance), but I can show you the ‘Content’ BB part which is (in the end) a related entity on my ‘Case’ entity:
It’s a bit hard to see, but from top to bottom:
- The package where you find the solution.
- By default, under the “Application_Server”.
- “EntityRuntime” is our next movement.
- The “Tenant” is your running AppWorks node.
- Then your published/deployed solution
- In there our crafter ‘Case’ entity (as ‘List’ branch)
- Under there the related ‘Content’ entity (again as ‘List’ branch)
- Finally, the attributes that are the eyes of your JMX monitoring (where I uploaded 2 pieces of content already in runtime)
How hard can it be…right? 😉
That’s the last feature…Time to prepare for dinner from my side (I’ll finish the post the next day, so you can continue reading it once you read this online!)
Discontinued and deprecated features
No deprecated features! 😎 We do have a discontinued feature for version 24.2: “Support for Brava! 16 EP 7 Update 8”. Great, but we move to the new Intelligent Viewing component already.
There you have it…AppWorks 24.2; The playground is open and ready to build/upgrade your solution. A ‘DONE’ from my side on this update post with an interesting overview of the new GA features for this Q2 2024 release. Have a great weekend and I CU in the next post, next week. Cheers!
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”?