tag:blogger.com,1999:blog-62731290513109720362024-03-13T17:58:06.385+01:00B - APEXBlog about Oracle Application Express (APEX)Aljaž Malihttp://www.blogger.com/profile/16500162206890401813noreply@blogger.comBlogger9125tag:blogger.com,1999:blog-6273129051310972036.post-3851387451843477012023-02-21T08:50:00.000+01:002023-02-21T08:50:38.353+01:00APEX Alpe Adria<h2 style="text-align: center;"><span style="color: #0e101a; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><span style="text-align: left;">APEX Alpe Adria</span></div></span></h2><div><span style="color: #0e101a;"><br /></span></div><div style="text-align: left;"><span data-preserver-spaces="true" style="color: #0e101a; margin-bottom: 0pt; margin-top: 0pt;"><p style="margin-bottom: 0pt; margin-top: 0pt;"><span data-preserver-spaces="true" style="margin-bottom: 0pt; margin-top: 0pt;">There are different ways how a story can start. The story about the <a href="http://aaapeks.info" target="_blank">APEX Alpe Adria</a> conference started in the beautiful city of Rovinj in Croatia. I was travelling from the </span><a class="editor-rtfLink" href="https://sioug.si" style="color: #4a6ee0; margin-bottom: 0pt; margin-top: 0pt;" target="_blank"><span data-preserver-spaces="true" style="margin-bottom: 0pt; margin-top: 0pt;">SiOUG event </span></a><span data-preserver-spaces="true" style="margin-bottom: 0pt; margin-top: 0pt;">to the </span><a class="editor-rtfLink" href="https://hroug.hr" style="color: #4a6ee0; margin-bottom: 0pt; margin-top: 0pt;" target="_blank"><span data-preserver-spaces="true" style="margin-bottom: 0pt; margin-top: 0pt;">HrOUG event</span></a><span data-preserver-spaces="true" style="margin-bottom: 0pt; margin-top: 0pt;">. Since the HrOUG event takes place on the island, I was waiting for the boat transfer. I was standing at the end of the peer and thinking it's good that we have an event in Slovenia and also in Croatia, but at the same time, would it be great to do something together? To do something together, you need other people who would support this idea, and by "coincident", who do I see standing on the peer waiting for a boat transfer ... Dario Bilić. Dario is a good friend of mine. At that time, he was helping with the APEX track for the HrOUG event. I explained my idea to Dario. He suggested, let's also reach out to Peter Raganitsch and we can organise the dedicated APEX event for the </span><a class="editor-rtfLink" href="https://en.wikipedia.org/wiki/Alpe-Adria" style="color: #4a6ee0; margin-bottom: 0pt; margin-top: 0pt;" target="_blank"><span data-preserver-spaces="true" style="margin-bottom: 0pt; margin-top: 0pt;">Alpe Adria region</span></a><span data-preserver-spaces="true" style="margin-bottom: 0pt; margin-top: 0pt;">. Sure enough, Peter supported this idea without any hesitation. </span></p><p style="margin-bottom: 0pt; margin-top: 0pt;"><br /></p><p style="margin-bottom: 0pt; margin-top: 0pt;"><span data-preserver-spaces="true" style="margin-bottom: 0pt; margin-top: 0pt;">Soon after the HrOUG conference Peter, Dario and I had a call. It was a short call, we all had the same vision, so the meeting was just to align on the basic concepts of the conference and to make a plan what are next steps. I will talk more about what happened next with the first conference and also I will tell you more about the second and third edition of the conference in the next blog posts. </span></p><p style="margin-bottom: 0pt; margin-top: 0pt;"><br /></p><p style="margin-bottom: 0pt; margin-top: 0pt;"><span data-preserver-spaces="true" style="margin-bottom: 0pt; margin-top: 0pt;">On the first call, we aligned on concepts, or what I would call the foundations of the APEX Alpe Adria conference. Again, it was a short discussion where we all agreed on this:</span></p><p style="margin-bottom: 0pt; margin-top: 0pt;"><span data-preserver-spaces="true" style="margin-bottom: 0pt; margin-top: 0pt;"><br /></span></p><ul style="margin-bottom: 0pt; margin-top: 0pt;"><li style="list-style-type: disc; margin-bottom: 0pt; margin-top: 0pt;"><span data-preserver-spaces="true" style="margin-bottom: 0pt; margin-top: 0pt;">Conference must be affordable </span></li><li style="list-style-type: disc; margin-bottom: 0pt; margin-top: 0pt;"><span data-preserver-spaces="true" style="margin-bottom: 0pt; margin-top: 0pt;">It will be one day conference</span></li><li style="list-style-type: disc; margin-bottom: 0pt; margin-top: 0pt;"><span data-preserver-spaces="true" style="margin-bottom: 0pt; margin-top: 0pt;">Conference will take place in Austria, Croatia and Slovenia (each year different country) </span></li><li style="list-style-type: disc; margin-bottom: 0pt; margin-top: 0pt;"><span data-preserver-spaces="true" style="margin-bottom: 0pt; margin-top: 0pt;">It will be on Fridays</span></li><li style="list-style-type: disc; margin-bottom: 0pt; margin-top: 0pt;"><span data-preserver-spaces="true" style="margin-bottom: 0pt; margin-top: 0pt;">On Thursdays evenings we will organise a pre-event, more like get together event</span></li><li style="list-style-type: disc; margin-bottom: 0pt; margin-top: 0pt;"><span data-preserver-spaces="true" style="margin-bottom: 0pt; margin-top: 0pt;">On Friday evening, there will be a party</span></li><li style="list-style-type: disc; margin-bottom: 0pt; margin-top: 0pt;"><span data-preserver-spaces="true" style="margin-bottom: 0pt; margin-top: 0pt;">The last thing we agreed on was and still is: we do not earn any money by organising the conference (I will come back to this point in the next blog posts)</span></li></ul><div style="text-align: left;"><span data-preserver-spaces="true" style="color: #0e101a; margin-bottom: 0pt; margin-top: 0pt;"><br /></span></div><div style="text-align: left;"><span data-preserver-spaces="true" style="color: #0e101a; margin-bottom: 0pt; margin-top: 0pt;"><br /></span></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmk9lx50MCgUU7HSq6nsgZxbW2mb_5Ji3xqGde5IpJHVM3oVN_sJ2Jpc4bGm-RlNLTYf7R1NHk8bMYZnbW59fEekurovDaZKTMW1SoPtxkY5pGBRFqln8MIsMPXr31noPZXS0ujnyGsvVughaZv0MydNRT3pb2Czd6OmL9_gsKZFUgu2JCg2gOyGPp5w/s4608/IMG_20181017_171703-2.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="3456" data-original-width="4608" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmk9lx50MCgUU7HSq6nsgZxbW2mb_5Ji3xqGde5IpJHVM3oVN_sJ2Jpc4bGm-RlNLTYf7R1NHk8bMYZnbW59fEekurovDaZKTMW1SoPtxkY5pGBRFqln8MIsMPXr31noPZXS0ujnyGsvVughaZv0MydNRT3pb2Czd6OmL9_gsKZFUgu2JCg2gOyGPp5w/w640-h480/IMG_20181017_171703-2.jpg" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">This picture was taken on 17.10.2018 when I was waiting for a boat transfer</td></tr></tbody></table><br /> </span></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div>Aljaž Malihttp://www.blogger.com/profile/16500162206890401813noreply@blogger.comtag:blogger.com,1999:blog-6273129051310972036.post-20252485085040297362021-02-23T21:17:00.002+01:002021-02-24T20:31:51.821+01:00My two cents on low code and APEX<p>Today was (again) a nice day. A sunny day with almost 20 degrees (Celsius), no clouds and just the right amount of wind. Perfect conditions to do some paragliding and after the flight, a cold beer with a friend. </p><p>But there was something else that made my day. It was something that happened in the office. Today we got a visit from a young 18 years old future student. Next year he will go to college and he is still not sure which one or which direction. But he said, he is interested in programming and that is why I invited him to visit us. </p><p>We started talking, and it went like this: </p><p><br /></p><p>Me: Do you know Oracle or databases.</p><p>Him: no</p><p>Me: OK, do you know anything about APEX</p><p>Him; no</p><p>Me: OK, what about PL/SQL, SQL, Java, ...</p><p>Him: no</p><p><br /></p><p>And I thought to my self, this is perfect! My next question was: Do you know anything about ER diagrams? The answer was...No. And I thought to my self, even better...let's try to teach him and see how fast he can learn and even more important if he will understand the logic. </p><p>So I started: Let's say we have departments and employees...I know this was a big gamble, talking about departments and employees to someone who is 18! Luckily he did not run away. We started to draw squares and connecting them with lines ( crows feet ). I could just see that he was following and in a few minutes he already extended the ER with new entities (posts,...). Great, he can learn fast and he can also understand the design. </p><p>The next step, create tables. For someone who does not know Oracle or in this case even databases, this is a problem. For a smart kid like him, that is not a problem, but again it would take some time to learn.</p><p>But luckily we are working with APEX and part of APEX is Quick SQL. First things first! We need an environment where he will work. apex.oracle.com to the rescue and in under 5 minutes we were already in Quick SQL in the newly created workspace. First 10 minutes in Quick SQL I explained the basics of constraints, data types, not nulls and foreign keys. It was just to connect what he already learned when drawing the ER diagram. Then I asked him to describe to me the database model and we have used this for Quick SQL...automagically code was generated on the fly. He did not know a single thing about Oracle and yet he was able to create tables ( physical model ). </p><p>You can image what happened next. We run the script and based on the script we created the APEX application (we all know how that goes). His words were, OK this is cool!</p><p>If I just compare this to how it was 20 years ago when I started to work with Oracle!</p><p>My main point of this blog post is not that someone can learn to be a developer in 2 hours. It will take a lot more than that. But today with the low code approach, with Quick SQL and APEX we have the option to show how interesting it can be to develop applications. Like this bright kid, he was able to build something useful really fast. We already agreed on the next steps which will include more details...and hopefully someday we will have a new bright APEX developer.</p><p>And to that I say, cheers (with the cold beer after the flight) !</p><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaq4tSREN-UfPamL-bFSWee_2_WXgis2Vr7GC2S-LWCgOZE1aj_DJykX3ygxQ7g7_qK0qGAzsipBPcYxtroudjNz9nNuxd4eSXyhWw9BLcgu30-y1VJj_WC-I-_ua7x8uUETcvNc_Yq6mo/s4032/IMG_4833.HEIC" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaq4tSREN-UfPamL-bFSWee_2_WXgis2Vr7GC2S-LWCgOZE1aj_DJykX3ygxQ7g7_qK0qGAzsipBPcYxtroudjNz9nNuxd4eSXyhWw9BLcgu30-y1VJj_WC-I-_ua7x8uUETcvNc_Yq6mo/w400-h300/IMG_4833.HEIC" width="400" /></a></div><br /><p>Aljaž</p><p><br /></p><p><br /></p>Aljaž Malihttp://www.blogger.com/profile/16500162206890401813noreply@blogger.comtag:blogger.com,1999:blog-6273129051310972036.post-5820973229445430982019-05-27T17:17:00.001+02:002019-05-29T07:27:49.419+02:00Sample Data Sets in APEXSample data sets are something that I use very often. Either I'm trying out some new features, working on a presentation, preparing a workshop,...<br />
<br />
For me still the favorite data set is the King with a salary of 5000...or in other words the SCOTT schema with a famous DEPT and EMP tables. If you have never heard about the SCOTT schema, then it must be that you are really really young :). In that case you can read more about SCOTT schema <a href="https://www.orafaq.com/wiki/SCOTT" target="_blank">here</a>. And if you don't know who Scott is, then check this <a href="https://community.spiceworks.com/topic/559730-the-story-behind-scott-tiger-the-default-login-pass-for-oracle" target="_blank">link</a>.<br />
<br />
If we want to have this sample data set in our custom schema then we need a script that will create the tables along with the data. One of the places where we can get the script is for an example on <a href="https://github.com/oracle/dotnet-db-samples/blob/master/schemas/scott.sql" target="_blank">Github</a>.<br />
<br />
But if we are working with APEX all we need are a few clicks and we are good to go. Once logged into APEX we have to select in the drop down menu : Workshop > Utilities > Sample DataSets<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzUb-R94B3nYEOpSK6Lw2nsvwelyK3IAw6vk2c1kvfqxRw11MuL0HXb-vW_Ikrmwd9Gg0e55O1Ce0KxL7b6z2u6Lq8mWsrpeFcG5XQe6pDj6FVP1ju6No8aiMGQPeGgMdsaU1OdiyCEhmJ/s1600/smplds1a.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="853" data-original-width="1542" height="354" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzUb-R94B3nYEOpSK6Lw2nsvwelyK3IAw6vk2c1kvfqxRw11MuL0HXb-vW_Ikrmwd9Gg0e55O1Ce0KxL7b6z2u6Lq8mWsrpeFcG5XQe6pDj6FVP1ju6No8aiMGQPeGgMdsaU1OdiyCEhmJ/s640/smplds1a.png" width="640" /></a></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Once this page, all we have to do is click on "Install" next to EMP / DEPT and that is it. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSVeQFU_ESVKXbrOp8AjCJSq52YZAFjoHjFxIUO8J_2ivuogR_OET5fC-L4Hx4TMSZem_xTR8s4N5Nj23OlrX6DbWWVNuvbpqx28sqgjoyId1tHhKoY_3BYmYux1xIDq-yoPPkNaEflRGr/s1600/smplds2a.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="831" data-original-width="1072" height="492" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSVeQFU_ESVKXbrOp8AjCJSq52YZAFjoHjFxIUO8J_2ivuogR_OET5fC-L4Hx4TMSZem_xTR8s4N5Nj23OlrX6DbWWVNuvbpqx28sqgjoyId1tHhKoY_3BYmYux1xIDq-yoPPkNaEflRGr/s640/smplds2a.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
And that would be it, if this wouldn't be APEX. As you might already noticed there are multiple data sets available. In addition to DEPT / EMP we can also install Project Data, HR Data and Task Spreadsheet data sets. And if you look closer there is one more really nice thing about this DEPT / EMP data set. You can install the data in different languages...and that is 10 different languages! </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkhuzdTVuU_aB8giMagpjDxpvZIfMkmTkYyp9FD5fMjUh4-i5Z9rtKBizig_IN_jnxUNDHwz1qnspkWrXFNQocpyYAyi_31ZCei6PXCWlHrOcvB9fAlRFq3GiSfP0aYQHACYvvAmJH8yg5/s1600/smplds3a.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="960" data-original-width="1600" height="382" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkhuzdTVuU_aB8giMagpjDxpvZIfMkmTkYyp9FD5fMjUh4-i5Z9rtKBizig_IN_jnxUNDHwz1qnspkWrXFNQocpyYAyi_31ZCei6PXCWlHrOcvB9fAlRFq3GiSfP0aYQHACYvvAmJH8yg5/s640/smplds3a.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
And things don't end here. After we are done with the installation of data set, we can simply create an application. </div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2KvCK57lw6sgknIq36_8qY0uiUsiE2I27FcrBHTtVUCbBQJwSYhlIxtmu0_rvDOeNbcqjNk3ICm56FizPdWC4ym8O3UX3AbomWjDW83cQnHaThL8W6D21S7-GqcQQWfSpUXkI0nmC2-EX/s1600/smplds4a.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="951" data-original-width="1600" height="380" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2KvCK57lw6sgknIq36_8qY0uiUsiE2I27FcrBHTtVUCbBQJwSYhlIxtmu0_rvDOeNbcqjNk3ICm56FizPdWC4ym8O3UX3AbomWjDW83cQnHaThL8W6D21S7-GqcQQWfSpUXkI0nmC2-EX/s640/smplds4a.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Not sure if you are surprised, but not just the data, also the application it self will be generated in a selected language. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqbHnb4WFsV9Qxl67A4wQlYY0y_mW9VA0c5SNs3peo1vs0Id52TBJBHQyc0bLhxx4tSoO1A3xDazXDsPFL_eBixItAu6wB_0fuhUKrHAexl5iBC1zqiUF_i6u8_iQj8wepNM7T4_PsrqC0/s1600/smplds5a.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="548" data-original-width="1600" height="218" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqbHnb4WFsV9Qxl67A4wQlYY0y_mW9VA0c5SNs3peo1vs0Id52TBJBHQyc0bLhxx4tSoO1A3xDazXDsPFL_eBixItAu6wB_0fuhUKrHAexl5iBC1zqiUF_i6u8_iQj8wepNM7T4_PsrqC0/s640/smplds5a.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_TMLtvPqc8lGvLCrttcgBurxQshoHWk7QoBG-K0UxoGqnodo3pORICiz1eLw5GJ7zQ43ngKrHGbJ8Peqi0EQ0WimOiECkiH0JLu34akpY8eTXWb5psA3F8l4zI8aPcRHI6KMTfHrULD7-/s1600/smplds6a.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="461" data-original-width="1600" height="184" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_TMLtvPqc8lGvLCrttcgBurxQshoHWk7QoBG-K0UxoGqnodo3pORICiz1eLw5GJ7zQ43ngKrHGbJ8Peqi0EQ0WimOiECkiH0JLu34akpY8eTXWb5psA3F8l4zI8aPcRHI6KMTfHrULD7-/s640/smplds6a.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
If you wonder if we can have multiple languages in the same data set, that is not ( yet ) possible. At the moment only a single language can be loaded into the sample database objects. If you select a different language the currently loaded data will be replaced.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Aljaž</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<br />
<br />Aljaž Malihttp://www.blogger.com/profile/16500162206890401813noreply@blogger.comtag:blogger.com,1999:blog-6273129051310972036.post-32132737985985440332019-05-24T15:02:00.000+02:002019-05-25T20:06:28.132+02:00Page Specific UtilitiesFirst things first. Yes, it' has been to long since I wrote my last blog post. But you know what, it's not like I didn't had time or something like that...it was just that I lost my login credentials for blogger.com...<br />
<br />
Today I walked to the office and suddenly I remembered what my credentials are, and I also got an idea for a new blog post. Maybe it was due to the fact that it was a really nice walk...who knows :)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJSko0LZSV9yeeMsb926JhHAPoAKCI5ia6IElMMHlocFsFtPb7T-u98e6En93EkI7zVPTNfX-BjSQcP8ZyPN1peMWauQia4ZWzOSKbf4CHeVaAJkCHUfHxE-seFzlU3Sk7WKz8EeQ1_m_H/s1600/IMG_20190524_081556.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1233" data-original-width="1600" height="307" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJSko0LZSV9yeeMsb926JhHAPoAKCI5ia6IElMMHlocFsFtPb7T-u98e6En93EkI7zVPTNfX-BjSQcP8ZyPN1peMWauQia4ZWzOSKbf4CHeVaAJkCHUfHxE-seFzlU3Sk7WKz8EeQ1_m_H/s400/IMG_20190524_081556.jpg" width="400" /></a></div>
<br />
<br />
I'm working with APEX for many years now and here and there I "discover" things that are there, I guess for ages, but somehow I have overlooked them. My last presentation that I did was "It's good to know your APEX backyard" for the <a href="https://www.aaapeks.info/" target="_blank">APEX Alpe Adria conference</a>. In this presentation I talked about that APEX is not only Page Designer, where we spend most of our time when working with APEX. But there is so much more then Page Designer. As part of the presentation I also covered Application Utilities and on the page with Page Utilities you can see utilities like Application Dashboard, Upgrade Application,... But for me the best part was/is, the part rounded with the red color: <b>Page Specific Utilities</b><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-_0EKEXglFJ3ISmoJLsK5gozLCIlord6zJMKREQJwnRMB4GzmCzXRSgmjmyrtVgr_vLelZnEv_Q2J4rO7IIY7Ti1RnBC5y1GWRpq-5uOxGHnzgQ61nGWBZ-b3kbIg9LLAyE_Rp4LgswKV/s1600/ps_utilities.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="821" data-original-width="1600" height="328" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-_0EKEXglFJ3ISmoJLsK5gozLCIlord6zJMKREQJwnRMB4GzmCzXRSgmjmyrtVgr_vLelZnEv_Q2J4rO7IIY7Ti1RnBC5y1GWRpq-5uOxGHnzgQ61nGWBZ-b3kbIg9LLAyE_Rp4LgswKV/s640/ps_utilities.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
For me this was a really nice discovery. Why discovery? I would say that you don't notice ( maybe it's just me ) the Page Specific Utilities right away. They are there on the page but a bit left out on the side and I would really like to see them more visible. Simply because they are so useful. So take a bit of your time to check them out, it's worth it. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
I will not cover all the Page Specific Utilities in this blog post, I will just highlight my personal top 3. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b>1. Region Utilities > Grid Edit all No Data Found Messages</b></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhboNn5UStKBLLU6XTje7QmL1RetehptKi-9ZchJDCUq0e9fikdmjDumQKnMKIrUzHEUhQBiZzFgzOFikslCSdcoLJ8K5TPrv2x3RpGnVKYzHn2RPPfuoLOsZcYebdhuv5TExauFGd-wU_r/s1600/ps_utilities_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="375" data-original-width="1600" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhboNn5UStKBLLU6XTje7QmL1RetehptKi-9ZchJDCUq0e9fikdmjDumQKnMKIrUzHEUhQBiZzFgzOFikslCSdcoLJ8K5TPrv2x3RpGnVKYzHn2RPPfuoLOsZcYebdhuv5TExauFGd-wU_r/s640/ps_utilities_2.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<div>
With this you can edit ALL "No Data Found" messages on a single page.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhy-Ycy4-YFUQY1oy1jWbiXxmwAGtJInX_gaYo3faU5-PEmFPu7cNlIWZa8gSbUpXr_hVHOjwvcTcIka5asvGYAXPP9_jAOslJF-xJA46h5onRtSMNi39eVdaSnhWVNfXJ7chHT2_046yu2/s1600/ps_utilities_3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="465" data-original-width="1600" height="184" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhy-Ycy4-YFUQY1oy1jWbiXxmwAGtJInX_gaYo3faU5-PEmFPu7cNlIWZa8gSbUpXr_hVHOjwvcTcIka5asvGYAXPP9_jAOslJF-xJA46h5onRtSMNi39eVdaSnhWVNfXJ7chHT2_046yu2/s640/ps_utilities_3.png" width="640" /></a></div>
<div>
<br /></div>
<div>
<b>2. Process Utilities > Grid Edit of all Process Messages</b></div>
<div>
<b><br /></b></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhK6COxUhrrrw3SbYszPnA9uX6QrPICqyEz2-tAiK3PUfgtggPy2GQtllFi9GgsnlRaPEr_trq4yvIqFoMtA38rge0376zeQF2QkRSbxBFqR_ul-YUGyy8Gnn9A0P1SqU-UBDXNbySBy6kl/s1600/ps_utilities_4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="370" data-original-width="1600" height="148" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhK6COxUhrrrw3SbYszPnA9uX6QrPICqyEz2-tAiK3PUfgtggPy2GQtllFi9GgsnlRaPEr_trq4yvIqFoMtA38rge0376zeQF2QkRSbxBFqR_ul-YUGyy8Gnn9A0P1SqU-UBDXNbySBy6kl/s640/ps_utilities_4.png" width="640" /></a></div>
<div>
<b><br /></b></div>
<br />
<div class="separator" style="clear: both; text-align: left;">
Similar to the previous, only that in this case you can edit all Process messages...again on a single page.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5D1aEsK8c4sAclqU1lJrF8A6i-Yi8eDvyu7L06-zpIRSvsSrQwoqvJ7ay74dRjuPYvOtu57USVZkBNRHIkWCJ978k5Nw9WkC1PyxNjOmN6cpcl9_qW2I-wFIPpdcXmgadJ-O3UZfgY4hs/s1600/ps_utilities_5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="901" data-original-width="1600" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5D1aEsK8c4sAclqU1lJrF8A6i-Yi8eDvyu7L06-zpIRSvsSrQwoqvJ7ay74dRjuPYvOtu57USVZkBNRHIkWCJ978k5Nw9WkC1PyxNjOmN6cpcl9_qW2I-wFIPpdcXmgadJ-O3UZfgY4hs/s640/ps_utilities_5.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b>3. Region Utilities > Update Interactive Report Settings</b></div>
<div class="separator" style="clear: both; text-align: left;">
<b><br /></b></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbulMo67p8uElLwyygN3l0mUpH8TJTE7raRYIZkWkr2LymJ6bDjhs-0TfykmgWjxNDOo3XnMoWF8G3MyvWJgiHm1sCzrWaIFscN2UneS_Ay9Q78LCaI89iAwiBpfn4uIoWvvhI6qVOj3-Y/s1600/ps_utilities_6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="356" data-original-width="1600" height="142" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbulMo67p8uElLwyygN3l0mUpH8TJTE7raRYIZkWkr2LymJ6bDjhs-0TfykmgWjxNDOo3XnMoWF8G3MyvWJgiHm1sCzrWaIFscN2UneS_Ay9Q78LCaI89iAwiBpfn4uIoWvvhI6qVOj3-Y/s640/ps_utilities_6.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
This is actually my favorite Page Specific Utility. You can see Interactive Report Settings of all Interactive reports and you can also manipulate this settings...again on a single page. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRWIef0uTG1PuPawaXTYdIlC7v7-kj1MeUEDtA8WN83VKO4ZbGfuDWRagbk_zHlcevbW9LfvgWS2-1nWGfdujpby_qJE_hT1344Us7ZUDWbgIfmDasMrclI-eHJe_EeLHr8xhbjwVNLLTU/s1600/ps_utilities_7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="406" data-original-width="1600" height="162" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRWIef0uTG1PuPawaXTYdIlC7v7-kj1MeUEDtA8WN83VKO4ZbGfuDWRagbk_zHlcevbW9LfvgWS2-1nWGfdujpby_qJE_hT1344Us7ZUDWbgIfmDasMrclI-eHJe_EeLHr8xhbjwVNLLTU/s640/ps_utilities_7.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Aljaž</div>
<br />
<br />
<br />Aljaž Malihttp://www.blogger.com/profile/16500162206890401813noreply@blogger.comtag:blogger.com,1999:blog-6273129051310972036.post-71245797383756004262017-03-13T07:44:00.000+01:002017-03-18T08:32:25.793+01:00Fixing Skillbuilders Super LOV (v3) in APEX 5.1<div>
We have already migrated some of the existing applications to a new version of Oracle Application Express - 5.1. After few weeks in production I can just say...do it :). But when doing an upgrade there is always a possibility that you will hit some issues. For me one of the issue was Skillbuilders Super LOV (v3), and it looks like I'm not alone (<a href="https://community.oracle.com/thread/4010580">https://community.oracle.com/thread/4010580</a>)</div>
<div>
<br /></div>
<div>
So what is the issue? </div>
<div>
<br /></div>
<div>
When you select a value (Super LOV item) and try to save a form then the value is not submitted. Now if you are lucky, then your item is mandatory and you will see the error - end users will tell you right away that something is not working. If your item is not mandatory then you might see this error much later, with complaints that some data is not saved correctly.</div>
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0edD8-zqFs6RK7lQJPBoRfI9ALVq-UTqseRqIPgKAOKhGsguImf6lvzNNdjyxBto2SG0gFWX7z-SigKyJRIzWG7Q5jy6UQYnWVSl5C0mFK_ockcZqwBsqv44tRrgh0dTo33GfhmfzZ1oz/s1600/fslov_1.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="179" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0edD8-zqFs6RK7lQJPBoRfI9ALVq-UTqseRqIPgKAOKhGsguImf6lvzNNdjyxBto2SG0gFWX7z-SigKyJRIzWG7Q5jy6UQYnWVSl5C0mFK_ockcZqwBsqv44tRrgh0dTo33GfhmfzZ1oz/s640/fslov_1.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Value is selected</td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWNXDOqC9g8GuaHYw4zoXHKDVoL79_Z75O4_111npv3DULd1pYASpfIrF-DQDAl67KirQwjc9C13fLRfJlIrNcPbBP92ji5BUqul9HyoFYwKSo0MG5tIM6At-GeDKzQBt8T2mjcloQZfZs/s1600/fslov_2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWNXDOqC9g8GuaHYw4zoXHKDVoL79_Z75O4_111npv3DULd1pYASpfIrF-DQDAl67KirQwjc9C13fLRfJlIrNcPbBP92ji5BUqul9HyoFYwKSo0MG5tIM6At-GeDKzQBt8T2mjcloQZfZs/s640/fslov_2.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">After submit, value is cleared and we see an error</td></tr>
</tbody></table>
<div>
<br /></div>
<div>
After a bit of research I have found a quick fix, that you can use, until the plugin is fixed by original authors. What has to be done is just one small change in plugin's render function. Search in the source for line with <b>disabled="disabled"</b> (should be somewhere in line 157, if you haven't done some changes)</div>
<div>
<br /></div>
<div style="text-align: center;">
<span style="font-family: "courier new" , "courier" , monospace;">THEN '<span style="color: red;">disabled="disabled"</span> onfocus="this.blur();"'</span></div>
<div>
<br /></div>
<div>
and change it to:</div>
<div>
<br /></div>
<div style="text-align: center;">
<span style="font-family: "courier new" , "courier" , monospace;">THEN '<span style="color: red;">readonly="readonly"</span> onfocus="this.blur();"'</span></div>
<div style="text-align: center;">
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0k_mxZTO-eQnHJslMFyObRKFAOUxXgZvXEWHNtFR3U_ufwsEjvbdJ3DY94PAuZEmVDaK_7ByywYI1uUOPNhW5M8g1lSeR17ZVGvI6c4re_C7PKfBhRwNgDKb6sLJD2EmrrTKcBe9mY_0q/s1600/fslov_3.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="338" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0k_mxZTO-eQnHJslMFyObRKFAOUxXgZvXEWHNtFR3U_ufwsEjvbdJ3DY94PAuZEmVDaK_7ByywYI1uUOPNhW5M8g1lSeR17ZVGvI6c4re_C7PKfBhRwNgDKb6sLJD2EmrrTKcBe9mY_0q/s640/fslov_3.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Notice the change is line 157 and 158</td></tr>
</tbody></table>
<div>
<br /></div>
<div>
It looks like that something has changed from version 5.0 to 5.1. If you have an item with a property <span style="color: red;">disabled="disabled"</span>, then after submitting the page you will not see value for this item.</div>
<div>
<br /></div>
<div>
To test this, I have created an After Submit Process with the code:</div>
<div>
<br /></div>
<div style="text-align: center;">
<span style="font-family: "courier new" , "courier" , monospace;">apex_debug.error('Value of P2_LOV : %s', :P2_LOV);</span></div>
<div style="text-align: center;">
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span></div>
<div style="text-align: left;">
I have tried this on version 5.0.4 and 5.1 and after checking the debug there is a clear difference:</div>
<div style="text-align: left;">
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibR4-Zv2ILHo2ymLIEV34m3XP0a5lHkRLecq_K4IYxp-XqPbUKID-ppP6a5tMT54odar-UawXoxQQbn3S3KCBXwh5IVxuAhjixIvfXkm8BMy_gxcYADbctRwuLV4sfjfRtNdi6XqVPbPHn/s1600/fslov_4.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="220" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibR4-Zv2ILHo2ymLIEV34m3XP0a5lHkRLecq_K4IYxp-XqPbUKID-ppP6a5tMT54odar-UawXoxQQbn3S3KCBXwh5IVxuAhjixIvfXkm8BMy_gxcYADbctRwuLV4sfjfRtNdi6XqVPbPHn/s640/fslov_4.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Debug in APEX 5.0</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSzmbhEaMP9tdnbhEgrLShymdBCLf_zJkmBxQu9-VedGBPbhYPyv5BHKmZOl6jo8r1CwFcu5QMg1N2KwJRfgMi05IOjKbDxDEpONLXtW7YtCLxQGeUx8xP7_I29HPrXnA-EjCNa3t5Ij9x/s1600/fslov_5.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="218" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSzmbhEaMP9tdnbhEgrLShymdBCLf_zJkmBxQu9-VedGBPbhYPyv5BHKmZOl6jo8r1CwFcu5QMg1N2KwJRfgMi05IOjKbDxDEpONLXtW7YtCLxQGeUx8xP7_I29HPrXnA-EjCNa3t5Ij9x/s640/fslov_5.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Debug in APEX 5.1</td></tr>
</tbody></table>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">Aljaz</span></div>
Aljaž Malihttp://www.blogger.com/profile/16500162206890401813noreply@blogger.comtag:blogger.com,1999:blog-6273129051310972036.post-67524467656670379282017-03-04T23:17:00.000+01:002017-03-18T08:29:41.507+01:00Using APIs to set Application and Build Status in Oracle Application Express 5.1In Oracle Application Express it is possible to specify application-level attributes: Build Status and Application Status. With Build Status we can prevent that an application is being modified by other developers. With Application Status we can specify whether an application is available or unavailable for use.<br />
<div>
<br /></div>
<div>
Topic of this blog post is not to talk in detail about this two attributes (if you want to know more, then check the <a href="http://docs.oracle.com/database/apex-5.1/AEADM/changing-build-status-for-multiple-applications.htm#AEADM165" target="_blank">official documentation</a>), but to mention how we can use APIs to manage this attributes in Oracle Application Express 5.1</div>
<div>
<br /></div>
<div>
<b>Build Status</b></div>
<div>
<br /></div>
<div>
For setting build status we can use the following procedure:</div>
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span><span style="font-family: "courier new" , "courier" , monospace;"> <i>apex_util.set_app_build_status( </i></span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><i> p_application_id IN NUMBER,</i></span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><i> p_build_status IN VARCHAR2);</i></span><br />
<div>
<div>
<br /></div>
<div>
For <span style="font-family: "courier new" , "courier" , monospace;"><i>p_build_status</i></span> we can specify <span style="font-family: "courier new" , "courier" , monospace;"><i>RUN_ONLY</i></span> and <span style="font-family: "courier new" , "courier" , monospace;"><i>RUN_AND_BUILD</i></span>. More details about this API can be found <a href="http://docs.oracle.com/database/apex-5.1/AEAPI/SET_APP_BUILD_STATUS_Procedure.htm" target="_blank">here</a>.</div>
</div>
<div>
<br /></div>
<div>
<b>Application Status</b></div>
<div>
<b><br /></b></div>
<div>
For changing the status of the application, we can use the following procedure:</div>
<div>
<br /></div>
<div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;"> <i>apex_util.set_application_status(</i></span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;"><i> p_application_id IN NUMBER,</i></span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;"><i> p_application_status IN VARCHAR2,</i></span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;"><i> p_unavailable_value IN VARCHAR2,</i></span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;"><i> p_restricted_user_list IN VARCHAR2); </i></span></div>
</div>
<div>
<br /></div>
<div>
I don't want to do a copy/paste from the official documentation, so please check this <a href="http://docs.oracle.com/database/apex-5.1/AEAPI/SET_APPLICATION_STATUS-Procedure.htm" target="_blank">link</a> for parameters description and examples. </div>
<div>
<br />
Aljaz</div>
<div>
<div>
</div>
</div>
Aljaž Malihttp://www.blogger.com/profile/16500162206890401813noreply@blogger.comtag:blogger.com,1999:blog-6273129051310972036.post-6475018365635749542017-02-08T22:59:00.002+01:002017-03-18T08:30:04.821+01:00New Look & Feel for Radio Group in Oracle Application Express 5.1With Oracle Application Express version 5.1 we are getting lots of new features. Among most notable or exposed are for sure Interactive Grids, JET Charts and Live Template Options. But we can also find some smaller (and really nice) enhancements. One of this is new look and feel of <b>Radio Group</b> item. We can spot this for example when we use Create New Page wizard in Page Designer:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZyYnddMpmKr473PhT1wvtR5EarWn_w9VWcI3eWu6CsbuAHc2gJUSsYAZtz7gytyArFVv-VIXkk3xR9PEvHO4azFYJUaYxUQbJcUIIgeSFgxWRnV_qi5isoGlQXtyT2WFiUX5-d-EqIDq6/s1600/radio_group_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="346" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZyYnddMpmKr473PhT1wvtR5EarWn_w9VWcI3eWu6CsbuAHc2gJUSsYAZtz7gytyArFVv-VIXkk3xR9PEvHO4azFYJUaYxUQbJcUIIgeSFgxWRnV_qi5isoGlQXtyT2WFiUX5-d-EqIDq6/s640/radio_group_1.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
So what do we need to do, if we want to have this look and feel in our applications. Just adding combo box item to our page is not enough, it will have the same effect as in version 5.0. It will look like this :<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXKLnMAqMrZ8BldZTzLLOJxH8233YCmwmc8H49ImLV8uOiR1jdYeDzJBHKu07n97q3DN-B0z2CXfoGRV8eR2A4lYWfW4T5ptJN38tAdp-NfafNXSdj5sy1vvCAFhtloi5p4mKby2Ibp3fW/s1600/radio_group_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="282" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXKLnMAqMrZ8BldZTzLLOJxH8233YCmwmc8H49ImLV8uOiR1jdYeDzJBHKu07n97q3DN-B0z2CXfoGRV8eR2A4lYWfW4T5ptJN38tAdp-NfafNXSdj5sy1vvCAFhtloi5p4mKby2Ibp3fW/s640/radio_group_2.png" width="640" /></a></div>
<br />
Basically we need to change three things.<br />
<br />
<br />
<ul>
<li>Number of Columns: should match number of elements in group or you can also set it to some bigger value (for example 100)</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC04uCSjT6YxKcV1vR0J_Tt0wTMQuEtSVVaLHncmvM8mre-UPE0DDnN-Hb3KeQX2lTklYZ9mAMSRfWaKGgm5nmrbvFNL4DJ9ZHVJwE_KBnkKpqZn9qXigjnX9itngNvaf3JShw26Og3uaU/s1600/radio_group_3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="144" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC04uCSjT6YxKcV1vR0J_Tt0wTMQuEtSVVaLHncmvM8mre-UPE0DDnN-Hb3KeQX2lTklYZ9mAMSRfWaKGgm5nmrbvFNL4DJ9ZHVJwE_KBnkKpqZn9qXigjnX9itngNvaf3JShw26Og3uaU/s640/radio_group_3.png" width="640" /></a></div>
<ul>
<li>Display Null Value: NO </li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdtRtUOPHYtb0UWbVTesqJWk7SjYh-ceCdTT-wvKNmuB2wa_3J4ih4aqHtBF9aUr2WTcIlSRUnozMjtmae7BuMeREJXEslonnM0oZrRZ94maas5iV6ijsxP1dO-vLoCY3tqgTU_q08IGvy/s1600/radio_group_4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="258" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdtRtUOPHYtb0UWbVTesqJWk7SjYh-ceCdTT-wvKNmuB2wa_3J4ih4aqHtBF9aUr2WTcIlSRUnozMjtmae7BuMeREJXEslonnM0oZrRZ94maas5iV6ijsxP1dO-vLoCY3tqgTU_q08IGvy/s640/radio_group_4.png" width="640" /></a></div>
<div>
<br /></div>
<ul>
<li>Template Option -> Region Group Display: Display as Pill Button</li>
</ul>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVSHIy5OjdjG3MgqDtPY7M5J3YdydwWMX82SREVxj5RPqtpxlfLNFtA9c-FAuLTeMbVFzKz0ADoMG9wzBUS-xQmvCsrO8LtbnbPe0aTVs7Zho_eX-mpjuRi8XnrOqNv9WZfVFlX3dqZa6H/s1600/radio_group_5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVSHIy5OjdjG3MgqDtPY7M5J3YdydwWMX82SREVxj5RPqtpxlfLNFtA9c-FAuLTeMbVFzKz0ADoMG9wzBUS-xQmvCsrO8LtbnbPe0aTVs7Zho_eX-mpjuRi8XnrOqNv9WZfVFlX3dqZa6H/s400/radio_group_5.png" width="400" /></a></div>
<br />
After this three small changes we now have new look and feel for our radio group:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsjzW_6YzgiFziRfvZ07-47QdPFDnj6gphiKtfg3ylUzzMZpn-Wl0sLC0mmvQKjvLNe2J-UJROH3yj3I3N5EvWimM4mEbBJDb4LG0zWDqkMQiUa2JPMSkzX50f6NWaoohcKIh32y8v81vD/s1600/radio_group_6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="282" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsjzW_6YzgiFziRfvZ07-47QdPFDnj6gphiKtfg3ylUzzMZpn-Wl0sLC0mmvQKjvLNe2J-UJROH3yj3I3N5EvWimM4mEbBJDb4LG0zWDqkMQiUa2JPMSkzX50f6NWaoohcKIh32y8v81vD/s640/radio_group_6.png" width="640" /></a></div>
<br />
For me personally the same page looks much nicer now. And if you want, you can also try all the other template options (do it with Live Template Options, so that you see the effect on the fly) for radio group item and tweak the look and feel even further.<br />
<br />
AljazAljaž Malihttp://www.blogger.com/profile/16500162206890401813noreply@blogger.comtag:blogger.com,1999:blog-6273129051310972036.post-25482984058726157562016-12-16T06:05:00.000+01:002016-12-16T06:05:43.411+01:00Change image prefix when using ORDS in standalone mode<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">In Oracle Application Express we can specify instance wide image prefix ( we provide this when installing APEX or later if we run </span><span style="background-color: transparent; color: black; font-size: 14.6667px; font-style: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span style="font-family: "courier new" , "courier" , monospace;">apex/utilities/reset_image_prefix.sql</span></span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> ). Purpose of this blog post in not to explain what image prefix is, but if you would like to know more about it, then I recommend that you read a blog post from Joel Kallman - </span><a href="http://joelkallman.blogspot.si/2013/05/image-prefix-changes-in-oracle.html" style="text-decoration: none;" target="_blank"><span style="background-color: transparent; color: #1155cc; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">Image Prefix changes in Oracle Application Express 4.2.2</span></a></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<br /></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">My blog post is about what we need to do, if we are changing image prefix and at the same time we are using Oracle REST Data Services (ORDS) in </span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.6667px; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><b>standalone mode</b></span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">. If we need to change image prefix, first thing is to run </span><span style="background-color: transparent; color: black; font-size: 14.6667px; font-style: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span style="font-family: "courier new" , "courier" , monospace;">apex/utilities/reset_image_prefix.sql</span></span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> script and here we specify new image prefix - for example </span><span style="background-color: transparent; color: black; font-family: "courier new" , "courier" , monospace; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">/i_test/</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<br /></div>
<span id="docs-internal-guid-24bbe323-fdcb-e56c-7b76-ea0ec50a549d"><span style="font-family: "arial"; font-size: 14.6667px; vertical-align: baseline; white-space: pre-wrap;">After this change when accessing APEX login page we will see this warning: </span></span><br />
<span style="font-family: "arial";"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span><span style="font-size: 14.6667px; vertical-align: baseline; white-space: pre-wrap;"></span>
<br />
<div class="separator" style="clear: both; font-family: Arial; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZ7Fkk0MR4nn3dBbQMLk-6s0lTxoH8l1CSTSSR9xCeEyP40XPv8WNrL9g5-ci6WL2D4twgG3tjDcG5fN4kA4JwrOEHlP90PgU2MEvc27lMMFM1EZWw9Jr8xFGVutH8_Y8vD3cY8VBrTBJg/s1600/warning.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="185" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZ7Fkk0MR4nn3dBbQMLk-6s0lTxoH8l1CSTSSR9xCeEyP40XPv8WNrL9g5-ci6WL2D4twgG3tjDcG5fN4kA4JwrOEHlP90PgU2MEvc27lMMFM1EZWw9Jr8xFGVutH8_Y8vD3cY8VBrTBJg/s400/warning.png" width="400" /></a></div>
<div class="separator" style="clear: both; font-family: Arial; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "arial";">I find this warning very useful. It's telling us that we have to verify that we have copied images directory to right location and also that our new path is </span><span style="font-family: "courier new" , "courier" , monospace;">/i_test/</span><span style="font-family: "arial";">. In case when we are using ORDS in standalone mode there is no need to copy anything, but we need to adjust </span><span style="font-family: "courier new" , "courier" , monospace;">standalone.static.context.path</span><span style="font-family: "arial";"> parameter in ORDS </span><span style="font-family: "courier new" , "courier" , monospace;">standalone.properties</span><span style="font-family: "arial";"> configuration file.</span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "arial";"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "arial";"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "arial";"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiI-kWljdx65TSzZZFTVJkeNq3wWqXHSCuIPVUZRXbhKZYfcdWrwQggL64D5u7MpvAp_-NdQGlC2zmC0VcafhsR8T6xi3OCKe3OnhIFPhkjJb9spnjFwTGb-SyKAH61iUe7ZnnGr7TyOX0q/s1600/standalonesettings.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="75" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiI-kWljdx65TSzZZFTVJkeNq3wWqXHSCuIPVUZRXbhKZYfcdWrwQggL64D5u7MpvAp_-NdQGlC2zmC0VcafhsR8T6xi3OCKe3OnhIFPhkjJb9spnjFwTGb-SyKAH61iUe7ZnnGr7TyOX0q/s400/standalonesettings.png" width="400" /></a></span></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "arial";"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "arial";">After this change, do a restart of ORDS and that is it.</span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "arial";"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "arial";">Aljaz</span></div>
<br />Aljaž Malihttp://www.blogger.com/profile/16500162206890401813noreply@blogger.comtag:blogger.com,1999:blog-6273129051310972036.post-86430253588944831262016-11-12T09:02:00.000+01:002017-03-18T08:30:55.287+01:00Application authorization schemeWhen building an application in Oracle Application Express, we can restrict access to pages, regions, buttons, items,... by using Authorization Schemes. In this blog post I will focus on applying scheme to (<b>all</b>) pages.<br />
<br />
For example, I can create a simple scheme, which will just check if I am a valid user:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDJes9ohIqbELaeKx_1yTNi8SY4VEqaSVp9Ue5PDzNySH9IlwEPkL1YVlBImnFkdmi5D0vaIW2lfVPLCJD-V_v3O9f7mG5B9KgDVf6yeab9FsqFVaZXAykioo_it5Cx89haIQ9AgOh5vHo/s1600/aas-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="470" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDJes9ohIqbELaeKx_1yTNi8SY4VEqaSVp9Ue5PDzNySH9IlwEPkL1YVlBImnFkdmi5D0vaIW2lfVPLCJD-V_v3O9f7mG5B9KgDVf6yeab9FsqFVaZXAykioo_it5Cx89haIQ9AgOh5vHo/s640/aas-1.png" width="640" /></a></div>
<br />
After that, I can go to a page in my application and I can apply this scheme:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRfqwju6X2P-dI5JVxuOCcAG4fPEEXT8NjWp6drTs9alVx3LF5VK_uy9tyhxdopa5F2xDNLK9s4kZ4__mfybrl12lonIA36ZzH1k1QI2hdpUqOy5wPeVbhgHA_yecsrP3vaKjgY1VjWgHi/s1600/ass-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="69" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRfqwju6X2P-dI5JVxuOCcAG4fPEEXT8NjWp6drTs9alVx3LF5VK_uy9tyhxdopa5F2xDNLK9s4kZ4__mfybrl12lonIA36ZzH1k1QI2hdpUqOy5wPeVbhgHA_yecsrP3vaKjgY1VjWgHi/s320/ass-2.png" width="320" /></a></div>
<br />
If I log into the application with user that is not ALJAZ and I go to the page with this scheme, I will see following message:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvE-Ju3-ovf5cCBlmu5Nx2hxzPZ02m8z_W05Cp6yp7XOp84l40O3nuCCOYzb29gufAm4Cz_cTUCHLs_gMae_ZPJzXkGAHNH4bXpayuJnBbJtTwQnIJrEnTPgHzgNW6vVlNNhbfgMFUCK11/s1600/ass-3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="228" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvE-Ju3-ovf5cCBlmu5Nx2hxzPZ02m8z_W05Cp6yp7XOp84l40O3nuCCOYzb29gufAm4Cz_cTUCHLs_gMae_ZPJzXkGAHNH4bXpayuJnBbJtTwQnIJrEnTPgHzgNW6vVlNNhbfgMFUCK11/s320/ass-3.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
In general, if we want that our application is secure, then we should apply authorization scheme to all pages. Normally our application starts with just a few pages, but in time it will just grow. And sometimes, it can happen that we forget to add authorization scheme to newly created pages. By doing that, every user that can log in in the application has access to this pages. But at least users must still login to access this pages, right? What about if we are using Single Sign On to allow access to our applications? <b>In this case, once I'm logged in (and authenticated) into my company's network, I have access to all unprotected pages in all APEX applications.</b></div>
<div class="separator" style="clear: both; text-align: left;">
<b><br /></b></div>
<div class="separator" style="clear: both; text-align: left;">
We can agree that it is a good idea to check our applications, if there are unprotected pages. To do that, we can simply use Advisor Utility and it will check this (among many other useful checks). For example in my demo application page 1 is unprotected and I can see this result:</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq6NV1mqzf-lHWhvYn5feMPjfDp3yvr07QLl_V9ap4gCHooe3gI_DJu2HHjFwtqmNEFDQUCHxbSn9nhiEVYw26xXRSKh2o3iOn6QFmmabddMDd-l7IFKiSN0trP7c49pUlKSKpsoC3v3z4/s1600/aas-4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="336" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq6NV1mqzf-lHWhvYn5feMPjfDp3yvr07QLl_V9ap4gCHooe3gI_DJu2HHjFwtqmNEFDQUCHxbSn9nhiEVYw26xXRSKh2o3iOn6QFmmabddMDd-l7IFKiSN0trP7c49pUlKSKpsoC3v3z4/s640/aas-4.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
One option that we have is that we go to all those pages and we apply authorization scheme. But this still does not solves the original problem - that we might forget to apply scheme on newly created pages. But there is one really nice feature/setting in APEX that will solve exactly this problem - <b>Application Authorization Scheme</b>. We can find this setting, if we to Edit Application Security Attributes ( Edit Application / Security Tab )</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlf89rLQUCK1wEuQ_pMF0ifIWld20MfPML3tmjrvInKIXFEhMLhrtIbzb98MpVQ-jgHw53CPSNVIcJd6va6pQ_CNfcjKwAwA35cDM8ivGYXnX1GRibGUlhKKvyaWa9XohOEc3QKJcSr9ox/s1600/aas-5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="411" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlf89rLQUCK1wEuQ_pMF0ifIWld20MfPML3tmjrvInKIXFEhMLhrtIbzb98MpVQ-jgHw53CPSNVIcJd6va6pQ_CNfcjKwAwA35cDM8ivGYXnX1GRibGUlhKKvyaWa9XohOEc3QKJcSr9ox/s640/aas-5.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
By setting Application Authorization Scheme, we are applying this scheme to all unprotected pages in our application (if page all ready has an authorization scheme, then scheme on a page will be used). Additional setting that we can specify, is if this scheme is also applied on public pages. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
In this way even when we create new pages, this pages are protected. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Aljaz</div>
Aljaž Malihttp://www.blogger.com/profile/16500162206890401813noreply@blogger.com