The future of Low code application development platforms

According to Gartner, by 2023, over 50% of medium and large enterprises will have adopted low code application development platforms (LCADP) as one of their application development strategies.

Currently the non-tech companies are becoming digitized at such a fascinating rate, thus a need to develop applications faster to improve on their inefficiencies and keep ahead of the competition. Alot of business have transitioned to the cloud, i.e ecommerce, restaurants, online reservations etc.

Out of curiosity… 🙂

How often do you use productivity apps such as spreadsheets to share data in your organization using emails?

How do you share the data on the spreadsheets to the rest of the team ensuring it’s security? what if one drops the ball and all the sensitive data is exposed?

How about collaboration? and the authorizations measures set to ensure the right audience can access the right data?

Well, if these and many other scenarios around data resonates with you, then you need to think of a low code application platform.

A Low code application development platform allows users to create customized enterprise grade applications rapidly using high level programing abstractions. Basically there is less code to no coding at all. The platform enables both professional and citizen developers to rapidly develop enterprise applications from using as simple tools such as spreadsheets.

Some of the major usecases of Low code application development include:

In Lines of Business

Low code application platforms allows you to rapidly create inter departmental apps. Business users with no coding skills can take advantage of low code platforms to innovate in their departments. The HR department can create applications using employee data, Sales & Marketing department can also create events or sales applications or integrate with other enterprise apps for efficiency. Also the finance department can create applications that consolidate reports and visualize them! there are so many application use cases and innovations around low code application development platforms.

Upgrading Legacy Applications

🙂

LCADP can enable you to build applications faster and migrate from your legacy software which may be limiting you in terms of functionality. With the agility that low code applications platforms comes with, you can be able to innovate faster and cut down costs in application development.

Extending the Enterprise applications

Low code application development platforms are best fit in extending Enterprise applications. Some of those functionalities or customizations not met by your enterprise application can be met by using LCADP. This platforms integrates very well to the existing Enterprise investments.

Things to consider while choosing a low code application development platform;

Security – how secure is the application built, the ability to support authentication and authorization even in a multi cloud environment.

Ease of Use – can citizen developers get started at much ease?

Integrations – can you be able to integrate with the standard REST/SOAP services or extend the enterprise applications?

Collaboration – How easy is it working as a team? can you track changes?

Oracle knows the value of low code application development and has invested in low code solutions to our customers.

Oracle Application Express (APEX) allows developers to build data centric web applications with superior functionality, performance and end user experience with minimum coding.

Oracle Visual builder enables you to build web, mobile and progressive web applications using a visual, browser based development environment.

Other cloud providers have also invested in low code application development platforms. A clear indication that the future of low code application platforms is massive.

In the era of cloud innovations, where there are a lot of changes in the market, companies need to be agile, innovate faster to be ahead of their competition. Low code platforms are a game changer due to the speed at which one can create an application, the limitless functionalities one can have and integrations capabilities they provide.

The future of Low code application development platforms is huge! Companies are choosing low code to cut down on application development cost, to reduce the time it takes in creating new applications and simply to innovate faster with less or no programming skills.

Do you wanna get started?

Check out Oracle Low code application platforms

References

Oracle Identity Column

An Identity column auto increments on input, introduced from Oracle 12C, it’s a useful for the surrogate primary key column.

Syntax:

GENERATED [ ALWAYS | BY DEFAULT [ ON NULL ] ] AS IDENTITY [ ( identity_options ) ]

create table FAQS
(id number(10) GENERATED ALWAYS AS IDENTITY START WITH 1, faq varchar (1000))
;

// add a primary key constraint

ALTER TABLE FAQS
ADD PRIMARY KEY (id);

Installing APEX 20.1 on DB System VM on OCI

This post will show you how to install Oracle APEX on Oracle DB System VM or previously known as DBCS.This an Oracle Database in Oracle Cloud Infrastructure.

Prerequisites

1. Login to your DB System compute instance, navigate to the apps folder:

This image has an empty alt attribute; its file name is image.png

2. Download the latest version on APEX from here

Trick:

 Click on the download, accept the agreement, pause the download then grab the download url. Use wget to download it in your compute instance as root user

This image has an empty alt attribute; its file name is image-2-1024x62.png

Unzip the file in a new directory, assign the owner to ‘oracle

[root@dbcs tmp]# unzip apex_20.1_en.zip?AuthParam=1552035503_zxxxx /u01/app/ -d /u01/app/
[root@dbcs apex]# cd /u01/app
[root@dbcs]# chown -R oracle:oinstall apex/
[root@dbcs# cd apex
[root@dbcs]# su oracle

Login to the Oracle Database 19c.

This image has an empty alt attribute; its file name is image-7.png

The next is to check if there are previous versions of APEX installed both on the CBD and PDB level.

This image has an empty alt attribute; its file name is image-8.png

If APEX exists, uninstall software;

SQL> apxremov.sql

Otherwise install APEX using;

SQL> @apexins.sql SYSAUX SYSAUX TEMP /i/

Once installed the next step is to change the password of APEX administrator. (Store it safely, you shall use it later)

SQL> @apxchpwd.sql

Username: ADMIN

Email: youremailaddress

Password: yourpassword

The next thing is to copy APEX images folder

SQL > @apxldimg.sql /u01/app

NB. Note i am copying from the path >> /u01/app, i have not entered the apex folder.

This image has an empty alt attribute; its file name is image-9.png

The next thing is to set the port 8080.

EXEC DBMS_XDB.SETHTTPPORT(8080);

Then unlock the anonymous & XBD accounts. (at the CBD Level)

alter session set container = CDB$ROOT;
ALTER USER ANONYMOUS ACCOUNT UNLOCK;
ALTER USER XDB ACCOUNT UNLOCK;

Tip: Make sure port 8080 is open on the security Lists of your VCN.

Now login to your APEX application;

http://<YourIPAddress>:8080/apex
This image has an empty alt attribute; its file name is image-10-1024x511.png

What Next?

  • Installing APEX using Terraform?

References:

Oracle APEX installation

https://apex.oracle.com/en/learn/documentation/

Sending emails using an APEX application- part 1

This article summaries the steps taken to configure APEX application to send emails.

We shall use the email delivery service from Oracle Cloud.

New to Oracle cloud? Get a free trial version of Oracle cloud here.

The assumption is that you have already configured your IAM policies correctly ie. the user we use is in a group (ie. MailGroup ) which has a policy passed to manage approved mail senders.

Allow group MailGroup to manage approved-senders in compartment CompartmentA /tenancy etc.

Learn more about Oracle Email delivery policies here.

Let’s now set up the user SMTP credentials.

To generate SMTP credentials of the user to use in our email delivery, navigate to the user’s profile on Oracle Cloud -> Identity -> Users -> select your user.

On the left side click SMTP Credentials -> Click on generate credentials.

Save the username and password generated. You shall use them later on configuring your APEX application.

Add the user on the Email approved Senders’ List of Oracle Email Delivery.

Navigate to your cloud console to Email Delivery -> Email Approved senders- > create approved sender. (add the user)

Next click on the Email configuration to get the SMTP connection endpoint. (Save it for later use)

ie. smtp.email.eu-frankfurt-1.oci.oraclecloud.com

Set Email Parameters on the Database

Connect to your Database as ADMIN and execute the PL/SQL script below. If you are using Autonomous database, you can connect to your DB using SQL Developer Web.

BEGIN
APEX_INSTANCE_ADMIN.SET_PARAMETER('SMTP_HOST_ADDRESS', 'Your SMTP connection endpoint ie. smtp.email.eu-frankfurt-1.oci.oraclecloud.com');
APEX_INSTANCE_ADMIN.SET_PARAMETER('SMTP_USERNAME', 'smtp username generated');
APEX_INSTANCE_ADMIN.SET_PARAMETER('SMTP_PASSWORD', 'smtp password generated');
COMMIT;
END;
/

Send Email from APEX

Now login to APEX and navigate to SQL workshop to run this command.

BEGIN
apex_mail.send(p_from => 'your approved email sender',
p_to => 'ncve3@gmail.com',
p_subj => 'Email from Autonomous',
p_body => 'It worked!!');
apex_mail.push_queue();
END;
/

Once you run that PL/SQL an email is sent to your client!

Monitoring

You can monitor the mail logs using these commands or using your APEX admin dashboard (Monitor activity\ Mail Log).

Select * from apex_mail_log;

SELECT * FROM APEX_MAIL_QUEUE;

Next

We shall use the now configured email functionality to send emails from APEX application process.

References

Sending Emails from APEX by Sinan

Sending Emails from your APEX by Chaitanya Koratamaddi

APEX tip 001: Masking & merging columns on Interactive/classic reports

Column Masking

When you want to mask sensitive data on an APEX interactive or classic report; use this on the SQL query fetching the data on your tables or views.

rpad(substr(columnName,1,5), length(columnName),'*') columnName 

SQL query example:

select CONTACT_FIRST_NAME, CONTACT_LAST_NAME, rpad(substr(CONTACT_EMAIL_ADDRESS,1,5), length(CONTACT_EMAIL_ADDRESS),'') EMAIL,rpad(substr(CONTACT_BUSINESS_PHONE,1,6), length(CONTACT_BUSINESS_PHONE),'') PhoneNo , CONTACT_CITY, CONTACT_COUNTRY from contacts_view

Results:

Merging two columns:

The above report has two columns for Name -> “Contact First Name” and “Contact Last Name”

Merge the columns using SQL query on Oracle Database; ie.

select CONTACT_FIRST_NAME || ' '|| CONTACT_LAST_NAME as NAME, rpad(substr(CONTACT_EMAIL_ADDRESS,1,5), length(CONTACT_EMAIL_ADDRESS),'') EMAIL,rpad(substr(CONTACT_BUSINESS_PHONE,1,6), length(CONTACT_BUSINESS_PHONE),'') PhoneNo , CONTACT_CITY, CONTACT_COUNTRY from contacts_view
 

Results:

Try apex using the Always Free Tier Oracle Cloud!

Cheers!

Extending APEX application with Oracle Digital Assistant

We can extend APEX with a conversational UI which has Natural Language Processing (NLP) capabilities. To achieve this, i have used the Oracle Digital Assistant.

Prerequisites:

In one of my previous posts i showed you how to connect the Digital Assistant to Oracle ATP database using Node libraries and instant client.

In this post, we shall take advantage of Oracle REST Data services (ORDS), where we shall expose the data from the database using REST APIs.

We shall use APEX to build a low code application on Autonomous Oracle database.

We then create a Oracle Digital Assistant skill which shall pick the user intent and pass it as parameters to a Node.js function within a custom component that queries the Oracle database.

USECASE

This is a hypothetical use case. Just to unlock new possibilities with APEX and Oracle Digital Assistant at ACME Recruitment.

ACME Recruitment uses an APEX application to manage all open opportunities and applications in different regions within the different LOBs.

Below is a minimum viable product (MVP) of the APEX application. You can access the live demo here:

Live demo

Username: Recruiter

Password: Innovate@2019!

You can also import the APEX app on your environment.
Download the APEX import file here.

ACME Dashboard
ACME Job Listings

We have extended this application using Oracle Digital Assistant(ODA). This will enhance the user experience of the users searching for open opportunities. Users can search for roles using their normal natural language and ODA will handle the rest using Natural Language Processing (NLP).

ACME Recruitment can take advantage of ODA and extend their APEX application with any of the conversational channels of their choice ie. Web, Facebook, Google Voice, Alexa etc.

I have used a web channel in this demo.

Download the pre-built skill here, feel free to enhance it – it has the custom component embedded in it!

Searching for a job using Oracle Digital Assistant

The High level Architecture:

APEX+ODA Architecture

Oracle Autonomous Database REST API (ORDS)

You will have to expose the data in your APEX application using ORDS to be consumed by the Digital Assistant custom component via REST APIs.

I have done an article on how to create ATP RESTful services. Check it out!

Oracle Digital Assistant custom component

Here your knowledge of creating ODA Custom components will be highly useful!

On the skill, create an ODA “composite bag” entity which shall resolve the user intent of location and job type.

In the yaml flow create a System.ResolveEntities component to pick the user intention. You shall then pass the two variables; jobtype and location to a custom component.

jobsAvailable:     #Ideally should resolve the customer intent 
     component: "System.ResolveEntities"
     properties:
       nlpResultVariable: "iResult"   
       variable: "vacancy"
       maxPrompts: 2
       cancelPolicy: "immediate" 
     transitions:
       actions:
         cancel: "maxError"
         next: "listVacancies"
listVacancies:
     component: "vacancies"
     properties: 
       jobType: "${vacancy.value.BagItemjobType}"
       jobLoc: "${vacancy.value.BagItemlocation}" 
     transitions:
       actions:
        jobAvailablelist: "listVacancies2"
        NotAvailable: "resetVariables"
 

On the custom component, you pick the two variables jobtype and location and run a Node request to the ATP database REST API you had created.

There would be a better way to write the code below, this is just an example 🙂

'use strict';
var request = require('request');
//function to determine jobs in a given category and country
function query(jobt,jobl, callback)
{
  request({ "uri": "https://..../ords/labanish/recruitement/vacancies/"+jobt+"/"+jobl,
      "method": "GET"
    }, function (err, res1, body) {
        body = JSON.parse(body);
        callback(body, err);
  });
}
module.exports = {
  metadata: () => ({
    name: 'vacancies',
    properties: {
      jobType: { required: true, type: 'string' },
      jobLoc : { required: true, type: 'string' }
    },
    supportedActions: ['jobAvailablelist', 'NotAvailable']
  }),
  invoke: (conversation, done) => {
    
    const { jobType } = conversation.properties();
    const { jobLoc } = conversation.properties();
    // determine jobs
    var jobLocUpper = jobLoc.toUpperCase();
console.log(jobType+ " "+jobLocUpper);
 query(jobType,jobLocUpper, function (res1, err){
  var lst = "";
  if (res1 && res1.items)
  {
    if (res1.items.length) 
    {
      for (var i = 0; i < res1.items.length; i++) 
      {
       
        if (i > 0)
          lst += ", "
        lst += res1.items[i].vacancyid +": "+res1.items[i].title;
       
      }
 console.log(lst);
    conversation.variable("jobTypes", lst);
    conversation.transition("jobAvailablelist");
    conversation.keepTurn(true);
    done();
    }
    else
    {
      console.log("No items on the selected category");
      conversation.reply("Unfortunately we do not have any vacancies related to " +jobType.toLowerCase() + " in "+jobLoc);
      conversation.transition("NotAvailable");
      conversation.keepTurn(true);
      done();
    }
  }
  else
  {
    console.log("Encountered an error... please try again later or contact the demo administrator");
    conversation.reply("Encountered an error... please try again later or contact the demo administrator");
    conversation.transition();
    done();
  }
});
  }
};

Once done you pack your custom component for local deployment.

Quick Steps:

The ODA skill I shared with you is linked to my APEX application. You can import the skill and retrain it to test it.

Also visit my APEX application to validate the results. (You can manipulate data in the APEX app, check the authentication credentials above)

In ODA run utterances such as;

Hi…

I am looking for a job in Marketing…

Any IT Jobs in Africa?

What roles do you have in Europe related to technology …

Any marketing roles in ASIA?

Watch the Demo Video:

CONCLUSION

APEX enables a business create low code applications within less time. These applications are secure and can be extended to fit the business requirements.

Oracle Digital Assistant offers Natural Language Processing capabilities which can allow the user to query using their normal natural language as they express their intention. This capability comes in handy while extending Enterprise applications using a conversational UI.

I advise you to get a Oracle Free tier cloud to get started with Oracle cloud.

I welcome feedback from the above post.

Happy coding!

Update – Building & Debugging Custom Components for the Oracle Digital Assistant in Minutes!

Previously, i had summarized the steps to create and pack custom component to be deployed on the local container in ODA.

As for custom components built for ODA 19.4.1 and beyond, few changes were made. Here are the steps to create a CC.

  1. Globally install the Bots-node-sdk in your computer
npm install -g @oracle/bots-node-sdk

2. Create the custom component folder and cd into it, then;

bots-node-sdk init


3. Package the custom component.

bots-node-sdk pack


How do you debug CC code from your computer before deploying?

To run the code locally, you use;

 npm start

You have to create a tunnel to expose your localhost server to the internet. You can use ngrok or local tunnel to achieve this.

ie. If you use ngrok: >>> $ngrok http 3000

Now your url should be like below:

https://<your tunnel host>/components

Navigate to the components section in ODA select + Service button.

Select external as the deployment option as shown below: The username and password you write “none

This image has an empty alt attribute; its file name is Cc1-1024x604.png

Once connected you can now debug your code using your favorite code editor.

Happy Coding!

References: