Sunday, November 22, 2020
My steps to upgrade to Oracle APEX 20.2, ORDS 20.3 and AOP 20.3
Posted by Dimitri Gielis at 17:49 5 comments
Saturday, November 14, 2020
Oracle APEX 20.2: APEX Office Print (AOP) vs native PDF, Excel and HTML
One of the most loved features of APEX Office Print (AOP) is the ability to export an Interactive Report or Grid exactly as you see it on the screen to Excel and PDF. AOP takes into account highlighting, filters, and more as defined by the end-user. This feature has been available since AOP 1.5 (2015) on APEX 5.0 and any higher version of APEX.
With the release of Oracle APEX 20.2, APEX provides this capability out-of-the-box. Because of this, we have received a few questions like: "Is this AOP functionality?", "How does the native APEX functionality compare with AOP?", "What's the roadmap of AOP?" and I thought the best way to answer would be to write about the differences between APEX Office Print and the native printing functionality in APEX 20.2.
Let's go back to the start... AOP's mission has always been to make the printing and exporting of data in Oracle APEX in the format you want as easy as possible. We really believe that business users should be able to create a template in a tool they know (Word, Excel, Powerpoint) and let AOP merge it with data from the database. From day 1, APEX Office Print has been a template-based reporting engine. In your template, you use tags, which AOP replaces with data. When no custom template is selected AOP will use a default AOP Template. AOP is the most integrated printing solution for Oracle APEX out there and provides some unique features like the ability to print and export different regions by providing a single tag. For example, to print an Interactive Report as you see it on the screen you put {&interactive} in your template, to print a chart you use {$chart}, an image you use {%image}, etc.
The built-in exporting solution of Oracle APEX started from a different angle. The APEX development team wanted a PL/SQL only solution to allow people to export data/regions in different formats. Oracle APEX 20.2 is a big advancement to what was already available previously. For example, before you could download a report to CSV, but now APEX allows you to download to native Excel. Also, for Interactive Reports and Grids, you can choose to get the export as you have it on the screen with breaks, etc. In addition to the built-in download of a region, they now expose APIs (APEX_REGION and APEX_DATA_EXPORT packages) to export programmatically.
Let's look at the questions people ask:
Is this AOP functionality?
No, it's not, in the sense that the creation of the file happens completely in PL/SQL in native APEX, whereas AOP reads the APEX meta-data, creates a JSON, and sends it to the AOP Server which creates the file and serves it back to the database. Of course, reading the meta-data is the same and the output for a single report is very similar when you don't define a custom template in AOP.
Although AOP is super fast in creating files (< 0.5 seconds!), the native APEX functionality will be the fastest solution to export data as it stays within the database. This is why from AOP 20.3 onwards we also now provide the option to select APEX Report, which will use the native APEX functionality behind the scenes.
How does the native APEX functionality compare with AOP?
The native functionality in Oracle APEX 20.2 focuses on exporting a single region or some flat data (single select statement). This is vastly different from AOP, which focuses on printing and exporting as a whole. AOP is a full templating and printing engine with hundreds of features to create pixel-perfect PDFs and export the data out of your database in the format you want. If you need to create custom letters, bills of lading, documents with images and charts, perform some PDF manipulations like merging, splitting, signing or want to print directly to a printer, for example, AOP is what you need to use.
When we don't look at general exporting and printing but focus on exporting of APEX regions and data, the native APEX functionality does a great job on basic functionalities. If you want more flexibility and advanced features, AOP is what you want to use. Here are a few examples where AOP shines:
- put your logo on top of the export (PDF/Excel/HTML)
- export multiple reports with some custom titles and text to PDF
- export different Interactive Report, Interactive Grid, Classic Reports, and some custom data to different sheets in Excel
- keep the styling (e.g. defined in HTML expressions) when exporting to PDF and Excel
- have complete freedom as to how the export looks and define your own template
- support for many different languages
- export the charts of Interactive Reports and Grids
- reference APEX Items in your export
- use a percent graph in your reports
- export a specific saved private or public report
- conditionally hide a specific column when you export
- export Master-Detail(-Detail) Interactive Grids
- export your reports to Word, Open Document Format, or Markdown
- export hierarchical data and different blocks of data
I think its great people can create some custom exports and prints with built-in tools and use AOP when more customization, flexibility, and features are needed. In fact, the new API functionality that is exposed in APEX 20.2 will make AOP even better, but more about that in my answer to the next question.
What's the roadmap of AOP?
We shipped the first version of AOP in March 2015 and since that day we have constantly invested in the product. We typically have 3 major releases per year and some smaller releases between them.
In fact, every year we have invested more in the product than the year before. 2020 is not any different. On the AOP 20.3 release, we have worked for 6 months with 8 people! It was one of the biggest and most challenging releases we have ever done, but it has made it our best release ever! A huge shout-out to the entire team who pulled it together: Sunil, Recep, Gibresh, Niyam, Kelvin, Inias, Jackie, and ... myself 😀
Two years ago it was announced that AOP will be more integrated into Oracle APEX. In APEX 20.1 and above, you can define APEX Office Print as your Print Server on the Instance Level, which replaced the functionality that was deprecated in ORDS. In APEX 20.2 the foundation of further integration of AOP is made available by providing the awesome APEX_REGION and APEX_DATA_EXPORT packages.
If you've ever wondered why there's a 'PJSON' format in the APEX_DATA_EXPORT package... it's because we worked with the APEX Development team on this. In the last years, we've spent a lot of time understanding the meta-data of APEX and for every new component and release, we've had to put a lot of effort into supporting and testing it. The new packages provide us with a built-in way to get the region meta-data, so we are set up to support any future component.
The Oracle Database and APEX are in our hearts and we do everything we can to provide you with the best printing and exporting solution out there. Just like the APEX Development team, we are dedicated to making you successful. We also understand you might be using additional technologies to Oracle APEX and PL/SQL, and although, today, AOP can already be used from any technology by doing a REST call, we will begin providing SDKs for other technologies too.
I hope the above addresses some of your questions and I'm happy to answer any other you might ask in the comments section below or by emailing our AOP Support team.
Happy printing and exporting! 😀
Posted by Dimitri Gielis at 17:50 0 comments
Monday, November 02, 2020
Create, Read, Fill and Flatten PDF Forms with APEX Office Print 20.3
In the last three years, we've put a lot of effort into the PDF capabilities of APEX Office Print (AOP).
Posted by Dimitri Gielis at 15:23 8 comments
Monday, September 28, 2020
More Advanced File Uploads in Oracle APEX
This post is part of the Getting Started with Plug-ins Pro APEX plug-ins series.
In many Oracle Application Express projects, there's a requirement that people can upload files. Typically the end-users want the ability to drag-and-drop images, PDFs, or other file types in their application.
For example, if you use APEX Office Print, you might have added in your application the ability for end-users to upload their own templates which typically are docx, xlsx, pptx, html and text files.
Those files are then stored in the database in a BLOB column or they might be stored on a file server or cloud storage.
In order to add this capability in your app, APEX provides a File Browse item.
But be careful with the accepted File Types feature. You can define image/* if you want your browser to only allow selecting of images. BUT specifying the file type doesn't prevent users from dragging-and-dropping other file types! So you can't rely on this feature to keep other file types out of your database.
As this is a native HTML File Browse item, you can customize it with CSS (and HTML and JavaScript). For example, you can make it look like what APEX provides in the APEX Builder itself:
In most of the projects I'm involved in, the end-users want more than the standard HTML File Browse that Oracle APEX provides out-of-the-box.
The most requested features are:
- Show which files were selected when adding multiple files
- A visual indicator of the progress of uploading
- Save files directly to the cloud (Oracle Cloud Object Storage, Amazon S3) instead of the database
- Limit the file types that will be accepted
- Only allow files with a size less than x MB
- Specific to upload of images: resize and compress images and add watermarks automatically
- Rename files
Posted by Dimitri Gielis at 15:54 3 comments
Monday, September 21, 2020
Power to the end-user! Create Interactive JET Charts in Oracle APEX
This post is part of the Getting Started with Plug-ins Pro APEX plug-ins series.
Charts and visualizations become very important when talking about data. Businesses are using these visualizations to make an appealing story. You will find many tips and tricks on the internet when you search for Data Storytelling. One of the most important tips is to use the right chart for your data.
So as a developer, will you figure out what type of chart to include in your Oracle APEX app?
Or do you include a complete dashboard with every possible way to look at the data?
The issue is that the perfect chart depends on the story the business wants to tell!
Let's look at an example of that is pertinent to today: COVID data.
The table below shows the number of positive cases in the last 4 months for two different countries and a total.
With United Codes, we wanted to provide the developer and business user the same functionality as the Interactive Report but with charts. So I'm happy to introduce you to one of the most astonishing Plug-ins Pro APEX plug-ins: Interactive JET Charts Pro.
Let's look at what this plug-in can bring to your end-users:
Before I show you how to add a customize button to your own charts, I want to continue the data story...
All of the charts I created in the animated gif are on the same data, but they all support a different story.
The line chart shows whether lines are going up, going down, or holding steady. You can clearly see that country 2 numbers decline and country 1’s take an upswing.
The clustered column chart directly compares the two columns. This is perfect when I want to focus on the difference between both countries: the orange column vs the green column. I changed the colors of the charts as they better represent the country and the difference is shown more clearly.
The stacked column chart focuses on part-to-whole patterns, how the gold segment and the green segment add up to a total. If I wanted to tell the story about the combined numbers of the countries I would pick the stacked bar chart.
So which one to pick, it all depends on the message you want to get across. The Interactive JET Chart APEX Plug-in is ideal if you need to brainstorm on several possible charts, to finally find the perfect chart to support your message. And the cool thing is that as a developer you don't have to make decisions about which type will be most suitable, you give the power to the end-user!
Ok, now that we have a bit more background as to why we built this plug-in, let me walk you through step-by-step how to get started in your own app.
Posted by Dimitri Gielis at 15:10 0 comments
Wednesday, September 16, 2020
Adding a download (blob) link and context menu to your Interactive Grid in Oracle APEX
This post is part of the Getting Started with Plug-ins Pro APEX plug-ins.
In this blog post, I want to highlight another Interactive Grid plug-in we've built: the United Codes Interactive Grid Download File Plug-in.
When you buy any of the United Codes products, when you go to your Account on the website, you can click on View Invoices and have the ability to download them. Those invoices were created with APEX Office Print (AOP) and stored in a BLOB column of a table.
Behind the scenes, we use a Classic Report with a Download BLOB column.
You have the same feature with an Interactive Report, you can go to any column, and make it a Download BLOB column as in the screenshot below. You tell from which table you want the file to be downloaded and give some extra info like mime type etc.
Jackie redid our entire backend system and used many more Interactive Grids (IG). When she tried to include a Download BLOB link, to her surprise there was no such option in an IG. And that is how our IG Download File Plug-in came to live!
Jackie, Bartosz, and I did some brainstorming on what such a plug-in would look like and it became a bit more than just a Download Link 😉
Although this plug-in is probably one of the smaller plug-ins of Plug-ins Pro, we love it and use it a lot in our own applications. Let me first show it in action!
As you can see, it's not just a bleeding fast download link, but you can customize what happens when you click. You can show a context menu on right-click or on a normal click and have full control over it. You can preview files and so much more!
Posted by Dimitri Gielis at 15:50 0 comments