ODTUG Aggregator ODTUG Blogs http://localhost:8080 Fri, 23 Jun 2017 15:05:36 +0000 http://aggrssgator.com/ ORDS REST: Getting Bind Variables Right https://ruepprich.wordpress.com/2017/06/20/ords-rest-getting-bind-variables-right/ <p>It seems every time I create a REST GET module I have to re-learn how to handle bind variables. So I decided to create a little cheat sheet.</p> <p>When creating a REST module with a GET handler, you can pass variables wither through the URI or through header variables:</p> <h3>URI Variables:</h3> <p><img data-attachment-id="2356" data-permalink="https://ruepprich.wordpress.com/2017/06/20/ords-rest-getting-bind-variables-right/uri/" data-orig-file="https://ruepprich.files.wordpress.com/2017/06/uri.png?w=550" data-orig-size="408,235" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="URI" data-image-description="" data-medium-file="https://ruepprich.files.wordpress.com/2017/06/uri.png?w=550?w=300" data-large-file="https://ruepprich.files.wordpress.com/2017/06/uri.png?w=550?w=408" class="alignnone size-full wp-image-2356" src="https://ruepprich.files.wordpress.com/2017/06/uri.png?w=550" alt="URI" srcset="https://ruepprich.files.wordpress.com/2017/06/uri.png 408w, https://ruepprich.files.wordpress.com/2017/06/uri.png?w=150 150w, https://ruepprich.files.wordpress.com/2017/06/uri.png?w=300 300w" sizes="(max-width: 408px) 100vw, 408px" /></p> <p>The URI template needs to have the bind variables in curly brackets (comma separated if multiple binds):</p> <pre>testuri/{id},{ename}</pre> <p>Create a query:</p> <pre>select * from emp where empno = :id and ename = :ename</pre> <p>Create a parameter for each bind variable:<br /> <img data-attachment-id="2351" data-permalink="https://ruepprich.wordpress.com/2017/06/20/ords-rest-getting-bind-variables-right/parameters/" data-orig-file="https://ruepprich.files.wordpress.com/2017/06/parameters.png?w=550" data-orig-size="1019,155" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="parameters" data-image-description="" data-medium-file="https://ruepprich.files.wordpress.com/2017/06/parameters.png?w=550?w=300" data-large-file="https://ruepprich.files.wordpress.com/2017/06/parameters.png?w=550?w=550" class="alignnone size-full wp-image-2351" src="https://ruepprich.files.wordpress.com/2017/06/parameters.png?w=550" alt="parameters" srcset="https://ruepprich.files.wordpress.com/2017/06/parameters.png?w=550 550w, https://ruepprich.files.wordpress.com/2017/06/parameters.png?w=150 150w, https://ruepprich.files.wordpress.com/2017/06/parameters.png?w=300 300w, https://ruepprich.files.wordpress.com/2017/06/parameters.png?w=768 768w, https://ruepprich.files.wordpress.com/2017/06/parameters.png 1019w" sizes="(max-width: 550px) 100vw, 550px" /></p> <p>I don&#8217;t think whether if the Source Type matters. HTTP Header has worked for me. I typically set the parameter name and bind variable name to upper case to avoid any problems.</p> <p>Test:</p> <p>Click the <strong>Set Bind Variables</strong> button to test the handler. Make sure to add a value to all parameters. If you leave a parameter empty, you&#8217;ll get an error.</p> <p>&nbsp;</p> <h3>Header Variables:</h3> <p>Create the URI without a trailing forward slash:</p> <p><img data-attachment-id="2364" data-permalink="https://ruepprich.wordpress.com/2017/06/20/ords-rest-getting-bind-variables-right/header/" data-orig-file="https://ruepprich.files.wordpress.com/2017/06/header.png?w=550" data-orig-size="439,239" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="header" data-image-description="" data-medium-file="https://ruepprich.files.wordpress.com/2017/06/header.png?w=550?w=300" data-large-file="https://ruepprich.files.wordpress.com/2017/06/header.png?w=550?w=439" class="alignnone size-full wp-image-2364" src="https://ruepprich.files.wordpress.com/2017/06/header.png?w=550" alt="header" srcset="https://ruepprich.files.wordpress.com/2017/06/header.png 439w, https://ruepprich.files.wordpress.com/2017/06/header.png?w=150 150w, https://ruepprich.files.wordpress.com/2017/06/header.png?w=300 300w" sizes="(max-width: 439px) 100vw, 439px" /></p> <p>Create the query and parameters as before.</p> <p>Test:</p> <p>You&#8217;ll have to test this with a REST client like POSTman or CURL:</p> <pre>$ curl -H "id:7788" -H "ename:SCOTT" http://myserver:8080/ords/cmr/hr/testheader</pre> <p>Note when using header variables, you can leave some out without getting an error.</p> <p>Happy RESTing!</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ruepprich.wordpress.com/2341/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ruepprich.wordpress.com/2341/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=ruepprich.wordpress.com&#038;blog=12765658&#038;post=2341&#038;subd=ruepprich&#038;ref=&#038;feed=1" width="1" height="1" /> Christoph Ruepprich http://ruepprich.wordpress.com/?p=2341 Tue Jun 20 2017 16:38:11 GMT-0400 (EDT) ODTUG Kscope17 Livestream Sessions http://www.odtug.com/p/bl/et/blogaid=735&source=1 If you can't make it to ODTUG Kscope17, you can still participate from home. Check out the list of sessions we're bringing you live from San Antonio, Texas! ODTUG http://www.odtug.com/p/bl/et/blogaid=735&source=1 Tue Jun 20 2017 14:44:07 GMT-0400 (EDT) ODTUG Kscope17 Livestream Sessions http://www.odtug.com/p/bl/et/blogaid=730&source=1 If you can't make it to ODTUG Kscope17, you can still participate from home. Check out the list of sessions we're bringing you live from San Antonio, Texas! ODTUG http://www.odtug.com/p/bl/et/blogaid=730&source=1 Tue Jun 20 2017 10:02:17 GMT-0400 (EDT) All You Need to Know About ODTUG Kscope17 Beacon Technology http://www.odtug.com/p/bl/et/blogaid=728&source=1 At ODTUG Kscope17, we are using wearable beacon technology to make the event better, and understand what works and what does not. ODTUG http://www.odtug.com/p/bl/et/blogaid=728&source=1 Mon Jun 19 2017 14:18:22 GMT-0400 (EDT) Things to do after you cloned a Virtual Machine http://vanbortel.blogspot.com/2017/06/things-to-do-after-you-cloned-virtual.html Clean up a cloned VM After you made a clone of your (base) VM, you will need to do some stuff. MAC-address First of all, I suspect you have a different MAC-address than the original machine. VMWare does that, as long as you have your MAC address assigned automatically. VirtualBox will ask you whether to re-initialize the MAC-address while cloning. The problem is the udev process, responsable Frank tag:blogger.com,1999:blog-12361937.post-3723737492271476219 Mon Jun 19 2017 03:43:00 GMT-0400 (EDT) Now, here's an idea... http://vanbortel.blogspot.com/2017/06/now-heres-idea.html Gaining control Or rather - regaining control. Over my own data, and what's done with it. Currently, I use several services, of which I know they are monitored. Several of these services fall under US legislation, although I'm not a US citizen. This allows several agencies to go through my documents, email and other stuff, whether I like that or not (I do not). Of course, for some of this, I Frank tag:blogger.com,1999:blog-12361937.post-6952974218397800322 Sun Jun 18 2017 04:41:00 GMT-0400 (EDT) Stroage server http://vanbortel.blogspot.com/2017/06/stroage-server.html Storage server Hardware Aiming at 2 VDEVs of 5 or 6 disks each, I'd need a motherboard capable of running 12 disks.I used a SuperMicro board in the ESXi build, mainly because virtualization using bare metal hypervisors was quite new to me. However, these boards have quite a steep price. There's a new motherboard by SuperMicro, that screams NAS, but that has not yet hit the shops. So, I Frank tag:blogger.com,1999:blog-12361937.post-3964505497933812336 Sun Jun 18 2017 04:40:00 GMT-0400 (EDT) Conoce el Tema Material APEX una alternativa al Tema Universal 42 http://feedproxy.google.com/~r/DescubriendoElMundoDeOracle/~3/2eFx4FWfr4A/conoce-el-tema-material-apex-una.html <div style="text-align: justify;">Hola a todos, hoy quiero compartir con ustedes que se han cumplido 2 años del proyecto que ha iniciado <strong>Vincent Morneau</strong> del Tema Material APEX.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Vincent nos cuenta que hace 2 años empezó este proyecto con el objetivo de proporcionar una alternativa adecuada al Tema Universal. Lo ha estado publicando de forma gratuita desde entonces y hoy ha llegado a su 12ª versión.</div><div style="text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-z_BuTbsybWc/WUV8mg5YVII/AAAAAAAAB5U/-eaB5mBJisoxPGFwA65BHStVSyZdGEXRQCLcBGAs/s1600/img0.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="677" data-original-width="1566" height="172" src="https://3.bp.blogspot.com/-z_BuTbsybWc/WUV8mg5YVII/AAAAAAAAB5U/-eaB5mBJisoxPGFwA65BHStVSyZdGEXRQCLcBGAs/s400/img0.jpg" width="400" /></a></div><br /><br />Leer más <a href="https://www.toadworld.com/platforms/oracle/b/weblog/archive/2017/06/17/conoce-el-tema-material-apex-una-alternativa-al-tema-universal-42" target="_blank">AQUI</a><br /><br /><img src="http://feeds.feedburner.com/~r/DescubriendoElMundoDeOracle/~4/2eFx4FWfr4A" height="1" width="1" alt=""/> Clarisa J. Maman Orfali tag:blogger.com,1999:blog-1315583943401206186.post-8255386691105872139 Sat Jun 17 2017 15:03:00 GMT-0400 (EDT) Kscope 17 http://www.talkapex.com/2017/06/kscope-17/ <p>I’ll be attending and presenting at this year’s <a href="http://kscope17.com" target="_blank" rel="external">ODTUG Kscope 17</a>. Here are some things that I’m involved with and my personal highlights for the conference this year:</p> <h1 id="Conference-Planning-APEX-App"><a href="#Conference-Planning-APEX-App" class="headerlink" title="Conference Planning APEX App"></a>Conference Planning APEX App</h1><p>We (<a href="http://www.insum.ca" target="_blank" rel="external">Insum</a>) created a conference planning application built in APEX: <a href="https://bit.ly/insum-kscope17" target="_blank" rel="external">bit.ly/insum-kscope17</a>. The goal was to showcase APEX and some cool features we added into the application. If time permits I may give a brief demo into how we created the app during Monday’s <a href="APEX Open Mic Night">APEX Open Mic Night</a>. I made a short video to highlight this application:</p> <div class="video-container"><iframe src="//www.youtube.com/embed/DiV7Zt4LFSc" frameborder="0" allowfullscreen></iframe></div> <p>Note: This is an unofficial application. Official Kscope 17 mobile apps for <a href="https://itunes.apple.com/us/app/odtug-kscope17/id1228530832?mt=8&amp;utm_source=email&amp;utm_source=email&amp;utm_source=email&amp;utm_source=email&amp;utm_source=email&amp;utm_campaign=Mobile_app_and_Kscope_Go_&amp;utm_campaign=Mobile_app_and_Kscope_Go_&amp;utm_campaign=Mobile_app_and_Kscope_Go_&amp;utm_campaign=Mobile_app_and_Kscope_Go_&amp;utm_campaign=Mobile_app_and_Kscope_Go_&amp;cmp=1&amp;cmp=1&amp;cmp=1&amp;cmp=1&amp;cmp=1&amp;utm_medium=HTMLEmail&amp;utm_medium=HTMLEmail&amp;utm_medium=HTMLEmail&amp;utm_medium=HTMLEmail&amp;utm_medium=HTMLEmail&amp;utm_source=email&amp;utm_campaign=Mobile_app_and_Kscope_Go_&amp;cmp=1&amp;utm_medium=HTMLEmail" target="_blank" rel="external">Apple iOS</a> and <a href="https://play.google.com/store/apps/details?id=com.crowdcompass.appoYMYOqXoRT&amp;utm_source=email&amp;utm_source=email&amp;utm_source=email&amp;utm_source=email&amp;utm_source=email&amp;utm_campaign=Mobile_app_and_Kscope_Go_&amp;utm_campaign=Mobile_app_and_Kscope_Go_&amp;utm_campaign=Mobile_app_and_Kscope_Go_&amp;utm_campaign=Mobile_app_and_Kscope_Go_&amp;utm_campaign=Mobile_app_and_Kscope_Go_&amp;cmp=1&amp;cmp=1&amp;cmp=1&amp;cmp=1&amp;cmp=1&amp;utm_medium=HTMLEmail&amp;utm_medium=HTMLEmail&amp;utm_medium=HTMLEmail&amp;utm_medium=HTMLEmail&amp;utm_medium=HTMLEmail&amp;utm_source=email&amp;utm_campaign=Mobile_app_and_Kscope_Go_&amp;cmp=1&amp;utm_medium=HTMLEmail" target="_blank" rel="external">Google Android</a>.</p> <h1 id="Presentations"><a href="#Presentations" class="headerlink" title="Presentations"></a>Presentations</h1><p>I’ll be giving / participating in the following presentations:</p> <h2 id="Explore-the-APEX-APIs"><a href="#Explore-the-APEX-APIs" class="headerlink" title="Explore the APEX APIs"></a>Explore the APEX APIs</h2><p><strong>When</strong>: Jun 26, 2017, Monday Session 5 , 4:45 pm - 5:45 pm<br><strong>Room</strong>: Cibolo Canyon 5</p> <p>Most developers new to APEX aren’t aware that APEX comes with a plethora of very powerful APIs for both PL/SQL and JavaScript. This presentation will highlight some of these APIs and explain how and when to use them to speed up and simplify developing your APEX applications. New 5.1 APIs will also be discussed.</p> <h2 id="Open-Source-PL-SQL-Utility-Tools-for-Oracle"><a href="#Open-Source-PL-SQL-Utility-Tools-for-Oracle" class="headerlink" title="Open Source PL/SQL Utility Tools for Oracle"></a>Open Source PL/SQL Utility Tools for Oracle</h2><p><em>Note: this is in the Database track rather than the APEX track. More about this below.</em></p> <p><strong>When</strong>: Jun 28, 2017, Wednesday Session 14 , 1:45 pm - 2:45 pm<br><strong>Room</strong>: Verbena/Periwinkle</p> <p><a href="https://github.com/oraopensource/oos-utils" target="_blank" rel="external">OOS Utils</a> is a free open-source PL/SQL tool set for common utility functionality that developers use. Its goal is to prevent developers from having to rewrite the same code over and over again.</p> <p>This presentation will highlight some of the great features of OOS Utils and showcase some future plans for the project. All audience types (DBAs, PL/SQL and APEX developers, and development managers) are encouraged to attend, as all will see immediate benefits for themselves or their teams to use.</p> <h2 id="LetsWreckThisTogether-APEX-Talks"><a href="#LetsWreckThisTogether-APEX-Talks" class="headerlink" title="#LetsWreckThisTogether APEX Talks"></a>#LetsWreckThisTogether APEX Talks</h2><p><em>This is a 2 hour session with many of the APEX gurus giving 10 minute lightning talks. My 10 min talk is called “Optimizing Laziness” and will be about how to develop more efficiently.</em></p> <p><strong>When</strong>: Jun 29, 2017, Deep-Dive Session, 9:00 am - 11:00 am<br><strong>Room</strong>: Grand Oaks G</p> <p>Just in case you have not received enough inspiring content by the end of the week, the #LetsWreckThisTogether APEX Talks is back. At last year’s Kscope, this exciting new format was a success.</p> <p>Instead of long, in-depth “deep dives” on a single topic. The APEX track of the conference will close with Lightning Talks presented by some of the best and well-known speakers and personalities in the APEX world.</p> <p>The exact lineup will be announced closer to the event.</p> <h2 id="Insum-Vendor-Presentation"><a href="#Insum-Vendor-Presentation" class="headerlink" title="Insum Vendor Presentation"></a>Insum Vendor Presentation</h2><p>When: Jun 27, 2017, Tuesday Vendor Presentation, 9:45 am - 10:45 am<br>Room: Cibolo Canyon 5<br>Topic: Vendor Presentation - Subtopic: Vendor Presentation</p> <p>We’re doing something very different this year for our vendor presentation. Instead of a pre-canned talk we’re letting you decide what we talk about. Think <a href="https://en.wikipedia.org/wiki/Choose_Your_Own_Adventure" target="_blank" rel="external">Choose Your Own Adventure</a> but instead of stories we’ve got some great mini APEX presentations to chose from. You can vote right now for what you’d like to see in this presentation: <a href="http://bit.ly/insum-vote-kscope17" target="_blank" rel="external">bit.ly/insum-vote-kscope17</a>! If you aren’t going to be at Kscope 17 we still encourage you to vote as we may do webinars on some of the top topics. We also have a full <a href="https://www.insum.ca/breadboard-innovation-oracle-apex/" target="_blank" rel="external">blog post</a> about this.</p> <h1 id="Other-Kscope-News"><a href="#Other-Kscope-News" class="headerlink" title="Other Kscope News"></a>Other Kscope News</h1><h2 id="Monday-Night-Events"><a href="#Monday-Night-Events" class="headerlink" title="Monday Night Events"></a>Monday Night Events</h2><p>Monday night is all about communities at Kscope. APEX will have its annual Open Mic Night which is one of my favorite events at Kscope. If you have an APEX application you’d like to show off this is the place to do it!</p> <p>The Database Community is changing things up and doing something similar to APEX with its own twist. It will be a combination of lightning talks and a variety show. I can’t speak for the later but if you have some cool PL/SQL, SQL, etc that you’d like to show off in 5 minutes or less this is the place to do it! I may have a few demos up my sleeve that I may show if there’s any room on the signup list.</p> <p>More information about all the Monday night events can be found <a href="http://kscope17.com/events/community-nigh-events" target="_blank" rel="external">here</a>.</p> <h2 id="APEX-Speakers-in-the-Database-Track"><a href="#APEX-Speakers-in-the-Database-Track" class="headerlink" title="APEX Speakers in the Database Track"></a>APEX Speakers in the Database Track</h2><p>This year we asked some of our top APEX speakers to give presentations in the Database track. The reason behind it is that APEX developers do a lot of PL/SQL and SQL and we’re hoping that these presenters will encourage some of the APEX attendees to check out the Database presentations. Here are the APEX speakers giving talks in the Database track:</p> <ul> <li>Open-Source PL/SQL Utility Tools for Oracle - Martin D’Souza</li> <li>Six Reasons Why You Will Get Addicted to SQLcl Scripting - Sabine Heimsath</li> <li>Oracle 12c for Developers - Alex Nuijten</li> </ul> <h2 id="Twitter"><a href="#Twitter" class="headerlink" title="Twitter"></a>Twitter</h2><p>Keep up to date on all the Kscope news by following the <a href="https://twitter.com/hashtag/kscope17" target="_blank" rel="external">#kscope17</a> on Twitter.</p> <h1 id="Wrapping-Up"><a href="#Wrapping-Up" class="headerlink" title="Wrapping Up"></a>Wrapping Up</h1><p>For those going to Kscope 17 see you in a few weeks and be sure to say hi!</p> <p>- Martin</p> Martin Giffy D'Souza http://www.talkapex.com/2017/06/kscope-17/ Fri Jun 16 2017 02:09:59 GMT-0400 (EDT) APEX Universal theme auto hide success message http://lschilde.blogspot.com/2017/06/apex-universal-theme-auto-hide-success.html <div dir="ltr" style="text-align: left;" trbidi="on"><h2 style="text-align: justify;"><span style="font-family: &quot;verdana&quot; , sans-serif;">APEX 5.1 <span style="font-family: &quot;verdana&quot; , sans-serif;">auto hide success message</span><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"></span></span></span></h2><h3 style="text-align: left;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">Auto Client side error messa<span style="font-family: &quot;verdana&quot; , sans-serif;">ges handling</span></span></span></span></h3><h4 style="text-align: left;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">Follow up post on few posts out there<span style="font-family: &quot;verdana&quot; , sans-serif;"></span></span></span></span></span></span> </span></h4><br /><div style="text-align: justify;"><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">Recently I noticed few blog posts on <span style="font-family: &quot;verdana&quot; , sans-serif;">this problem and lazy me said cool something interesting and useful that <span style="font-family: &quot;verdana&quot; , sans-serif;">I would want to reuse. Then I noticed few issues and wanted to write this blog in o<span style="font-family: &quot;verdana&quot; , sans-serif;">rder to complete the picture.</span></span></span></span></span></span></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><b><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">Situation&nbsp;</span></span></b> </span></span></span></div><div style="text-align: justify;"><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">We have form or interactive gri<span style="font-family: &quot;verdana&quot; , sans-serif;">d<span style="font-family: &quot;verdana&quot; , sans-serif;"> where we can edit and sa<span style="font-family: &quot;verdana&quot; , sans-serif;">ve some data. <span style="font-family: &quot;verdana&quot; , sans-serif;">Excellent but why does no<span style="font-family: &quot;verdana&quot; , sans-serif;">t </span>this success message that confirms all went well<span style="font-family: &quot;verdana&quot; , sans-serif;"> auto retrieves<span style="font-family: &quot;verdana&quot; , sans-serif;">. How do we sort that?</span></span></span></span></span></span></span></span></span></div><br /><div style="text-align: center;"><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><a href="http://1.bp.blogspot.com/-ipohpXvoBcU/WTohPmcucqI/AAAAAAAALJo/C4_YYPyiy-wwXJjqB-gJTAY879gbtJrJgCK4B/s1600/Demo_notAuto_close.gif" imageanchor="1"><img border="0" height="376" src="https://1.bp.blogspot.com/-ipohpXvoBcU/WTohPmcucqI/AAAAAAAALJo/C4_YYPyiy-wwXJjqB-gJTAY879gbtJrJgCK4B/s400/Demo_notAuto_close.gif" width="400" /></a>&nbsp;</span></span></span></span></span></span></span></span></span></div><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">&nbsp;A<span style="font-family: &quot;verdana&quot; , sans-serif;">s you see <span style="font-family: &quot;verdana&quot; , sans-serif;">user </span>ha<span style="font-family: &quot;verdana&quot; , sans-serif;">s</span> to cli</span></span></span>ck in or<span style="font-family: &quot;verdana&quot; , sans-serif;">der to close the mesage. </span></span></span></span></span></span></span></span><br /><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><b>Solution</b>&nbsp;</span></span></span></span><br /><div style="text-align: justify;"><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">There ar<span style="font-family: &quot;verdana&quot; , sans-serif;">e few blog posts out there dealing with the same issue bu<span style="font-family: &quot;verdana&quot; , sans-serif;">t none were complete</span></span></span> or better said they<span style="font-family: &quot;verdana&quot; , sans-serif;"> worked perfectly <span style="font-family: &quot;verdana&quot; , sans-serif;">in<span style="font-family: &quot;verdana&quot; , sans-serif;"> certain situation</span></span></span>. At least <span style="font-family: &quot;verdana&quot; , sans-serif;">we were</span> getting still some iss<span style="font-family: &quot;verdana&quot; , sans-serif;">ues<span style="font-family: &quot;verdana&quot; , sans-serif;"> so we decided to merge them into one. :)</span></span></span></span></span></span></div><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><a href="http://apexbyg.blogspot.com.au/2017/06/auto-hide-client-side-messages.html">Marko's blog</a> expl<span style="font-family: &quot;verdana&quot; , sans-serif;">ains in detail how to sort this out on IG <span style="font-family: &quot;verdana&quot; , sans-serif;">type of page which is awesome. But what happens <span style="font-family: &quot;verdana&quot; , sans-serif;">if you <span style="font-family: &quot;verdana&quot; , sans-serif;">by <span style="font-family: &quot;verdana&quot; , sans-serif;">accident </span></span></span></span></span></span></span></span></span></span><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">set this up </span></span></span></span></span></span></span></span><br /><br /><pre class="lang-js prettyprint prettyprinted" style="background-color: #eff0f1; border: 0px; color: #393318; font-family: consolas, menlo, monaco, &quot;lucida console&quot;, &quot;liberation mono&quot;, &quot;dejavu sans mono&quot;, &quot;bitstream vera sans mono&quot;, &quot;courier new&quot;, monospace, sans-serif; font-size: 13px; margin-bottom: 1em; max-height: 600px; overflow: auto; padding: 5px; width: auto; word-wrap: normal;">apex.message.setThemeHooks({<br /> beforeShow: function(pMsgType, pElement$){<br /> setTimeout(function() {<br /> $('.t-Alert').fadeOut('slow');<br /> }, 3000); <br /> }<br />});</pre><br /><div style="text-align: justify;"><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">to be executing on page load on your Page 0 global page. <span style="font-family: &quot;verdana&quot; , sans-serif;">It breaks some of modal<span style="font-family: &quot;verdana&quot; , sans-serif;"> page functionality if <span style="font-family: &quot;verdana&quot; , sans-serif;">modal page gives </span>throws any<span style="font-family: &quot;verdana&quot; , sans-serif;"> </span>error. So make sure you use </span></span></span></span></span></span></span><br /><pre class="lang-js prettyprint prettyprinted" style="background-color: #eff0f1; border: 0px; color: #393318; font-family: consolas, menlo, monaco, &quot;lucida console&quot;, &quot;liberation mono&quot;, &quot;dejavu sans mono&quot;, &quot;bitstream vera sans mono&quot;, &quot;courier new&quot;, monospace, sans-serif; font-size: 13px; margin-bottom: 1em; max-height: 600px; overflow: auto; padding: 5px; width: auto; word-wrap: normal;">if (pMsgType=='success'){</pre></div><div style="text-align: justify;"><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">condition. Also it did not seem to sort issues with regular Form submits. </span></span></span></span></span></span></span></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">Other one <span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">was from <a href="https://oracleinsights.blogspot.com.au/2017/04/auto-dismiss-apex-universal-theme.html">Mark</a>.&nbsp;</span></span></div><div style="text-align: justify;"><br /></div><div style="font-size: 12.0pt; text-align: justify;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">Which on the other hand sorts the prob<span style="font-family: &quot;verdana&quot; , sans-serif;">lem of saving the regular form <span style="font-family: &quot;verdana&quot; , sans-serif;">by</span> a<span style="font-family: &quot;verdana&quot; , sans-serif;">uto <span style="font-family: &quot;verdana&quot; , sans-serif;">d<span style="font-family: &quot;verdana&quot; , sans-serif;">ismissing the message. But it would get stuc<span style="font-family: &quot;verdana&quot; , sans-serif;">k if <span style="font-family: &quot;verdana&quot; , sans-serif;">user<span style="font-family: &quot;verdana&quot; , sans-serif;"> would click on 'X' tr<span style="font-family: &quot;verdana&quot; , sans-serif;">ying to manually </span>clos<span style="font-family: &quot;verdana&quot; , sans-serif;">e the message.</span></span></span></span></span></span></span></span></span></span></div><div style="text-align: justify;"><br /></div><div style="font-size: 12.0pt; text-align: justify;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">All credentials go to <span style="font-family: &quot;verdana&quot; , sans-serif;">original post<span style="font-family: &quot;verdana&quot; , sans-serif;">ers</span> of course. <span style="font-family: &quot;verdana&quot; , sans-serif;">For my future reference this was <span style="font-family: &quot;verdana&quot; , sans-serif;">what worked for me<span style="font-family: &quot;verdana&quot; , sans-serif;">:&nbsp;</span></span></span></span></span> </span></span></span></span></span></span></div><br /><pre class="lang-js prettyprint prettyprinted" style="background-color: #eff0f1; border: 0px; color: #393318; font-family: consolas, menlo, monaco, &quot;lucida console&quot;, &quot;liberation mono&quot;, &quot;dejavu sans mono&quot;, &quot;bitstream vera sans mono&quot;, &quot;courier new&quot;, monospace, sans-serif; font-size: 13px; margin-bottom: 1em; max-height: 600px; overflow: auto; padding: 5px; width: auto; word-wrap: normal;">apex.jQuery(document).ready(function() {<br /> <br /> var opt = {<br /> autoDismiss: true,<br /> duration: 3000 // Optional. Default value is 3000<br /> }<br /><br /> // this only applys configuration when base page has a process success message ready to display<br /> apex.theme42.configureSuccessMessages(opt);<br /><br /> if (apex.theme42.configureSuccessMessages.options === undefined) {<br /> <br /><br /> apex.theme42.configureSuccessMessages.options = opt;<br /> }<br /><br /> //Marko code<br /> apex.message.setThemeHooks({<br /> beforeShow: function(pMsgType, pElement$){<br /> if (pMsgType=='success'){ <br /> setTimeout(function() {<br /> $('.t-Alert').fadeOut('slow');<br /> }, 3000);<br /> } <br /> }<br /> });<br /> <br /> <br /> //Additional<br /> $('.t-Button--closeAlert').click( function(){<br /> $('.t-Alert').fadeOut('slow');<br /> //console.log('clicked'); <br /> });<br /> <br /> <br />});<br /></pre><span 12.0pt="" font-size:="" style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">Only in this combination <span style="font-family: &quot;verdana&quot; , sans-serif;">things seems to work.</span></span></span></span></span></span></span></span><br /><br /><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">Happy <span style="font-family: &quot;verdana&quot; , sans-serif;">Apexing<span style="font-family: &quot;verdana&quot; , sans-serif;">,</span></span></span></span></span></span></span></span></span></span><br /><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">S<span style="font-family: &quot;verdana&quot; , sans-serif;">Lino</span></span>&nbsp;</span></span></span></span></span></span></span></span></span></span><br /><br /><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><i style="background-color: white; font-family: &quot;trebuchet ms&quot;,trebuchet,verdana,sans-serif; font-size: 13.2px;">Tested on internal and ape<span style="font-family: &quot;verdana&quot; , sans-serif;">x.or<span style="font-family: &quot;verdana&quot; , sans-serif;">acle.com on </span></span>APEX version 5.1.1.00.08</i>&nbsp;</span></span> </span></span></span></span></span></span></span></span></div> SLino tag:blogger.com,1999:blog-8185384792158425670.post-4738242012200122890 Fri Jun 16 2017 00:52:00 GMT-0400 (EDT) How to get, use, and close a DB connection using the Async module https://jsao.io/2017/06/how-to-get-use-and-close-a-db-connection-using-the-async-module/ <p>The <a href="https://jsao.io/2017/06/how-to-get-use-and-close-a-db-connection-using-callbacks/">first pattern</a> we looked at in this series was the Node.js callback pattern. As I mentioned there, that pattern alone will only get you so far. Eventually, you&#8217;ll want to construct asynchronous workflows that process elements in a collection serially or run several tasks in parallel. You could write your own library, but why reinvent the wheel when you could just use <a href="http://caolan.github.io/async/docs.html">Async</a>, one of the most popular Node.js libraries ever. In this post, we&#8217;ll take a look at Async to see how it can help you write asynchronous code in Node.js.<br /> <span id="more-2030"></span></p> <div class="alert alert-info" role="alert"> <strong>Please Note:</strong> This post is part of <a href="https://jsao.io/2017/06/how-to-get-use-and-close-a-db-connection-using-various-async-patterns/">a series on working with database connections using various asynchronous patterns</a>. See that post for more details and links to other options. </div> <h4>Async module overview</h4> <p>Async is not included with Node.js so it must be installed via NPM (Yarn and Bower work too) using a command like <span class="inline-code">npm install async &#8211;save</span>. A native means to reason about async processing, Promise, eventually made its way into JavaScript and Node.js. We&#8217;ll cover promises in the next part of this series. For now, let&#8217;s focus on Async. </p> <p>Once installed, you can require the library in and take advantage of its 70+ methods for various asynchronous processing situations. A glance at the documentation shows that Async&#8217;s methods fall into three main groups: Collections, Control Flow, and Utils. Let&#8217;s take a look at a couple examples from the first two groups.</p> <p>This first example uses Async&#8217;s <span class="inline-code">eachSeries</span> method to process an array one element at a time.</p> <pre class="crayon-plain-tag">const async = require('async'); const fakeAsyncApi = function(thing, callback) { setTimeout(function() { const error = Math.random() &gt; .8 ? true : false; if (error) { callback(new Error('Failed to process ' + thing)); } else { console.log(thing + ' processed'); callback(null); } }, 2000); }; const thingsToProcess = [ 'thing 1', 'thing 2', 'thing 3' ]; async.eachSeries( thingsToProcess, fakeAsyncApi, function(err) { if (err) { console.log('An error occurred!'); console.log(err); return; } console.log('All done!'); } );</pre> <p>Here&#8217;s an overview of the code above:</p> <ul> <li>Line 1: The Async library is required in after having been installed.</li> <li>Lines 3-14: A fake API that implements the Node.js callback pattern is defined. The API will occasionally simulate an error occurring so that behavior can be observed.</li> <li>Lines 16-20: An array of &#8220;things&#8221; to process is defined. Typically, the elements would be obtained from reading a file or querying a database. Each element needs to be processed using the fake API.</li> <li>Lines 22-34: Async&#8217;s <span class="inline-code">eachSeries</span> method is used the process the array. The first parameter is the array to be processed, the second parameter is a function (iteratee) that will process a single element, and the third parameter is a function that should be invoked when all work is done or immediately after an error occurs. Async will pass the iteratee one element from the array along with a callback that, when invoked, will let Async know it can move to the next element in the array.</li> </ul> <p>Copy the script to a file and run it with Node.js (don&#8217;t forget to install Async). You should see that each element is processed serially. If an error occurs, processing will stop and the final callback will be invoked immediately. </p> <p>If you change the <span class="inline-code">eachSeries</span> method to <span class="inline-code">each</span>, you&#8217;ll see that all elements are processed in parrallel. Using <span class="inline-code">eachLimit</span> (requires an additional parameter) will limit the number of functions running at the same time. Pretty cool, huh?</p> <p>Here&#8217;s an example of a Control Flow method, <span class="inline-code">series</span>, which takes an array of functions and executes them one at a time.</p> <pre class="crayon-plain-tag">const async = require('async'); const fakeAsyncApi = function(taskName, timeout, callback) { setTimeout(function() { const error = Math.random() &gt; .8 ? true : false; if (error) { callback(new Error('Failed to process ' + taskName)); } else { console.log(taskName + ' complete'); callback(null); } }, timeout); }; async.series( [ function(callback) { fakeAsyncApi('task 1', 2000, callback); }, function(callback) { fakeAsyncApi('task 2', 1500, callback); }, function(callback) { fakeAsyncApi('task 3', 3000, callback); } ], function(err) { if (err) { console.log('An error occurred!'); console.log(err); return; } console.log('All done!'); } );</pre> <p>Here&#8217;s a rundown of the script above:</p> <ul> <li>Line 1: The Async library is required in after having been installed.</li> <li>Lines 3-14: A fake API that implements the Node.js callback pattern is defined. The API will occasionally simulate an error occurring so that behavior can be observed.</li> <li>Lines 16-37: Async’s <span class="inline-code">series</span> method is used to process a number of asynchronous tasks/functions. The first parameter is the arrays of functions, each of which is passed a callback used to indicate when its work is complete. The second parameter is a function that will be invoked when all tasks have completed or immediately after an error occurs.</li> </ul> <p>If you copy the script to a file and run it with Node.js, you&#8217;ll see that it behaves very much like the first script, only it works with tasks rather than elements in an array. If you replace <span class="inline-code">series</span> with <span class="inline-code">parallel</span> the tasks will run at the same time.</p> <p>As you can see, Async extends the Node.js callback pattern, adding many handy methods that make quick work of various asynchronous flows. The library includes many more methods that can help with specific use cases, such as <span class="inline-code">waterfall</span>, <span class="inline-code">queue</span>, and <span class="inline-code">race</span>. Try to be aware of what&#8217;s avaialble so you can leverage it if needed.</p> <h4>Async module demo app</h4> <p>The Async demo app is comprised of the following four files. The files are also available via <a href="https://gist.github.com/dmcghan/9e507fbd5383d9f768364f8d4d3fdecf">this Gist</a>.</p> <pre class="crayon-plain-tag">{ &quot;name&quot;: &quot;async-module&quot;, &quot;version&quot;: &quot;1.0.0&quot;, &quot;description&quot;: &quot;&quot;, &quot;main&quot;: &quot;index.js&quot;, &quot;scripts&quot;: { &quot;test&quot;: &quot;echo \&quot;Error: no test specified\&quot; &amp;&amp; exit 1&quot; }, &quot;keywords&quot;: [], &quot;author&quot;: &quot;Dan McGhan &lt;dan.mcghan@oracle.com&gt; (https://jsao.io/)&quot;, &quot;license&quot;: &quot;ISC&quot;, &quot;dependencies&quot;: { &quot;async&quot;: &quot;^2.4.1&quot;, &quot;oracledb&quot;: &quot;^1.13.1&quot; } }</pre> <p>This is a very basic <span class="inline-code">package.json</span> file. Note that both async and oracledb are listed as depenencies.</p> <pre class="crayon-plain-tag">const oracledb = require('oracledb'); const async = require('async'); const dbConfig = require('./db-config.js'); const employees = require('./employees.js'); async.series( [ function(callback) { oracledb.createPool(dbConfig, function(err) { callback(err); }); }, function(callback) { employees.getEmployee(101, function(err, emp) { if (err) { callback(err); return; } console.log(emp); }); }, ], function(err) { if (err) { console.log(err); } } );</pre> <p>In this version of the <span class="inline-code">index.js</span>, Async&#8217;s <span class="inline-code">series</span> method is used to first create a connection pool and then to fetch an employee. Although the pool is passed to the callback function for <span class="inline-code">createPool</span>, it&#8217;s not referenced here as the <a href="https://github.com/oracle/node-oracledb/blob/master/doc/api.md#-831-connection-pool-cache">built-in pool cache</a> will be used in <span class="inline-code">employees.js</span>.</p> <pre class="crayon-plain-tag">module.exports = { user: 'hr', password: 'oracle', connectString: '192.168.56.101:1521/orcl', poolMax: 20, poolMin: 20, poolIncrement: 0 };</pre> <p>The <span class="inline-code">db-config.js</span> file is used in <span class="inline-code">index.js</span> to provide the connection info for the database. This configuration should work with <a href="https://jsao.io/2017/05/creating-a-sandbox-for-learning-nodejs-and-oracle-database/">the DB App Dev VM</a>, but it will need to be adjusted for other environments.</p> <pre class="crayon-plain-tag">const oracledb = require('oracledb'); const async = require('async'); function getEmployee(empId, getEmployeeCallback) { async.waterfall( [ function(callback) { oracledb.getConnection(function(err, conn) { if (err) { console.log('Error getting connection', err); } else { console.log('Connected to database'); } callback(err, conn); }); }, function(conn, callback) { conn.execute( `select * from employees where employee_id = :emp_id`, [empId], { outFormat: oracledb.OBJECT }, function(err, result) { if (err) { console.log('Error executing query', err); } else { console.log('Query executed'); } callback(err, conn, result); } ); } ], function(err, conn, result) { if (err) { getEmployeeCallback(err); } else { getEmployeeCallback(null, result.rows[0]); } // If error getting conn, no need to close. if (conn) { conn.close(function(err) { if (err) { console.log('Error closing connection', err); } else { console.log('Connection closed'); } }); } } ); } module.exports.getEmployee = getEmployee;</pre> <p>This version of the <span class="inline-code">employees.js</span> file uses Async&#8217;s <span class="inline-code">waterfall</span> method to get a connection to the database, use it to execute a query, and then close a connection. I chose <span class="inline-code">waterfall</span> over, say, <span class="inline-code">series</span> because it allows me to pass the connection obtained in the first task along to the next task. There are other ways to manage state with <span class="inline-code">series</span>.</p> <p>The logic to close the connection was put in the final function (not in the list of tasks), as that will be invoked if the tasks complete successfully or if an error occurs &#8211; much like <span class="inline-code">finally</span> in <span class="inline-code">try&#8230;catch&#8230;finally</span>.</p> <p>Hopefully, you now see how powerful the Async module can be. Check out the next part of the series to see how to use promises to do the same work.</p> danmcghan https://jsao.io/?p=2030 Thu Jun 15 2017 10:08:51 GMT-0400 (EDT) Presentation: Dynamic Actions, Javascript, & CSS for APEX Beginners http://www.grassroots-oracle.com/2017/06/presentation-dynamic-actions-javascript.html My <a href="http://www.grassroots-oracle.com/2015/03/why-i-cant-do-webinars.html" target="_blank">first webinar</a> didn't do so well, perhaps my new home will have suitable internet capability, in this "innovate nation" of ours...<br /><br />My <a href="http://www.ausoug.org.au/cms/rest/ebulletin/all/2015/25" target="_blank">second one</a> on my Boggex game went ok, though the room the locals were in was like an sauna.<br /><br />My <a href="https://community.oracle.com/events/5565" target="_blank">third attempt</a> had it's own set of issues.<br />1) Ubuntu as an OS doesn't seem to enable broadcasting via GoTo Meeting.<br />2) The wireless policy in the Oracle building is effective, but not great for hastily setting up a second laptop<br />3) The navigation keys on Lino's keyboard was just different enough to be disruptive<br />4) While I use on Chrome's save password feature, I'm pretty confident with most of my APEX passwords. It's the username I was stuffing up on the foreign PC.<br />5) The think tank at HP thought it would be a good idea to map Aeroplane Mode to F12, so when I proceeded to display the Chrome browser console...<br /><br />So balance was restored after the first 10 or 15 minutes, which rattled my first attempt at presenting using just an APEX app - no powerpoint/prezi.<br /><br />Though I think the concept was fine. It's just like training people, jumping between Page Designer and runtime.<br /><br />I'd give it another go, and it's less presentation prep. I learned a bit from the first session, and explored some layout options while I was at it.<br /><br />I still baulk a little at the difference between talking with a live crowd, and a community of ears at the other end of my microphone. I wonder if (finally) creating a few more videos will fix that? Once my ultrabook is back from computer hospital, perhaps. In the new house?<br /><br />As for the topic, I explored dynamic actions, JavaScript and CSS for those trying to understand the fundamentals. It's a favourite topic of mine and I think there are a few basic patterns that get me a long way in creating interactive applications.<br /><br />No doubt I'll refine these example further, and how to communicate them more concisely. Stay tuned.<br /><br />I've made the app available here. Please feel free to provide any feedback, either here or through the app.<br /><a href="https://apex.oracle.com/pls/apex/f?p=27882">https://apex.oracle.com/pls/apex/f?p=27882</a><br />My favourite page is P50 specifically on Dynamic Actions, probably the most versatile utility within APEX.<br />If you scroll down you'll see the relevant code I used to sustain an interactive page that doesn't need to submit.<br />Also look out for things like conditional buttons, conditional colours (foreground and background), APEX behaviour considerations, among others.<br /><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://3.bp.blogspot.com/-Y70GfaI-rsA/WUFNxw4x8II/AAAAAAAAQzg/4wNaZ1_QyVoD060LWq5RVz0P-NJPzm7kQCLcBGAs/s1600/basics_fav.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="902" data-original-width="1251" height="457" src="https://3.bp.blogspot.com/-Y70GfaI-rsA/WUFNxw4x8II/AAAAAAAAQzg/4wNaZ1_QyVoD060LWq5RVz0P-NJPzm7kQCLcBGAs/s640/basics_fav.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">If you're in Australia and you'd like&nbsp;<a href="http://www.sagecomputing.com.au/oracle_training_australia.html" style="font-size: medium; text-align: start;" target="_blank">training</a><span style="font-size: small; text-align: start;">&nbsp;on this topic, I could demonstrate cool stuff for hours ;p</span></td></tr></tbody></table>I also aim to get some organisation around github sorted when I get my laptop back, but I've at least put the export here so you can check it out directly.<br /><a href="https://github.com/swesley/apex-beginner-css-jquery">https://github.com/swesley/apex-beginner-css-jquery</a><br /><br />I hope you learn something new.<br /><br />Scott Scott Wesley tag:blogger.com,1999:blog-4818542164384221282.post-5183057795567773110 Wed Jun 14 2017 11:00:00 GMT-0400 (EDT) I'm still here. http://www.grassroots-oracle.com/2017/06/im-still-here.html <table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; text-align: right;"><tbody><tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-nEp1XcY_HYY/WUExqpPycNI/AAAAAAAAQzY/grn0ShIKV3sENbaEnkovnQhVtlM6G7HJwCLcBGAs/s1600/blog-history.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="238" data-original-width="140" src="https://1.bp.blogspot.com/-nEp1XcY_HYY/WUExqpPycNI/AAAAAAAAQzY/grn0ShIKV3sENbaEnkovnQhVtlM6G7HJwCLcBGAs/s1600/blog-history.png" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">It has been some time since my last confession.</td></tr></tbody></table>It's been a while, but sometimes you get busy, ya know?<br /><br />And a different sort of busy, the sort that left me wanting to escape to a different place. I spent a bit of time playing an old favourite, <a href="https://www.civfanatics.com/civ3/" target="_blank">Civilisation</a>.<br /><br />I really like to write, consolidate ideas, and share insights in this forum, but it's rare that I have such a gap.<br /><br />I also miss it.<br /><br />I always have plenty of unfinished drafts, but I also usually have a few recent experiences that are like an itch waiting to come out.<br /><br />There are also a few other factors. My laptop is just within warranty and I'm finally getting a line of pink pixels fixed. I'm also gonna wipe Ubuntu off it and go back to Windows.<br /><br />I feel my OS&nbsp;<a href="http://www.grassroots-oracle.com/search/label/Ubuntu" target="_blank">sojourn</a> was successful in that I realised in a career of learning such as development, some of us need to learn to swim in a pool, not the ocean. Not the best analogy, but close enough.<br /><br />My workplace is always (usually) Windows, any exploration on my laptop can be within a VM from the comfort of Windows. I've also got accumulated decades worth of keyboard shortcuts, and the muscle memory alone keeps me to the original style keyboard, not the weird ones that Macs use.<br /><br />And it turns out we're also gearing up to move house, well, start by putting our place on the market. That sounds like fun, right?<br /><br />You'll find me escaping occasionally, back here, writing with passion about what I find to be an interesting career. That, and reading/listening to stuff about science. There is some amazing stuff going on in this world! Scott Wesley tag:blogger.com,1999:blog-4818542164384221282.post-3686606209264975885 Wed Jun 14 2017 09:08:00 GMT-0400 (EDT) Whose Deck is it Anyways? http://spendolini.blogspot.com/2017/06/whose-deck-is-it-anyways.html This year at KScope, we're going to try something new. &nbsp;And fun. &nbsp;And funny to watch - we hope. &nbsp;It's called "Whose Deck is it Anyways?", and will occur on Sunday at 8:30pm. &nbsp;It's only 30 minutes, but it will likely be the best 30 minutes of the conference. &nbsp;Or at least the most embarrassing.<br /><br />Here's what we're going to do: the will be four 5-minute presentations - one on each of the following: BI, EPM, Database &amp; APEX. <br /><br />Sound interesting? &nbsp;Probably not. &nbsp;We get that, too. &nbsp;So here's what we did.<br /><br />Each 5-minute session will be presented by a non-expert. &nbsp;For example, it's highly likely that I'll be presenting on BI or EPM.<br /><br />To make it even better, each slide deck will be prepared by the corresponding expert. &nbsp;So again, it's highly likely that my slide deck's creator will be either Stewart Bryson or Edward Roske. &nbsp;If nothing else, this session will be a crash course in how not to make cohesive, easy to read slides.<br /><br />Interested now? &nbsp;Ya, I thought so. &nbsp;Here's some more details on the <a href="http://kscope17.com/events/daily-events/?utm_content=buffer1a89c&amp;utm_medium=social&amp;utm_source=twitter.com&amp;utm_campaign=buffer#GEEK" target="_blank">KScope site</a>. Scott tag:blogger.com,1999:blog-8449039.post-4330564758380469120 Tue Jun 13 2017 08:11:00 GMT-0400 (EDT) How to get, use, and close a DB connection using callbacks https://jsao.io/2017/06/how-to-get-use-and-close-a-db-connection-using-callbacks/ <p>Callback functions have been around since the early days of JavaScript, but there have never been any standards for using them. How should callbacks be passed into async APIs? How should errors that occur during async processing be handled? A lack of standards led to variations in API implementations.<br /> <span id="more-1997"></span><br /> The developers of Node.js decided that some basic rules for callbacks would be good for consistency. Today, the Node.js callback pattern is the canonical pattern used for async APIs (though some EventEmitter based APIs exist as well). Because the pattern is so simple, it&#8217;s very easy to learn and put to use. But, as we&#8217;ll see, the pattern alone isn&#8217;t perfect for every situation.</p> <div class="alert alert-info" role="alert"> <strong>Please Note:</strong> This post is part of <a href="https://jsao.io/2017/06/how-to-get-use-and-close-a-db-connection-using-various-async-patterns/">a series on working with database connections using various asynchronous patterns</a>. See that post for more details and links to other options. </div> <h4>Callback pattern overview</h4> <p>The callback pattern in Node.js follows two basic rules:</p> <ol> <li>When an asynchronous API is invoked, the callback function will be the last parameter passed in.</li> <li>When the callback function is invoked, the first parameter is reserved for an error that may have occurred. The value will be <span class="inline-code">null</span> (falsy) if no error occurred and an instance of <span class="inline-code">Error</span> (truthy) if an error did occur.</li> </ol> <p>Here&#8217;s a fictitious example that demonstrates the callback pattern:</p> <pre class="crayon-plain-tag">const asyncFunc = require('asyncFunc'); function myCallback(err, value) { if (err) { // handle error return; // Returning here is important! } // Do something with value } asyncFunc('foo', 42, myCallback);</pre> <p>This is what&#8217;s happening in the script above:</p> <ul> <li>Line 1: A fake async API is required in. This API is a function that implements the Node.js callback pattern.</li> <li>Lines 3-10: A function named <span class="inline-code">myCallback</span> is declared. The first formal parameter is reserved for errors that may occur when the async work is running (rule #2 above). The return statement on line 6 is used to exit the function after the error is handled.</li> <li>Line 12: The <span class="inline-code">asyncFunc</span> function is invoked. The last parameter passed in is a reference to the callback function (rule #1 above). When the async work is done, the callback will be added to the callback queue and eventually executed on the main thread.</li> </ul> <div class="alert alert-warning" role="alert"> <strong>Remember:</strong> If an error has occurred, it&#8217;s important to exit the function after handling the error. With this pattern, that responsibility falls on you. </div> <p>As you can see, this is a pretty simple pattern and it works great for simple, sequential async flows. But, in addition to forgetting to exit after error handling logic, there are a couple of other issues that might trip up newcomers to Node.js. </p> <h4>Callback hell</h4> <p>Callback hell (a.k.a. the pyramid of doom) is something of a right of passage with Node.js. You start by writing one async call using an anonymous callback. Then you embed another async call, and then another, and you continue doing this until even you can&#8217;t make sense of the code anymore.</p> <p>The following script, which writes a file, is a not-so-bad example of callback hell:</p> <pre class="crayon-plain-tag">const fs = require('fs'); fs.open('test.txt', 'a+', function(err, fd) { if (err) { throw err; } fs.write(fd, 'test line', function(err, written, string) { if (err) { throw err; } fs.close(fd, function (err) { if (err) { throw err; // The top of the pyramid! } }); }); });</pre> <p>Do you see how each async call is indented to help keep the code readable? To some, the whitespace that builds up to the innermost async call looks like a horizontal pyramid (I used 4 spaces for indentation over 2 to make this effect more obvious). Welcome to the pyramid of doom! <img src="https://s.w.org/images/core/emoji/2.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>Thankfully, the solution to this problem is simple: use named functions over anonymous functions! Here&#8217;s the same basic logic, rewritten using named functions.</p> <pre class="crayon-plain-tag">const fs = require('fs'); function openFile() { fs.open('test.txt', 'a+', function(err, fd) { if (err) { throw err; } writeFile(fd); }); } function writeFile(fd) { fs.write(fd, 'test line', function(err, written, string) { if (err) { throw err; } closeFile(fd); }); } function closeFile(fd) { fs.close(fd, function (err) { if (err) { throw err; } }); } openFile();</pre> <p>Okay, so there are more lines of code in this version. But in the real world, using named functions leads to code that&#8217;s more readable, maintainable, composable, etc. Plus, we can limit the level of indentation, thus avoiding callback hell!</p> <p>However, there are still situations where the callback pattern alone isn&#8217;t enough.</p> <h4>Callback pattern limitations</h4> <p>While the callback pattern is easy to use, there are lots of asynchronous workflows that it doesn&#8217;t help with out-of-the-box. Here are some examples:</p> <ul> <li>You need to run multiple asynchronous functions concurrently, then run a different function when the concurrent functions have finished.</li> <li>You need a queue that can run n number of functions concurrently.</li> <li>You have an array of &#8220;things&#8221; that needed to be processed asynchronously (either serially or in parallel), then run another function after all elements in the array have been processed.</li> </ul> <p>Although the sample application in this series doesn&#8217;t do anything this complex, these types of flows are quite common. All of the tools you need to write such flows using just callbacks are available to you in JavaScript, but writing the algorithms may not be so easy and the resulting code may not be easy to maintain &#8211; especially for folks that are new to Node.js.</p> <p>You might start writing a library to abstract away some of the complexity involved with such async flows. If you spent a lot of time building out such a library, you&#8217;d eventually have something that looks a lot like <a href="http://caolan.github.io/async/#">Async</a>, one of the most popular libraries in the history of Node.js. We&#8217;ll cover Async in the <a href="https://jsao.io/2017/06/how-to-get-use-and-close-a-db-connection-using-the-async-module/">next post</a> in this series. For now, let&#8217;s stick to the callback pattern and see how it can be used to code the demo application.</p> <h4>Callback demo app</h4> <p>The callback demo app is comprised of the following four files. The files are also available via <a href="https://gist.github.com/dmcghan/9f09d931637df16baa634eebef55feed">this Gist</a>.</p> <pre class="crayon-plain-tag">{ &quot;name&quot;: &quot;callbacks&quot;, &quot;version&quot;: &quot;1.0.0&quot;, &quot;description&quot;: &quot;&quot;, &quot;main&quot;: &quot;index.js&quot;, &quot;scripts&quot;: { &quot;test&quot;: &quot;echo \&quot;Error: no test specified\&quot; &amp;&amp; exit 1&quot; }, &quot;keywords&quot;: [], &quot;author&quot;: &quot;Dan McGhan &lt;dan.mcghan@oracle.com&gt; (https://jsao.io/)&quot;, &quot;license&quot;: &quot;ISC&quot;, &quot;dependencies&quot;: { &quot;oracledb&quot;: &quot;^1.13.1&quot; } }</pre> <p>This is a very basic <span class="inline-code">package.json</span> file. The only external dependency is oracledb.</p> <pre class="crayon-plain-tag">const oracledb = require('oracledb'); const dbConfig = require('./db-config.js'); const employees = require('./employees.js'); oracledb.createPool(dbConfig, function(err) { if (err) { console.log(err); return; } employees.getEmployee(101, function(err, emp) { if (err) { console.log(err); return; } console.log(emp); }); });</pre> <p>In this version of the <span class="inline-code">index.js</span>, the Node.js callback pattern is used to first create a connection pool and then to fetch an employee. Although the pool is passed to the callback function for createPool, it&#8217;s not referenced here as the <a href="https://github.com/oracle/node-oracledb/blob/master/doc/api.md#-831-connection-pool-cache">built-in pool cache</a> will be used in <span class="inline-code">employees.js</span>.</p> <pre class="crayon-plain-tag">module.exports = { user: 'hr', password: 'oracle', connectString: '192.168.56.101:1521/orcl', poolMax: 20, poolMin: 20, poolIncrement: 0 };</pre> <p>The <span class="inline-code">db-config.js</span> file is used in <span class="inline-code">index.js</span> to provide the connection info for the database. This configuration should work with <a href="https://jsao.io/2017/05/creating-a-sandbox-for-learning-nodejs-and-oracle-database/">the DB App Dev VM</a>, but it will need to be adjusted for other environments.</p> <pre class="crayon-plain-tag">const oracledb = require('oracledb'); function getEmployee(empId, getEmployeeCallback) { oracledb.getConnection(function(err, conn) { if (err) { console.log('Error getting connection', err); getEmployeeCallback(err); return; } console.log('Connected to database'); conn.execute( `select * from employees where employee_id = :emp_id`, [empId], { outFormat: oracledb.OBJECT }, function(err, result) { if (err) { console.log('Error executing query', err); getEmployeeCallback(err); conn.close(function(err) { if (err) { console.log('Error closing connection', err); } else { console.log('Connection closed'); } }); return; } console.log('Query executed'); getEmployeeCallback(null, result.rows[0]); conn.close(function(err) { if (err) { console.log('Error closing connection', err); } else { console.log('Connection closed'); } }); } ); }); } module.exports.getEmployee = getEmployee;</pre> <p>This version of the <span class="inline-code">employees.js</span> file uses the Node.js callback pattern to get a connection, use it to execute a query, and then close the connection. Notice that the logic to close the connection, the &#8220;finally&#8221; in the <span class="inline-code">try&#8230;catch&#8230;finally</span> block, appears twice: once if an error occurs during the call to <span class="inline-code">connection.execute</span> and again if everything completes without error. The code could be refactored so that the &#8220;close&#8221; logic is only defined once, but it would still need to be called from these two locations.</p> <p>The Node.js callback pattern is important to understand when working with Node.js. It&#8217;s simple but effective. Hopefully, you now have a better understanding of how it works. Check out the <a href="https://jsao.io/2017/06/how-to-get-use-and-close-a-db-connection-using-the-async-module/">next part of the series</a> to see how to use the Async module to do the same work.</p> danmcghan https://jsao.io/?p=1997 Mon Jun 12 2017 08:57:21 GMT-0400 (EDT) How to get, use, and close a DB connection using various async patterns https://jsao.io/2017/06/how-to-get-use-and-close-a-db-connection-using-various-async-patterns/ <p>It seems simple enough: get a connection to the database, use it to do some work, then close it when you&#8217;re done. But due to the asynchronous nature of Node.js, coding this sequence isn&#8217;t as straightforward as it seems. There are lots of options for writing asynchronous code with Node.js, and each one requires the sequence to be coded differently. In this series, I&#8217;ll provide some examples that demonstrate how to get, use, and close a connection using various async patterns.<br /> <span id="more-1958"></span><br /> In this parent post, I&#8217;ll provide a little context on how async programming varies from traditional programming. The details of how a particular async pattern is used will be covered in its post (see the <a href="#async-pattern-links">links at the bottom</a>).</p> <p>Here&#8217;s an overview of what&#8217;s covered this post:</p> <ul> <li><a href="#try-catch-finally">try&#8230;catch&#8230;finally</a></li> <li><a href="#asynchronous-evented-processing">Asynchronous/evented processing</a></li> <li><a href="#functions-are-first-class">Functions are first-class</a></li> <li><a href="#functions-provide-closure">Functions provide closure</a></li> <li><a href="#common-asynchronous-patterns">Common asynchronous patterns</a></li> </ul> <h4 id="try-catch-finally">try&#8230;catch&#8230;finally</h4> <p>JavaScript has a <span class="inline-code"><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch">try&#8230;catch&#8230;finally</a></span> statement. The <span class="inline-code">try&#8230;catch</span> part is easy: run some code and catch exceptions so they can be handled gracefully. But why do we need <span class="inline-code">finally</span>? <span class="inline-code">finally</span> provides a way of running cleanup code, regardless of whether an exception is raised in the try or catch blocks. Typical cleanup code includes closing file handles and database connections.</p> <p>Here&#8217;s an example:</p><pre class="crayon-plain-tag">try { console.log('try 1'); throw new Error('foo'); console.log('try 2'); } catch (err) { console.log('catch 1', err); throw new Error('bar'); console.log('catch 2'); } finally { console.log('finally!'); }</pre><p> If you run that in your browser console (or in Node.js), you should see something like this in the console:</p><pre class="crayon-plain-tag">try 1 catch 1 Error: foo at &lt;anonymous&gt;:3:9 finally! Uncaught Error: bar at &lt;anonymous&gt;:7:9</pre><p> Notice that the &#8220;bar&#8221; exception raised in the catch block does eventually bubble up as an unhandled exception, but not before the <span class="inline-code">finally</span> block is executed.</p> <p>If all of the code we ran in Node.js were synchronous, we&#8217;d be able to do something like this:</p><pre class="crayon-plain-tag">try { // get a connection to the DB // use the connection to do work } catch (error) { // handle the error } finally { // close the connection }</pre><p> Unfortunately, <span class="inline-code">try&#8230;catch&#8230;finally</span> isn&#8217;t very useful with asynchronous code &#8211; at least not until <span class="inline-code"><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function">async/await</a></span> functions are available to you. The reason has to do with the way async work is done in Node.js. </p> <h4 id="asynchronous-evented-processing">Asynchronous/evented processing</h4> <p>Here&#8217;s an overview of how asynchronous operations, such as making HTTP requests and executing database queries, are performed.</p> <p><a href="https://jsao.io/wp-content/uploads/2017/05/async-processing-nodejs.png" rel="prettyPhoto[gallery-Wc98]"><img src="https://jsao.io/wp-content/uploads/2017/05/async-processing-nodejs.png" alt="" width="800" height="481" class="alignnone size-full wp-image-1983" /></a></p> <p>As you can see, asynchronous APIs are invoked from the main thread and passed callback functions. Depending on the type, the async work may be completely evented, or it might leverage a thread pool. When the async work is complete, the callback function is added to the callback queue to be invoked on the main thread as soon as possible. </p> <p>With this architecture, errors that occurred during the async processing are brought back to the main thread in an entirely different call stack. You can&#8217;t catch errors raised in a different call stack &#8211; it&#8217;s too late!</p> <p>Here&#8217;s a very simple demo of invoking an async API:</p> <pre class="crayon-plain-tag">setTimeout(function() { console.log('hello'); }, 2000); console.log('world');</pre> <p>If you run that script in a browser console or Node.js, the output will be:</p><pre class="crayon-plain-tag">world hello</pre><p> Seeing &#8220;world&#8221; before &#8220;hello&#8221; can surprise folks new to async programming. The secret sauce that makes it work is the callback function passed to <span class="inline-code">setTimeout</span>. It will &#8220;call back&#8221;, or be executed on the main thread, when the specified time has passed. </p> <p>Callback functions can be traced back to the beginnings of JavaScript, which was designed as a language to bring life to the web. JavaScript developers needed a means of associating code with events such as the loading of a page, click of a mouse, or press of a key on a keyboard. Over time, DOM APIs such as the following were introduced.<br /> <!--more--></p><pre class="crayon-plain-tag">window.addEventListener('load', function() { // do some work });</pre><p> The <span class="inline-code">addEventListener</span> method above takes the anonymous function passed in as the second parameter and adds it to a list of listeners related to the <span class="inline-code">load</span> event on the <span class="inline-code">window</span> element. When the event occurs, all listeners are added to the callback queue and will be invoked as soon as possible.</p> <p>For callbacks to work properly, functions in JavaScript needed some important features: they needed to be first-class objects and they needed closure.</p> <h4 id="functions-are-first-class">Functions are first-class</h4> <p>The concept of functions as first-class objects sounds more complex than it is. Most programming languages provide a means of declaring variables and creating named units of code, often called functions or procedures. There&#8217;s usually a clear distinction between these two constructs. For example, you can declare variables and pass them into functions, but you can&#8217;t pass a function into a function.</p> <p>JavaScript, on the other hand, allows functions to be used more like standard data types such as Number, String, and Boolean. Functions can be declared, passed around from function to function, and invoked at some point in the future. Treating functions as first-class objects is a prerequisite for passing a callback function into another function, but the feature can aid with code organization too.</p> <p>Imagine you wanted to execute the same code when a page is loaded <em>and</em> when a user clicks the window. You could do something like this:</p> <pre class="crayon-plain-tag">window.addEventListener('load', function() { // do some work }); window.addEventListener('click', function() { // do the same work here });</re> <p>The problem with the code above is that we have to maintain two functions that do the same work. However, knowing that functions are first-class objects, we could declare a single, named function and pass a reference to it as needed:</p> <pre class="crayon-plain-tag">function doWork() { // do some work } window.addEventListener('load', doWork); window.addEventListener('click', doWork);</pre> <p>As you can see, functions as first-class objects is a simple but powerful feature of JavaScript.</p> <h4 id="functions-provide-closure">Functions provide closure</h4> <p>The concept of a closure is probably a bit harder to wrap one&#8217;s head around at first &#8211; but it&#8217;s crucial for async/evented programming. Put simply, a closure is a function that refers to variables defined in its enclosing scope.</p> <p>Many languages allow developers to nest functions within functions and child functions can refer to variables declared in the parent function&#8217;s scope. Developers using other languages may <em>never</em> wonder, &#8220;What would happen if the run-time invoked a child function after the parent function finished executing?&#8221; It&#8217;s simply not possible. But that&#8217;s not the case with JavaScript!</p> <p>Remember that functions in JavaScript are first-class objects, so like any other value assigned to a variable, they can escape the confines of their parent function by being passed around. When this happens, the references to variables in the original enclosing scope (lexical scope) will still exist. So what should happen when the child function is invoked in the future?</p> <p>Closure ensures that the child function will be able to access those variables as long as run-time may need to invoke the child function. Such variables will not be garbage collected as they normally would be.</p> <p>Here&#8217;s an example of a closure:</p> <pre class="crayon-plain-tag">&lt;html&gt; &lt;body&gt; &lt;button id=&quot;my-button&quot;&gt;Click me!&lt;/button&gt; &lt;script&gt; function onLoad() { // &quot;onLoad&quot; is the parent function. var button = document.getElementById('my-button'); function onClick() { // &quot;onClick&quot; is the child function (closure). button.parentNode.removeChild(button); // &quot;button&quot; referes to the enslosing scope. } // &quot;onClick&quot; can be invoked after &quot;onLoad&quot; finishes but the reference to &quot;button&quot; // will still be valid thanks to closure. button.addEventListener('click', onClick); } window.addEventListener('load', onLoad); &lt;/script&gt; &lt;/body&gt; &lt;/html&gt;</pre> <p>You can copy and paste this code into a file with a .html extension and open it in a browser. You should see a button that says &#8220;Click me!&#8221;. When the window loads, the <span class="inline-code">onLoad</span> function registers the <span class="inline-code">onClick</span> function with the <span class="inline-code">click</span> event on the button.</p> <p>Note that <span class="inline-code">onClick</span> was not invoked within <span class="inline-code">onLoad</span>. Instead, a reference was passed to an API that can invoke the function in the future. Because <span class="inline-code">onClick</span> refers to the <span class="inline-code">button</span> variable declared in the <span class="inline-code">onLoad</span> (parent) function, closure ensures that <span class="inline-code">onClick</span> will have access to <span class="inline-code">button</span> when it&#8217;s invoked in the future.</p> <p>Now that we&#8217;ve addressed how some of the core concepts related to async programming in JavaScript, let&#8217;s turn our attention to some of the async patterns that have evolved in Node.js.</p> <h4 id="common-asynchronous-patterns">Common asynchronous patterns</h4> <p>Currently, the most common (and generic) patterns used to write asynchronous code with Node.js are callbacks, the async module, and promises. Node.js v7.6 got an update to the V8 JavaScript engine which introduced a new means of doing async processing called <span class="inline-code">async/await</span> functions.</p> <p>Building on top of the work done for generators and promises, <span class="inline-code">async/await</span> functions allow JavaScript code to be written syncronously while it executes asynchronously. Best of all, synchronous constructs such as loops and <span class="inline-code">try&#8230;catch&#8230;finally</span> work as you&#8217;d expect them to! <span class="inline-code">async/await</span> is a serious game changer for JavaScript, but knowledge of promises, and thus async processing in general, will still be important.</p> <p>Each pattern we&#8217;ll be exploring will have a dedicated post. Each post will explain the basics of the pattern and provide a demo app that uses the pattern. The demo apps will perform the same three async operations: get a connection to the database, use it to execute a simple query, then close the connection.</p> <p>To run a demo app locally, assuming Node.js and the <a href="https://github.com/oracle/node-oracledb/blob/master/INSTALL.md">OCI client libraries</a> are already installed, just <a href="https://help.github.com/articles/forking-and-cloning-gists/">clone the related Gist</a> or create the various files in a directory. Then open the directory in a terminal and run <span class="inline-code">npm install</span> followed by <span class="inline-code">node index.js</span>.</p> <div class="alert alert-info" role="alert"> <strong>Tip:</strong> See <a href="https://jsao.io/2017/05/creating-a-sandbox-for-learning-nodejs-and-oracle-database/">this post</a> if you&#8217;d like to set up a local sandbox for working through the examples. </div> <p id="async-pattern-links">Here are the links for each pattern (links will become active as posts are published):</p> <ul style="margin-bottom: 0"> <li><a href="https://jsao.io/2017/06/how-to-get-use-and-close-a-db-connection-using-callbacks/">Callbacks</a></li> <li><a href="https://jsao.io/2017/06/how-to-get-use-and-close-a-db-connection-using-the-async-module/">Async module</a></li> <li>Promises</li> <li>Async/await functions</li> </ul> danmcghan https://jsao.io/?p=1958 Mon Jun 12 2017 08:54:41 GMT-0400 (EDT) Avoiding multiple logins from external Apex links http://warp11.nl/2017/06/avoiding-multiple-logins-from-external-apex-links/ <div> <div class="post-body entry-content" id="post-body-7572592045568507472"> Some Apex applications sends notifications emails to users when tasks are due. These emails contain a link to an Apex page. When the user clicks on the link he is taken to the page. When this page is not public &#8211; which usually is the case &#8211; he is directed to the login page of the application. Even when he is logged in for the same browser on another tab.<br /> When users get a lot of these emails it is annoying they have to log in each time. Apex provides a way to avoid the login when a session exists in the same browser. This post describes how you can set it up using the <b>Rejoin Sessions</b> functionality.</p> <div class="separator"> <a href="https://3.bp.blogspot.com/-xDoX6_7xB8o/WT4S_rEmukI/AAAAAAAAAgc/k-dypC20AGgfpf3QRnEgxw6dQzLdBKQXwCLcB/s1600/Instance%2BRejoin%2BSessions.png"><img border="0" height="264" src="http://warp11.nl/wp-content/uploads/2017/06/Instance2BRejoin2BSessions.png" width="320" /></a></div> <div class="separator"> <a href="https://4.bp.blogspot.com/-pSsZa7Wwm6U/WT4SZISv2XI/AAAAAAAAAgU/GmVm74YG2aM_GhrmF4EJCE-F3eqv54MYwCLcB/s1600/Application%2BRejoin%2BSession.png"><img border="0" height="181" src="http://warp11.nl/wp-content/uploads/2017/06/Application2BRejoin2BSession.png" width="320" /></a></div> <p> </p> </div> </div> <p>Source Article from <a href="http://dickdral.blogspot.com/2017/06/avoiding-multiple-logins-from-external.html">http://dickdral.blogspot.com/2017/06/avoiding-multiple-logins-from-external.html</a></p> Dick Dral http://warp11.nl/2017/06/avoiding-multiple-logins-from-external-apex-links/ Mon Jun 12 2017 00:28:06 GMT-0400 (EDT) Avoiding multiple logins from external Apex links http://dickdral.blogspot.com/2017/06/avoiding-multiple-logins-from-external.html Some Apex applications sends notifications emails to users when tasks are due. These emails contain a link to an Apex page. When the user clicks on the link he is taken to the page. When this page is not public - which usually is the case - he is directed to the login page of the application. Even when he is logged in for the same browser on another tab.<br />When users get a lot of these emails it is annoying they have to log in each time. Apex provides a way to avoid the login when a session exists in the same browser. This post describes how you can set it up using the <b>Rejoin Sessions</b>&nbsp;functionality.<br /><br /><div>In order to be able to rejoin an existing session a few settings have to be made.&nbsp;</div><div><br /></div><div>The instance setting <b>Rejoin sessions</b>&nbsp;needs to be set to&nbsp;<b>Enabled for&nbsp;All sessions</b>. Log in as Instance Administrator and navigate to <b>Manage Instance &gt; Security </b>:&nbsp;<b>&nbsp;</b></div><div><b><br /></b></div><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-xDoX6_7xB8o/WT4S_rEmukI/AAAAAAAAAgc/k-dypC20AGgfpf3QRnEgxw6dQzLdBKQXwCLcB/s1600/Instance%2BRejoin%2BSessions.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1088" data-original-width="1318" height="264" src="https://3.bp.blogspot.com/-xDoX6_7xB8o/WT4S_rEmukI/AAAAAAAAAgc/k-dypC20AGgfpf3QRnEgxw6dQzLdBKQXwCLcB/s320/Instance%2BRejoin%2BSessions.png" width="320" /></a></div><div><br /></div><div>The application setting&nbsp;<b>Rejoin sessions</b>&nbsp;needs to be set to&nbsp;<b>Enabled for&nbsp;All sessions</b>.&nbsp;As a developer go to <b>Shared Components &gt; Security Attributes &gt; Session Management </b>:</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-pSsZa7Wwm6U/WT4SZISv2XI/AAAAAAAAAgU/GmVm74YG2aM_GhrmF4EJCE-F3eqv54MYwCLcB/s1600/Application%2BRejoin%2BSession.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="890" data-original-width="1566" height="181" src="https://4.bp.blogspot.com/-pSsZa7Wwm6U/WT4SZISv2XI/AAAAAAAAAgU/GmVm74YG2aM_GhrmF4EJCE-F3eqv54MYwCLcB/s320/Application%2BRejoin%2BSession.png" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"></div><div><br /></div><div><br /></div><div>After setting this parameter you may be prompted to set the parameter <b>Embed in frames</b>&nbsp;to <b>Deny</b>&nbsp;or <b>Allow from same Origin</b>.&nbsp;</div><div><br /></div><div>The link in the email usually contains parameters. Links with parameters should contain a checksum for session rejoining. So on the target page set <b>Page Access Protection</b>&nbsp;to <b>Arguments must have checksum</b>. Then provide the link URL with a checksum:</div><div><br /></div><div><span style="font-family: Courier New, Courier, monospace;">l_url := apex_util.prepare_url(l_url);</span></div><div><br /></div><div>Use this URL in the notification email to your users.&nbsp;</div><div>When the user clicks on the link and there is no session in the browser he is prompted to login.&nbsp;</div><div><div>When the user clicks on the link and there is a session in the browser the target page is shown with the parameters from the URL. The user does not need to login a second time.&nbsp;</div></div><div><br /></div><div>This method does not imply a security risk because an existing session is reused. When the user is not logged in the login page will be presented.&nbsp;</div><div><br /></div><div>In this example the parameter names and values are exposed in the URL. To maximize the security these might be hidden by storing the actual URL in a table indexed with a hash value. The link in the email points to an intermediate page that uses the hash value to retrieve the actual URL and redirect to it.&nbsp;</div><div><br /></div><div>Happy Apexing</div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><br /><br /><br /> Dick Dral tag:blogger.com,1999:blog-4312362131290962824.post-7572592045568507472 Mon Jun 12 2017 00:28:00 GMT-0400 (EDT) How long will Oracle APEX remain an included feature of the Oracle Database? http://joelkallman.blogspot.com/2017/06/how-long-will-oracle-apex-remain.html Another great question today from an internal employee. &nbsp;Tom, a&nbsp;Managed Cloud Services Delivery Director, asked:<br /><blockquote class="tr_bq"><i>"I am the OMCS Client Manager for &lt;redacted&gt;. &nbsp;They are currently a large Discoverer customer who would like to convert to Oracle APEX. &nbsp;To that goal, they have asked me to find out how long Oracle APEX will continue to be a no-cost feature of the Oracle Database (could be an unanswerable question, I realize)."</redacted></i></blockquote>Great question! &nbsp;And my response to Tom:<br /><br /><ol><li><a href="https://apex.oracle.com/" target="_blank">Oracle Application Express</a> has been an included feature of the <a href="https://www.oracle.com/database/index.html" target="_blank">Oracle Database</a> since 2004. &nbsp;It remains an included feature of the Oracle Database in 12cR2 and in the foreseeable future.</li><li>There are no plans to charge separately for Oracle Application Express. &nbsp;It has *never* been discussed.</li><li>Application Express is a feature of every <a href="https://www.oracle.com/database/index.html" target="_blank">Oracle Database Cloud Service</a> (Database Schema Cloud Service, Database Cloud Service, Exadata Express, Exadata Service)</li><li>In my 21 year career at Oracle, I have never seen a situation where Oracle has included something as part of the database license and then decided later to charge separately for it. &nbsp;It might have happened, but I'm not aware of it. &nbsp;I have seen the reverse (where we used to charge a separate license fee, and then eventually included it with the Oracle Database - <a href="http://www.oracle.com/technetwork/testcontent/index-098492.html" target="_blank">Oracle Text</a> is a good example).</li></ol><br />People often classify APEX as "free". &nbsp;I call it "an included feature of the Oracle Database." If you're licensed and supported for the Oracle Database, you're licensed and supported for Oracle Application Express. &nbsp;APEX runs wherever the Oracle Database runs - on premises, your cloud, Oracle Cloud. &nbsp;We have customers running APEX on a laptop on the free version of the <a href="http://www.oracle.com/technetwork/database/database-technologies/express-edition/overview/index.html" target="_blank">Oracle Database Express Edition (XE)</a>, we have customers running APEX on 28-node <a href="https://www.oracle.com/database/real-application-clusters/index.html" target="_blank">Oracle RAC</a> clusters, and everything in-between.<br /><br />If you're interested in learning more about APEX, see&nbsp;<a href="https://blogs.oracle.com/apex/a-simple-guide-to-oracle-application-express-apex" target="_blank">A Simple Guide to Oracle Application Express (APEX)</a>. Joel R. Kallman tag:blogger.com,1999:blog-12214002.post-3653784118677368362 Thu Jun 08 2017 15:44:00 GMT-0400 (EDT) What Do Breadboards, Lego-Style Innovation, and Oracle APEX Have in Common? https://www.insum.ca/breadboard-innovation-oracle-apex/ <h1>What Do Breadboards, Lego-Style Innovation, and Oracle APEX Have in Common?</h1> <p><strong>Note</strong>: <em>This is an interactive blog post &#8211; please help us by </em><a href="https://demo.insum.ca/ords/f?p=135:1:2413857672617" target="_blank" rel="noopener noreferrer"><em>voting on the “APEX Adventure” you’d like to see us to present</em></a><em> at </em><em>KScope17</em><em> this year, even if you aren&#8217;t attending. More details at end of post.</em></p> <p>The first time I ever built an electronic circuit was at a hands-on session led by Anton Nielsen at Kscope15. We built a nifty little heat sensor that interacted with a <a href="http://c2anton.blogspot.ca/2017/05/the-benefits-of-iot-cloud-infrastructure.html" target="_blank" rel="noopener noreferrer">cloud-hosted Oracle APEX app to display temperatures</a>, all within an hour or so.</p> <p>In addition to Anton’s superb instruction and guidance, what enabled absolute beginners like me to complete the project so quickly was that Anton provided us with a breadboard to use a conduction base.</p> <p><img class="alignleft wp-image-7784 size-medium" src="https://www.insum.ca/wp-content/uploads/2017/06/oracle-apex-breadboard-300x300.jpg" alt="oracle apex breadboard" width="300" height="300" srcset="https://www.insum.ca/wp-content/uploads/2017/06/oracle-apex-breadboard-300x300.jpg 300w, https://www.insum.ca/wp-content/uploads/2017/06/oracle-apex-breadboard-150x150.jpg 150w, https://www.insum.ca/wp-content/uploads/2017/06/oracle-apex-breadboard-768x768.jpg 768w, https://www.insum.ca/wp-content/uploads/2017/06/oracle-apex-breadboard-100x100.jpg 100w, https://www.insum.ca/wp-content/uploads/2017/06/oracle-apex-breadboard-450x450.jpg 450w, https://www.insum.ca/wp-content/uploads/2017/06/oracle-apex-breadboard.jpg 800w" sizes="(max-width: 300px) 100vw, 300px" />A breadboard is a basically a plastic block with rows of pre-wired holes where you can plug in wires and components to build electronic circuits. The holes are connected electrically, and so when plug things in, they automatically become connected electrically as well. However, unlike the early breadboards of the past, (which were literally wooden boards used for cutting bread – hence the name), the thing that makes modern breadboards so useful is that they are solderless.</p> <p>When prototyping or building an electronics circuit, it’s very useful to have a way to quickly connect components together, and perhaps more importantly, to be able to swap them out or change their placement if necessary. For this reason, breadboards are a big timesaver, especially for beginners:</p> <blockquote>[A] Breadboard is a great way to construct electronic projects easily and in less time without the need of soldering. A problem that is faced by beginners in the field of electronics is that they cannot solder the components neatly on printed circuit boards. One bad solder joint can lead to the project not working. […] Another problem faced by them is that if they try to solder and make a project, it does not work because of poor soldering or the circuit that was taken from a book or magazine lacked instructions or it was wrong. Now after spending a lot of time on making it, what they have to face is disappointment. (Source: ”<em>10 Breadboard Projects for Beginners</em>” on Instructables)</p></blockquote> <p>Even if you haven’t had your morning coffee, I’m sure you can guess where I’m going with this&#8230;</p> <p>Simply swap out a few words in the above Instructables quote and you’ll see why a <a href="https://www.insum.ca/about-apex/" target="_blank" rel="noopener noreferrer">low-code development framework like Oracle APEX</a> is very much like a breadboard, where you can quickly connect components together without “soldering”:</p> <blockquote><p>“APEX is a great way to construct applications easily and in less time without the need of coding. A problem that is faced by beginners in the field of application development is that they cannot code the components…”</p></blockquote> <p>Of course, with all its built-in functionality, APEX does much more for application development than breadboards do for building electronic circuits, but the principle is the same.  By taking care of all the low-level, trickier parts of web based application development (think authorization, authentication, session state management, styling, templating, database connections, etc.), APEX helps beginners get applications up and running more quickly, and also helps experienced developers go faster than they could otherwise.</p> <p><img class="size-full wp-image-7786 alignright" src="https://www.insum.ca/wp-content/uploads/2017/06/assembing-technology.png" alt="assembling technology" width="389" height="306" srcset="https://www.insum.ca/wp-content/uploads/2017/06/assembing-technology.png 389w, https://www.insum.ca/wp-content/uploads/2017/06/assembing-technology-300x236.png 300w" sizes="(max-width: 389px) 100vw, 389px" />Although easy to overlook, tools that make it easier for people connect things together more easily are deceptively powerful. To see what I mean, consider a major trend we are seeing with technology innovation today. Companies are now creating breakthrough products, not by inventing new technology, but by inventively assembling existing components together in such a way that the proverbial whole is much greater than the sum of the parts.</p> <p>Let me share an example.</p> <h2></h2> <h2>Lego-style Innovation</h2> <p>On February 14, 2017 of this year, a world record was set for the most satellites ever launched on a single rocket when 88 satellites were shuttled into space aboard a PSLV rocket fired from a space center in India. A second world record was also set when the 88 satellites joined those from earlier launches, and created the largest ever private satellite constellation totaling 149.  Equally impressive is what these satellites will do: Once fully commissioned, they will image the entire earth <b><i>every single day</i></b><span style="font-weight: 400;">!</span></p> <p>But do you know what the most remarkable thing is about this story?</p> <p>Rather than being the feat of a well funded nation state, it was the accomplishment of a  relatively new company called Planet Labs, whose stated “<a href="https://www.planet.com/company/approach/" target="_blank" rel="noopener noreferrer"><i><span style="font-weight: 400;">aerospace know-how meets Silicon Valley ingenuity</span></i></a>” approach enables it to design, build and launch satellites faster than any company or government in history.</p> <p>The approach? Planet assembles the satellites using readily available, off-the-shelf components, such as common laptop batteries and smartphone chips. The resulting satellites are only slightly larger than a shoebox, and cost a fraction of the many millions it would have taken to build satellites with similar capabilities in the past.</p> <p><img class="alignright size-vntd-portfolio-auto wp-image-7819" src="https://www.insum.ca/wp-content/uploads/2017/06/InOrbit12-450x300.jpg" alt="Planet Lab Satellites in Orbit" width="450" height="300" srcset="https://www.insum.ca/wp-content/uploads/2017/06/InOrbit12-450x300.jpg 450w, https://www.insum.ca/wp-content/uploads/2017/06/InOrbit12-300x200.jpg 300w, https://www.insum.ca/wp-content/uploads/2017/06/InOrbit12-768x512.jpg 768w, https://www.insum.ca/wp-content/uploads/2017/06/InOrbit12.jpg 1024w, https://www.insum.ca/wp-content/uploads/2017/06/InOrbit12-880x586.jpg 880w" sizes="(max-width: 450px) 100vw, 450px" /></p> <p>Think about that for a minute. A potentially revolutionary undertaking, which until recently could only be considered by well-heeled governments, is instead the accomplishment of a scrappy, 40-person startup using commodity consumer electronics.</p> <p>And it&#8217;s not just Planet Labs doing this type of innovation; All kinds of organizations, from universities, to robotics companies, to the US military, are building ingenious products by cleverly assembling components built by others.  According to Geoff Colvin of Fortune magazine,  “<i><span style="font-weight: 400;">we’ve entered the era of Lego innovation, when highly valuable and significant advances in technology are achieved by imaginatively combining components and software available to everyone</span></i><span style="font-weight: 400;">.”</span></p> <h2></h2> <h2>Oracle APEX &#8211; Imaginatively Combining Components</h2> <p>This of course brings us right back to breadboards and low-code application development platforms like Oracle APEX – tools purposely built for “imaginatively combining components” to build solutions.</p> <p><img class="alignleft size-full wp-image-7787" src="https://www.insum.ca/wp-content/uploads/2017/06/oracle-apex-low-code.png" alt="oracle apex low code" width="205" height="154" />See, <a href="https://www.doag.org/en/home/news/recorded-joel-kallman-about-the-future-of-apex/detail/"><span style="font-weight: 400;">Oracle APEX was a low-code tool before low-code was cool</span></a><span style="font-weight: 400;">. For several years now, even those with little to no coding experience could use APEX to build highly functional and professional looking applications by “imaginatively combining” the UI components included with the product, which includes charts, interactive grids and reports, calendar controls, shuttle controls, date pickers, color pickers, and on and on.</span></p> <p>However, what really makes APEX a great “breadboard” is its alignment with industry trends and standards, which makes it highly extendable. With strong support for HTML5, CSS3 and JavaScript library integration, a whole world of readily available 3<span style="font-weight: 400;">rd</span><span style="font-weight: 400;"> party components can be embedded within an APEX application, enabling developers to create highly functional applications that provide a great user experience:</span></p> <ul> <li>Need a <a href="https://www.insum.ca/wp-content/uploads/gif/APEX_Cesium_opt.gif">Google Earth like virtual globe to dynamically visualize geospatial data</a>? Check out <span style="font-weight: 400;">Cesium</span><span style="font-weight: 400;">.</span></li> <li><a href="https://www.insum.ca/visio-like-functionality-in-an-apex-page/" target="_blank" rel="noopener noreferrer"><span style="font-weight: 400;">Need Visio like “drag and drop” functionality to build a visual workflow editor</span></a><span style="font-weight: 400;">? Check out </span><span style="font-weight: 400;">Draw2D</span><span style="font-weight: 400;">.  </span></li> <li>Want to <a href="https://www.youtube.com/watch?v=DiV7Zt4LFSc" target="_blank" rel="noopener noreferrer">sync browser sessions (i.e. desktop and mobile)</a> without forcing users to log in? Leverage Firebase. (See the related KScope17 calendar app <a href="https://bit.ly/insum-kscope17" target="_blank" rel="noopener noreferrer">here</a>.)</li> <li>Mobile maps? See <a href="http://leafletjs.com/"><span style="font-weight: 400;">Leaflet</span></a><span style="font-weight: 400;">.</span></li> <li><a href="https://www.insum.ca/wp-content/uploads/gif/DownloadToExcel.gif">Users asking for Excel output beyond simple CSV files</a>? Integrate Node.js® and <span style="font-weight: 400;">exceljs </span><span style="font-weight: 400;">into your app to automagically create formatted Excel files.</span></li> <li>Want to <a href="https://www.insum.ca/wp-content/uploads/gif/APEX_GoogleSheets.gif">seamlessly pull  in user entered data from a Google sheet with the click of a button</a>? Leverage the Google Sheets API.</li> <li>Need great looking charts? Check out D3.js (which is actually already integrated with APEX out of the box).</li> <li>Want to use Material Design for your APEX app? Take a look at Vincent Morneau’s <a href="https://apex.oracle.com/pls/apex/f?p=12192:1" target="_blank" rel="noopener noreferrer">Material APEX</a><span style="font-weight: 400;">.</span></li> <li><span style="font-weight: 400;">Need a super dynamic and rich user interface? Check out </span><span style="font-weight: 400;">KnockoutJS, which <a href="https://www.insum.ca/wp-content/uploads/gif/inTime Time Entry Features Quick.gif">Jorge Rimblas used to create an amazing app for timesheet entry</a>.</span></li> </ul> <p>The possibilities go on and on.</p> <p>At Insum, we are fortunate to have a wide range of clients with many different needs. This means we regularly have the opportunity to integrate different components into APEX applications, including all those listed above.  One of the challenges however, is not so much the integration work, but rather discovering what types of components and libraries are available, and how they can be combined into solutions to solve real-world business problems.</p> <p><span style="font-weight: 400;">So, we’d like to share some of the ways we’ve successfully extended APEX for ourselves and for our clients using 3</span><span style="font-weight: 400;">rd</span><span style="font-weight: 400;"> party plugins, internally developed plugins, and javascript libraries. One way we’ll do that is in our vendor presentation at </span><span style="font-weight: 400;">Kscope17 </span><span style="font-weight: 400;">later this month, entitled </span><a href="https://demo.insum.ca/ords/f?p=135:1:7052787816531:::::" target="_blank" rel="noopener noreferrer"><i><span style="font-weight: 400;">APEX is a Breadboard &#8211; Choose Your Adventure</span></i></a><span style="font-weight: 400;">. </span></p> <p style="text-align: center;"><span id="hs-cta-wrapper-c1572636-d33d-4c53-b25e-2dbe90b3f3b6" class="hs-cta-wrapper"><span id="hs-cta-c1572636-d33d-4c53-b25e-2dbe90b3f3b6" class="hs-cta-node hs-cta-c1572636-d33d-4c53-b25e-2dbe90b3f3b6"><!-- [if lte IE 8]></p> <div id="hs-cta-ie-element"></div> <![endif]--><a href="https://cta-redirect.hubspot.com/cta/redirect/1918225/c1572636-d33d-4c53-b25e-2dbe90b3f3b6" target="_blank" rel="noopener noreferrer"><img id="hs-cta-img-c1572636-d33d-4c53-b25e-2dbe90b3f3b6" class="hs-cta-img aligncenter" style="border-width: 0px;" src="https://no-cache.hubspot.com/cta/default/1918225/c1572636-d33d-4c53-b25e-2dbe90b3f3b6.png" alt="vote for your APEX Adventure" /></a></span><script charset="utf-8" src="https://js.hscta.net/cta/current.js"></script><script type="text/javascript"> hbspt.cta.load(1918225, 'c1572636-d33d-4c53-b25e-2dbe90b3f3b6', {}); </script></span></p> <p>We’ve come up with eight different “adventures”, each of which is a demo of how we built an APEX solution using one of the libraries listed above.  Unfortunately, we won’t have time to go through all 8 solutions, so we’ve created a <a href="https://demo.insum.ca/ords/f?p=135:1:7052787816531:::::" target="_blank" rel="noopener noreferrer">voting app (using APEX of course!)</a>, where you can vote for your top 3. Then, based on the voting results, we will do a deep dive into the top three winners during our presentation at Kscope.</p> <p>Not going to Kscope? <a href="https://demo.insum.ca/ords/f?p=135:1:7052787816531:::::" target="_blank" rel="noopener noreferrer">Vote anyway!</a> In the coming months, we will be presenting webinars showing how we built the most popular choices. So that you don’t miss out on the webinars, register here to be notified when they are scheduled.</p> <p style="text-align: center;"><span id="hs-cta-wrapper-e0ee0e06-483c-4b50-8ed0-ed5d41b98062" class="hs-cta-wrapper"><span id="hs-cta-e0ee0e06-483c-4b50-8ed0-ed5d41b98062" class="hs-cta-node hs-cta-e0ee0e06-483c-4b50-8ed0-ed5d41b98062"><!-- [if lte IE 8]></p> <div id="hs-cta-ie-element"></div> <![endif]--><a href="https://cta-redirect.hubspot.com/cta/redirect/1918225/e0ee0e06-483c-4b50-8ed0-ed5d41b98062" target="_blank" rel="noopener noreferrer"><img id="hs-cta-img-e0ee0e06-483c-4b50-8ed0-ed5d41b98062" class="hs-cta-img aligncenter" style="border-width: 0px;" src="https://no-cache.hubspot.com/cta/default/1918225/e0ee0e06-483c-4b50-8ed0-ed5d41b98062.png" alt="get on the webinar email list" /></a><script charset="utf-8" src="https://js.hscta.net/cta/current.js"></script><script type="text/javascript"> hbspt.cta.load(1918225, 'e0ee0e06-483c-4b50-8ed0-ed5d41b98062', {}); </script></span></span></p> <p style="text-align: center;">P.S. If you have not yet <a href="http://kscope17.com/" target="_blank" rel="noopener noreferrer"><span style="font-weight: 400;">registered for KScope</span></a>, use the code INSUM to get $100 off the registration fee.</p> Frank Hoogendoorn https://www.insum.ca/?p=7780 Thu Jun 08 2017 15:22:23 GMT-0400 (EDT) Kscope17 Essbase Track Highlights – Natalie Delemar http://www.odtug.com/p/bl/et/blogaid=725&source=1 Natalie Delemar, ODTUG president, shares her top six Essbase track sessions with reasons why they are her “don’t miss sessions” at ODTUG Kscope17: ODTUG http://www.odtug.com/p/bl/et/blogaid=725&source=1 Thu Jun 08 2017 14:41:26 GMT-0400 (EDT) Is there a mailing list for APEX release announcements? http://joelkallman.blogspot.com/2017/06/is-there-mailing-list-for-apex-release.html There was an interesting question today from Oracle Support, on behalf of a customer. &nbsp;They asked:<div><blockquote class="tr_bq"><i>"The customer would like to know if there is any mailing list or other type of subscription to be notified whenever there is a new or upgrade release of APEX."</i></blockquote></div><div>And I answered with:</div><div><br /></div><div><div>As far as mailing lists, they could always sign up for the <a href="http://www.oracle.com/us/corporate/newsletter/archive/archives-database-insider-168787.html" target="_blank">Oracle Database Insider Newsletter</a>. &nbsp;Announcements about <a href="https://apex.oracle.com/" target="_blank">Oracle Application Express</a>, <a href="http://www.oracle.com/technetwork/developer-tools/sql-developer/overview/index.html" target="_blank">SQL Developer</a>, <a href="http://www.oracle.com/technetwork/developer-tools/rest-data-services/overview/index.html" target="_blank">Oracle REST Data Services</a> and many other database-related technologies are typically included in this newsletter.</div><div><br /></div><div>I can also suggest that your customer:</div><div><ol><li>Follow Oracle Application Express on Facebook: &nbsp;<a href="https://www.facebook.com/orclapex/">https://www.facebook.com/orclapex/</a></li><li>Join the LinkedIn group: &nbsp;<a href="https://www.linkedin.com/groups/8263065">https://www.linkedin.com/groups/8263065</a></li><li>Follow @oracleapexnews on Twitter: &nbsp;<a href="https://twitter.com/oracleapexnews">https://twitter.com/oracleapexnews</a></li><li>Visit the Web site: &nbsp;<a href="https://otn.oracle.com/apex">https://otn.oracle.com/apex</a></li></ol></div><div>The APEX releases and patch sets are always announced through these social media channels.</div></div><div><br /></div><div>And let's not forget <a href="https://apex.world/">https://apex.world</a>, which is the clearinghouse of information for everything APEX.</div> Joel R. Kallman tag:blogger.com,1999:blog-12214002.post-6092857704725736678 Wed Jun 07 2017 10:49:00 GMT-0400 (EDT) Rally Point http://acitemreh.blogspot.com/2017/06/rally-point.html <div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-w9M2k29WARQ/WTf07rsKBCI/AAAAAAAAAXA/uUwcTPl23L8sjSZolpybL3Eu-y-9ohVygCLcB/s1600/6-6-2017%2B6-00-13%2BPM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="950" data-original-width="1600" height="189" src="https://1.bp.blogspot.com/-w9M2k29WARQ/WTf07rsKBCI/AAAAAAAAAXA/uUwcTPl23L8sjSZolpybL3Eu-y-9ohVygCLcB/s320/6-6-2017%2B6-00-13%2BPM.png" width="320" /></a></div><!--[if gte mso 9]><xml> <o:OfficeDocumentSettings> <o:AllowPNG/> </o:OfficeDocumentSettings></xml><![endif]--><br /><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves/> <w:TrackFormatting/> <w:PunctuationKerning/> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF/> <w:LidThemeOther>EN-US</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> <w:SplitPgBreakAndParaMark/> <w:EnableOpenTypeKerning/> <w:DontFlipMirrorIndents/> <w:OverrideTableStyleHps/> </w:Compatibility> <m:mathPr> <m:mathFont m:val="Cambria Math"/> <m:brkBin m:val="before"/> <m:brkBinSub m:val="&#45;-"/> <m:smallFrac m:val="off"/> <m:dispDef/> <m:lMargin m:val="0"/> <m:rMargin m:val="0"/> <m:defJc m:val="centerGroup"/> <m:wrapIndent m:val="1440"/> <m:intLim m:val="subSup"/> <m:naryLim m:val="undOvr"/> </m:mathPr></w:WordDocument></xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="false" DefSemiHidden="false" DefQFormat="false" DefPriority="99" LatentStyleCount="374"> <w:LsdException Locked="false" Priority="0" QFormat="true" Name="Normal"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 1"/> <w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 2"/> <w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 3"/> <w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 4"/> <w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 5"/> <w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 6"/> <w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 7"/> <w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 8"/> <w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 9"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 5"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 6"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 7"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 8"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 9"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 1"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 2"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 3"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 4"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 5"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 6"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 7"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 8"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 9"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Normal Indent"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="footnote text"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="annotation text"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="header"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="footer"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index heading"/> <w:LsdException Locked="false" Priority="35" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="caption"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="table of figures"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="envelope address"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="envelope return"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="footnote reference"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="annotation reference"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="line number"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="page number"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="endnote reference"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="endnote text"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="table of authorities"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="macro"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="toa heading"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Bullet"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Number"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List 5"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Bullet 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Bullet 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Bullet 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Bullet 5"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Number 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Number 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Number 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Number 5"/> <w:LsdException Locked="false" Priority="10" QFormat="true" Name="Title"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Closing"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Signature"/> <w:LsdException Locked="false" Priority="1" SemiHidden="true" UnhideWhenUsed="true" Name="Default Paragraph Font"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text Indent"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Continue"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Continue 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Continue 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Continue 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Continue 5"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Message Header"/> <w:LsdException Locked="false" Priority="11" QFormat="true" Name="Subtitle"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Salutation"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Date"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text First Indent"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text First Indent 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Note Heading"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text Indent 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text Indent 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Block Text"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Hyperlink"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="FollowedHyperlink"/> <w:LsdException Locked="false" Priority="22" QFormat="true" Name="Strong"/> <w:LsdException Locked="false" Priority="20" QFormat="true" Name="Emphasis"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Document Map"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Plain Text"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="E-mail Signature"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Top of Form"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Bottom of Form"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Normal (Web)"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Acronym"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Address"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Cite"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Code"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Definition"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Keyboard"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Preformatted"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Sample"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Typewriter"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Variable"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Normal Table"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="annotation subject"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="No List"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Outline List 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Outline List 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Outline List 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Simple 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Simple 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Simple 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Classic 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Classic 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Classic 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Classic 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Colorful 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Colorful 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Colorful 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Columns 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Columns 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Columns 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Columns 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Columns 5"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 5"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 6"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 7"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 8"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 5"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 6"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 7"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 8"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table 3D effects 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table 3D effects 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table 3D effects 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Contemporary"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Elegant"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Professional"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Subtle 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Subtle 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Web 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Web 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Web 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Balloon Text"/> <w:LsdException Locked="false" Priority="39" Name="Table Grid"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Theme"/> <w:LsdException Locked="false" SemiHidden="true" Name="Placeholder Text"/> <w:LsdException Locked="false" Priority="1" QFormat="true" Name="No Spacing"/> <w:LsdException Locked="false" Priority="60" Name="Light Shading"/> <w:LsdException Locked="false" Priority="61" Name="Light List"/> <w:LsdException Locked="false" Priority="62" Name="Light Grid"/> <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1"/> <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2"/> <w:LsdException Locked="false" Priority="65" Name="Medium List 1"/> <w:LsdException Locked="false" Priority="66" Name="Medium List 2"/> <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1"/> <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2"/> <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3"/> <w:LsdException Locked="false" Priority="70" Name="Dark List"/> <w:LsdException Locked="false" Priority="71" Name="Colorful Shading"/> <w:LsdException Locked="false" Priority="72" Name="Colorful List"/> <w:LsdException Locked="false" Priority="73" Name="Colorful Grid"/> <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 1"/> <w:LsdException Locked="false" Priority="61" Name="Light List Accent 1"/> <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 1"/> <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 1"/> <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 1"/> <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 1"/> <w:LsdException Locked="false" SemiHidden="true" Name="Revision"/> <w:LsdException Locked="false" Priority="34" QFormat="true" Name="List Paragraph"/> <w:LsdException Locked="false" Priority="29" QFormat="true" Name="Quote"/> <w:LsdException Locked="false" Priority="30" QFormat="true" Name="Intense Quote"/> <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 1"/> <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 1"/> <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 1"/> <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 1"/> <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 1"/> <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 1"/> <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 1"/> <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 1"/> <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 2"/> <w:LsdException Locked="false" Priority="61" Name="Light List Accent 2"/> <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 2"/> <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 2"/> <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 2"/> <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 2"/> <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 2"/> <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 2"/> <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 2"/> <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 2"/> <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 2"/> <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 2"/> <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 2"/> <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 2"/> <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 3"/> <w:LsdException Locked="false" Priority="61" Name="Light List Accent 3"/> <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 3"/> <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 3"/> <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 3"/> <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 3"/> <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 3"/> <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 3"/> <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 3"/> <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 3"/> <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 3"/> <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 3"/> <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 3"/> <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 3"/> <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 4"/> <w:LsdException Locked="false" Priority="61" Name="Light List Accent 4"/> <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 4"/> <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 4"/> <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 4"/> <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 4"/> <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 4"/> <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 4"/> <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 4"/> <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 4"/> <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 4"/> <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 4"/> <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 4"/> <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 4"/> <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 5"/> <w:LsdException Locked="false" Priority="61" Name="Light List Accent 5"/> <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 5"/> <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 5"/> <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 5"/> <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 5"/> <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 5"/> <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 5"/> <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 5"/> <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 5"/> <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 5"/> <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 5"/> <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 5"/> <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 5"/> <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 6"/> <w:LsdException Locked="false" Priority="61" Name="Light List Accent 6"/> <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 6"/> <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 6"/> <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 6"/> <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 6"/> <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 6"/> <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 6"/> <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 6"/> <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 6"/> <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 6"/> <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 6"/> <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 6"/> <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 6"/> <w:LsdException Locked="false" Priority="19" QFormat="true" Name="Subtle Emphasis"/> <w:LsdException Locked="false" Priority="21" QFormat="true" Name="Intense Emphasis"/> <w:LsdException Locked="false" Priority="31" QFormat="true" Name="Subtle Reference"/> <w:LsdException Locked="false" Priority="32" QFormat="true" Name="Intense Reference"/> <w:LsdException Locked="false" Priority="33" QFormat="true" Name="Book Title"/> <w:LsdException Locked="false" Priority="37" SemiHidden="true" UnhideWhenUsed="true" Name="Bibliography"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="TOC Heading"/> <w:LsdException Locked="false" Priority="41" Name="Plain Table 1"/> <w:LsdException Locked="false" Priority="42" Name="Plain Table 2"/> <w:LsdException Locked="false" Priority="43" Name="Plain Table 3"/> <w:LsdException Locked="false" Priority="44" Name="Plain Table 4"/> <w:LsdException Locked="false" Priority="45" Name="Plain Table 5"/> <w:LsdException Locked="false" Priority="40" Name="Grid Table Light"/> <w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light"/> <w:LsdException Locked="false" Priority="47" Name="Grid Table 2"/> <w:LsdException Locked="false" Priority="48" Name="Grid Table 3"/> <w:LsdException Locked="false" Priority="49" Name="Grid Table 4"/> <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark"/> <w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful"/> <w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful"/> <w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 1"/> <w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 1"/> <w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 1"/> <w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 1"/> <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 1"/> <w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 1"/> <w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 1"/> <w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 2"/> <w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 2"/> <w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 2"/> <w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 2"/> <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 2"/> <w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 2"/> <w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 2"/> <w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 3"/> <w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 3"/> <w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 3"/> <w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 3"/> <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 3"/> <w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 3"/> <w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 3"/> <w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 4"/> <w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 4"/> <w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 4"/> <w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 4"/> <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 4"/> <w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 4"/> <w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 4"/> <w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 5"/> <w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 5"/> <w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 5"/> <w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 5"/> <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 5"/> <w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 5"/> <w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 5"/> <w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 6"/> <w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 6"/> <w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 6"/> <w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 6"/> <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 6"/> <w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 6"/> <w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 6"/> <w:LsdException Locked="false" Priority="46" Name="List Table 1 Light"/> <w:LsdException Locked="false" Priority="47" Name="List Table 2"/> <w:LsdException Locked="false" Priority="48" Name="List Table 3"/> <w:LsdException Locked="false" Priority="49" Name="List Table 4"/> <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark"/> <w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful"/> <w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful"/> <w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 1"/> <w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 1"/> <w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 1"/> <w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 1"/> <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 1"/> <w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 1"/> <w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 1"/> <w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 2"/> <w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 2"/> <w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 2"/> <w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 2"/> <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 2"/> <w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 2"/> <w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 2"/> <w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 3"/> <w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 3"/> <w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 3"/> <w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 3"/> <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 3"/> <w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 3"/> <w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 3"/> <w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 4"/> <w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 4"/> <w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 4"/> <w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 4"/> <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 4"/> <w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 4"/> <w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 4"/> <w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 5"/> <w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 5"/> <w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 5"/> <w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 5"/> <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 5"/> <w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 5"/> <w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 5"/> <w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 6"/> <w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 6"/> <w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 6"/> <w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 6"/> <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 6"/> <w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 6"/> <w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 6"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Mention"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Smart Hyperlink"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Hashtag"/> </w:LatentStyles></xml><![endif]--><!--[if gte mso 10]><style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin-top:0in; mso-para-margin-right:0in; mso-para-margin-bottom:8.0pt; mso-para-margin-left:0in; line-height:107%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri",sans-serif; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi;} </style><![endif]--> <br /><div class="MsoNormal">More than a decade ago I got hold of one of the earlier versions of Oracle Application Express (APEX / HTML-DB), and I was immediately hooked.<span style="mso-spacerun: yes;">&nbsp; </span>Over the years the one thing that APEX did not have was a component I’d seen in larger more expensive systems that had less flexibility than APEX ever will.<span style="mso-spacerun: yes;">&nbsp; </span>Workflow.<span style="mso-spacerun: yes;">&nbsp;&nbsp;</span></div><div class="MsoNormal"><br /></div><div class="MsoNormal">So more than a few years ago I began an attempt to create such an engine for the Oracle database and for Oracle Application Express.<span style="mso-spacerun: yes;">&nbsp; </span>The key goals were to produce a solution that was full-featured, yet easy to use, powerful, yet inexpensive. (should I decide to market it)</div><div class="MsoNormal"><br /></div><div class="MsoNormal">Enter Relay Workflow.<span style="mso-spacerun: yes;">&nbsp; </span>You can see my posting for the First Look at <a href="https://goo.gl/8Sma5y">https://goo.gl/8Sma5y</a> . Obviously, there is still more to do but I feel it is close enough to start showing and talking about it.<span style="mso-spacerun: yes;">&nbsp; </span></div><div class="MsoNormal"><br /></div><div class="MsoNormal">Why Relay Workflow?<span style="mso-spacerun: yes;">&nbsp; </span>First, at times, I am an electronics hobbyist and the relay is a perfect concept of a logic component.<span style="mso-spacerun: yes;">&nbsp; </span>Second, in my younger days I was a competitive runner and the relay race was one of my favorite since it took an individual sport and with the simple addition of a baton having to change hands elevated it to a team sport requiring a bit of skill.</div><div class="MsoNormal"><br /></div><div class="MsoNormal">Why did it take so long?<span style="mso-spacerun: yes;">&nbsp; </span>I’m human; I have a family, a full-time job, dogs, and other real-life things that take up time. I would not have had it any other way to be truthful.</div><div class="MsoNormal"><br /></div><div class="MsoNormal">But now it has a name, enough function and presence to become real for me, and I aim to make it real for others too.</div><div class="MsoNormal"><br /></div><div class="MsoNormal"><span id="goog_1980944152"></span><span id="goog_1980944153"></span>Stay Tuned.</div> Jason D. Aughenbaugh tag:blogger.com,1999:blog-21645351.post-7019758076247711779 Wed Jun 07 2017 08:45:00 GMT-0400 (EDT) Client Side Validations http://www.explorer-development.uk.com/client-side-validations/ <p>Client Side Validations Since using APEX 5.1, you may have noticed a few differences in regards to client side validation when using a combination of: Compatibility Mode = 5.1 and Execute Validations on Buttons = Yes What you may have noticed is that client side validations are firing first; and only if the page is</p> <p>The post <a rel="nofollow" href="http://www.explorer-development.uk.com/client-side-validations/">Client Side Validations</a> appeared first on <a rel="nofollow" href="http://www.explorer-development.uk.com">Oracle Application Express (APEX) Consultants, developers and APEX training courses UK</a>.</p> Explorer Development UK http://www.explorer-development.uk.com/?p=4275 Wed Jun 07 2017 06:50:36 GMT-0400 (EDT) Auto hide client-side messages http://apexbyg.blogspot.com/2017/06/auto-hide-client-side-messages.html <div dir="ltr" style="text-align: left;" trbidi="on">Probably somebody did blog about it but I haven't found it yet.<br /><br /><h3 style="text-align: left;">The Problem</h3><div>If you didn't modified your Universal theme, by default, success and validation messages appear in the top right corner of a page and you have to close them manually or they disappear when you refresh/submit your page.</div><div><br /></div><div>It can be confusing when you are on a page with Interactive Grid and you change something repeatedly and successfully - it seems like nothing happened. So let's see how to hide them...<br /><br /></div><h3 style="text-align: left;">The Solution</h3><div>It can be done by using theme hooks under apex.message namespace.<br /><br /></div><h3 style="text-align: left;">How To</h3><div>If you want that all your client side messages are hidden after 3 seconds you should call this code:</div><div><div><pre class="lang-js prettyprint prettyprinted" style="background-color: #eff0f1; border: 0px; color: #393318; font-family: consolas, menlo, monaco, &quot;lucida console&quot;, &quot;liberation mono&quot;, &quot;dejavu sans mono&quot;, &quot;bitstream vera sans mono&quot;, &quot;courier new&quot;, monospace, sans-serif; font-size: 13px; margin-bottom: 1em; max-height: 600px; overflow: auto; padding: 5px; width: auto; word-wrap: normal;">apex.message.setThemeHooks({<br /> beforeShow: function(pMsgType, pElement$){<br /> setTimeout(function() {<br /> $('.t-Alert').fadeOut('slow');<br /> }, 3000); <br /> }<br />});</pre><div class="separator" style="background-color: white; clear: both;">Where second parameter in setTimeout function (with value 3000) is number of&nbsp;milliseconds. In my case it's 3 seconds.</div><div class="separator" style="background-color: white; clear: both; color: #666666; font-family: &quot;Trebuchet MS&quot;, Trebuchet, Verdana, sans-serif; font-size: 13.2px;"><span style="color: black; font-family: &quot;times new roman&quot;; font-size: small;"><br /></span></div><div class="separator" style="background-color: white; clear: both;">If you want to hide only success or error/validation messages you can use pMsgType variable. For example:</div><div class="separator" style="background-color: white; clear: both;"><br /></div><div><div><pre class="lang-js prettyprint prettyprinted" style="background-color: #eff0f1; border: 0px; color: #393318; font-family: consolas, menlo, monaco, &quot;lucida console&quot;, &quot;liberation mono&quot;, &quot;dejavu sans mono&quot;, &quot;bitstream vera sans mono&quot;, &quot;courier new&quot;, monospace, sans-serif; font-size: 13px; margin-bottom: 1em; max-height: 600px; overflow: auto; padding: 5px; width: auto; word-wrap: normal;">apex.message.setThemeHooks({<br /> beforeShow: function(pMsgType, pElement$){<br /> if (pMsgType=='success'){ <br /> setTimeout(function() {<br /> $('.t-Alert').fadeOut('slow');<br /> }, 3000);<br /> } <br /> }<br />});</pre></div></div></div></div><div>For error/validation messages pMsgType parameter equals error.</div><div><br /></div><div>To apply this code for all pages in application put this in Page Load dynamic action on global page (page 0) or in your custom JS file (preferred).<br /><br />Demo is available <a href="https://apex.oracle.com/pls/apex/f?p=100309:33:" target="_blank">here</a>.</div><div><br /></div><div>Enjoy!</div><div><br /></div><div><i style="background-color: white; color: #666666; font-family: &quot;trebuchet ms&quot;, trebuchet, verdana, sans-serif; font-size: 13.2px;">Tested on APEX&nbsp;5.1.1.00.08</i></div></div> Marko Gorički tag:blogger.com,1999:blog-1003209687173038896.post-1822439489066629539 Wed Jun 07 2017 01:49:00 GMT-0400 (EDT) excel2collection functionality of ORDS will not work with APEX 5.1 or later http://joelkallman.blogspot.com/2017/06/excel2collection-functionality-of-ords.html If you're using the functionality of <a href="http://www.oracle.com/technetwork/developer-tools/rest-data-services/overview/index.html" target="_blank">Oracle REST Data Services (ORDS)</a> with <a href="https://apex.oracle.com/" target="_blank">Oracle Application Express</a> to parse a Microsoft Excel file and store the parsed results in an APEX collection, I have good news and bad news.<br /><br /><b>Bad News</b>: &nbsp;This functionality will no longer work in Application Express 5.1 or later. &nbsp;Due to architectural changes in the way that pages are submitted in APEX 5.1, this functionality was unfortunately (but necessarily) broken with no practical way to restore it. &nbsp;And due to other necessary architectural changes, the bundled library which does the Excel parsing in ORDS is being removed in a future version of ORDS.<br /><br /><b>Good News</b>: &nbsp;Some customers have reported that they have successfully replaced this functionality using Anton Scheffer's <a href="http://www.apex-plugin.com/oracle-apex-plugins/process-type-plugin/excel2collections_271.html" target="_blank">EXCEL2COLLECTIONS plug-in</a>.<br /><br />We take very seriously our desire to always preserve existing functionality for customers, and to try to always avoid any change in user interface or functionality upon upgrade. &nbsp;But in this case, it was simply not practical.<br /><br />Thanks to <a href="https://twitter.com/deneskubicek" target="_blank">Denes Kubicek</a> for prominently raising this issue on the <a href="https://community.oracle.com/thread/4021562" target="_blank">OTN discussion forum</a>. Joel R. Kallman tag:blogger.com,1999:blog-12214002.post-8805238613414828600 Tue Jun 06 2017 12:43:00 GMT-0400 (EDT) PPM Cloud REST API - Assigning Team Members using cURL http://www.jmjcloud.com/blog/ppm-cloud-rest-api-assigning-team-members-using-curl <div><div style="height: 20px; overflow: hidden; width: 100%;"></div><hr class="styled-hr" style="width:100%;"><div style="height: 20px; overflow: hidden; width: 100%;"></div></div><div class="paragraph"><strong>Overview</strong><br><br>This article will show you how to use the PPM Cloud REST API, illustrating how it can used to automate a manual task.<br><br>One of the challenges in Oracle PPM is maintaining worker assignments to projects - with a small number of workers and a handful of projects, this is simple, but can more onerous in larger organizations.<br><br>The PPM REST API allows you to assign workers to projects from the command line.&nbsp; This gives the potential to script multiple updates,&nbsp; saving time navigating in and out of each project&rsquo;s team member list to perform manual assignments.<br><br><strong>Getting Started</strong><br><br>The first thing required is an ERP Cloud user account with the "Projects Integration Specialist" role - this allows the PPM REST APIs to be called.&nbsp;<br><br>You will also need the base URL for your cloud instance, which is in the form:<br><br>&nbsp;&nbsp; <strong>&nbsp;https://&lt;pod&gt;.prj.&lt;region&gt;.oraclecloud.com:443</strong><br><br>For example, if your pod is abcd-dev1, and the region is em3 then the base url is:<br><br>&nbsp;&nbsp; &nbsp;<strong>https://abcd-dev1.prj.em3.oraclecloud.com:443</strong><br><br>We will use URL in the examples below.<br><br><br><strong>Retrieving The Project Id</strong><br><br>The Team Members REST API is driven by the Project Id and not the Project Number or Project Name. &nbsp; So if we want to assign someone to project <strong>1100100</strong>, we need to know Oracle&rsquo;s internal ID for this project. &nbsp;<br>&#8203;<br>One way to find this out would be to use Oracle BI Publisher to create a custom Data Model with a simple SQL statement such as:</div><div><div id="501468705831835646" align="left" style="width: 100%; overflow-y: hidden;" class="wcustomhtml"><b></b><pre class="small"><b>SELECT project_id, segment1 project_numberFROM pjf_projects_all_vWHERE segment1 = '1100100';</b></pre></div></div><div class="paragraph"><br><span>When run, this would return the&nbsp;<strong>Project Id</strong>&nbsp;and <strong>Project Number</strong>.<br>&#8203;</span><br><span>Alternatively, sticking to our theme of running from the command line, we can use the PPM REST web service to do the same thing.&nbsp; To call a REST web service from the command line, we&rsquo;ll use cURL.&nbsp; &nbsp;</span>&#8203;<br><br><span>The Projects GET URL is constructed from the following elements:</span></div><div><div class="wsite-image wsite-image-border-none" style="padding-top:10px;padding-bottom:10px;margin-left:0;margin-right:0;text-align:left"><a><img src="http://www.jmjcloud.com/uploads/7/8/4/7/78474242/published/snip20170606-25.png?1496767017" alt="Picture" style="width:647;max-width:100%"></a><div style="display:block;font-size:90%"></div></div></div><div class="paragraph"><br>These are then used in the cURL command below.</div><div><div id="387834223530723838" align="left" style="width: 100%; overflow-y: hidden;" class="wcustomhtml"><b></b><pre class="small"><b>curl --user USERNAME:PASSWORD -X GET \"https://abcd-dev1.prj.em3.oraclecloud.com:443/projectsFinancialsApi/resources/latest/projects?fields=ProjectId,ProjectNumber&amp;onlyData=true&amp;limit=50&amp;q=ProjectNumber=1100100"</b></pre></div></div><div class="paragraph"><br>This gives returns the Project Id for the Project Number.<br></div><div><!--BLOG_SUMMARY_END--></div><div><div id="432686907969476563" align="left" style="width: 100%; overflow-y: hidden;" class="wcustomhtml"><b></b><pre class="small"><b>{ "items" : [ { "ProjectId" : 300000056097271, "ProjectNumber" : "1100100" } ], "count" : 1, "hasMore" : false, "limit" : 50, "offset" : 0, "links" : [ { "rel" : "self", "href" : "abcd-dev1.prj.em3.oraclecloud.com:443/projectsFinancialsApi/resources/11.1.11/projects", "name" : "projects", "kind" : "collection" } ]}</b></pre></div></div><div class="paragraph"><br>One thing to add here is that you can run this without the "q" query parameter - and this will then return ALL projects and their IDs, which can be handy.<br><br><strong>Assigning the Worker to the Project</strong><br><br>Armed with the Project Id, we can derive the URL needed to add a team member to the project:</div><div><div class="wsite-image wsite-image-border-none" style="padding-top:10px;padding-bottom:10px;margin-left:0px;margin-right:0px;text-align:left"><a><img src="http://www.jmjcloud.com/uploads/7/8/4/7/78474242/published/snip20170606-26.png?1496767051" alt="Picture" style="width:658;max-width:100%"></a><div style="display:block;font-size:90%"></div></div></div><div class="paragraph">&#8203;To add a team member, we need to POST an ADF JSON object to this URL. &nbsp; The JSON is simple, consisting of three fields:</div><div><div id="467825801848899093" align="left" style="width: 100%; overflow-y: hidden;" class="wcustomhtml"><b></b><pre class="small"><b>{ "PersonEmail" : "matt.paine@jmjcloud.com", "ProjectRole" : "Project Team Member", "StartDate" : "2017-01-01" }</b></pre></div></div><div class="paragraph"><br>&#8203;Notice that the unique identifier of the worker is the email address. &nbsp; This implies that there must be one and only worker in the system using that email address - otherwise the API cannot identify which worker to assign and will raise an error.&nbsp; The start date is also critical - the worker and project must be effective as of that date.<br><br>The API returns a message that is compressed using gzip - so we have to pipe the cURL output through gunzip to review it.&nbsp;<br><br>The full cURL command then looks like this:</div><div><div id="540782464236196481" align="left" style="width: 100%; overflow-y: hidden;" class="wcustomhtml"><b></b><pre class="small"><b>curl --user USERNAME:PASSWORD -X POST \ https://abcd-dev1.prj.em3.oraclecloud.com:443/projectsFinancialsApi/resources/latest/projects/300000054485480/child/ProjectTeamMembers \ -H 'content-type: application/vnd.oracle.adf.resourceitem+json' \ -d '{ "PersonEmail" : "matt.paine@jmjcloud.com", "ProjectRole" : "Project Team Member", "StartDate" : "2017-05-01"}' | gunzip</b></pre></div></div><div class="paragraph"><br>&#8203;When run successfully, we see a simple (nearly) empty return message:<br><span></span></div><div><div id="220309017324960203" align="left" style="width: 100%; overflow-y: hidden;" class="wcustomhtml"><b></b><pre class="small"><b>[]</b></pre></div></div><div class="paragraph"><br>As always, it is as important to check failure responses to understand what messages will be returned and how they can be handled.<br><br>&#8203;Here is a sample error message.&nbsp; There are in an XML-like format.</div><div><div id="695271883394670514" align="left" style="width: 100%; overflow-y: hidden;" class="wcustomhtml"><b></b><pre class="small"><b>&lt;MESSAGE&gt; &lt;NUMBER&gt;PJF-2235518&lt;/NUMBER&gt; &lt;TEXT&gt;This team role is already assigned to this person in the specified date range.&lt;/TEXT&gt; &lt;CAUSE&gt;&lt;/CAUSE&gt; &lt;ACTION&gt;&lt;/ACTION&gt; &lt;DETAILS&gt;You cannot assign a team role to a person more than once during a specific time frame. Enter a start and end date for this person and team role combination that does not overlap the date range for the existing assignment.&lt;/DETAILS&gt; &lt;INCIDENT&gt;&lt;/INCIDENT&gt;&lt;/MESSAGE&gt;JBO-27023: Failed to validate all rows in a transaction.JBO-27024: Failed to validate a row with key oracle.jbo.Key[300000056158736 ] in ProjectPartyEOJBO-PJF:::PJF_TM_DUP_ROLE_ASGMT: &lt;MESSAGE&gt; &lt;NUMBER&gt;PJF-2235518&lt;/NUMBER&gt; &lt;TEXT&gt;This team role is already assigned to this person in the specified date range.&lt;/TEXT&gt; &lt;CAUSE&gt;&lt;/CAUSE&gt; &lt;ACTION&gt;&lt;/ACTION&gt; &lt;DETAILS&gt;You cannot assign a team role to a person more than once during a specific time frame. Enter a start and end date for this person and team role combination that does not overlap the date range for the existing assignment.&lt;/DETAILS&gt; &lt;INCIDENT&gt;&lt;/INCIDENT&gt;&lt;/MESSAGE&gt;JBO-PJF:::PJF_TM_DUP_ROLE_ASGMT: &lt;MESSAGE&gt; &lt;NUMBER&gt;PJF-2235518&lt;/NUMBER&gt; &lt;TEXT&gt;This team role is already assigned to this person in the specified date range.&lt;/TEXT&gt; &lt;CAUSE&gt;&lt;/CAUSE&gt; &lt;ACTION&gt;&lt;/ACTION&gt; &lt;DETAILS&gt;You cannot assign a team role to a person more than once during a specific time frame. Enter a start and end date for this person and team role combination that does not overlap the date range for the existing assignment.&lt;/DETAILS&gt; &lt;INCIDENT&gt;&lt;/INCIDENT&gt;&lt;/MESSAGE&gt;</b></pre></div></div><div class="paragraph"><br><strong>&#8203;Checking the Results</strong><br><br>To check the successful addition, we can list the Team Members on the project by calling the same URL with a GET request.</div><div><div class="wsite-image wsite-image-border-none" style="padding-top:10px;padding-bottom:10px;margin-left:0px;margin-right:0px;text-align:left"><a><img src="http://www.jmjcloud.com/uploads/7/8/4/7/78474242/published/snip20170606-27.png?1496767056" alt="Picture" style="width:656;max-width:100%"></a><div style="display:block;font-size:90%"></div></div></div><div class="paragraph"><br>&#8203;The curl command becomes:</div><div><div id="951189695594289196" align="left" style="width: 100%; overflow-y: hidden;" class="wcustomhtml"><b></b><pre class="small"><b>curl --user USERNAME:PASSWORD -X GET \"abcd-dev1.prj.em3.oraclecloud.com:443/projectsFinancialsApi/resources/latest/projects/300000054485480/child/ProjectTeamMembers?onlyData=true&amp;limit=50"</b></pre></div></div><div class="paragraph"><br>&#8203;And we can see from the output that the team member has been added:<br><span></span></div><div><div id="870445728489209085" align="left" style="width: 100%; overflow-y: hidden;" class="wcustomhtml"><b></b><pre class="small"><b>{ "items" : [ { "FinishDate" : null, "PersonEmail" : "jon.dixon@jmcloud.com", "PersonName" : "Jon Dixon", "ProjectId" : 300000054485480, "ProjectRole" : "Project Manager", "StartDate" : "2015-09-30", "TeamMemberId" : 300000054485569 }, { "FinishDate" : null, "PersonEmail" : "matt.paine@jmjcloud.com", "PersonName" : "Matt Paine", "ProjectId" : 300000054485480, "ProjectRole" : "Project Team Member", "StartDate" : "2017-05-01", "TeamMemberId" : 300000056158735 } ], "count" : 2, "hasMore" : false, "limit" : 50, "offset" : 0, "links" : [ { "rel" : "self", "href" : "https://abcd-dev1.prj.em3.oraclecloud.com:443/projectsFinancialsApi/resources/11.1.11/projects/300000054485480/child/ProjectTeamMembers", "name" : "ProjectTeamMembers", "kind" : "collection" } ]}</b></pre></div></div><div class="paragraph"><br><br><span></span><strong>Adding an End-Date</strong>&#8203;<br><br><span></span>To remove a team-member from a project, we add an end-date using the PATCH method.&nbsp; We need the internal team member id - fortunately we have this from the prior step.<br><span></span></div><div><div class="wsite-image wsite-image-border-none" style="padding-top:10px;padding-bottom:10px;margin-left:0px;margin-right:0px;text-align:left"><a><img src="http://www.jmjcloud.com/uploads/7/8/4/7/78474242/published/snip20170606-28.png?1496767063" alt="Picture" style="width:613;max-width:100%"></a><div style="display:block;font-size:90%"></div></div></div><div class="paragraph"><br>&#8203;The cURL command is:</div><div><div id="190255796900619861" align="left" style="width: 100%; overflow-y: hidden;" class="wcustomhtml"><b></b><pre class="small"><b>curl --user USERNAME:PASSWORD -X PATCH \ https://abcd-dev1.prj.em3.oraclecloud.com:443/projectsFinancialsApi/resources/latest/projects/300000054485480/child/ProjectTeamMembers/300000056158735 \ -H 'content-type: application/vnd.oracle.adf.resourceitem+json' \ -d '{ "StartDate" : "2017-05-01", "FinishDate" : "2017-05-30"}'</b></pre></div></div><div class="paragraph"><br>&#8203;This returns an unzipped response containing the TeamMember JSON item, confirming the update:</div><div><div id="716292881150625859" align="left" style="width: 100%; overflow-y: hidden;" class="wcustomhtml"><b></b><pre class="small"><b>{ "FinishDate" : "2017-05-30", "PersonEmail" : "matt.paine@jmjcloud.com", "PersonName" : "Matt Paine", "ProjectId" : 300000054485480, "ProjectRole" : "Project Team Member", "StartDate" : "2017-05-01", "TeamMemberId" : 300000056158735, "links" : [ { "rel" : "self", "href" : "https://abcd-dev1.prj.em3.oraclecloud.com:443/projectsFinancialsApi/resources/11.1.11/projects/300000054485480/child/ProjectTeamMembers/300000056158735", "name" : "ProjectTeamMembers", "kind" : "item" }, { "rel" : "canonical", "href" : "https://abcd-dev1.prj.em3.oraclecloud.com:443/projectsFinancialsApi/resources/11.1.11/projects/300000054485480/child/ProjectTeamMembers/300000056158735", "name" : "ProjectTeamMembers", "kind" : "item" }, { "rel" : "parent", "href" : "https://abcd-dev1.prj.em3.oraclecloud.com:443/projectsFinancialsApi/resources/11.1.11/projects/300000054485480", "name" : "projects", "kind" : "item" } ]}</b></pre></div></div><div class="paragraph"><br>&#8203;Note that at this stage you&rsquo;re limited to updating the Start Date and Finish Date - you can&rsquo;t update the team member&rsquo;s role, see example below:</div><div><div id="292115102241820403" align="left" style="width: 100%; overflow-y: hidden;" class="wcustomhtml"><b></b><pre class="small"><b>curl --user USERNAME:PASSWORD -X PATCH \ https://abcd-dev1.prj.em3.oraclecloud.com:443/projectsFinancialsApi/resources/latest/projects/300000054485480/child/ProjectTeamMembers/300000056158735 \ -H 'content-type: application/vnd.oracle.adf.resourceitem+json' \ -d '{ "StartDate" : "2017-05-01", "FinishDate" : "2017-05-30", "ProjectRole" : "Project Administrator"}'</b></pre></div></div><div class="paragraph"><br>&#8203;This returns gzipped output, with the following error.<br><span></span></div><div><div id="867080028270161413" align="left" style="width: 100%; overflow-y: hidden;" class="wcustomhtml"><b></b><pre class="small"><b>JBO-27008: Attribute ProjectRole in view objectProjectVO_ProjectTeamMembers_ProjectVOToTeamMemberVO_ProjectTeamMemberVOcannot be set.</b></pre></div></div><div class="paragraph"><br><strong>Conclusion</strong><br><br>Armed with the PPM REST API, we can list projects and their ids, create and update PPM team members. Using cURL, we can execute these REST APIs from the command line, which gives us the ability to script mass updates. &nbsp;<br><br>As always, pay careful attention to error trapping and handling - and make sure that you full test the functionality before production deployment.<br><br>Oracle are progressively expanding their REST API catalog for ERP Cloud. &nbsp;For example,&nbsp; in R12,&nbsp; you can report on and update Project Progress using REST.&nbsp; &nbsp;<br><br>&#8203;I&rsquo;d encourage you to review the full PPM REST API catalog which for R12 can be found here:&nbsp; &nbsp; <a href="http://docs.oracle.com/cloud/farel12/projectcs_gs/FAPAP/">http://docs.oracle.com/cloud/farel12/projectcs_gs/FAPAP/</a></div> http://www.jmjcloud.com/blog/ppm-cloud-rest-api-assigning-team-members-using-curl Tue Jun 06 2017 01:00:00 GMT-0400 (EDT) KScope 2017 San Antonio - będziemy tam !!! http://apex.dbe.pl/2017/06/kscope-2017-san-antonio-bedziemy-tam.html <br /> <div style="text-align: center;"> Lecimy na największą imprezę apex-ową..!&nbsp;</div> <br /> <br /> <div class="separator" style="clear: both; text-align: center;"> <a href="https://4.bp.blogspot.com/-DW0fJxiPEx8/WNcRizfzKYI/AAAAAAAAJHI/bPGG-o_p2q0tZzA3RplYl_EF5J0annk2wCEw/s1600/Kscope17Logo-PNGm.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="118" src="https://4.bp.blogspot.com/-DW0fJxiPEx8/WNcRizfzKYI/AAAAAAAAJHI/bPGG-o_p2q0tZzA3RplYl_EF5J0annk2wCEw/s320/Kscope17Logo-PNGm.png" width="320" /></a></div> <br /> <br /> <br /> A o co chodzi tak naprawdę... chodzi o powiew świeżości..., jak pewnie zauważyliście od kilkunastu miesięcy totalna posucha na blogu.. nie macie zielonego pojęcia co u nas... a tak naprawdę jesteśmy zawaleni robotą...<br /> <br /> W tym roku powiększyliśmy zespół o 150%, projekty w których bierzemy udział mają potencjał porównywalny z największymi jakie są obecnie realizowane na świecie w technologii Oracle APEX (systemy dla 80 000 - 100 000 UŻYTKOWNIKÓW !, systemy w których dziennie przelatują miliony dolarów...)<br /> <br /> Oprócz udziału w konferencji odwiedzimy naszych klientów za wielką wodą. Oprócz typowo zajęć związanych z pracą, postaramy też się zrelaksować w okolicy zachodniego wybrzeża : ) Wszystko postaramy się odpowiednio relacjonować na blogu.<br /> <br /> Zacząłem od KScopa... to chciałbym zakończyć bardzo ważną informacją: Bartek Ostrowski i Przemek Staniszewski z Polski będą mieli wykład w San Antonio. Myślę, że znacie chłopaków z ich bardzo dobrej roboty... i dużym udziale w społeczności APEX. W każdym razie będziemy im kibicować... .... keep in touch &nbsp;: ) ) tag:blogger.com,1999:blog-7531463720728239813.post-1557272828671901492 Mon Jun 05 2017 15:59:00 GMT-0400 (EDT) Announcing the 2017 ODTUG Innovation Award Nominations http://www.odtug.com/p/bl/et/blogaid=724&source=1 New for 2017 - member voting! If you are an ODTUG member, you should have received a members only voting link to cast a vote for your favorite innovation. Thanks to all the individuals who nominated these outstanding individuals and their exceptionally innovative projects. ODTUG http://www.odtug.com/p/bl/et/blogaid=724&source=1 Mon Jun 05 2017 10:06:47 GMT-0400 (EDT) جلسه سوم گروه کاربران اوراکل ایران (IranOUG) - از كجا Oracle APEX را شروع كنيم؟ http://oracleapex.blogfa.com/post/45 </p> <p><img src="http://up.upinja.com/0jhwa.png" alt="" width="500" height="357" /></p> <p> </p> <p style="text-align: justify;">جلسه <strong>سوم گروه کاربران اوراکل ایران (<span style="color: #ff0000;">IranOUG</span>)</strong>  در تاریخ ۳۱ فروردین ۱۳۹۶ برگزار شد. در این همایش در خصوص <span style="color: #ff0000;"><strong>Oracle APEX</strong></span> صحبت کردم. مطلب در خصوص اینکه <span style="color: #ff0000;"><strong>Oracle APEX</strong></span> را از کجا شروع کنیم ارائه گردید.</p> oracleapex http://oracleapex.blogfa.com/post/45 Sun Jun 04 2017 03:02:00 GMT-0400 (EDT) Kscope17 EPM Data Integration Session Highlights - Tony Scalese http://www.odtug.com/p/bl/et/blogaid=723&source=1 With ODTUG Kscope17 less than one month away, here is a highlight of the Kscope17 EPM Data Integration sessions that Tony Scalese is most excited to attend and why he thinks you should attend them: ODTUG http://www.odtug.com/p/bl/et/blogaid=723&source=1 Fri Jun 02 2017 11:31:57 GMT-0400 (EDT) Client Side Validations http://www.explorer.uk.com/client-side-validations/ <p>Since using APEX 5.1, you may have noticed a few differences in regards to client side validation when using a combination of:</p> <p style="text-align: center;">Compatibility Mode = 5.1 <strong>and</strong> Execute Validations on Buttons = Yes</p> <p>What you may have noticed is that client side validations are firing first; and only if the page is successfully validated will the server side validations fire.</p> <p>So what are client side validations? A classic example of this is switching the <em>Value required</em> attribute on an Item to <em>Yes</em>.</p> <p>When you submit the page via a button (providing the above rule is met) you will see that the Value required client side validation is displayed first; and then following entering of a value a second validation phase occurs whereby server validations are then fired. For the user, you can think of this as a two phased validation process.</p> <p>If you break the rule and switch the compatibility mode to 5.0 then the full list of validations are displayed at once. However switching to a compatibility mode sub-5.1 is always going to be undesirable. Remaining on compatibility mode 5.1 is advantageous but the methods of opting out are not always immediately obvious to the developer.</p> <p>This two phased validation approach is causing a point of discussion on the Explorer development department and various development consultants are pro and against the change.</p> <p>On one hand performance is increased by performing client side validations before the page reaches the server; on the other hand, arguably, the user experience suffers. For example if the user forgets to complete a required field, they are informed about this, believing this is the only mistake they’ve made in completing the form. Following a second submission they are informed about other validations which, if informed sooner, they could have corrected earlier.</p> <p>A few weeks ago; John Snyders created a <a href="http://hardlikesoftware.com/weblog/2017/05/10/apex-client-side-validation/" target="_blank">blog all about APEX Client-Side validations</a>; whilst technically comprehensive I thought it would benefit from a hands-on demonstration.</p> <p><a href="http://www.explorer.uk.com/wp-content/uploads/2017/06/Client-Side-Validations-1200.jpg" rel="lightbox[5775]"><img class="aligncenter wp-image-5779 size-full" src="http://www.explorer.uk.com/wp-content/uploads/2017/06/Client-Side-Validations-1200.jpg" alt="" width="1200" height="665" srcset="http://www.explorer.uk.com/wp-content/uploads/2017/06/Client-Side-Validations-1200.jpg 1200w, http://www.explorer.uk.com/wp-content/uploads/2017/06/Client-Side-Validations-1200-300x166.jpg 300w, http://www.explorer.uk.com/wp-content/uploads/2017/06/Client-Side-Validations-1200-768x426.jpg 768w, http://www.explorer.uk.com/wp-content/uploads/2017/06/Client-Side-Validations-1200-1024x567.jpg 1024w" sizes="(max-width: 1200px) 100vw, 1200px" /></a></p> <p>So rather than regurgitate all the info Johns Blog, I will demonstrate to you some coding examples which are inspired from some of ideas within John’s blog.</p> <p>I’ll walk you through some of the basics of Client Side Validations and then move on up to some of more advanced examples.</p> <p>I’ll purposely omit the Interactive Grid examples as these are already covered in the Sample Interactive Grid Packaged Application and covered in much more detail on the Explorer APEX 5.1 Interactive Grid course.</p> <p style="text-align: center;">[Video goes here]</p> <p>Click for the demo Application</p> <p><a href="https://apex.oracle.com/pls/apex/f?p=107625" target="_blank">https://apex.oracle.com/pls/apex/f?p=107625</a></p> <p>Whilst watching; please bear in mind, I’m only using a handful of JavaScript APIs</p> <p><strong>apex.page.validate</strong></p> <p>A bit of a misleading title; It will perform pattern and required validaitons; but not any more complex validations such as the lose focus examples.</p> <p><strong>apex.message.showErrors</strong></p> <p>Shows any errors in the stack; or can be used to push errors in an object to the page.</p> <p><strong>apex.message.clearErrors</strong></p> <p>Clears any errors from the page.</p> <p><strong>Apex.item().node.setCustomValidity</strong></p> <p>Set a validation message on an Item; can be set to a message (overwritten by the data-valid-message item attribute) or to null to make the item valid.</p> <p><strong>Apex.item().getValidity.valid</strong></p> <p>Returns true if the item is valid, otherwise false.</p> <p><strong>Apex.item().getValidationMessage</strong></p> <p>Gets the current validation message</p> <p>The post <a rel="nofollow" href="http://www.explorer.uk.com/client-side-validations/">Client Side Validations</a> appeared first on <a rel="nofollow" href="http://www.explorer.uk.com">Explorer New</a>.</p> admin http://www.explorer.uk.com/?p=5775 Fri Jun 02 2017 10:25:47 GMT-0400 (EDT) APEX, HTTPS, Zertifikate und das Oracle Wallet https://blogs.oracle.com/apexcommunity_deutsch/apex-https-zertifikate-und-das-oracle-wallet <p>Die Artikelreihe zum Thema &quot;Application Express und REST Services&quot; pausiert f&uuml;r eine Ausgabe - daf&uuml;r schieben wir einen Tipp ein, der zumindest mit dem Thema verwandt ist. Es geht HTTPS-Requests einer APEX-Anwendung. Zun&auml;chst funktioniert ein solcher ganz genauso wie ein HTTP-Aufruf - man verwendet einfach die HTTPS-URL. Zum Testen nehmen wir die HTTPS-URL des USGS (<span>US Geological Survey</span>), die bereits im&nbsp;<a href="https://apex.oracle.com/pls/apex/germancommunities/apexcommunity/tipp/6001/index.html" target="_blank">ersten Community Tipp zum Thema REST Services und Application Express</a> ein Thema war.</p> select apex_web_service.make_rest_request( p_url =&gt; &#39;https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_day.geojson&#39;, p_http_method =&gt; &#39;GET&#39; ) from dual; <p>Der erste Versuch schl&auml;gt jedoch fast immer fehl ...</p> Fehlerbericht - ORA-29273: HTTP-Anforderung nicht erfolgreich ORA-29024: Zertifikatvalidierung nicht erfolgreich ORA-06512: in &quot;SYS.UTL_HTTP&quot;, Zeile 380 <p>Blogs und Diskussionsforen sind voll von Fragen, was bei dieser Fehlermeldung zu tun ist - in diesem Tipp erfahren Sie es:</p> <p>Die Fehlermeldung besagt, dass die Datenbank das SSL-Zertifikat, mit dem sich der Webserver ausgewiesen hat, nicht validieren konnte. F&uuml;r diese Validierung muss ein Oracle Wallet eingerichtet und dann in Application Express konfiguriert werden. Vorab jedoch ein paar einfache, erkl&auml;rende Worte zum Thema SSL-Zertifikate (die Erkl&auml;rungen sind sicherlich nicht vollst&auml;ndig, f&uuml;r das Verst&auml;ndnis dieses Tipps sollten sie jedoch hinreichend sein):</p> <p> </p> <p>Wenn Sie eine HTTPS-Verbindung zu einem Server aufbauen, weist dieser sich mit einem SSL-Zertifikat aus. Ein solches Zertifikat funktioniert wie eine Art Personalausweis: es weist aus, dass der Server, der auf die Anfrage antwortet, tats&auml;chlich der ist, den man mit der URL angesprochen hat.</p> <p>Nun stellt sich nat&uuml;rlich die Frage, ob ein solcher &quot;Ausweis&quot; auch echt ist - und diese Echtheit wird von der <span><em>Certificate</em> <em>Authority</em></span> zertifiziert: das SSL-Zertifikat des Webservers wird mit einem Zertifikat der CA &quot;unterschrieben&quot;. Das Zertifikat der CA kann nun wiederum von einer weiteren CA &quot;unterschrieben&quot; werden - womit das n&auml;chste Zertifikat ins Spiel kommt. Diese Kette (<em><span>Certificate Chain</span></em>) kann auch noch l&auml;nger werden; irgendwo muss aber ein Ende sein - und das ist ein CA-Zertifikat, dem einfach vertraut wird, auch wenn es nicht &quot;unterschrieben&quot; ist (<em>Trusted Certificate</em>).</p> <p style="text-align: center;"><img alt="" src="https://cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/fbd61610-2cfe-4a98-b117-958129af0c39/Image/25a836082702b0621f7c5c301053e326/image02a.png" style="width: 400px; height: 411px;" /></p> <p>In einem Web-Browser wie Firefox, Chrome oder anderen sind alle g&auml;ngigen CA-Zertifikate vorinstalliert - so kann man bequem im Internet surfen. Die Oracle-Datenbank verwaltet solche Zertifikate in einem Wallet - dieses muss jedoch zuerst erzeugt werden, es ist zu Beginn leer und die n&ouml;tigen CA-Zertifikate m&uuml;ssen hinzugef&uuml;gt werden.</p> <p><a href="https://apex.oracle.com/pls/apex/germancommunities/apexcommunity/tipp/6121/index.html">Dieser Artikel</a> beschreibt, wie man ein Oracle Wallet erzeugt, wie man die n&ouml;tigen CA-Zertifikate in dieses l&auml;dt und schlie&szlig;lich, wie man das Wallet zentral in Application Express einrichtet, so dass es in allen Workspaces und Anwendungen genutzt werden kann (<a href="https://apex.oracle.com/pls/apex/germancommunities/apexcommunity/tipp/6121/index.html">ganzen Artikel lesen</a>).</p> Carsten Czarski https://blogs.oracle.com/apexcommunity_deutsch/apex-https-zertifikate-und-das-oracle-wallet Fri Jun 02 2017 06:12:00 GMT-0400 (EDT) APEX, HTTPS, certificates and the Oracle Wallet https://blogs.oracle.com/apex/apex-https-certificates-and-the-oracle-wallet <p>Today we&#39;ll talk about performing HTTPS requests with the <strong>APEX_WEB_SERVICE</strong> or <strong>UTL_HTTP</strong> packages in Application Express. At the first glance, this is pretty simple - instead of an URL beginning with <strong>http://</strong>, we use one beginning with <strong>https://</strong>.</p> <p>As an example, we&#39;ll try out the HTTPS URL of the USGS (<em>U.S. Geological Survey</em>), which is also being used in the article about <a href="https://blogs.oracle.com/apex/rest-services-and-application-express-51-part-1">using REST services in Application Express</a>. The following code example tries to fetch a JSON feed from <strong>earthquake.usgs.gov</strong> using HTTPS.</p> select <strong>apex_web_service.make_rest_request</strong>( p_url =&gt; &#39;<strong>https</strong>://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_day.geojson&#39;, p_http_method =&gt; &#39;GET&#39; ) from dual; <p>In most cases, the first attempt fails:</p> ORA-29273: HTTP request failed ORA-29024: Certificate validation failure ORA-06512: at &quot;SYS.UTL_HTTP&quot;, line 380 <p>Blogs and discussion forums are full of questions and answers how to deal with this situation. This article provides an explanation and explains how to solve the problem for PL/SQL as well as for Application Express:</p> <p>The error message basically states that the Oracle database was not able to <em>validate</em> the SSL certificate, which the external web server sent in order to prove its identity. To get certificate validation working, we need to create an <em>Oracle Wallet</em> and configure it in Application Express.</p> <p>But before doing that, here is a simple explanation about HTTPS and SSL certificates - &quot;in a nutshell&quot; (these explanations are far away from being complete, but they should be sufficient to understand what the Oracle Database is doing and what the Oracle Wallet is needed for):&nbsp;</p> <p>When an HTTPS request to a web server is done, the first step is the <em>SSL handshake</em>, in which client and server negotiate about the details of the SSL encryption. As part of this handshake, the server sends its SSL certificate, which is similar to an ID card for humans: The certificate is there to prove, that the responding server is really the one, which the client expects.</p> <p>The obvious question is now, whether the &quot;ID card&quot; is authentic - and this authenticity is certified by a <em>Certificate Authority</em> (CA). The web servers&#39; SSL certificate is &quot;signed&quot; by the certificate authority using - again - a certificate. Now we can ask, whether the CA&#39;s certificate is authentic ... so it might be signed by another CA - and we have another certificate in the game. It&#39;s obvious that, at some point, this chain must come to an end. The client has to trust one CA certificate without looking into who has signed it - such a <em>trusted certificate</em> is then the end of the chain.</p> <p style="text-align: center;"><img alt="Certificate Chain in a web browser" src="https://cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/fbd61610-2cfe-4a98-b117-958129af0c39/Image/25a836082702b0621f7c5c301053e326/image02a.png" style="width: 400px; height: 411px;" /></p> <p>In a browser like Firefox, Chrome or others, all common CA certificates are pre-installed and this list of certificates is also being updated with each browser update. The Oracle Database maintains such certificates in an Oracle Wallet - but this wallet has to be created; and right after creation it is empty. We have to add the CA certificates we need.</p> <p><a href="https://apex.oracle.com/pls/apex/germancommunities/apexcommunity/tipp/6121/index-en.html" target="_blank">This article</a> explains how to create the wallet, how to load the required CA certificates into it and finally how to enable it for all Application Express workspaces and applications (<a href="https://apex.oracle.com/pls/apex/germancommunities/apexcommunity/tipp/6121/index-en.html" target="_blank">read the full article</a>).</p> Carsten Czarski https://blogs.oracle.com/apex/apex-https-certificates-and-the-oracle-wallet Fri Jun 02 2017 06:02:32 GMT-0400 (EDT) APEX, HTTPS, certificates and the Oracle Wallet https://blogs.oracle.com/apex/apex-https-certificates-and-the-oracle-wallet <p>Today we&#39;ll talk about performing HTTPS requests with the <strong>APEX_WEB_SERVICE</strong> or <strong>UTL_HTTP</strong> packages in Application Express. At the first glance, this is pretty simple - instead of an URL beginning with <strong>http://</strong>, we use one beginning with <strong>https://</strong>.</p> <p>As an example, we&#39;ll try out the HTTPS URL of the USGS (<em>U.S. Geological Survey</em>), which is also being used in the article about <a href="https://blogs.oracle.com/apex/rest-services-and-application-express-51-part-1">using REST services in Application Express</a>. The following code example tries to fetch a JSON feed from <strong>earthquake.usgs.gov</strong> using HTTPS.</p> select <strong>apex_web_service.make_rest_request</strong>( p_url =&gt; &#39;<strong>https</strong>://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_day.geojson&#39;, p_http_method =&gt; &#39;GET&#39; ) from dual; <p>In most cases, the first attempt fails:</p> ORA-29273: HTTP request failed ORA-29024: Certificate validation failure ORA-06512: at &quot;SYS.UTL_HTTP&quot;, line 380 <p>Blogs and discussion forums are full of questions and answers how to deal with this situation. This article provides an explanation and explains how to solve the problem for PL/SQL as well as for Application Express:</p> <p>The error message basically states that the Oracle database was not able to <em>validate</em> the SSL certificate, which the external web server sent in order to prove its identity. To get certificate validation working, we need to create an <em>Oracle Wallet</em> and configure it in Application Express.</p> <p>But before doing that, here is a simple explanation about HTTPS and SSL certificates - &quot;in a nutshell&quot; (these explanations are far away from being complete, but they should be sufficient to understand what the Oracle Database is doing and what the Oracle Wallet is needed for):&nbsp;</p> <p>When an HTTPS request to a web server is done, the first step is the <em>SSL handshake</em>, in which client and server negotiate about the details of the SSL encryption. As part of this handshake, the server sends its SSL certificate, which is similar to an ID card for humans: The certificate is there to prove, that the responding server is really the one, which the client expects.</p> <p>The obvious question is now, whether the &quot;ID card&quot; is authentic - and this authenticity is certified by a <em>Certificate Authority</em> (CA). The web servers&#39; SSL certificate is &quot;signed&quot; by the certificate authority using - again - a certificate. Now we can ask, whether the CA&#39;s certificate is authentic ... so it might be signed by another CA - and we have another certificate in the game. It&#39;s obvious that, at some point, this chain must come to an end. The client has to trust one CA certificate without looking into who has signed it - such a <em>trusted certificate</em> is then the end of the chain.</p> <p style="text-align: center;"><img alt="Certificate Chain in a web browser" src="https://cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/fbd61610-2cfe-4a98-b117-958129af0c39/Image/25a836082702b0621f7c5c301053e326/image02a.png" style="width: 400px; height: 411px;" /></p> <p>In a browser like Firefox, Chrome or others, all common CA certificates are pre-installed and this list of certificates is also being updated with each browser update. The Oracle Database maintains such certificates in an Oracle Wallet - but this wallet has to be created; and right after creation it is empty. We have to add the CA certificates we need.</p> <p><a href="https://apex.oracle.com/pls/apex/germancommunities/apexcommunity/tipp/6121/index-en.html" target="_blank">This article</a> explains how to create the wallet, how to load the required CA certificates into it and finally how to enable it for all Application Express workspaces and applications (<a href="https://apex.oracle.com/pls/apex/germancommunities/apexcommunity/tipp/6121/index-en.html" target="_blank">read the full article</a>).</p> Carsten Czarski https://blogs.oracle.com/apex/apex-https-certificates-and-the-oracle-wallet Fri Jun 02 2017 06:02:32 GMT-0400 (EDT) Kscope Ambassador Program http://www.odtug.com/p/bl/et/blogaid=722&source=1 The Kscope Ambassador Program is back!  You’re already attending the sessions, so why not take an opportunity to assist with the conference and make a difference? ODTUG http://www.odtug.com/p/bl/et/blogaid=722&source=1 Thu Jun 01 2017 09:00:53 GMT-0400 (EDT) Oracle REST Data Services and Docker http://feedproxy.google.com/~r/KrisBlog/~3/OzlS2PMY1RQ/oracle-rest-data-services-and-docker.html TL;DR 1) check out https://github.com/krisrice/docker-ords-sqlcl-apex 2) Download ORDS ; optionally SQLcl,APEX 3) Build w/DB connection details docker build -t krisrice/ords:3.0.10 --build-arg DBHOST=192.168.3.119 --build-arg DBSERVICE=orcl --build-arg DBPORT=1521 --build-arg DBPASSWD=oracle . 4) Run the image docker run -d -p 8888:8888 -p 8443:8443 --name=ords krisrice/ords:3.0.10 5) Access <div class="feedflare"> <a href="http://feeds.feedburner.com/~ff/KrisBlog?a=OzlS2PMY1RQ:MlDPWZah37E:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/KrisBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/KrisBlog?a=OzlS2PMY1RQ:MlDPWZah37E:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/KrisBlog?d=7Q72WNTAKBA" border="0"></img></a> </div><img src="http://feeds.feedburner.com/~r/KrisBlog/~4/OzlS2PMY1RQ" height="1" width="1" alt=""/> Kris Rice tag:blogger.com,1999:blog-37621059.post-2084061909244191320 Thu Jun 01 2017 08:49:00 GMT-0400 (EDT) Data Guard 12.2 New Features Deep-Dive http://www.dbaexpert.com/blog/data-guard-12-2-new-features-deep-dive/ <p>Oracle Database 12c Release 2, packs a multitude of new features for Data Guard with high availability, data protection, and disaster recovery. Through the new functionality shared in this paper, DBAs can provide better protection for mission critical production databases from human errors, data corruptions, failures, and disasters. With the new features in Oracle 12.2, DBAs can deliver a robust reporting environment while addressing corporate disaster recovery goals.</p> <p><a href="http://www.dbaexpert.com/blog/wp-content/uploads/2017/06/Data-Guard-12.2-New-Features-Deep-Dive-DBAExpert.com_.pdf" title="Download the Data Guard 12.2 white paper here." alt="Data Guard 12 2 New Features Deep Dive DBAExpert com">Download the Data Guard 12.2 white paper here.</a></p> <p>Posted by Charles Kim<br /> Oracle ACE Director</p> admin http://www.dbaexpert.com/blog/?p=1173 Wed May 31 2017 18:35:20 GMT-0400 (EDT) The request could not be mapped to any database http://warp11.nl/2017/05/the-request-could-not-be-mapped-to-any-database/ <div> <div class="post-body entry-content" id="post-body-1523204484805565990"> Today I figured out to my shame that the mentioned error by ORDS 3 has a really, REALLY simple cause&#8230; the password was expired.</p> <p> Logging in (using SQL-plus) revealed this elegantly:</p> </p> <div class="separator"> <a href="https://2.bp.blogspot.com/-gfI-kvy29wk/WSvtqFJkvBI/AAAAAAAAG08/3t74ceQ0pd4mS1Jx59J6stZIYrpoaeufQCLcB/s1600/Schermafdruk%2B2017-05-29%2B12.44.34.png"><img border="0" height="288" src="http://warp11.nl/wp-content/uploads/2017/05/Schermafdruk2B2017-05-292B12.44.34.png" width="320" /></a></div> <p> The second one of course did the trick.</p> <p> Happy APEXING again. </p> </div> </div> <p>Source Article from <a href="http://richardmartens.blogspot.com/2017/05/the-request-could-not-be-mapped-to-any.html">http://richardmartens.blogspot.com/2017/05/the-request-could-not-be-mapped-to-any.html</a></p> Richard Martens http://warp11.nl/2017/05/the-request-could-not-be-mapped-to-any-database/ Mon May 29 2017 05:45:31 GMT-0400 (EDT) Things I have done in my life. http://douggault.blogspot.com/2017/05/things-i-have-done-in-my-life.html Maybe its the fact that I'm coming up on my 50th birthday. Maybe its that I'm kind of at a crossroads in my career. Maybe its because I'm a sappy sentimentalist that just like to nostalgically recount his experiences.<br /><br />What ever it is that drove me, a few months ago I started writing down the things I have accomplished in my life. As the weeks moved on I'd think of something else and write it down. To date I've compiled quite a list and going over it, I feel very proud of what I've done. Hopefully this list will continue to grow.<br /><br />I'm not sharing this to brag. Some of the things I would definitely not brag about. I'm sharing this to encourage people to create their own lists. You may be surprised at what’s on it. If not, get out of your comfort zone and live life! Stop thinking <strong>What if?</strong> and start thinking <strong>Why Not!</strong><br /><strong><br /></strong><br /><div><strong><em><span style="text-decoration: underline;">Thing I have done in my life&nbsp;</span></em></strong></div><ul><li>Lived on another continent&nbsp;</li><li>Loved unconditionally</li><li>Risked everything to do something that I didn't know whether I could do&nbsp;</li><li>Given up everything for love</li><li>Become a recognized expert in a technical field&nbsp;</li><li>Built and sold a company</li><li>Completely failed and rebuilt my life&nbsp;</li><li>Sold everything I own, twice&nbsp;</li><li>Written a book (4 actually)</li><li>Lived completely outside of my comfort zone</li><li>Learned a martial art&nbsp;</li><li>Seen the remains of an incarnation of Buddha&nbsp;</li><li>Prayed with a Buddhist monk, baptist minister, catholic priest and a shaman</li><li>Seen someone I love die&nbsp;</li><li>Met and conversed with celebrities&nbsp;</li><li>Dined in the UK Houses of Parliament</li><li>Learned about wine&nbsp;</li><li>Visited 4 of 7 continents (working on the other 3)</li><li>Learned another language&nbsp;</li><li>Felt true passion&nbsp;</li><li>Stood up for what I believed regardless of the cost&nbsp;</li><li>Performed a completely selfless act&nbsp;</li><li>Left a relationship I knew to be “safe" because I knew it wasn't right for me</li><li>Changed several peoples perception about what it means to be gay</li><li>Helped raise a child&nbsp;</li><li>Sabotaged something good in my life because I didn’t think I deserved it</li><li>Been poorer than most people can imagine&nbsp;</li><li>Earned more money than I thought I ever could&nbsp;</li><li>Escaped small town midwest life to become a world citizen</li><li>Been plucked from death by an unseen force&nbsp;</li><li>Been a professional dancer&nbsp;</li><li>Mastered a musical instrument&nbsp;</li><li>Sung in front of thousands of people&nbsp;</li><li>Been brought to tears by beauty</li><li>Been completely and utterly rejected&nbsp;</li><li>Built something from scratch&nbsp;</li><li>Cooked a meal of 4 star restaurant quality</li><li>Owned over 30 cars&nbsp;</li><li>Rescued an animal</li><li>Killed for my dinner&nbsp;</li><li>Celebrated my birthday twice by crossing the international date line&nbsp;</li><li>Skied a double black diamond&nbsp;</li><li>Taken drugs&nbsp;</li><li>Married the person I love&nbsp;</li><li>Considered taking my own life&nbsp;</li><li>Written poetry</li><li>Longed for something so much it made me physically ill&nbsp;</li><li>Disappointed my parents</li><li>Cut my family out of my life&nbsp;</li><li>Lost friends to AIDS&nbsp;</li><li>Come close to death&nbsp;</li><li>Cruised the Caribbean&nbsp;</li><li>Seen an Alaskan glacier calve&nbsp;</li><li>Hiked where few people have ever walked&nbsp;</li><li>Been diagnosed with a life threatening illness&nbsp;</li><li>Lied to feel more popular&nbsp;</li><li>Been so scared I could not move</li><li>Had a panic attack&nbsp;</li><li>Shared a rare intimate and personal moment with a complete stranger&nbsp;</li><li>Had an unrequited love</li><li>Been physically abused in a relationship&nbsp;</li><li>Been beaten up and bullied at school</li><li>Worked in a factory</li><li>Spoken in front of hundreds of people</li><li>Taught people my skills</li><li>Laughed till I cried</li><li>Contributed to Open Source Projects</li><li>Stolen food when I had no money to pay for it.</li><li>Broken my shoulder</li><li>Seen a Psychic</li></ul><strong><em>LIVED WITHOUT REGRETS!</em></strong> Doug Gault tag:blogger.com,1999:blog-6363924398907149830.post-8241229110353795065 Wed May 24 2017 16:58:00 GMT-0400 (EDT) A Simple Guide to Oracle Application Express (APEX) https://blogs.oracle.com/apex/a-simple-guide-to-oracle-application-express-apex <p><img alt="" src="https://cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/dd5716ac-9c8b-4322-95db-58ba8453c419/Image/411d078aa3295f9eb79687da32c01faf/browser_based_apps_512.png" style="width: 256px; height: 256px; float: right;" /></p> <p>If you want to learn more about Oracle Application Express (APEX), you&#39;ve come to the right place!</p> What is Oracle Application Express? <p><a href="https://apex.oracle.com" target="_blank">Oracle Application Express</a>&nbsp;is the native&nbsp;<a href="https://apex.oracle.com/lowcode" target="_blank">low code</a>&nbsp;framework of the Oracle Database. &nbsp;Using Application Express, you can easily create modern, responsive, scalable Web applications with minimal effort. &nbsp;With no additional coding, Web apps created with APEX look great on the desktop, tablet or smartphone.</p> <p>Application Express is a supported feature of the Oracle Database and is included, at no additional cost, with every Oracle Database, both on-premises and in the cloud. &nbsp;There are no additional licensing costs based on the number of developers, applications or end-users. &nbsp;Application Express is also included with every <a href="https://cloud.oracle.com/database" target="_blank">Oracle Database Cloud Service</a>, from the low-priced <a href="https://cloud.oracle.com/database/exadata-express/features" target="_blank">Oracle Database Exadata Express Cloud Service</a> all the way up to the <a href="https://cloud.oracle.com/en_US/database/exadata/features" target="_blank">Oracle Database Exadata Cloud Service</a>. &nbsp;</p> Why Low Code? <p>The benefits of&nbsp;<a href="https://apex.oracle.com/lowcode" target="_blank">low code development</a>&nbsp;are greater productivity in less time at less cost and with greater consistency. &nbsp;Low code frameworks, such as Application Express, leverage powerful components that provide reporting, data visualization, and form controls. This enables an application developer to focus on solving the business problem and delivering superior solutions, with less time and effort spent on mundane and repetitive lower-level coding typically associated with application development.</p> Who is using APEX? <p>Application Express is used by large and small customers alike, across a broad number of industries, and is used to solve a vast array of business problems - from simple spreadsheet replacement to multi-thousand user banking and insurance applications. &nbsp;Customers have also found APEX to be an easy way to <a href="https://blogs.oracle.com/stevenchan/updated-whitepaper%3a-using-application-express-with-ebs-122" target="_blank">extend the Oracle eBusiness Suite</a> in a certified and supported fashion.</p> <p>Many customers have provided <a href="https://apex.oracle.com/quotes" target="_blank">quotes</a> about their use of APEX, and there are numerous <a href="https://apex.oracle.com/success" target="_blank">customers success stories</a> about APEX, covering both on-premises Oracle Database customers as well as customers on the <a href="https://cloud.oracle.com/database" target="_blank">Oracle Database Cloud</a>.</p> <p>At Oracle, APEX also powers the <a href="https://shop.oracle.com" target="_blank">Oracle Store</a>&nbsp;(available in 17 languages) and the <a href="https://www.oracle.com/goto/oll" target="_blank">Oracle Learning Library</a>.</p> Anything relevant in APEX for business users? <p>Bundled with Application Express is a suite of 35 productivity and sample applications, installed in minutes and ready to use out-of-the box. &nbsp;These apps are fully supported by Oracle. &nbsp;As easy as installing an app on your smartphone, you can install a productivity application to help solve many common business problems, from Group Calendar to P-Track (for project management) to Customer Tracker to Survey Builder.</p> What&#39;s new in the latest release of APEX? <p>At the time of this writing, the latest release of Oracle Application Express is 5.1.1. &nbsp;This release introduced a number of compelling features, including:</p> <ul> <li>Interactive Grid - An all-new component which enables your end users to easily manage and report on grids of data. &nbsp;Interactive grid includes numerous features for powerful reporting, including fixed headers, frozen columns, scroll pagination, multiple filters, sorting, aggregates, computations, and more. &nbsp;Interactive grids also support the easy creation of master-detail relationships.</li> <li>Oracle JET Charts - The primary data visualizations in APEX are now provided by <a href="https://oraclejet.org" target="_blank">Oracle JET</a>, the recently released Javascript Extension Toolkit from Oracle. &nbsp;With only a little bit of SQL knowledge, you can create <strong>fantastic</strong>-looking charts and graphs. &nbsp;<a href="https://apex.oracle.com/charts" target="_blank">See for your yourself</a>!</li> <li>Universal Theme - The enhanced <a href="https://apex.oracle.com/ut" target="_blank">Universal Theme</a> provides effortless UI design and customization without writing a single line of JavaScript or CSS. &nbsp;From the 1100+ icons included with the <a href="https://apex.oracle.com/fontapex" target="_blank">Font APEX</a> library to Live Template Options to easy, declarative bi-directional support, APEX 5.1 provides all the necessary tools and components to create fabulous-looking, fully responsive UI with little to no coding.</li> </ul> Where to get started with APEX? <p>You can find extensive content about Application Express from the <a href="https://www.oracle.com/technetwork/developer-tools/apex/learnmore/index.html" target="_blank">APEX Learn More</a>&nbsp;site. &nbsp;There are also step-by-step articles published in Oracle Magazine, including <a href="https://www.oracle.com/technetwork/issue-archive/2015/15-sep/o55browser-apex-2692805.html" target="_blank">Quick Iterative Development</a>, <a href="https://www.oracle.com/technetwork/issue-archive/2017/17-mar/o27apex-3616163.html" target="_blank">See Better Results</a>, and <a href="https://www.oracle.com/technetwork/issue-archive/2017/17-may/o37apex-3708343.html" target="_blank">Easy Master/Detail</a>.</p> <p>Wherever there is an Oracle Database, you can try Oracle Application Express. &nbsp;If you have access to a trial of <a href="https://cloud.oracle.com/database" target="_blank">Oracle Database Cloud</a>, or <a href="https://cloud.oracle.com/tryit" target="_blank">free credit</a> to the Oracle Cloud, you can begin kicking the tires of APEX today. &nbsp;There is also a free evaluation instance of Oracle Application Express at <a href="https://apex.oracle.com" target="_blank">https://apex.oracle.com</a>. &nbsp;Sign up today, and within a couple minutes, you can start to learn what has led thousands of other users to flourish with the Oracle Database and Oracle Application Express!</p> <p>&nbsp;</p> Joel Kallman https://blogs.oracle.com/apex/a-simple-guide-to-oracle-application-express-apex Wed May 24 2017 11:43:00 GMT-0400 (EDT) A Simple Guide to Oracle Application Express (APEX) https://blogs.oracle.com/apex/a-simple-guide-to-oracle-application-express-apex <p><img alt="" src="https://cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/dd5716ac-9c8b-4322-95db-58ba8453c419/Image/411d078aa3295f9eb79687da32c01faf/browser_based_apps_512.png" style="width: 256px; height: 256px; float: right;" /></p> <p>If you want to learn more about Oracle Application Express (APEX), you&#39;ve come to the right place!</p> What is Oracle Application Express? <p><a href="https://apex.oracle.com" target="_blank">Oracle Application Express</a>&nbsp;is the native&nbsp;<a href="https://apex.oracle.com/lowcode" target="_blank">low code</a>&nbsp;framework of the Oracle Database. &nbsp;Using Application Express, you can easily create modern, responsive, scalable Web applications with minimal effort. &nbsp;With no additional coding, Web apps created with APEX look great on the desktop, tablet or smartphone.</p> <p>Application Express is a supported feature of the Oracle Database and is included, at no additional cost, with every Oracle Database, both on-premises and in the cloud. &nbsp;There are no additional licensing costs based on the number of developers, applications or end-users. &nbsp;Application Express is also included with every <a href="https://cloud.oracle.com/database" target="_blank">Oracle Database Cloud Service</a>, from the low-priced <a href="https://cloud.oracle.com/database/exadata-express/features" target="_blank">Oracle Database Exadata Express Cloud Service</a> all the way up to the <a href="https://cloud.oracle.com/en_US/database/exadata/features" target="_blank">Oracle Database Exadata Cloud Service</a>. &nbsp;</p> Why Low Code? <p>The benefits of&nbsp;<a href="https://apex.oracle.com/lowcode" target="_blank">low code development</a>&nbsp;are greater productivity in less time at less cost and with greater consistency. &nbsp;Low code frameworks, such as Application Express, leverage powerful components that provide reporting, data visualization, and form controls. This enables an application developer to focus on solving the business problem and delivering superior solutions, with less time and effort spent on mundane and repetitive lower-level coding typically associated with application development.</p> Who is using APEX? <p>Application Express is used by large and small customers alike, across a broad number of industries, and is used to solve a vast array of business problems - from simple spreadsheet replacement to multi-thousand user banking and insurance applications. &nbsp;Customers have also found APEX to be an easy way to <a href="https://blogs.oracle.com/stevenchan/updated-whitepaper%3a-using-application-express-with-ebs-122" target="_blank">extend the Oracle eBusiness Suite</a> in a certified and supported fashion.</p> <p>Many customers have provided <a href="https://apex.oracle.com/quotes" target="_blank">quotes</a> about their use of APEX, and there are numerous <a href="https://apex.oracle.com/success" target="_blank">customers success stories</a> about APEX, covering both on-premises Oracle Database customers as well as customers on the <a href="https://cloud.oracle.com/database" target="_blank">Oracle Database Cloud</a>.</p> <p>At Oracle, APEX also powers the <a href="https://shop.oracle.com" target="_blank">Oracle Store</a>&nbsp;(available in 17 languages) and the <a href="https://www.oracle.com/goto/oll" target="_blank">Oracle Learning Library</a>.</p> Anything relevant in APEX for business users? <p>Bundled with Application Express is a suite of 35 productivity and sample applications, installed in minutes and ready to use out-of-the box. &nbsp;These apps are fully supported by Oracle. &nbsp;As easy as installing an app on your smartphone, you can install a productivity application to help solve many common business problems, from Group Calendar to P-Track (for project management) to Customer Tracker to Survey Builder.</p> What&#39;s new in the latest release of APEX? <p>At the time of this writing, the latest release of Oracle Application Express is 5.1.1. &nbsp;This release introduced a number of compelling features, including:</p> <ul> <li>Interactive Grid - An all-new component which enables your end users to easily manage and report on grids of data. &nbsp;Interactive grid includes numerous features for powerful reporting, including fixed headers, frozen columns, scroll pagination, multiple filters, sorting, aggregates, computations, and more. &nbsp;Interactive grids also support the easy creation of master-detail relationships.</li> <li>Oracle JET Charts - The primary data visualizations in APEX are now provided by <a href="https://oraclejet.org" target="_blank">Oracle JET</a>, the recently released Javascript Extension Toolkit from Oracle. &nbsp;With only a little bit of SQL knowledge, you can create <strong>fantastic</strong>-looking charts and graphs. &nbsp;<a href="https://apex.oracle.com/charts" target="_blank">See for your yourself</a>!</li> <li>Universal Theme - The enhanced <a href="https://apex.oracle.com/ut" target="_blank">Universal Theme</a> provides effortless UI design and customization without writing a single line of JavaScript or CSS. &nbsp;From the 1100+ icons included with the <a href="https://apex.oracle.com/fontapex" target="_blank">Font APEX</a> library to Live Template Options to easy, declarative bi-directional support, APEX 5.1 provides all the necessary tools and components to create fabulous-looking, fully responsive UI with little to no coding.</li> </ul> Where to get started with APEX? <p>You can find extensive content about Application Express from the <a href="https://www.oracle.com/technetwork/developer-tools/apex/learnmore/index.html" target="_blank">APEX Learn More</a>&nbsp;site. &nbsp;There are also step-by-step articles published in Oracle Magazine, including <a href="https://www.oracle.com/technetwork/issue-archive/2015/15-sep/o55browser-apex-2692805.html" target="_blank">Quick Iterative Development</a>, <a href="https://www.oracle.com/technetwork/issue-archive/2017/17-mar/o27apex-3616163.html" target="_blank">See Better Results</a>, and <a href="https://www.oracle.com/technetwork/issue-archive/2017/17-may/o37apex-3708343.html" target="_blank">Easy Master/Detail</a>.</p> <p>Wherever there is an Oracle Database, you can try Oracle Application Express. &nbsp;If you have access to a trial of <a href="https://cloud.oracle.com/database" target="_blank">Oracle Database Cloud</a>, or <a href="https://cloud.oracle.com/tryit" target="_blank">free credit</a> to the Oracle Cloud, you can begin kicking the tires of APEX today. &nbsp;There is also a free evaluation instance of Oracle Application Express at <a href="https://apex.oracle.com" target="_blank">https://apex.oracle.com</a>. &nbsp;Sign up today, and within a couple minutes, you can start to learn what has led thousands of other users to flourish with the Oracle Database and Oracle Application Express!</p> <p>&nbsp;</p> Joel Kallman https://blogs.oracle.com/apex/a-simple-guide-to-oracle-application-express-apex Wed May 24 2017 11:43:00 GMT-0400 (EDT) APEX 5.1 IG toolbar customization http://lschilde.blogspot.com/2017/05/apex-51-ig-toolbar-customization.html <div dir="ltr" style="text-align: left;" trbidi="on"><div dir="ltr" style="text-align: left;" trbidi="on"><div dir="ltr" style="text-align: left;" trbidi="on"><div dir="ltr" style="text-align: left;" trbidi="on"><div dir="ltr" style="text-align: left;" trbidi="on"><h2 style="text-align: justify;"><span style="font-family: &quot;verdana&quot; , sans-serif;">APEX 5.1 <span style="font-family: &quot;verdana&quot; , sans-serif;">IG <span style="font-family: &quot;verdana&quot; , sans-serif;">customization</span></span></span></h2><h3 style="text-align: left;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">Hacking APEX Interactive grid </span></span></h3><h4 style="text-align: left;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">IG <span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">t<span style="font-family: &quot;verdana&quot; , sans-serif;">oolbar custom configuration changes</span></span></span></span></span></span> </span></h4><div style="text-align: justify;"><div style="text-align: justify;"><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">APEX 5.1 brought us some cool features and among all the mighty interactive grid</span><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">.</span></span></span></span></span><span style="font-family: &quot;verdana&quot; , sans-serif;"> </span>After a day or so w<span style="font-family: &quot;verdana&quot; , sans-serif;">orking on a project client ideas <span style="font-family: &quot;verdana&quot; , sans-serif;">c</span>ome into th<span style="font-family: &quot;verdana&quot; , sans-serif;">e play.&nbsp;</span></span></span></span><br /><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">This is where these customization tips might be of help.&nbsp;</span></span></span></span><br /><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;">Idea here is<span style="font-family: &quot;verdana&quot; , sans-serif;">: <span style="font-family: &quot;verdana&quot; , sans-serif;">you<span style="font-family: &quot;verdana&quot; , sans-serif;"> want to use IG but want to be able to control what will be available to the users in terms of <span style="font-family: &quot;verdana&quot; , sans-serif;">toolbar items and menus</span></span></span><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">. <span style="font-family: &quot;verdana&quot; , sans-serif;">APEX by default offers a<span style="font-family: &quot;verdana&quot; , sans-serif;">n ability to turn <span style="font-family: &quot;verdana&quot; , sans-serif;">the toolbar</span> on and of<span style="font-family: &quot;verdana&quot; , sans-serif;">f but so<span style="font-family: &quot;verdana&quot; , sans-serif;">met<span style="font-family: &quot;verdana&quot; , sans-serif;">imes this might not be enough.</span></span></span></span></span></span></span></span></span></span></span></span></span></span><br /><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">In <span style="font-family: &quot;verdana&quot; , sans-serif;">an image below you see how sta<span style="font-family: &quot;verdana&quot; , sans-serif;">ndard look and feel of <span style="font-family: &quot;verdana&quot; , sans-serif;">your IG toolbar looks like. You have a section to filter column<span style="font-family: &quot;verdana&quot; , sans-serif;"> followed by Actions <span style="font-family: &quot;verdana&quot; , sans-serif;">menu </span>button</span></span></span> then Edit<span style="font-family: &quot;verdana&quot; , sans-serif;">, </span>S<span style="font-family: &quot;verdana&quot; , sans-serif;">ave and Add <span style="font-family: &quot;verdana&quot; , sans-serif;">Row buttons.&nbsp;</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><br /><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">What i<span style="font-family: &quot;verdana&quot; , sans-serif;">f I only want to <span style="font-family: &quot;verdana&quot; , sans-serif;">use Sa<span style="font-family: &quot;verdana&quot; , sans-serif;">ve<span style="font-family: &quot;verdana&quot; , sans-serif;"> and/or Add Ro<span style="font-family: &quot;verdana&quot; , sans-serif;">w<span style="font-family: &quot;verdana&quot; , sans-serif;"> or any combination that you<span style="font-family: &quot;verdana&quot; , sans-serif;"> suits you. </span></span></span></span></span></span></span>&nbsp;</span></span></span></span></span></span></span></span> </span></span></span></span></span></span></span></span></span><br /><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">Again I can not <span style="font-family: &quot;verdana&quot; , sans-serif;">emphasize how helpful was <a href="http://hardlikesoftware.com/weblog/2017/01/24/how-to-hack-apex-interactive-grid-part-2/">John Snyders</a> blog to <span style="font-family: &quot;verdana&quot; , sans-serif;">understand IG ins<span style="font-family: &quot;verdana&quot; , sans-serif;">i</span>de out</span></span></span><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"> so</span> <span style="font-family: &quot;verdana&quot; , sans-serif;">t</span>hank you John. </span></span></span><br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-8T2n-6fzQRA/WQwcxDapPmI/AAAAAAAALHA/b0UFbf8h0BEKMDwmIhnpnyIST9Cr0pubwCLcB/s1600/Demo_IG_DA.gif" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="148" src="https://1.bp.blogspot.com/-8T2n-6fzQRA/WQwcxDapPmI/AAAAAAAALHA/b0UFbf8h0BEKMDwmIhnpnyIST9Cr0pubwCLcB/s640/Demo_IG_DA.gif" width="640" /></a></div><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;">If you <span style="font-family: &quot;verdana&quot; , sans-serif;">read <span style="font-family: &quot;verdana&quot; , sans-serif;">th<span style="font-family: &quot;verdana&quot; , sans-serif;">rough John's blog you will <span style="font-family: &quot;verdana&quot; , sans-serif;">pick up all <span style="font-family: &quot;verdana&quot; , sans-serif;">necessary</span> de<span style="font-family: &quot;verdana&quot; , sans-serif;">tails for you to be able to construct your own IG toolbar</span></span></span></span></span><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">.&nbsp;</span></span></span></span></span></span></span></span></span></span><br /><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">There is not<span style="font-family: &quot;verdana&quot; , sans-serif;">hing more than</span></span></span></span>:&nbsp;</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><br /><div style="text-align: left;"><blockquote class="tr_bq"><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">function(config) {<br /><br />&nbsp;&nbsp;&nbsp; var toolbarActions = <span style="background-color: yellow;">$.apex.interactiveGrid<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; .copyDefaultToolbar()<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; .toolbarFind</span>("actions1");<br />&nbsp;&nbsp;&nbsp; var toolbarSearchIcon = $.apex.interactiveGrid<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; .copyDefaultToolbar()<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; .toolbarFind("column_filter_button");<br /><br />&nbsp;&nbsp;&nbsp; config.toolbarData = [<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { //SEARCH TOOLBAR FUNC<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; groupTogether: true,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; controls: [<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; toolbarSearchIcon,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type: "TEXT",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id: "search_field",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; enterAction: "search"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type: "BUTTON",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; action: "search"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //ACTIONS DOES NOT WORK <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; toolbarActions,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { //SAVE BUTTON&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; align: "end",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; controls: [{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type: "BUTTON",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; action: "save",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iconBeforeLabel: true,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hot: true<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { //ADD ROW BUTTON&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; align: "end",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; controls: [{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type: "BUTTON",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; action: "selection-add-row",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iconBeforeLabel: true<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { //RESET BUTTON <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; align: "end",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; controls: [{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type: "BUTTON",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; action: "reset-report",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iconBeforeLabel: true<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*{ // FILTER BUTTON from Action menu directly<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; controls: [<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type: "BUTTON",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; action: "show-filter-dialog",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iconBeforeLabel: true<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },*/<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { //MY CUSTOM BUTTON<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; controls: [{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type: "BUTTON",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; action: "my-refresh-region",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; label: "Cancel"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; ];<br /><br />&nbsp;&nbsp;&nbsp; //adding action to custom button<br />&nbsp;&nbsp;&nbsp; config.initActions = function(actions) {<br />&nbsp;&nbsp;&nbsp; // can modify state of existing actions or add your own<br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">&nbsp;</span>&nbsp;&nbsp; // can also pass in an array of actions to add<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; actions.add({<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name: "my-refresh-region",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; action: function(event, focusElement) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; apex.region("event_docs").refresh();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });<br />&nbsp;&nbsp;&nbsp; }</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></blockquote><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">&nbsp;&nbsp;&nbsp; return config;<span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">&nbsp;</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">&nbsp;&nbsp;&nbsp; }</span><br /></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"> </span></span></span></span></span></span></span></span></div><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">This should give you ability to construct your own IG toolbars without diggin<span style="font-family: &quot;verdana&quot; , sans-serif;">g into another option <span style="font-family: &quot;verdana&quot; , sans-serif;">which is to use CSS to show/hide elements of your interactive grids.<span style="font-family: &quot;verdana&quot; , sans-serif;">&nbsp;</span></span></span></span><br /><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">Please note <span style="font-family: &quot;verdana&quot; , sans-serif;">line of code highlighted in yellow. With this functionality you can find and inject command<span style="font-family: &quot;verdana&quot; , sans-serif;">s and controls as you want them. Isn't this great.&nbsp;</span></span></span></span></span></span><br /><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">Also I added a little Cancel functionality to <span style="font-family: &quot;verdana&quot; , sans-serif;">replace a simple H<span style="font-family: &quot;verdana&quot; , sans-serif;">ello World example with something more interestin<span style="font-family: &quot;verdana&quot; , sans-serif;">g.</span></span></span>&nbsp;</span></span> </span></span></span></span><br /><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">All that is missing is to to add this JS code into <span style="font-family: &quot;verdana&quot; , sans-serif;">Java<span style="font-family: &quot;verdana&quot; , sans-serif;">S</span>cript</span> Code section <span style="font-family: &quot;verdana&quot; , sans-serif;">of</span> your Interactive g<span style="font-family: &quot;verdana&quot; , sans-serif;">rid.</span></span></span></span></span><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">&nbsp;</span></span></span></span></span><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-gTFeyBS2L9M/WRKGcttHMpI/AAAAAAAALIk/Ozy45gUP08sDoV9i65J0TW4HGqPffNFigCLcB/s1600/IG_attribute_advance_JS.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="256" src="https://4.bp.blogspot.com/-gTFeyBS2L9M/WRKGcttHMpI/AAAAAAAALIk/Ozy45gUP08sDoV9i65J0TW4HGqPffNFigCLcB/s640/IG_attribute_advance_JS.PNG" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><br /></div></div></div></div></div><div><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;">Hope <span style="font-family: &quot;verdana&quot; , sans-serif;">this helps</span></span>. If <span style="font-family: &quot;verdana&quot; , sans-serif;">anyone knows how to manually construct action menu<span style="font-family: &quot;verdana&quot; , sans-serif;">s and Sea<span style="font-family: &quot;verdana&quot; , sans-serif;">rch Icon menu this would complete the <span style="font-family: &quot;verdana&quot; , sans-serif;">whole <span style="font-family: &quot;verdana&quot; , sans-serif;">picture. Or do we go to John again? ;)</span></span></span></span></span></span><br /><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-size: 12.0pt;">&nbsp; </span></span></div></div><div class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-size: 12.0pt;">Thanks, </span></span></div><div class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-size: 12.0pt;">SLino</span></span></div><br /></div> SLino tag:blogger.com,1999:blog-8185384792158425670.post-7960919034147590151 Tue May 23 2017 23:31:00 GMT-0400 (EDT) Usando los esquema de colores del Tema Universal 42 en nuestros componentes personalizados http://feedproxy.google.com/~r/DescubriendoElMundoDeOracle/~3/oSlt5-Eba_0/usando-los-esquema-de-colores-del-tema.html <!--[if gte mso 9]><xml> <o:OfficeDocumentSettings> <o:AllowPNG/> </o:OfficeDocumentSettings></xml><![endif]--><br /><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves/> <w:TrackFormatting/> <w:PunctuationKerning/> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF/> <w:LidThemeOther>EN-US</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> <w:SplitPgBreakAndParaMark/> <w:EnableOpenTypeKerning/> <w:DontFlipMirrorIndents/> <w:OverrideTableStyleHps/> </w:Compatibility> <m:mathPr> <m:mathFont m:val="Cambria Math"/> <m:brkBin m:val="before"/> <m:brkBinSub m:val="&#45;-"/> <m:smallFrac m:val="off"/> <m:dispDef/> <m:lMargin m:val="0"/> <m:rMargin m:val="0"/> <m:defJc m:val="centerGroup"/> <m:wrapIndent m:val="1440"/> <m:intLim m:val="subSup"/> <m:naryLim m:val="undOvr"/> </m:mathPr></w:WordDocument></xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="false" DefSemiHidden="false" DefQFormat="false" DefPriority="99" LatentStyleCount="371"> <w:LsdException Locked="false" Priority="0" QFormat="true" Name="Normal"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 1"/> <w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 2"/> <w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 3"/> <w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 4"/> <w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 5"/> <w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 6"/> <w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 7"/> <w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 8"/> <w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 9"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 5"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 6"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 7"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 8"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 9"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 1"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 2"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 3"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 4"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 5"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 6"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 7"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 8"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 9"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Normal Indent"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="footnote text"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="annotation text"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="header"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="footer"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index heading"/> <w:LsdException Locked="false" Priority="35" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="caption"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="table of figures"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="envelope address"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="envelope return"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="footnote reference"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="annotation reference"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="line number"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="page number"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="endnote reference"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="endnote text"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="table of authorities"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="macro"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="toa heading"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Bullet"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Number"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List 5"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Bullet 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Bullet 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Bullet 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Bullet 5"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Number 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Number 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Number 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Number 5"/> <w:LsdException Locked="false" Priority="10" QFormat="true" Name="Title"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Closing"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Signature"/> <w:LsdException Locked="false" Priority="1" SemiHidden="true" UnhideWhenUsed="true" Name="Default Paragraph Font"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text Indent"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Continue"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Continue 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Continue 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Continue 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Continue 5"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Message Header"/> <w:LsdException Locked="false" Priority="11" QFormat="true" Name="Subtitle"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Salutation"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Date"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text First Indent"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text First Indent 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Note Heading"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text Indent 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text Indent 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Block Text"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Hyperlink"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="FollowedHyperlink"/> <w:LsdException Locked="false" Priority="22" QFormat="true" Name="Strong"/> <w:LsdException Locked="false" Priority="20" QFormat="true" Name="Emphasis"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Document Map"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Plain Text"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="E-mail Signature"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Top of Form"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Bottom of Form"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Normal (Web)"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Acronym"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Address"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Cite"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Code"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Definition"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Keyboard"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Preformatted"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Sample"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Typewriter"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Variable"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Normal Table"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="annotation subject"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="No List"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Outline List 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Outline List 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Outline List 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Simple 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Simple 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Simple 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Classic 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Classic 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Classic 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Classic 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Colorful 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Colorful 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Colorful 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Columns 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Columns 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Columns 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Columns 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Columns 5"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 5"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 6"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 7"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 8"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 4"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 5"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 6"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 7"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 8"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table 3D effects 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table 3D effects 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table 3D effects 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Contemporary"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Elegant"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Professional"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Subtle 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Subtle 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Web 1"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Web 2"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Web 3"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Balloon Text"/> <w:LsdException Locked="false" Priority="39" Name="Table Grid"/> <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Theme"/> <w:LsdException Locked="false" SemiHidden="true" Name="Placeholder Text"/> <w:LsdException Locked="false" Priority="1" QFormat="true" Name="No Spacing"/> <w:LsdException Locked="false" Priority="60" Name="Light Shading"/> <w:LsdException Locked="false" Priority="61" Name="Light List"/> <w:LsdException Locked="false" Priority="62" Name="Light Grid"/> <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1"/> <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2"/> <w:LsdException Locked="false" Priority="65" Name="Medium List 1"/> <w:LsdException Locked="false" Priority="66" Name="Medium List 2"/> <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1"/> <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2"/> <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3"/> <w:LsdException Locked="false" Priority="70" Name="Dark List"/> <w:LsdException Locked="false" Priority="71" Name="Colorful Shading"/> <w:LsdException Locked="false" Priority="72" Name="Colorful List"/> <w:LsdException Locked="false" Priority="73" Name="Colorful Grid"/> <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 1"/> <w:LsdException Locked="false" Priority="61" Name="Light List Accent 1"/> <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 1"/> <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 1"/> <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 1"/> <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 1"/> <w:LsdException Locked="false" SemiHidden="true" Name="Revision"/> <w:LsdException Locked="false" Priority="34" QFormat="true" Name="List Paragraph"/> <w:LsdException Locked="false" Priority="29" QFormat="true" Name="Quote"/> <w:LsdException Locked="false" Priority="30" QFormat="true" Name="Intense Quote"/> <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 1"/> <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 1"/> <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 1"/> <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 1"/> <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 1"/> <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 1"/> <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 1"/> <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 1"/> <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 2"/> <w:LsdException Locked="false" Priority="61" Name="Light List Accent 2"/> <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 2"/> <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 2"/> <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 2"/> <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 2"/> <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 2"/> <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 2"/> <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 2"/> <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 2"/> <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 2"/> <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 2"/> <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 2"/> <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 2"/> <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 3"/> <w:LsdException Locked="false" Priority="61" Name="Light List Accent 3"/> <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 3"/> <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 3"/> <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 3"/> <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 3"/> <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 3"/> <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 3"/> <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 3"/> <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 3"/> <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 3"/> <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 3"/> <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 3"/> <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 3"/> <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 4"/> <w:LsdException Locked="false" Priority="61" Name="Light List Accent 4"/> <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 4"/> <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 4"/> <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 4"/> <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 4"/> <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 4"/> <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 4"/> <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 4"/> <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 4"/> <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 4"/> <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 4"/> <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 4"/> <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 4"/> <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 5"/> <w:LsdException Locked="false" Priority="61" Name="Light List Accent 5"/> <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 5"/> <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 5"/> <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 5"/> <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 5"/> <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 5"/> <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 5"/> <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 5"/> <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 5"/> <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 5"/> <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 5"/> <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 5"/> <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 5"/> <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 6"/> <w:LsdException Locked="false" Priority="61" Name="Light List Accent 6"/> <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 6"/> <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 6"/> <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 6"/> <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 6"/> <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 6"/> <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 6"/> <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 6"/> <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 6"/> <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 6"/> <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 6"/> <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 6"/> <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 6"/> <w:LsdException Locked="false" Priority="19" QFormat="true" Name="Subtle Emphasis"/> <w:LsdException Locked="false" Priority="21" QFormat="true" Name="Intense Emphasis"/> <w:LsdException Locked="false" Priority="31" QFormat="true" Name="Subtle Reference"/> <w:LsdException Locked="false" Priority="32" QFormat="true" Name="Intense Reference"/> <w:LsdException Locked="false" Priority="33" QFormat="true" Name="Book Title"/> <w:LsdException Locked="false" Priority="37" SemiHidden="true" UnhideWhenUsed="true" Name="Bibliography"/> <w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="TOC Heading"/> <w:LsdException Locked="false" Priority="41" Name="Plain Table 1"/> <w:LsdException Locked="false" Priority="42" Name="Plain Table 2"/> <w:LsdException Locked="false" Priority="43" Name="Plain Table 3"/> <w:LsdException Locked="false" Priority="44" Name="Plain Table 4"/> <w:LsdException Locked="false" Priority="45" Name="Plain Table 5"/> <w:LsdException Locked="false" Priority="40" Name="Grid Table Light"/> <w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light"/> <w:LsdException Locked="false" Priority="47" Name="Grid Table 2"/> <w:LsdException Locked="false" Priority="48" Name="Grid Table 3"/> <w:LsdException Locked="false" Priority="49" Name="Grid Table 4"/> <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark"/> <w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful"/> <w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful"/> <w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 1"/> <w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 1"/> <w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 1"/> <w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 1"/> <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 1"/> <w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 1"/> <w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 1"/> <w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 2"/> <w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 2"/> <w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 2"/> <w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 2"/> <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 2"/> <w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 2"/> <w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 2"/> <w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 3"/> <w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 3"/> <w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 3"/> <w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 3"/> <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 3"/> <w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 3"/> <w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 3"/> <w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 4"/> <w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 4"/> <w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 4"/> <w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 4"/> <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 4"/> <w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 4"/> <w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 4"/> <w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 5"/> <w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 5"/> <w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 5"/> <w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 5"/> <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 5"/> <w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 5"/> <w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 5"/> <w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 6"/> <w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 6"/> <w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 6"/> <w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 6"/> <w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 6"/> <w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 6"/> <w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 6"/> <w:LsdException Locked="false" Priority="46" Name="List Table 1 Light"/> <w:LsdException Locked="false" Priority="47" Name="List Table 2"/> <w:LsdException Locked="false" Priority="48" Name="List Table 3"/> <w:LsdException Locked="false" Priority="49" Name="List Table 4"/> <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark"/> <w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful"/> <w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful"/> <w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 1"/> <w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 1"/> <w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 1"/> <w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 1"/> <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 1"/> <w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 1"/> <w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 1"/> <w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 2"/> <w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 2"/> <w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 2"/> <w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 2"/> <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 2"/> <w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 2"/> <w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 2"/> <w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 3"/> <w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 3"/> <w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 3"/> <w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 3"/> <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 3"/> <w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 3"/> <w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 3"/> <w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 4"/> <w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 4"/> <w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 4"/> <w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 4"/> <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 4"/> <w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 4"/> <w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 4"/> <w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 5"/> <w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 5"/> <w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 5"/> <w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 5"/> <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 5"/> <w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 5"/> <w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 5"/> <w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 6"/> <w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 6"/> <w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 6"/> <w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 6"/> <w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 6"/> <w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 6"/> <w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 6"/> </w:LatentStyles></xml><![endif]--><!--[if gte mso 10]><style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin-top:0in; mso-para-margin-right:0in; mso-para-margin-bottom:8.0pt; mso-para-margin-left:0in; line-height:107%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri",sans-serif; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi;} </style><![endif]--> <br /><div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 175.5pt; text-align: justify;"><span lang="ES" style="font-family: &quot;Verdana&quot;,sans-serif; mso-ansi-language: ES;">El Tema Universal utiliza un conjunto de colores (esquemas) entre los diferentes componentes. Estos colores se pueden agrupar en dos paletas: colores generales y colores con estado.</span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 175.5pt; text-align: justify;"><br /></div><div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 175.5pt; text-align: justify;"><b style="mso-bidi-font-weight: normal;"><span lang="ES" style="font-family: &quot;Verdana&quot;,sans-serif; mso-ansi-language: ES;">Colores generales</span></b></div><div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 175.5pt; text-align: justify;"><br /></div><div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 175.5pt; text-align: justify;"><span lang="ES" style="font-family: &quot;Verdana&quot;,sans-serif; mso-ansi-language: ES;">Los colores generales se utilizan para agregar color a varios componentes de la aplicación como gráficos, cards, carousel y más.</span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 175.5pt; text-align: justify;"><br /></div><div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 175.5pt; text-align: justify;"><span lang="ES" style="font-family: &quot;Verdana&quot;,sans-serif; mso-ansi-language: ES;">Hay 15 colores primarios que se modifican para convertirse en más claros o más oscuros para crear un total de 45 opciones de color. Podemos personalizar estos colores modificando la paleta de colores dentro de Theme Roller.</span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 175.5pt; text-align: justify;"><br /></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: center;"><span lang="ES" style="font-family: &quot;Verdana&quot;,sans-serif; mso-ansi-language: ES;">Colores Primarios </span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 175.5pt; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-F_-62NuCXvQ/WSS5wZHL7NI/AAAAAAAAB4E/Fy_uW_JKmM0Qvj5Z1Xfgr_nUFjtPSJSmQCLcB/s1600/img1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="86" src="https://2.bp.blogspot.com/-F_-62NuCXvQ/WSS5wZHL7NI/AAAAAAAAB4E/Fy_uW_JKmM0Qvj5Z1Xfgr_nUFjtPSJSmQCLcB/s400/img1.jpg" width="400" />&nbsp;</a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">Seguir Leyendo <a href="https://www.toadworld.com/members/clarisa-maman-orfali/blogs#post-17930" target="_blank">AQUI</a></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">&nbsp;</div><div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; tab-stops: 175.5pt; text-align: justify;"><br /></div><img src="http://feeds.feedburner.com/~r/DescubriendoElMundoDeOracle/~4/oSlt5-Eba_0" height="1" width="1" alt=""/> Clarisa J. Maman Orfali tag:blogger.com,1999:blog-1315583943401206186.post-7502178911209472157 Tue May 23 2017 18:39:00 GMT-0400 (EDT) ODTUG Kscope17 Women in Technology Event & 2017 Women in Technology Scholar http://www.odtug.com/p/bl/et/blogaid=720&source=1 Attend one of the hottest gatherings of the year – the ODTUG Kscope17 Women in Technology Event. Join men and women on Wednesday, June 28, at 12:15 PM for lunch, networking, and conversations surrounding workplace gender equality, workplace perception, work/life balance, and more. ODTUG http://www.odtug.com/p/bl/et/blogaid=720&source=1 Tue May 23 2017 10:51:57 GMT-0400 (EDT) SQL Tuning Advisor against sql_id's in AWR http://jaffardba.blogspot.com/2017/05/sql-tuning-advisor-against-sqlids-in-awr.html <div dir="ltr" style="text-align: left;" trbidi="on">We were in a situation very recently to run SQL Tuning Advisor against a bunch of SQL statements that appeared in the AWR's ADDM recommendations report. The initial effort to launch SQL Tuning Advisor against the SQL_ID couldn't go through as the SQL didn't exist in the shared pool.<br /><br />Since the sql_id was present in the AWR report, thought of running the advisory against the AWR data, and found a very nice and precisely explained at the following blog:<br /><br /><a href="http://www.redstk.com/running-sql-tuning-advisor-against-awr-data/">http://www.redstk.com/running-sql-tuning-advisor-against-awr-data/</a><br /><br /><br /><span style="font-size: x-small;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">---- Example how to run SQL Tuning advisor against sql_id in AWR</span></span><br /><span style="font-size: x-small;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><br />variable stmt_task VARCHAR2(64);<br />SQL&gt; exec :stmt_task := DBMS_SQLTUNE.CREATE_TUNING_TASK (begin_snap =&gt; 4118, end_snap =&gt; 4119, sql_id =&gt; 'caxcavmq6zkv9' , scope =&gt; 'COMPREHENSIVE', time_limit =&gt; 60, task_name =&gt; 'sql_tuning_task01' );<br /><br />SQL&gt; exec DBMS_SQLTUNE.EXECUTE_TUNING_TASK(task_name =&gt; 'sql_tuning_task01');<br /><br />SQL&gt; SELECT status FROM USER_ADVISOR_TASKS WHERE task_name = 'sql_tuning_task01';<br /><br />set long 50000<br />set longchunksize 500000<br />SET LINESIZE 150<br />Set pagesize 5000<br />&nbsp;</span></span><br /><span style="font-size: x-small;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">SQL&gt; SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('sql_tuning_task01') FROM DUAL;<br /><br /><br />SQL&gt; exec DBMS_SQLTUNE.drop_tuning_task(task_name =&gt;'sql_tuning_task01');</span></span><br /><br /><br />References:<br /><a href="https://docs.oracle.com/database/121/ARPLS/d_sqltun.htm#ARPLS220">https://docs.oracle.com/database/121/ARPLS/d_sqltun.htm#ARPLS220</a><br /><a href="https://uhesse.com/2013/10/11/oracle-sql-tuning-advisor-on-the-command-line/">https://uhesse.com/2013/10/11/oracle-sql-tuning-advisor-on-the-command-line/</a><br /><br /><br /><br />Happy reading/learning.</div> The Human Fly tag:blogger.com,1999:blog-19771507.post-8028362824871256729 Tue May 23 2017 05:23:00 GMT-0400 (EDT) SQLcl scripting and npm modules http://apextips.blogspot.com/2017/05/sqlcl-scripting-and-npm-modules.html Node, or rather npm, has a huge collection of submitted modules! And if you've been using SQLcl to connect with the database, you should know it has scriptable ability where you can for example run JavaScript code and Java APIs. So the question is, how do we get the script to pick up node modules?<br /><br />During my research, I found a few suggested methods:<br /><ol><li>J2V8</li><li>Project Avatar</li><li>jvm-npm</li></ol><div>I didn't try the first two methods, but have had success using the third (jvm-npm). This is a library with the source code hosted over on GitHub -&nbsp;<a href="https://github.com/nodyn/jvm-npm.">https://github.com/nodyn/jvm-npm.</a></div><div><br /></div><div>At this point, it's worth noting - not everything will work, as it does not include the full NodeJS API.&nbsp;</div><div><br /></div><div>So, first step to do is you'll probably want to host that library somewhere in your project - in my example, which I will provide the link to at the end of the article, I place it at ./lib/jvm-npm.js. Worth mentioning, you can also source this over http in your script, but probably best to keep a local copy.</div><div><br /></div><div>For this example project, I'm going to focus on the lodash node module. So, the next step will be to set up a package.json file where you list any node dependencies - this is purely so I can run `npm install` to install any dependencies my script requires. So go ahead and run `npm init` in your project directory. After completing the wizard add your dependencies. You should end up with something like:<br /><br /><pre>{<br /> "name": "sqlcl-npm-demo",<br /> "version": "1.0.0",<br /> "description": "Example of using node modules in an SQLcl script",<br /> "main": "lodashExample.js",<br /> "scripts": {<br /> "test": "echo \"Error: no test specified\" &amp;&amp; exit 1"<br /> },<br /> "author": "Trent Schafer",<br /> "license": "Apache",<br /> "dependencies": {<br /> "lodash": "^4.17.4"<br /> }<br />}<br /><br /></pre><br />Now, after that is done, run: `npm install`.<br /><br /><pre>trent@birroth:~/Projects/sqlcl-npm-demo$ npm install<br />sqlcl-npm-demo@1.0.0 /home/trent/Projects/sqlcl-npm-demo<br />└── lodash@4.17.4<br />trent@birroth:~/Projects/sqlcl-npm-demo$ ls node_modules/<br />lodash<br /></pre><br /><br />Ok, so we have all of our dependencies installed. Now, how to we get this to work in our SQLcl script?<br /><br />In a typical node app, you would have something like:</div><div><br /></div><div><pre>var _ = require('lodash');<br /></pre></div><div><br /></div><div>If you try this out now, you will get an error like so:<br /><br /><pre>SQL&gt; script lodashExample<br />javax.script.ScriptException: ReferenceError: "require" is not defined in <eval> at line number 1<br />&lt;stack trace trimmed&gt;<br /></eval></pre><br /><br />So, in order to get `require` available to us, we need to make it so our script has this jvm-npm library loaded - that we place in our project earlier. If you're not aware, you can load other scripts into a nashorn script with the `load` function. Read more over at this article:&nbsp;<a href="https://wiki.openjdk.java.net/display/Nashorn/Nashorn+extensions">https://wiki.openjdk.java.net/display/Nashorn/Nashorn+extensions</a>.<br /><br />So, at the start our script, add the following call:<br /><br /><pre>load('./lib/jvm-npm.js');<br /></pre><br />Then try re-running your script, and you should notice no errors this time around. So, it looks like we are good to go! Just to verify, let's take something out of the lodash API to see if all is working as expected. Lodash has an `nth` function that basically retrieves the specified index of the passed in array - with one little enhancement, it supports negative indexes to search backward - so let's try that out.<br /><br />My full script becomes:<br /><br /><pre>load('./lib/jvm-npm.js');<br />var _ = require('lodash');<br /><br />var testArray = [<br /> 55,<br /> 12,<br /> 99,<br /> 65,<br /> 164,<br /> 32<br />];<br /><br />var secondLast = _.nth(testArray, -2);<br /><br />print("The second last item was", secondLast);<br /></pre><br /><br />Then, the test output:<br /><br /><pre>trent@birroth:~/Projects/sqlcl-npm-demo$ sql vmtest/vmtest@//192.168.1.116/xe<br /><br />SQLcl: Release 4.2.0 Production on Sun May 21 19:40:07 2017<br /><br />Copyright (c) 1982, 2017, Oracle. All rights reserved.<br /><br />Connected to:<br />Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production<br /><br /><br />SQL&gt; script lodashExample.js<br />The second last item was 164<br /></pre><br /><br />Which all looks correct. Yay, success.<br /><br />As I mentioned, it doesn't include the full node API, so you will probably need to be cautious going forward if you use this - but just offers that little bit more.<br /><br />Working files from this example:&nbsp;<a href="https://github.com/tschf/sqlcl-npm-demo">https://github.com/tschf/sqlcl-npm-demo</a></div> trent tag:blogger.com,1999:blog-8785176694082881912.post-2377103585008119738 Sun May 21 2017 19:53:00 GMT-0400 (EDT) Spam killed http://oradbdev.mathiasmagnusson.com/2017/05/21/spam-killed/ <p>After I moved my blog to self-hosting, it has attracted more and more spam. It started slow and very manageable. After my last blog post it got really bad. What started as a few spam messages a week, culminated with 30-40 spam comments per day. At that point I had completely lost any ability to sort through it.</p> <p>&#8216;I was so disheartened by this that blogging didn&#8217;t happen as I knew I had to solve this first. I thought solving it required paying for <a href="https://akismet.com/">Akismet</a> and that annoyed me. I pay for my hosting and domain and so forth, but paying just to get rid of comments meant to abuse my blog felt wrong especially as the blog does not have that much traffic that it felt reasonable to have to filter spam.</p> <p>I kn ew I had to do something this weekend and after just a little bit of googling I had seen a few recommendations for <a href="https://wordpress.org/plugins/anti-spam/">Anti-Spam</a> by <a href="http://web-profile.net/wordpress/plugins/">Webvitaly</a>. After reading up it seemed like a very promising option. Since spam engines does not do JavaScript, it places a hidden field on  the comment form and the populates it with the correct answer when someone submits a comment, but the spam engines puts no or bad data in it so the comment is just ignored.</p> <p>After installing it 36 hours ago, it has filtered out 60 comments and not let through a single spam comment. I say it does the trick for what I need. I can go back to blogging about Oracle and other technologies I fancy, instead of being forced to deal with spam comments.</p> <p>If you need to filter spam and be able to not even review them, based on my experience this far I&#8217;d definitely recommend you to look at this plug-in.</p> mathias http://oradbdev.mathiasmagnusson.com/?p=511 Sun May 21 2017 17:51:26 GMT-0400 (EDT) DOAG APEX Connect 2017 and beyond http://nielsdebr.blogspot.com/2017/05/doag-apex-connect-2017-and-beyond.html <br />First of all, I would like to thank all people that were involved in the making of APEX Connect. We all know that it takes tremendous amount of (private) time to pull this off. Also, a big “thank you” goes to all sponsors and attendees to make this all possible. I truly love this community.<br /><br />In 2017, we had around 300 attendees at APEX Connect, which I find great. I personally believe that APEX Connect will not grow as rapidly and it doesn’t need to. As the name implies, Connect is all about bringing the APEX community together and learning from each other, both personally and technically. For me, it feels like a small family that is having a reunion.<br /><br />This edition of Connect was a blast and I received a lot of positive feedback from the community through different channels:<br /><br />“APEX Connect is one of the best APEX and Oracle Database Developer conferences on the planet. &nbsp;I thought the quality of the sessions was very high and the topics were very diverse beyond APEX, including SQL, ORDS and Database Development (and even Docker!). &nbsp;It was also impressive that you had presenters from so many countries - England, Netherlands, USA, Canada, Poland, Belgium, Finland, Serbia, Croatia, Slovenia and others. &nbsp;It was a fascinating collection of cultures and people coming together, and this is a community that I'm very proud to be a part of. &nbsp;Many thanks to you and the entire DOAG organization for making this happen. Oh...and for the record, I loved that it was in Berlin and at a modern hotel like the nhow. &nbsp;There is such a high energy in Berlin and I think it's an exciting place for the APEX community to convene.” - Joel Kallman<br /><br />“It was great being at APEX Connect - I was impressed by the variety and depth of the sessions that were offered, there’s definitely a lot to learn at APEX Connect, even if you’re an experienced APEX developer. And of course it was great seeing everyone and catching up.” - Marc Sewtz<br /><br />“Niels, thanks again for inviting me to speak at this year's APEX Connect--or should I say this: āˈpěks kəˈnekt. I had a blast.” - Bryn Llewellyn<br /><br />“It was a pleasure to personally meet you all at #APEXconn17! Great #orclapex event, great people!” - Bartosz Ostrowski<br /><br />“Thanks a lot to @nielsdb and the @DOAGeV team for the great #APEXConn17” - Alain Lacour<br /><br />The quality of the presentations was at a high level and presenters got the possibility to receive feedback from their audience through a nice APEX app. Even though we were in Berlin again, this city has a lot to offer and some took some private time before or after the conference to explore it. The venue in Berlin still appeals to me, but going forward we will rotate between locations. So, next stop will be in a new venue in Düsseldorf.<br /><br />The presentations from national and international speakers received great feedback. We are always looking for speakers and particularly for first-time speakers - &nbsp;so think about submitting a paper for the next APEX Connect conference! Before submitting, have a look into Scott Spendolini's blog posting (URL) with some great advice, how a good paper submission should look like:<br /><br /><a href="https://spendolini.blogspot.de/2013/11/presentation-advice.html">https://spendolini.blogspot.de/2013/11/presentation-advice.html</a><br /><br />We got some feedback and had some vital discussions on conference pricing, particularly on the prices for end users vs. IT-service providers. I would like to take the opportunity to explain the guidelines a bit, which DOAG uses to calculate conference prices. DOAG does not strive to make profit out of APEX Connect, but makes sure that all costs are covered. The necessary income for APEX Connect comes partly from the membership fees, but mainly from the events held throughout the year. At the end of the year, all costs of DOAG have to be covered. If there is a surplus, this money is then reinvested in future events or IT-infrastructure. With APEX Connect, there was a surplus, but only because the costs for staff was not accounted for. If you would take into consideration the number of working hours put into this event from DOAG staff, believe me, there is no surplus. Even worse, DOAG takes the risk of such a conference. So, if for some reason, only 200 people would have attended, DOAG will take the bill for this.<br /><br />This year, DOAG tried to take the IT-service providers more accountable, so that we can keep the pricing down for users coming from end-customers. DOAG already made very good experiences with this new pricing model from other events. However, with APEX Connect, there were also many questions from IT service providers. The Executive Board of DOAG will evaluate these and reconsider the pricing model if necessary.<br /><br />So now the work starts over again to make APEX Connect in 2018 even better. If you would like to participate in the organisation of this great event, just drop me an e-mail. Also, I’m always open for suggestions, so let me know by e-mail what you think of the conference and how we can further improve it.<br /><br />BTW: all uploaded APEX Connect slides are freely available with just one mouse click:<br /><br /><a href="http://docs.doag.org/2017/apex/2017-APEX-Connect-Dokumente_Vortraege.zip">http://docs.doag.org/2017/apex/2017-APEX-Connect-Dokumente_Vortraege.zip</a>.<br /><br />Yes, it’s true, you don’t have to be a DOAG member or register to gain knowledge about APEX! Many thanks to DOAG for this kind gesture.<br /><br />CU at APEX Connect in 2018. Niels de Bruijn tag:blogger.com,1999:blog-4976295728511735178.post-1442248662231273518 Fri May 19 2017 06:07:00 GMT-0400 (EDT) DOAG APEX Connect 2017 and beyond http://nielsdebr.blogspot.com/2017/05/doag-apex-connect-2017-and-beyond.html <br />First of all, I would like to thank all people that were involved in the making of APEX Connect. We all know that it takes tremendous amount of (private) time to pull this off. Also, a big “thank you” goes to all sponsors and attendees to make this all possible. I truly love this community.<br /><br />In 2017, we had around 300 attendees at APEX Connect, which I find great. I personally believe that APEX Connect will not grow as rapidly and it doesn’t need to. As the name implies, Connect is all about bringing the APEX community together and learning from each other, both personally and technically. For me, it feels like a small family that is having a reunion.<br /><br />This edition of Connect was a blast and I received a lot of positive feedback from the community through different channels:<br /><br />“APEX Connect is one of the best APEX and Oracle Database Developer conferences on the planet. &nbsp;I thought the quality of the sessions was very high and the topics were very diverse beyond APEX, including SQL, ORDS and Database Development (and even Docker!). &nbsp;It was also impressive that you had presenters from so many countries - England, Netherlands, USA, Canada, Poland, Belgium, Finland, Serbia, Croatia, Slovenia and others. &nbsp;It was a fascinating collection of cultures and people coming together, and this is a community that I'm very proud to be a part of. &nbsp;Many thanks to you and the entire DOAG organization for making this happen. Oh...and for the record, I loved that it was in Berlin and at a modern hotel like the nhow. &nbsp;There is such a high energy in Berlin and I think it's an exciting place for the APEX community to convene.” - Joel Kallman<br /><br />“It was great being at APEX Connect - I was impressed by the variety and depth of the sessions that were offered, there’s definitely a lot to learn at APEX Connect, even if you’re an experienced APEX developer. And of course it was great seeing everyone and catching up.” - Marc Sewtz<br /><br />“Niels, thanks again for inviting me to speak at this year's APEX Connect--or should I say this: āˈpěks kəˈnekt. I had a blast.” - Bryn Llewellyn<br /><br />“It was a pleasure to personally meet you all at #APEXconn17! Great #orclapex event, great people!” - Bartosz Ostrowski<br /><br />“Thanks a lot to @nielsdb and the @DOAGeV team for the great #APEXConn17” - Alain Lacour<br /><br />The quality of the presentations was at a high level and presenters got the possibility to receive feedback from their audience through a nice APEX app. Even though we were in Berlin again, this city has a lot to offer and some took some private time before or after the conference to explore it. The venue in Berlin still appeals to me, but going forward we will rotate between locations. So, next stop will be in a new venue in Düsseldorf.<br /><br />The presentations from national and international speakers received great feedback. We are always looking for speakers and particularly for first-time speakers - &nbsp;so think about submitting a paper for the next APEX Connect conference! Before submitting, have a look into Scott Spendolini's blog posting (URL) with some great advice, how a good paper submission should look like:<br /><br /><a href="https://spendolini.blogspot.de/2013/11/presentation-advice.html">https://spendolini.blogspot.de/2013/11/presentation-advice.html</a><br /><br />We got some feedback and had some vital discussions on conference pricing, particularly on the prices for end users vs. IT-service providers. I would like to take the opportunity to explain the guidelines a bit, which DOAG uses to calculate conference prices. DOAG does not strive to make profit out of APEX Connect, but makes sure that all costs are covered. The necessary income for APEX Connect comes partly from the membership fees, but mainly from the events held throughout the year. At the end of the year, all costs of DOAG have to be covered. If there is a surplus, this money is then reinvested in future events or IT-infrastructure. With APEX Connect, there was a surplus, but only because the costs for staff was not accounted for. If you would take into consideration the number of working hours put into this event from DOAG staff, believe me, there is no surplus. Even worse, DOAG takes the risk of such a conference. So, if for some reason, only 200 people would have attended, DOAG will take the bill for this.<br /><br />This year, DOAG tried to take the IT-service providers more accountable, so that we can keep the pricing down for users coming from end-customers. DOAG already made very good experiences with this new pricing model from other events. However, with APEX Connect, there were also many questions from IT service providers. The Executive Board of DOAG will evaluate these and reconsider the pricing model if necessary.<br /><br />So now the work starts over again to make APEX Connect in 2018 even better. If you would like to participate in the organisation of this great event, just drop me an e-mail. Also, I’m always open for suggestions, so let me know by e-mail what you think of the conference and how we can further improve it.<br /><br />BTW: all uploaded APEX Connect slides are freely available with just one mouse click:<br /><br /><a href="http://docs.doag.org/2017/apex/2017-APEX-Connect-Dokumente_Vortraege.zip">http://docs.doag.org/2017/apex/2017-APEX-Connect-Dokumente_Vortraege.zip</a>.<br /><br />Yes, it’s true, you don’t have to be a DOAG member or register to gain knowledge about APEX! Many thanks to DOAG for this kind gesture.<br /><br />CU at APEX Connect in 2018. Niels de Bruijn tag:blogger.com,1999:blog-4976295728511735178.post-1442248662231273518 Fri May 19 2017 06:07:00 GMT-0400 (EDT) APEX Interactive Grid Processing with Dynamic Actions https://ruepprich.wordpress.com/2017/05/18/apex-interactive-grid-processing-with-dynamic-actions/ <p>Here is a cool post on triggering dynamic actions from an interactive grid: <a href="http://lschilde.blogspot.com/2017/05/apex-51-interactive-grid-row-processing.html" target="_blank" rel="noopener noreferrer">http://lschilde.blogspot.com/2017/05/apex-51-interactive-grid-row-processing.html</a></p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ruepprich.wordpress.com/2335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ruepprich.wordpress.com/2335/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=ruepprich.wordpress.com&#038;blog=12765658&#038;post=2335&#038;subd=ruepprich&#038;ref=&#038;feed=1" width="1" height="1" /> Christoph Ruepprich http://ruepprich.wordpress.com/?p=2335 Thu May 18 2017 19:39:42 GMT-0400 (EDT) Moving your APEX Workspace to a Clone http://c2anton.blogspot.com/2017/05/moving-your-apex-workspace-to-clone.html Last September I posted a list of steps to take when <a href="http://c2anton.blogspot.com/2016/09/cloning-oracle-database-with-apex.html" target="_blank">cloning an Oracle database that has APEX installed</a>. The scenario is common for some, especially EBS customers--clone production and turn it into development. You have fresh data that way and are sure that you are developing against the exact configuration of the production environment. I'm not suggesting this as a best practice--I'm just recognizing that it happens.<br /><br />In addition to the steps I described in September, I recently ran into the need to migrate Workspace users and Team Development content from an existing development instance into the new production clone. If you've followed the best practice of initially exporting your workspace from Dev and migrating it to Test and Production, moving users and other content into the clone is pretty easy. By having the same workspace in Dev, Test and Production you automatically also have it in the Production clone.<br /><br />I won't say this process is supported, but we have used it successfully.<br /><br />Step 1: Log into the APEX_ADMIN application (INTERNAL workspace).<br /><br />Step 2: Export the workspace that has the Team Development content you wish to migrate.<br /><br />Step 3: Edit the export file and remove the following<br /><br />The section that begins: &nbsp;<span style="font-family: Courier New, Courier, monospace;">prompt &nbsp;Creating workspace ABC</span><br />Any groups that already exist or that you don't wish to create in the clone:&nbsp;<span style="font-family: Courier New, Courier, monospace;">wwv_flow_api.create_user_groups&nbsp;</span><br />Any users that exist or that you don't wish to create:&nbsp;<span style="font-family: Courier New, Courier, monospace;">wwv_flow_fnd_user_api.create_fnd_user</span><br /><br />Step 4: Run the edited file in the APEX_nnnnnn user of the clone.<br /><br />That's it. Your Team Dev content should be there.<br /><br /> Anton Nielsen tag:blogger.com,1999:blog-24686153.post-8456936054476126654 Thu May 18 2017 18:56:00 GMT-0400 (EDT) NEW ODTUG Kscope17 Content http://www.odtug.com/p/bl/et/blogaid=719&source=1 Stay up to date on all things Kscope17: Introducing the Lunch and Learn, New Oracle Professional Tracks, In the Cloud sessions, On-Prem sessions, and the Kscope17 Schedule at a Glance. ODTUG http://www.odtug.com/p/bl/et/blogaid=719&source=1 Thu May 18 2017 16:37:23 GMT-0400 (EDT) My 5 favorite sessions at ODTUG Kscope17 http://www.oracle-and-apex.com/my-5-favorite-sessions-at-odtug-kscope17/ <p>In a few weeks this years <a href="http://kscope17.com/" target="_blank">ODTUG Kscope conference</a> will take placed in San Antonio, Texas, US.</p> <p>Time to share my 5 favorite sessions at this awesome and inspiring conference.</p> <p><span id="more-1338"></span></p> <p>By now it should be common knowledge that I attend conferences not only for the technical sessions and the exhibition, but most importantly to meet and talk to others. As <a href="http://www.oracle-and-apex.com/get-out-and-talk-to-others/" target="_blank">I recently pointed out</a>, it is very inspiring to meet others and get to know them. With that in mind, I present my top 5 sessions (not in any particular order):</p> <h3>APEX Open Mic Night</h3> <p>Monday from 8:00-10:00 pm the APEX community meets (usually with some cold beverages served) in Cibolo Canyon 5 to see what everyone has done with APEX in the past year. If you want, just enter the stage and you get 5 mins to show us some app, or plugin, or whatever you created recently and makes you proud. Everything is welcome, except slides. Don&#8217;t bring slides, just hook up your notebook and show us something. These two hours will be packed with many interesting things and will help you through the year to have inspiration for your day-to-day job.</p> <h3>Lunch and Learn</h3> <p><a href="http://kscope17.com/events/lunch-learn" target="_blank">On Tuesday from 12:15 to 1:45pm</a> grab your boxed lunch and come to Cibolo Canyon 5 to have a room packed with ACEs and APEX Dev team members (and other experts) to answer your questions. Thats important: bring your questions, there won&#8217;t be any lecture.</p> <p>I&#8217;ll be the moderator, which basically means I&#8217;m running back and forth bringing the Mic to you, while all the others are seated at the panel and will do their best to answer your questions.</p> <h3>Poker Night</h3> <p>This is very unofficial and not organized by ODTUG, but happens every year at some evening in the Hotel bar. I don&#8217;t get a chance to attend each year, but when I do I usually loose some money, but get a chance to meet many new faces from all technologies and all places on this earth. At which other occasion an ESSBASE guy might sit next to an APEX guy, next to some DWH specialist?</p> <h3>Thursday Deep Dive</h3> <p><a href="http://kscope17.com/content/thursday-deep-dive-sessions" target="_blank">Thursday</a> (that&#8217;s Hangover day after the party on Wednesday night) from 9:00-11:00 there will be a series of lightning talks from a group of well-known speakers. Another great chance to get a bunch of ideas and lots of insight in a very short time.</p> <h3>Happy Hour in Exhibit Hall</h3> <p>The conference team does a great job in keeping all attendees happy. In this particular session (actually its two sessions: on Monday 5:45-6:45pm and Tuesday same time) they also try to keep vendors (like us at <a href="https://www.tryfoexnow.com" target="_blank">FOEX</a>) happy and serve free drinks and food in the exhibition hall. A great chance to mix and mingle, try out some games, talk to vendors without getting too serious, and much more. Don&#8217;t miss it! If we haven&#8217;t met until then, come up to our Booth (#316) and say hi to me and the team.</p> <p>&nbsp;</p> <p>There is so much more I could recommend, like changing streams. Get out of your comfort zone and catch some session of a different technology. Like APEX guys coming to the DB sessions, or to DWH sessions.</p> <p>See y&#8217;all soon!</p> <img src="http://www.oracle-and-apex.com/blog/?ak_action=api_record_view&id=1338&type=feed" alt="" /> Peter Raganitsch http://www.oracle-and-apex.com/?p=1338 Thu May 18 2017 03:54:26 GMT-0400 (EDT) How DBAs Can Boost (or Kill) Innovation https://www.insum.ca/how-dbas-can-boost-kill-innovation-oracle-apex/ <h1>How DBAs Can Boost (or Kill) Innovation</h1> <p>This year marks the 10<sup>th</sup> anniversary of the product launch that changed our lives.</p> <p>In his famous keynote that cemented his legendary status, Steve Jobs revealed the iPhone, and in doing so, ushered in the smartphone era and arguably transformed the world forever.</p> <p>Since then, entire industries have been upended by upstart companies led by college-aged kids whose innovative use of smartphone technology has rocketed them past entrenched incumbents.  Non-existent just 10 years ago, Uber and AirBnB are now household names with billion dollar valuations, and the term “disruptive innovation” is now encoded in the business lexicon with its inescapable implication: Innovate or die.</p> <p>In our new era of technology driven disruptive innovation, success is increasingly predicated on an organization’s ability to not only leverage and deploy enabling technologies, but to do so more quickly than the competition.  In fact, in many cases, deep technology prowess is required to just stay in the game.</p> <p>So&#8230;what does all this have to do with DBAs?</p> <p>Tons &#8211; let me explain.</p> <p>&nbsp;</p> <h2>Enter the DBAs</h2> <p>Arguably (and especially in our increasingly data driven world where <a href="https://www.economist.com/news/leaders/21721656-data-economy-demands-new-approach-antitrust-rules-worlds-most-valuable-resource">data is now deemed to be more valuable than oil</a>), databases are one of the most important pieces of technology within an organization. Not only do they underpin almost every application in use, but they are jammed packed with all kinds of features that when leveraged properly can remarkably boost an organization’s technical capabilities. As database experts, DBAs are therefore ideally positioned to significantly boost innovation potential within an organization, which is exactly what the good ones do.</p> <p>But it goes even deeper than that.</p> <p>As guardians of the corporate data and the systems in which it is stored, DBAs have tremendous power and influence when it comes to deciding who has what access to what data, and with what tools.  Accordingly, DBAs often directly or indirectly control what IT tools and database features are used within an organization, and this is where they can perhaps have the biggest impact of all.</p> <p>However, fortunately and unfortunately, that “impact” can be either positive or negative.</p> <p>How so? Simply put, when DBAs allow and promote the right high-productivity tools, including <a href="https://www.insum.ca/oracle-apex-low-code-high-innovation/">low-code tools like Oracle APEX</a> that require their support and cooperation, innovation can flourish. However, disallow these same tools unnecessarily or over cautiously, and innovation suffers.</p> <p>“But wait!”, I hear you say. “It’s not that simple. What if the “high productivity” tools people want to use create security issues or introduce some other risk? Aren’t DBAs doing their job by not allowing tools that may destabilize the environment?”</p> <p>Of course. I’m not suggesting that DBAs recklessly allow every random tool that users find on the interwebs. As protectors of the database, the DBA’s primary responsibility is to keep the data safe and ensure the database is healthy. That’s the “table stakes” of what good DBAs do.</p> <p>&nbsp;</p> <h2>Good vs. Great DBAs</h2> <p>But great DBAs? Great DBAs go beyond that. Great DBAs proactively leverage the database to help the organization squeeze every ounce of value from its data assets and database investment.  They enthusiastically promote the database features that streamline processes, boost productivity, and drive operational efficiencies.</p> <p>But the truly distinguishing characteristic of great DBAs? <img class="alignright wp-image-7593 size-full" src="https://www.insum.ca/wp-content/uploads/2017/05/great-dbas.png" alt="great dbas innovation" width="414" height="284" srcset="https://www.insum.ca/wp-content/uploads/2017/05/great-dbas.png 414w, https://www.insum.ca/wp-content/uploads/2017/05/great-dbas-300x206.png 300w" sizes="(max-width: 414px) 100vw, 414px" /></p> <p>Truly great DBAs <strong>focus more on enabling people to do smart things than they do on stopping them from doing stupid things</strong>. They prefer optimistically educating rather than pessimistically restricting.</p> <p>Here’s the opposite of what that looks like.</p> <p>At the COLLABORATE16 conference in Las Vegas, I happened to have lunch with three DBAs from large organizations, who each had been in their roles for 25 to 30 years. Almost the entire conversation focused on horror stories about how some renegade developer did some stupid thing that caused some big problem. The quote that seemed to best sum up their mindset was, “I’ve never met a disciplined developer”. The rest of the conversation revolved around how they lock everything down as tightly as possible to ensure no developer could ever again do something stupid and ruin their day.</p> <p>I left the table feeling very sad for their respective organizations; I couldn’t help but imagine the toll such a mindset was taking on innovation and technology driven progress at their companies.  No wonder some people joke that DBA stands for “Don’t Bother Asking”.</p> <p>See, the best way for a fighter pilot to have a perfect safety record is to never leave the ground. But that’s not what great pilots do. Great pilots take the time to learn exactly what their aircraft are capable of, and can balance risks to safely push their jets to the limit to accomplish the mission. Great DBAs are no different.  They recognize there are risks with pretty much all progress, from crossing the street to connecting to the internet, but they know how to safely manage risks to accomplish the corporate mission.</p> <p>Mediocre DBAs? They default to “no”.</p> <p><img class="aligncenter size-full wp-image-7616" src="https://www.insum.ca/wp-content/uploads/2017/05/SteveJobs_FaithInPeople.jpg" alt="Steve Jobs - Have Faith in People" width="588" height="286" srcset="https://www.insum.ca/wp-content/uploads/2017/05/SteveJobs_FaithInPeople.jpg 588w, https://www.insum.ca/wp-content/uploads/2017/05/SteveJobs_FaithInPeople-300x146.jpg 300w, https://www.insum.ca/wp-content/uploads/2017/05/SteveJobs_FaithInPeople-450x219.jpg 450w" sizes="(max-width: 588px) 100vw, 588px" /></p> <p>To be fair, many DBAs have good reason to be wary of developers. Either they’ve heard horror stories or have experienced first hand the damage that can be done when someone messes up the data, or brings the database to its knees with some gnarly SQL statement executed multiple times per second without a bind variable in sight.</p> <p>In fact, the discord between DBAs and developers goes way back and is well known. Steven Feuerstein even has a great <a href="https://www.youtube.com/watch?v=xTAD6meRMyY&amp;index=6&amp;list=PL0mkplxCP4yjKUqH-Blo4Pz-ehxPmtQgf">“Couples Therapy” video</a> for DBAs and Developers, and has posted tips on <a href="http://stevenfeuersteinonplsql.blogspot.ca/2017/04/tips-for-getting-along-with-your-dba.html">how developers can work with DBAs more effectively</a>.  In many cases, developers really do need to “up their game” when it comes to effectively utilizing the database, and DBAs are completely within their right to impose restrictions or limit the use of certain features when they are deemed unsafe or are being used improperly.</p> <p>But is it possible for the pendulum to swing too far?</p> <p>&nbsp;</p> <h2>Playing it Too Safe?</h2> <p>When mechanical transportation first emerged in Britain in the 1800s, the British parliament passed the Locomotive Act in 1865, which placed burdensome restrictions on motorized vehicles. They were restricted to traveling just two miles per hour in cities and towns, and four miles per hour elsewhere. Especially onerous was the requirement that vehicle operators have three people attend the vehicle at all times, one of whom had to run 60 yards in front and wave a red flag to warn horseback riders and carriages. Anyone ignoring the rules was subject to fines as high as the equivalent of $1,100 in 2015 dollars (<em>source:</em> <em><a href="https://hbr.org/2016/04/spontaneous-deregulation">Harvard Business Review</a>). </em></p> <p><img class="size-vntd-portfolio-auto wp-image-7591 aligncenter" src="https://www.insum.ca/wp-content/uploads/2017/05/dba-reid-hoffman-450x276.png" alt="dba reid hoffman" width="450" height="276" srcset="https://www.insum.ca/wp-content/uploads/2017/05/dba-reid-hoffman-450x276.png 450w, https://www.insum.ca/wp-content/uploads/2017/05/dba-reid-hoffman-300x184.png 300w, https://www.insum.ca/wp-content/uploads/2017/05/dba-reid-hoffman-768x470.png 768w, https://www.insum.ca/wp-content/uploads/2017/05/dba-reid-hoffman-880x539.png 880w, https://www.insum.ca/wp-content/uploads/2017/05/dba-reid-hoffman.png 996w" sizes="(max-width: 450px) 100vw, 450px" /></p> <p>Thankfully for the automobile industry, people started seeing the many benefits of automobiles and came to recognize the fears were overblown.  In 1896, the restrictions were considerably relaxed, innovation flourished, and look where we are now.</p> <p>As with many areas in life, finding the balance between latitude and control is important to get right, or you could end up with unintended and undesirable consequences.  This is especially true in IT  where we’d do well to recognize the wisdom of pioneering Unix programmer Doug Gwyn when he said:</p> <blockquote><p>“<strong>Unix was not designed to stop you from doing stupid things, because that would also stop you from doing clever things</strong>.” -Doug Gwyn</p></blockquote> <p>&nbsp;</p> <h2>When Policy becomes the “Thing”</h2> <p>Of course, the rules governing how a database is used within an organization are not always set by the DBAs. I’ve met more than one frustrated DBA held back by IT policies set by those many levels removed from the action.</p> <p>Most often, this seems to occur in larger organizations with multiple levels of IT management. In his <a href="https://www.sec.gov/Archives/edgar/data/1018724/000119312517120198/d373368dex991.htm">most recent letter to shareholders</a>, Amazon CEO Jeff Bezos explained exactly why this happens:</p> <blockquote><p>&#8220;As companies get larger and more complex, there’s a tendency to manage to proxies.</p> <p>A common example is process as proxy. Good process serves you so you can serve customers. But if you’re not watchful, the process can become the thing. …The process becomes the proxy for the result you want. You stop looking at outcomes and just make sure you’re doing the process right. Gulp. It’s not that rare to hear a junior leader defend a bad outcome with something like, “Well, we followed the process.” A more experienced leader will use it as an opportunity to investigate and improve the process. The process is not the thing. It’s always worth asking, do we own the process or does the process own us?&#8221; -Jeff Bezos</p></blockquote> <p><img class="alignright wp-image-7594 size-medium" src="https://www.insum.ca/wp-content/uploads/2017/05/united-airlines-dba-300x189.png" alt="united airlines dba" width="300" height="189" srcset="https://www.insum.ca/wp-content/uploads/2017/05/united-airlines-dba-300x189.png 300w, https://www.insum.ca/wp-content/uploads/2017/05/united-airlines-dba-450x283.png 450w, https://www.insum.ca/wp-content/uploads/2017/05/united-airlines-dba.png 676w" sizes="(max-width: 300px) 100vw, 300px" />Thanks to United Airlines, <a href="http://www.cnbc.com/2017/04/10/united-ceo-says-airline-had-to-re-accommodate-passenger-and-twitter-is-having-a-riot.html">we have a recent example</a> of how “following the process” can go sideways when they infamously “re-accommodated” a passenger.  After the now viral video surfaced of the incident that left the 69-year old passenger bruised and bloodied, the CEO of United initially responded with:</p> <blockquote><p><em>“</em>We sought volunteers and then followed our involuntary denial of boarding process…<em>” </em></p></blockquote> <p>To his credit, he seemed to recognize the ineptness of the “we followed the process” excuse in a full-page ad that came out a few days later in the Washington Post:</p> <blockquote><p><em>“That day, corporate policies were placed ahead of our shared values. And procedures got in the way of employees doing what they know is right.” &#8211;</em>Oscar Munoz</p></blockquote> <h2></h2> <h2>Policy vs. Outcome in IT</h2> <p>How does “following policy regardless of outcome” type thinking manifest itself in IT? A perfect example showed up in the Official APEX Group on LinkedIn not too long ago:</p> <p><img class="size-full wp-image-7595 aligncenter" src="https://www.insum.ca/wp-content/uploads/2017/05/version-control-oracle-apex.png" alt="version control oracle apex" width="703" height="552" srcset="https://www.insum.ca/wp-content/uploads/2017/05/version-control-oracle-apex.png 703w, https://www.insum.ca/wp-content/uploads/2017/05/version-control-oracle-apex-300x236.png 300w, https://www.insum.ca/wp-content/uploads/2017/05/version-control-oracle-apex-450x353.png 450w" sizes="(max-width: 703px) 100vw, 703px" /></p> <p><span style="font-weight: 400;">All the examples that exist of </span><a href="https://apex.oracle.com/pls/apex/f?p=411:11:::NO:::"><span style="font-weight: 400;">how Oracle APEX can significantly boost productivity and drastically improve delivery times</span></a><span style="font-weight: 400;">, and this company might not use it because </span><a href="https://www.insum.ca/oracle-apex-version-control/"><span style="font-weight: 400;">APEX version control processes are different</span></a><span style="font-weight: 400;"> from what is dictated in the corporate IT policy manual? Incredible. In the meantime, while the IT Auditor gets hung up on what amounts to “problems in theory” versus “problems in practice”, someone else with a much more pragmatic approach will eat the company’s lunch. </span></p> <p><span style="font-weight: 400;">But that was an IT Auditor. A DBA would never ban a high-productivity tool like Oracle APEX, right? After all, APEX lives in the database, and they can control exactly how it’s used.  </span></p> <p><span style="font-weight: 400;">Remember my experience at COLLABORATE16 I mentioned earlier? </span></p> <p><span style="font-weight: 400;">It got worse.</span></p> <p><span style="font-weight: 400;">Later, I attended a session presented by Insum’s </span><a href="https://twitter.com/insumsmartel"><span style="font-weight: 400;">Sylvain Martel</span></a><span style="font-weight: 400;"> on </span><a href="https://www.insum.ca/portfolio/ebs-apex-webinar/"><span style="font-weight: 400;">using APEX to build Oracle E-Business Suite (EBS) Extensions</span></a><span style="font-weight: 400;">. There are many areas where APEX shines, and one of them is to </span><a href="https://www.insum.ca/portfolio/ebs-reports-dashboards-for-the-people/"><span style="font-weight: 400;">connect to EBS to build either real-time dashboards and reports or specialized data entry forms.</span></a><span style="font-weight: 400;"> Sessions demonstrating this functionality always generate a lot of excitement, and this one was no different.</span></p> <p><span style="font-weight: 400;">Afterwards, I was speaking with an obviously impressed DBA from a large Fortune 500 company, and asked if his company used APEX. “Oh yeah”, he said. “It’s a great tool, but we only use it in the DBA group.”  “Oh? Not elsewhere organization?” I asked. “No” he said. “We used to let the business use it, but they started using it so much and started asking too many questions, so we turned it off because it was taking up too much time”.</span></p> <p><span style="font-weight: 400;">They turned it off.  Maybe bring in some trainers? Have some lunch and learn sessions? Nope &#8211; just turn it off.</span></p> <p><span style="font-weight: 400;">One can only imagine what initiatives were killed by that decision, or what a CEO looking to fully leverage technology to improve productivity would have say if he knew what capabilities were summarily eliminated from the organization by that simple yet fateful decision.  Talk about impacting innovation&#8230;</span></p> <p>&nbsp;</p> <h2>Giving Innovation a Boost</h2> <p><span style="font-weight: 400;">Thank goodness not all DBAs are like that. Contrast that decision with one made by Alfredo Abate, a DBA who now works as an Oracle Systems Architect at Brake Parts Inc. in Chicago.  </span></p> <p><span style="font-weight: 400;">Developers at his company were running into limitations extending Oracle EBS with the traditional tools (Forms and Reports), and never seemed to get projects done as quickly as the business wanted or needed.</span><i> </i><span style="font-weight: 400;">Seeing the problem, Alfredo did exactly what proactive DBAs do and pointed out an Oracle database feature he thought would help:</span></p> <blockquote><p><em><span style="font-weight: 400;">“</span><span style="font-weight: 400;">I had used APEX in the past and knew how quickly you could create applications with it.  Developers already know PL/SQL so the basic navigation and functionality of APEX can be learned very quickly by first-timers.  After I created the initial proof of concept, our IT team realized its potential and the developers quickly adopted this as the go-to tool for EBS extensions.  A year later we have generated 15 applications including over 60 reports in APEX!</span><span style="font-weight: 400;">”</span></em><i><span style="font-weight: 400;"> &#8211;</span></i><span style="font-weight: 400;">Alfredo Abate</span></p></blockquote> <p><span style="font-weight: 400;">Or, take the work <a href="http://oraclewizard.com/Oraclewizard/author/rlockard/">Robert Lockard</a> is doing as another example.  Rob is an Oracle ACE and a deeply experienced DBA who helps his clients fully leverage their Oracle database investment.</span></p> <p><span style="font-weight: 400;">One client in particular had many applications in production that were first written in COBOL in the 1970’s. A key COBOL programmer who had been supporting the applications for the last 40 years retired, and the organization realized they needed to modernize their systems and move them off the mainframe.  Rob introduced Oracle APEX to the client, and explained why the client loved the idea:</span></p> <blockquote><p><i><span style="font-weight: 400;">“[APEX] has the advantage of a short learning curve, and being bundled with the Oracle Database. The customer did not have to purchase additional infrastructure to start the migration of these applications. We have a group of Oracle programmers that already know PL/SQL, so getting them up and running on APEX was quite easy. We are now accessing other critical applications that can be migrated off of mainframe/COBOL to Oracle APEX.” &#8211;</span></i><span style="font-weight: 400;">Rob Lockart</span></p></blockquote> <p><span style="font-weight: 400;">In both cases, rather than keeping their heads down and focusing only on maintaining the database, both DBAs introduced ways for the organization to move past a hurdle by showing how they could further leverage an asset they already owned using resources they already had.  Talk about impacting innovation&#8230;</span></p> <p>&nbsp;</p> <h1><span style="font-weight: 400;">Conclusion</span></h1> <p><span style="font-weight: 400;">Given my current area of focus, I’ve used Oracle and specifically Oracle APEX examples in this article.  However, I know there are many other great database features which DBAs can promote to help boost innovation at their organizations.  If you have any examples, please share them in the comments below. </span></p> <p><span style="font-weight: 400;">Also, if you are a DBA and interested in learning more about how you can leverage Oracle APEX in your organization, sign up for Francis Mignault’s webinar, </span><span style="font-weight: 400;"><a href="https://insum.webex.com/insum/onstage/g.php?MTID=efe9659d4a739ab25b1a053ff36dc0ceb&amp;SourceID=InsumBlog">Oracle APEX: What Every DBA Needs to Know</a>, to learn some protips on APEX administration. See you on June 1st!</span></p> <p><span id="hs-cta-wrapper-655e4919-fbc0-492f-b0a4-9426636111ea" class="hs-cta-wrapper"><span id="hs-cta-655e4919-fbc0-492f-b0a4-9426636111ea" class="hs-cta-node hs-cta-655e4919-fbc0-492f-b0a4-9426636111ea"><!-- [if lte IE 8]> <div id="hs-cta-ie-element"></div> <![endif]--><a href="https://cta-redirect.hubspot.com/cta/redirect/1918225/655e4919-fbc0-492f-b0a4-9426636111ea" target="_blank" rel="noopener noreferrer"><img id="hs-cta-img-655e4919-fbc0-492f-b0a4-9426636111ea" class="hs-cta-img" style="border-width: 0px;" src="https://no-cache.hubspot.com/cta/default/1918225/655e4919-fbc0-492f-b0a4-9426636111ea.png" alt="Register now" /></a></span><script charset="utf-8" src="https://js.hscta.net/cta/current.js"></script><script type="text/javascript"> hbspt.cta.load(1918225, '655e4919-fbc0-492f-b0a4-9426636111ea', {}); </script></span></p> Frank Hoogendoorn https://www.insum.ca/?p=7590 Wed May 17 2017 14:34:32 GMT-0400 (EDT) DBA/Dev quick tipp: recover lost package body under EBR https://svenweller.wordpress.com/2017/05/17/dbadev-quick-tipp-recover-lost-package-body-under-ebr/ <h2>Problem</h2> <p>It can happen that SQL developer suggests to reload an old package body that you are currently working on. If you click the suggested &#8220;autoupdate&#8221; then you will loose all current changes that you made to the package body. This just happened to a collegue of mine.</p> <p><img data-attachment-id="5001" data-permalink="https://svenweller.wordpress.com/2017/05/17/dbadev-quick-tipp-recover-lost-package-body-under-ebr/sqldev_pkgbody_modification/" data-orig-file="https://svenweller.files.wordpress.com/2017/05/sqldev_pkgbody_modification.png?w=809" data-orig-size="419,173" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="sqldev alert &#8211; overwrite package body modifications" data-image-description="&lt;p&gt;Allways press NO&lt;/p&gt; " data-medium-file="https://svenweller.files.wordpress.com/2017/05/sqldev_pkgbody_modification.png?w=809?w=300" data-large-file="https://svenweller.files.wordpress.com/2017/05/sqldev_pkgbody_modification.png?w=809?w=419" class="alignnone size-full wp-image-5001" src="https://svenweller.files.wordpress.com/2017/05/sqldev_pkgbody_modification.png?w=809" alt="sqldev alert - overwrite package body modifications" srcset="https://svenweller.files.wordpress.com/2017/05/sqldev_pkgbody_modification.png 419w, https://svenweller.files.wordpress.com/2017/05/sqldev_pkgbody_modification.png?w=150 150w, https://svenweller.files.wordpress.com/2017/05/sqldev_pkgbody_modification.png?w=300 300w" sizes="(max-width: 419px) 100vw, 419px" /></p> <p>It is possible to recover the old code using the flashback feature of the oracle database. But one has to be quicker than the undo retention period of the database.</p> <p>If the schema was edition enabled this complicates things a tiny bit further. We need to make sure to fetch the plsql code from the correct edition that we are interested in.</p> <p>When we are quering normal data dictionary views like DBA_SOURCE this will always use the current edition. DBA_SOURCE_AE will show all code editions.</p> <p>Flashback does not work well with data dictionary views. However we can use the base tables and run a flashback query there to see the old package code.</p> <h2>Action</h2> <p>Three simple statements will do it.</p> <p>Set your dba session to use the correct edition (this might not be needed if the object id is found using a slightly different query). The edition needs to match the edition where the source code was originally compiled</p> <pre class="brush: sql; title: ; notranslate">ALTER SESSION SET EDITION=&quot;DEV$ALPHA&quot;;</pre> <p>Find the object id of the package body</p> <p>Use the correct name of the package and your edition name</p> <pre class="brush: sql; title: ; notranslate"> select obj# from sys.&quot;_CURRENT_EDITION_OBJ&quot; where name = 'MYPACKAGE' and type# = 11 -- package body and namespace = 2 and defining_edition = 'DEV$ALPHA'; </pre> <p>Flashback query to show the source code for the identified object</p> <pre class="brush: sql; title: ; notranslate">select * from sys.source$ --versions between timestamp (systimestamp - interval '25' minute) and systimestamp as of timestamp (systimestamp - interval '25' minute) where obj# = 1906090;</pre> <p>&nbsp;</p> <p>Done.</p> <p>&nbsp;</p> <h4>Aftermath</h4> <p>The starting situation can be reproduced by changeing body and spec of the same package. Once the spec is recompiled, the body needs to be recompiled too. Then SQL developer suggests to load the new code (which is in fact the old code). If you click yes, it will overwrite the current changes.</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/svenweller.wordpress.com/4966/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/svenweller.wordpress.com/4966/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=svenweller.wordpress.com&#038;blog=24902459&#038;post=4966&#038;subd=svenweller&#038;ref=&#038;feed=1" width="1" height="1" /> svenweller http://svenweller.wordpress.com/?p=4966 Wed May 17 2017 10:16:57 GMT-0400 (EDT) REST Enabling Oracle Exadata Express using SQLDeveloper https://jes.blogs.shellprompt.net/2017/05/17/rest-enabling-oracle-exadata-express-using-sqldeveloper/ <p>Oracle SQLDeveloper makes it very easy to REST enable your database, I wanted to see if this was possible with the new Exadata Express service or if it was one of the restrictions. It turns out it is very easy to do.</p> <p>Firstly, we need to connect to the Instance and we&#8217;ll enable REST Services by right clicking on the Connection</p> <p><a href="https://aejes.files.wordpress.com/2017/06/2017-06-05_20-02-36.png"><img data-attachment-id="1758" data-permalink="https://jes.blogs.shellprompt.net/2017/05/17/rest-enabling-oracle-exadata-express-using-sqldeveloper/2017-06-05_20-02-36/" data-orig-file="https://aejes.files.wordpress.com/2017/06/2017-06-05_20-02-36.png" data-orig-size="703,604" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-17_10-02-36" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/06/2017-06-05_20-02-36.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/06/2017-06-05_20-02-36.png?w=625&#038;h=537" class="alignnone size-large wp-image-1758" src="https://aejes.files.wordpress.com/2017/06/2017-06-05_20-02-36.png?w=625&#038;h=537" alt="" width="625" height="537" srcset="https://aejes.files.wordpress.com/2017/06/2017-06-05_20-02-36.png?w=625&amp;h=537 625w, https://aejes.files.wordpress.com/2017/06/2017-06-05_20-02-36.png?w=150&amp;h=129 150w, https://aejes.files.wordpress.com/2017/06/2017-06-05_20-02-36.png?w=300&amp;h=258 300w, https://aejes.files.wordpress.com/2017/06/2017-06-05_20-02-36.png 703w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>Now we can go to a table (the ubiquitous EMP table) and REST enable it.</p> <p><a href="https://aejes.files.wordpress.com/2017/06/2017-06-05_20-03-44.png"><img data-attachment-id="1759" data-permalink="https://jes.blogs.shellprompt.net/2017/05/17/rest-enabling-oracle-exadata-express-using-sqldeveloper/2017-06-05_20-03-44/" data-orig-file="https://aejes.files.wordpress.com/2017/06/2017-06-05_20-03-44.png?w=625" data-orig-size="557,543" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-12_10-03-44" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/06/2017-06-05_20-03-44.png?w=625?w=300" data-large-file="https://aejes.files.wordpress.com/2017/06/2017-06-05_20-03-44.png?w=625?w=557" class="alignnone size-full wp-image-1759" src="https://aejes.files.wordpress.com/2017/06/2017-06-05_20-03-44.png?w=625" alt="" srcset="https://aejes.files.wordpress.com/2017/06/2017-06-05_20-03-44.png 557w, https://aejes.files.wordpress.com/2017/06/2017-06-05_20-03-44.png?w=150 150w, https://aejes.files.wordpress.com/2017/06/2017-06-05_20-03-44.png?w=300 300w" sizes="(max-width: 557px) 100vw, 557px" /></a></p> <p>When you click this option, you can give the object an alias (which is useful to hide the details of your internal object names).</p> <p>For the purposes of this example I&#8217;m going to uncheck the Authorization required option since I want anyone to be able to query this rest end-point.</p> <p><a href="https://aejes.files.wordpress.com/2017/06/2017-06-05_20-04-38.png"><img data-attachment-id="1760" data-permalink="https://jes.blogs.shellprompt.net/2017/05/17/rest-enabling-oracle-exadata-express-using-sqldeveloper/2017-06-05_20-04-38/" data-orig-file="https://aejes.files.wordpress.com/2017/06/2017-06-05_20-04-38.png" data-orig-size="800,600" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-12_10-04-38" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/06/2017-06-05_20-04-38.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/06/2017-06-05_20-04-38.png?w=625&#038;h=469" class="alignnone size-large wp-image-1760" src="https://aejes.files.wordpress.com/2017/06/2017-06-05_20-04-38.png?w=625&#038;h=469" alt="" width="625" height="469" srcset="https://aejes.files.wordpress.com/2017/06/2017-06-05_20-04-38.png?w=625&amp;h=469 625w, https://aejes.files.wordpress.com/2017/06/2017-06-05_20-04-38.png?w=150&amp;h=113 150w, https://aejes.files.wordpress.com/2017/06/2017-06-05_20-04-38.png?w=300&amp;h=225 300w, https://aejes.files.wordpress.com/2017/06/2017-06-05_20-04-38.png?w=768&amp;h=576 768w, https://aejes.files.wordpress.com/2017/06/2017-06-05_20-04-38.png 800w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p><a href="https://aejes.files.wordpress.com/2017/06/2017-06-05_20-06-22.png"><img data-attachment-id="1761" data-permalink="https://jes.blogs.shellprompt.net/2017/05/17/rest-enabling-oracle-exadata-express-using-sqldeveloper/2017-06-05_20-06-22/" data-orig-file="https://aejes.files.wordpress.com/2017/06/2017-06-05_20-06-22.png" data-orig-size="800,600" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-12_10-06-22" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/06/2017-06-05_20-06-22.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/06/2017-06-05_20-06-22.png?w=625&#038;h=469" class="alignnone size-large wp-image-1761" src="https://aejes.files.wordpress.com/2017/06/2017-06-05_20-06-22.png?w=625&#038;h=469" alt="" width="625" height="469" srcset="https://aejes.files.wordpress.com/2017/06/2017-06-05_20-06-22.png?w=625&amp;h=469 625w, https://aejes.files.wordpress.com/2017/06/2017-06-05_20-06-22.png?w=150&amp;h=113 150w, https://aejes.files.wordpress.com/2017/06/2017-06-05_20-06-22.png?w=300&amp;h=225 300w, https://aejes.files.wordpress.com/2017/06/2017-06-05_20-06-22.png?w=768&amp;h=576 768w, https://aejes.files.wordpress.com/2017/06/2017-06-05_20-06-22.png 800w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>Now we can test the REST endpoint in our browser, in my case the URL is of the format</p> <pre>https://&lt;instance&gt;-&lt;domain identity&gt;.db.em2.oraclecloudapps.com/apex/<em><strong>jes</strong></em>/<em><strong>emp</strong></em>/</pre> <p>where <em><strong>jes</strong></em> represents my schema name and <em><strong>emp</strong></em> is the table name I just REST enabled.</p> <p>If I access this URL I see &#8211;</p> <p><a href="https://aejes.files.wordpress.com/2017/06/2017-06-05_20-12-44.png"><img data-attachment-id="1762" data-permalink="https://jes.blogs.shellprompt.net/2017/05/17/rest-enabling-oracle-exadata-express-using-sqldeveloper/2017-06-05_20-12-44/" data-orig-file="https://aejes.files.wordpress.com/2017/06/2017-06-05_20-12-44.png" data-orig-size="1676,333" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-12_10-12-44" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/06/2017-06-05_20-12-44.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/06/2017-06-05_20-12-44.png?w=625&#038;h=124" class="alignnone size-large wp-image-1762" src="https://aejes.files.wordpress.com/2017/06/2017-06-05_20-12-44.png?w=625&#038;h=124" alt="" width="625" height="124" srcset="https://aejes.files.wordpress.com/2017/06/2017-06-05_20-12-44.png?w=625&amp;h=124 625w, https://aejes.files.wordpress.com/2017/06/2017-06-05_20-12-44.png?w=1250&amp;h=248 1250w, https://aejes.files.wordpress.com/2017/06/2017-06-05_20-12-44.png?w=150&amp;h=30 150w, https://aejes.files.wordpress.com/2017/06/2017-06-05_20-12-44.png?w=300&amp;h=60 300w, https://aejes.files.wordpress.com/2017/06/2017-06-05_20-12-44.png?w=768&amp;h=153 768w, https://aejes.files.wordpress.com/2017/06/2017-06-05_20-12-44.png?w=1024&amp;h=203 1024w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>How cool and easy is that?</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aejes.wordpress.com/1757/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aejes.wordpress.com/1757/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=jes.blogs.shellprompt.net&#038;blog=71717384&#038;post=1757&#038;subd=aejes&#038;ref=&#038;feed=1" width="1" height="1" /> John Scott http://jes.blogs.shellprompt.net/?p=1757 Wed May 17 2017 08:56:39 GMT-0400 (EDT) Get out and talk to others http://www.oracle-and-apex.com/get-out-and-talk-to-others/ <p>Coming back from <a href="https://apex.doag.org/de/home/" target="_blank">APEX connect</a> last week in Berlin, I realized once again how important events like this are.</p> <p><span id="more-1336"></span></p> <p>Having skipped some conferences in the past 6 months due to our second sons arrival, APEX connect was a welcome change to dirty diapers ;-)</p> <p>Anyway, I particular want to point out the importance of getting out of your usual environment (office) and meet other people working with similar technologies. Everyone you meet at events like a conference or a meetup can be a spring of inspiration.</p> <p>So please, get out and don&#8217;t be shy to just talk to anyone you see there. Everyone at conferences is there to meet others and wants to be approached. This is the same for speakers, for APEX Dev team members, and for attendees.</p> <p>It&#8217;s always very inspiring to hear how others use Oracle APEX, where they struggle, and where they succeed.</p> <p>And don&#8217;t think you haven&#8217;t got anything of interest to share. You do, trust me. Everything has something interesting to share, even if it is not directly related with some technical facts. Example? I can open a bottle of beer with a sheet of paper. A very helpful gift and a great conversation opener ;-)</p> <p>Cheers!</p> <p>Hope to see you at any of the following events in the near future:</p> <ul> <li><a href="http://www.aoug.at/Event/441" target="_blank">AOUG Konferenz</a></li> <li><a href="http://kscope17.com/" target="_blank">ODTUG Kscope</a></li> <li><a href="http://www.sioug.si/index.php/sioug-2017-javasi-17/oddaja-prispevka" target="_blank">SIOUG Conference</a></li> <li><a href="http://2017.hroug.hr/eng/" target="_blank">HrOUG Conference</a></li> <li><a href="https://www.oracle.com/openworld/index.html" target="_blank">Oracle Open World</a></li> <li><a href="https://2017.doag.org/de/home/" target="_blank">DOAG Jahreskonferenz</a></li> <li><a href="http://tech17.ukoug.org/default.asp?p=16612" target="_blank">UKOUG tech17</a></li> <li>and many many others</li> <li>Or just one of many <a href="https://apex.world/ords/f?p=100:220:::NO:::" target="_blank">meetup groups</a>, like the one in <a href="https://www.meetup.com/orclapex-Vienna/" target="_blank">Vienna</a></li> </ul> <p>&nbsp;</p> <img src="http://www.oracle-and-apex.com/blog/?ak_action=api_record_view&id=1336&type=feed" alt="" /> Peter Raganitsch http://www.oracle-and-apex.com/?p=1336 Wed May 17 2017 03:51:31 GMT-0400 (EDT) APEX 5.1 Interactive grid row processing and dynamic actions http://lschilde.blogspot.com/2017/05/apex-51-interactive-grid-row-processing.html <div dir="ltr" style="text-align: left;" trbidi="on"><div dir="ltr" style="text-align: left;" trbidi="on"><div dir="ltr" style="text-align: left;" trbidi="on"><div dir="ltr" style="text-align: left;" trbidi="on"><div dir="ltr" style="text-align: left;" trbidi="on"><h2 style="text-align: justify;"><span style="font-family: &quot;verdana&quot; , sans-serif;">APEX 5.1 <span style="font-family: &quot;verdana&quot; , sans-serif;">IG processing</span></span></h2><h3 style="text-align: left;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">Interactive grid row processing and dynamic actions</span></span></h3><h4 style="text-align: left;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">IG <span style="font-family: &quot;verdana&quot; , sans-serif;">r</span>ow based DA tips</span></span></span> </span></h4><div style="text-align: justify;"><div style="text-align: justify;"><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;">You started working with I<span style="font-family: &quot;verdana&quot; , sans-serif;">G and w<span style="font-family: &quot;verdana&quot; , sans-serif;">anted to implement dynamic actions wi<span style="font-family: &quot;verdana&quot; , sans-serif;">thin<span style="font-family: &quot;verdana&quot; , sans-serif;"> you<span style="font-family: &quot;verdana&quot; , sans-serif;">r IG report region. </span></span></span></span></span></span></span><br /><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;">Idea here is<span style="font-family: &quot;verdana&quot; , sans-serif;">: You have a column in IG that triggers a chang<span style="font-family: &quot;verdana&quot; , sans-serif;">e an<span style="font-family: &quot;verdana&quot; , sans-serif;">d DA fires and retrie<span style="font-family: &quot;verdana&quot; , sans-serif;">ves <span style="font-family: &quot;verdana&quot; , sans-serif;">data from database before display<span style="font-family: &quot;verdana&quot; , sans-serif;">ing them <span style="font-family: &quot;verdana&quot; , sans-serif;">in your row columns. </span></span></span></span></span></span></span></span></span><br /><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;">There is a mini catch that I had issues f<span style="font-family: &quot;verdana&quot; , sans-serif;">iguring out - why and where hence this post.&nbsp;</span></span></span><br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-8T2n-6fzQRA/WQwcxDapPmI/AAAAAAAALHA/b0UFbf8h0BEKMDwmIhnpnyIST9Cr0pubwCLcB/s1600/Demo_IG_DA.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="148" src="https://1.bp.blogspot.com/-8T2n-6fzQRA/WQwcxDapPmI/AAAAAAAALHA/b0UFbf8h0BEKMDwmIhnpnyIST9Cr0pubwCLcB/s640/Demo_IG_DA.gif" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"></div><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;">If you star<span style="font-family: &quot;verdana&quot; , sans-serif;">t g<span style="font-family: &quot;verdana&quot; , sans-serif;">oogling<span style="font-family: &quot;verdana&quot; , sans-serif;"> about APEX I<span style="font-family: &quot;verdana&quot; , sans-serif;">G most likely you will end up in good hands of John <span style="font-family: &quot;verdana&quot; , sans-serif;">S</span>nyder and his "how to hack APEX IG" series. Excellent material and heaps of <span style="font-family: &quot;verdana&quot; , sans-serif;">useful things you might need along the way.&nbsp;</span></span></span></span></span></span></span><br /><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">The<span style="font-family: &quot;verdana&quot; , sans-serif;"> one that was of most help to me was <a href="https://ruepprich.wordpress.com/2017/03/23/bulk-updating-interactive-grid-records/">Christoph's</a></span> blog. Gives you a basic idea how to manipulate IG rows and change values. </span></span></span></span></span></span></span><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><br /></span></span></span></span></span></span></span><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">Now that you have all the material it is time <span style="font-family: &quot;verdana&quot; , sans-serif;">for implementation.&nbsp;</span></span></span></span></span></span></span></span><br /><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">First thing is to create your interactive grid (incl<span style="font-family: &quot;verdana&quot; , sans-serif;">uding a static ID</span>).<span style="font-family: &quot;verdana&quot; , sans-serif;"> </span>Second step select a column on w<span style="font-family: &quot;verdana&quot; , sans-serif;">hich you want a DA to trigger. <span style="font-family: &quot;verdana&quot; , sans-serif;">Create a DA with JS below.</span> Third step is creating a page pro<span style="font-family: &quot;verdana&quot; , sans-serif;">cess that will return values from database.&nbsp;</span></span></span></span></span></span></span></span></span></span><br /><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">My process GETDOCINFO is:&nbsp;</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><br /><blockquote class="tr_bq"><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">DECLARE<br />&nbsp;&nbsp; r_doc_info varchar2(150);&nbsp;&nbsp;&nbsp;&nbsp; <br />BEGIN<br />-- This should be getting the cached document info<br />r_doc_info:= get_info(APEX_APPLICATION.g_x01);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --BUILD JSON OBJECT<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; apex_json.open_object;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; apex_json.open_array('item');<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; apex_json.open_object;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; apex_json.write('id', 'DOC_ID');<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; apex_json.write('docID', </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">r_doc_info</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; apex_json.close_object;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; apex_json.close_array;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; apex_json.close_object;<br />&nbsp;&nbsp; <br />EXCEPTION when others then<br />&nbsp;&nbsp; htp.p('"ERROR"');<br />END;</span></span></span></span></span></span></span></span></span> </span></span></span></span></span></span></span></span></blockquote><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">As you can see it is pretty basic example.&nbsp;</span><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-Z70hhSe5r5A/WQwe2QK3p-I/AAAAAAAALHM/GHmvqKfI5wctezeBmeESM9XG1tvoxA20QCLcB/s1600/Capture_IG.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="204" src="https://1.bp.blogspot.com/-Z70hhSe5r5A/WQwe2QK3p-I/AAAAAAAALHM/GHmvqKfI5wctezeBmeESM9XG1tvoxA20QCLcB/s320/Capture_IG.PNG" width="320" /></a></div><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">Now to the JavaScript <span style="font-family: &quot;verdana&quot; , sans-serif;">bit.</span></span><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">//SET IG ROW details to be used in a fnc<br />//if this is removed IG row/model can not be retrieved<br /><span style="background-color: yellow;">var p_element = this.triggeringElement;<br />var p_rowId = $(this.triggeringElement).closest('tr').data('id');</span><br />var dID;<br /><br />apex.server.process(<br />&nbsp;&nbsp;&nbsp; "GETDOCINFO", {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x01: this.triggeringElement.value //PASSING IN doc_ref<br />&nbsp;&nbsp;&nbsp; }, {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; success: function(data) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //console.log(data)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var i, item;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp; // this handles the page items to return set by the server process<br />&nbsp;// data result is object with property item which is an array of page item id, value pairs<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (data &amp;&amp; data.item) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (i = 0; i &lt; data.item.length; i++) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; item = data.item[i];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dID = item.docID;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } //end if&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Update IG columns<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set_IG(dID);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } //success<br />&nbsp;&nbsp;&nbsp; }<br />);</span></span></span><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"></span></span></span><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"></span></span></span><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">//notice how this is different from example in blog&nbsp; <span style="font-family: &quot;verdana&quot; , sans-serif;">&nbsp; </span><br />function set_IG (pID){<br />&nbsp;&nbsp;&nbsp; //Get the link element that was clicked<br />&nbsp;&nbsp;&nbsp; var $te = $(p_element);<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; //Identify the particular interactive grid<br />&nbsp;&nbsp;&nbsp; var ig$ = apex.region("event_docs").widget();<br />&nbsp;&nbsp;&nbsp; //here you have to change to use static ID of your region<br />&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">&nbsp;&nbsp;&nbsp; //Fetch the model for the interactive grid<br />&nbsp;&nbsp;&nbsp; var model = ig$.interactiveGrid("getViews","grid").model;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">&nbsp;&nbsp;&nbsp; //Fetch the record for the particular rowId<br />&nbsp;&nbsp;&nbsp; var record = model.getRecord(p_rowId);<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; model.setValue(record,"DOCUMENT_ID", pID);&nbsp;&nbsp;&nbsp; <br />}</span> </span></span><br /><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">Only <span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">thing to keep in mind is in y<span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">ellow lines. Without keeping a reference to a row an<span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">d element triggering this DA you may start rec<span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">eive errors in your browser cons<span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">ole toString property not found.</span></span></span></span></span></span><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"> Comparing to Christopher<span style="font-family: &quot;verdana&quot; , sans-serif;">'s example there is <span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">very little difference but <span style="font-family: &quot;verdana&quot; , sans-serif;">original version simply was not <span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">working for me when being called from <span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">ajax callback as in<span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">formation about the row and model would be lost along the way</span>.&nbsp;</span></span></span></span></span></span><br /><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">A<span style="font-family: &quot;verdana&quot; , sans-serif;">s example this J<span style="font-family: &quot;verdana&quot; , sans-serif;">S</span> bel<span style="font-family: &quot;verdana&quot; , sans-serif;">ow </span>would not work:&nbsp;</span></span></span></span></span></span></span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;font-size: 12.0pt;">apex.server.process(<br />&nbsp;&nbsp;&nbsp; "GETDOCINFO", {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x01: this.triggeringElement.value //PASSING IN doc_ref<br />&nbsp;&nbsp;&nbsp; }, {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; success: function(data) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //console.log(data)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var i, item;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (data &amp;&amp; data.item) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var dID,dName,dUrl;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (i = 0; i &lt; data.item.length; i++) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; item = data.item[i];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dID = item.value;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set_IG(dID);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } //end if&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } //success<br />&nbsp;&nbsp;&nbsp; }<br />);<br /><br />function set_IG (pID){<br /><br />&nbsp;&nbsp;&nbsp; //Get the element that was changed<br />&nbsp;&nbsp;&nbsp; var $te = $(this.triggeringElement);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp; //Get the ID of the row<br />&nbsp;&nbsp;&nbsp; var rowId = $te.closest('tr').data('id');<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp; //Identify the particular interactive grid<br />&nbsp;&nbsp;&nbsp; var ig$ = apex.region("event_docs").widget();<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp; //Fetch the model for the interactive grid<br />&nbsp;&nbsp;&nbsp; var model = ig$.interactiveGrid("getViews","grid").model;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp; //Fetch the record for the particular rowId<br />&nbsp;&nbsp;&nbsp; var record = model.getRecord(rowId);<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; model.setValue(record,"EVENT_DOCUMENT_ID", pID);&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; <br />} </span><br /><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">Alternative approach would be to base your JS on rows sele<span style="font-family: &quot;verdana&quot; , sans-serif;">cted and do <span style="font-family: &quot;verdana&quot; , sans-serif;">processing from there<span style="font-family: &quot;verdana&quot; , sans-serif;">. <span style="font-family: &quot;verdana&quot; , sans-serif;">Something like:&nbsp;</span></span></span></span></span></span></span></span></span></span><br /><br /><div style="text-align: left;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;font-size: 12.0pt;">var view = apex.region("event_docs").widget().interactiveGrid(" getViews", "grid");<br />var records = view.getSelectedRecords(); <br />//console.log(records); <br />//console.log(records[0][1]);<br />//difference between input type and object like LOV<br />for ( i = 0; i &lt; records.length; i++) {<br />&nbsp;&nbsp;&nbsp; //if dealing with LOV for example<br />&nbsp;&nbsp;&nbsp; console.log(view.model.getValue(records[i], "DOC_REFERENCE").v);<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; //if dealing with regular text type for example<br />&nbsp;&nbsp;&nbsp; console.log(view.model.getValue(records[i], "DOCUMENT_ID"));<br />} </span></div><br /><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">Please note that there are heaps of <span style="font-family: &quot;verdana&quot; , sans-serif;">different ways how to <span style="font-family: &quot;verdana&quot; , sans-serif;">access data in IG model</span> <span style="font-family: &quot;verdana&quot; , sans-serif;">aim was only to bring to attention <span style="font-family: &quot;verdana&quot; , sans-serif;">and what to keep an eye on.</span></span></span></span></span></span></span></span></span></div></div></div></div></div><div><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">This is all for now. Over and out.</span><br /><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-size: 12.0pt;">&nbsp; </span></span></div></div><div class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-size: 12.0pt;">Thanks, </span></span></div><div class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-size: 12.0pt;">SLino</span></span></div><br /></div> SLino tag:blogger.com,1999:blog-8185384792158425670.post-8461983579949451626 Wed May 17 2017 03:03:00 GMT-0400 (EDT) Migrating data from on-primeses to cloud http://jaffardba.blogspot.com/2017/05/migrating-data-from-on-primeses-to-cloud.html <div dir="ltr" style="text-align: left;" trbidi="on">No doubt everyone talks about cloud technologies and certainly could holds the future for various reasons. Oracle doesn't want to left behind in the competition and put the top gear towards cloud offerings.&nbsp; <br /><br />This blog explore various Oracle options to migrate on-premises data to cloud. Typically, when a database is created on cloud, the next challenging factor is loading the data to cloud. The good thing about data migration is that the methods and procedures remain the same as you were doing earlier. All data migration constraints still applied, like the following:<br /><ul style="text-align: left;"><li>OS versions of on-premises and cloud machine</li><li>DB versions</li><li>Character set</li><li>DB Size</li><li>data types</li><li>Network bandwidth </li></ul>&nbsp;The very known and DBA friendly popular Oracle methods are still valid for cloud data migration too :<br /><ul style="text-align: left;"><li>Logical method (conventional data pumps)</li><li>TTS</li><li>Cross platform TTS</li><li>Unplugging/Plugging/Cloning/Remote Cloning of PDBs</li><li>SQL Developer and SQL Loader</li><li>Golden Gate</li></ul>Usually, you take the data backup, choosing the method which suits your requirements,&nbsp; and upload the backup files to the cloud machine where the database is hosted. Please consider good network and internet speed to expedite the data migration process.<br /><br />In the example below, data pump (dumpfile) is copied from the on-premises machine to the cloud host machine:<br /><br /><img alt="" src="data:image/png;base64,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" /><br />Once the backup files are transferred to the cloud host, you use the typically method to do the data restore. <br /><br />For more options, read the URL below:<br /><br /><a href="https://docs.oracle.com/en/cloud/paas/database-dbaas-cloud/csdbi/mig-12c-non-cdb-12c.html">https://docs.oracle.com/en/cloud/paas/database-dbaas-cloud/csdbi/mig-12c-non-cdb-12c.html</a><br /><br />For example using SQL Developer and SQL Loading, read the URLs below:<br /><br /><a href="http://www.oracle.com/webfolder/technetwork/tutorials/obe/cloud/dbaas/OU/MigratingToDBaaS/LoadingData/LoadingData.html">http://www.oracle.com/webfolder/technetwork/tutorials/obe/cloud/dbaas/OU/MigratingToDBaaS/LoadingData/LoadingData.html</a><br /><a href="http://docs.oracle.com/cloud/latest/dbcs_schema/CSDBU/GUID-3B14CF7A-637B-4019-AAA7-A6DC5FF3D2AE.htm#CSDBU179">http://docs.oracle.com/cloud/latest/dbcs_schema/CSDBU/GUID-3B14CF7A-637B-4019-AAA7-A6DC5FF3D2AE.htm#CSDBU179</a><br /><br /><a href="http://www.oracle.com/webfolder/technetwork/tutorials/obe/cloud/schema/50/DataLoad_SQLDev/DataLoad_SQLDev.html">http://www.oracle.com/webfolder/technetwork/tutorials/obe/cloud/schema/50/DataLoad_SQLDev/DataLoad_SQLDev.html</a><br /><br />Golden Gate<br /><a href="http://www.oracle.com/webfolder/technetwork/tutorials/obe/cloud/ggcs/Replicate_On-Premises_Data_to_Cloud_with_OGGCS/Replicate_on_premises_data_to_cloud_with_Oracle_GoldenGate_cloud_service.html">http://www.oracle.com/webfolder/technetwork/tutorials/obe/cloud/ggcs/Replicate_On-Premises_Data_to_Cloud_with_OGGCS/Replicate_on_premises_data_to_cloud_with_Oracle_GoldenGate_cloud_service.html</a><br /><br /><br /><br /></div> The Human Fly tag:blogger.com,1999:blog-19771507.post-6818726503842617592 Mon May 15 2017 15:37:00 GMT-0400 (EDT) REST and APEX 5.1: Pagination https://blogs.oracle.com/apex/rest-and-apex-51%3A-pagination <p style="color: rgb(0, 0, 0); font-size: 12pt; font-family: Arial, Helvetica, sans-serif; line-height: 16pt; margin-top: 5mm;">More and more Application Express developers are faced with the requirement to integrate REST services or HTTP/JSON data feeds into their applications. Application Express provides great support for SOAP web services, but for REST services using JSON to exchange data, the built-in functionality is limited. For instance, all the JSON parsing has to be done manually by employing PL/SQL code or SQL functions.</p> <p style="color: rgb(0, 0, 0); font-size: 12pt; font-family: Arial, Helvetica, sans-serif; line-height: 16pt; margin-top: 5mm;">Oracle Application Express contains the&nbsp;<strong>REST Client Assistant</strong>, packaged application which is there to help the developer in integrating REST services into their applications.</p> <p style="color: rgb(0, 0, 0); font-size: 12pt; font-family: Arial, Helvetica, sans-serif; line-height: 16pt; margin-top: 5mm;"><img alt="" src="https://cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/fbd61610-2cfe-4a98-b117-958129af0c39/Image/d1274dea62f980f64ee3fdbc07b4d643/image01.png" style="width: 926px; height: 480px;" /></p> <p style="color: rgb(0, 0, 0); font-size: 12pt; font-family: Arial, Helvetica, sans-serif; line-height: 16pt; margin-top: 5mm;">&nbsp;</p> <p style="color: rgb(0, 0, 0); font-size: 16px; font-family: Arial, Helvetica, sans-serif; line-height: 16pt; margin-top: 5mm;">In the first part of the series (<span><a href="http://blogs.oracle.com/apex/rest-services-and-application-express-51-part-1">REST Services and Application Express 5.1 - Part 1</a></span>) REST Client Assistant was introduced and it was shown how to use it to generate SQL und PL/SQL code and to integrate an external REST service into an APEX application and to display its data in an APEX report. Today we&#39;re taking the next step: Typical REST services return their data not all at once (which would be problematic for larger data sets), but in pages.&nbsp;</p> <p style="color: rgb(0, 0, 0); font-size: 16px; font-family: Arial, Helvetica, sans-serif; line-height: 16pt; margin-top: 5mm;">A REST service returning its data in pages can be created within only minutes: All you need is the Oracle Database (as an APEX developer this should not really be an issue) and <a href="http://www.oracle.com/technetwork/developer-tools/rest-data-services/overview/index.html" style="font-family: Arial, Helvetica, sans-serif; font-size: 16px;" target="_blank">Oracle REST Data Services</a><span style="color: rgb(0, 0, 0); font-family: Arial, Helvetica, sans-serif; font-size: 16px;">&nbsp;(ORDS). With only two PL/SQL calls you create a REST interface for any table in your database schema. You can test this REST service using a browser, one of the many publicly available REST Client applications or you can explore it using the <strong>REST Client Assistant</strong> packaged application.</span></p> <p style="color: rgb(0, 0, 0); font-size: 16px; font-family: Arial, Helvetica, sans-serif; line-height: 16pt; margin-top: 5mm;">Our <a href="https://apex.oracle.com/pls/apex/germancommunities/apexcommunity/tipp/6081/index-en.html" target="_blank">latest article</a> shows not only how to access that REST service from an APEX application, but also how to implement pagination for the REST service - within your APEX application. Click a button on your APEX page, and have the application request the next page of REST data. Use this to walk through the complete result data of your REST service - back and forth.</p> <p style="color: rgb(0, 0, 0); font-size: 16px; font-family: Arial, Helvetica, sans-serif; line-height: 16pt; margin-top: 5mm;">Finally you&#39;ll learn how REST Client Assistant can generate a <strong>table function</strong> for you which grabs the complete result set from the REST service - the function walks through all the pages automatically returning data from the REST service like rows from a local table. All code is generated for you - you can use it as-is or dive into it and extend it as you wish.</p> <p style="color: rgb(0, 0, 0); font-size: 16px; font-family: Arial, Helvetica, sans-serif; line-height: 16pt; margin-top: 5mm;"><a href="https://apex.oracle.com/pls/apex/germancommunities/apexcommunity/tipp/6081/index-en.html">Read the full article</a></p> Carsten Czarski https://blogs.oracle.com/apex/rest-and-apex-51%3A-pagination Mon May 15 2017 09:28:47 GMT-0400 (EDT) REST and APEX 5.1: Pagination https://blogs.oracle.com/apex/rest-and-apex-51%3A-pagination <p style="color: rgb(0, 0, 0); font-size: 12pt; font-family: Arial, Helvetica, sans-serif; line-height: 16pt; margin-top: 5mm;">More and more Application Express developers are faced with the requirement to integrate REST services or HTTP/JSON data feeds into their applications. Application Express provides great support for SOAP web services, but for REST services using JSON to exchange data, the built-in functionality is limited. For instance, all the JSON parsing has to be done manually by employing PL/SQL code or SQL functions.</p> <p style="color: rgb(0, 0, 0); font-size: 12pt; font-family: Arial, Helvetica, sans-serif; line-height: 16pt; margin-top: 5mm;">Oracle Application Express contains the&nbsp;<strong>REST Client Assistant</strong>, packaged application which is there to help the developer in integrating REST services into their applications.</p> <p style="color: rgb(0, 0, 0); font-size: 12pt; font-family: Arial, Helvetica, sans-serif; line-height: 16pt; margin-top: 5mm;"><img alt="" src="https://cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/fbd61610-2cfe-4a98-b117-958129af0c39/Image/d1274dea62f980f64ee3fdbc07b4d643/image01.png" style="width: 926px; height: 480px;" /></p> <p style="color: rgb(0, 0, 0); font-size: 12pt; font-family: Arial, Helvetica, sans-serif; line-height: 16pt; margin-top: 5mm;">&nbsp;</p> <p style="color: rgb(0, 0, 0); font-size: 16px; font-family: Arial, Helvetica, sans-serif; line-height: 16pt; margin-top: 5mm;">In the first part of the series (<span><a href="http://blogs.oracle.com/apex/rest-services-and-application-express-51-part-1">REST Services and Application Express 5.1 - Part 1</a></span>) REST Client Assistant was introduced and it was shown how to use it to generate SQL und PL/SQL code and to integrate an external REST service into an APEX application and to display its data in an APEX report. Today we&#39;re taking the next step: Typical REST services return their data not all at once (which would be problematic for larger data sets), but in pages.&nbsp;</p> <p style="color: rgb(0, 0, 0); font-size: 16px; font-family: Arial, Helvetica, sans-serif; line-height: 16pt; margin-top: 5mm;">A REST service returning its data in pages can be created within only minutes: All you need is the Oracle Database (as an APEX developer this should not really be an issue) and <a href="http://www.oracle.com/technetwork/developer-tools/rest-data-services/overview/index.html" style="font-family: Arial, Helvetica, sans-serif; font-size: 16px;" target="_blank">Oracle REST Data Services</a><span style="color: rgb(0, 0, 0); font-family: Arial, Helvetica, sans-serif; font-size: 16px;">&nbsp;(ORDS). With only two PL/SQL calls you create a REST interface for any table in your database schema. You can test this REST service using a browser, one of the many publicly available REST Client applications or you can explore it using the <strong>REST Client Assistant</strong> packaged application.</span></p> <p style="color: rgb(0, 0, 0); font-size: 16px; font-family: Arial, Helvetica, sans-serif; line-height: 16pt; margin-top: 5mm;">Our <a href="https://apex.oracle.com/pls/apex/germancommunities/apexcommunity/tipp/6081/index-en.html" target="_blank">latest article</a> shows not only how to access that REST service from an APEX application, but also how to implement pagination for the REST service - within your APEX application. Click a button on your APEX page, and have the application request the next page of REST data. Use this to walk through the complete result data of your REST service - back and forth.</p> <p style="color: rgb(0, 0, 0); font-size: 16px; font-family: Arial, Helvetica, sans-serif; line-height: 16pt; margin-top: 5mm;">Finally you&#39;ll learn how REST Client Assistant can generate a <strong>table function</strong> for you which grabs the complete result set from the REST service - the function walks through all the pages automatically returning data from the REST service like rows from a local table. All code is generated for you - you can use it as-is or dive into it and extend it as you wish.</p> <p style="color: rgb(0, 0, 0); font-size: 16px; font-family: Arial, Helvetica, sans-serif; line-height: 16pt; margin-top: 5mm;"><a href="https://apex.oracle.com/pls/apex/germancommunities/apexcommunity/tipp/6081/index-en.html">Read the full article</a></p> Carsten Czarski https://blogs.oracle.com/apex/rest-and-apex-51%3A-pagination Mon May 15 2017 09:28:47 GMT-0400 (EDT) REST und APEX 5.1: Pagination https://blogs.oracle.com/apexcommunity_deutsch/rest-services-und-application-express-51-teil-2 <p style="color: rgb(0, 0, 0); font-size: 12pt; font-family: Arial, Helvetica, sans-serif; line-height: 16pt; margin-top: 5mm;">Die Anforderung, mit REST Services zu arbeiten, haben auch Application Express-Entwickler mehr und mehr auf dem Schreibtisch. Zwar k&ouml;nnen&nbsp;<span style="font-size: 12pt; line-height: 16pt; font-style: italic;">Web Service Referenzen</span>&nbsp;f&uuml;r REST Services in den&nbsp;<span style="font-size: 12pt; line-height: 16pt; font-style: italic;">Gemeinsamen Komponenten</span>&nbsp;eingerichtet werden; die Unterst&uuml;tzung ist jedoch recht limitiert: So muss die JSON-Antwort, die der REST Service sendet, typischerweise manuell geparst und verarbeitet werden.</p> <p style="color: rgb(0, 0, 0); font-size: 12pt; font-family: Arial, Helvetica, sans-serif; line-height: 16pt; margin-top: 5mm;">Oracle Application Express enth&auml;lt die Packaged Application <strong>REST Client Assistant</strong>, welche dem Entwickler dabei hilft, REST Services in die APEX-Anwendung zu integrieren.</p> <p style="color: rgb(0, 0, 0); font-size: 12pt; font-family: Arial, Helvetica, sans-serif; line-height: 16pt; margin-top: 5mm;"><img alt="" src="https://cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/fbd61610-2cfe-4a98-b117-958129af0c39/Image/d1274dea62f980f64ee3fdbc07b4d643/image01.png" style="width: 926px; height: 480px;" /></p> <p style="color: rgb(0, 0, 0); font-size: 12pt; font-family: Arial, Helvetica, sans-serif; line-height: 16pt; margin-top: 5mm;">&nbsp;</p> <p style="color: rgb(0, 0, 0); font-size: 16px; font-family: Arial, Helvetica, sans-serif; line-height: 16pt; margin-top: 5mm;">Im ersten Teil des Artikels (<span><a href="http://blogs.oracle.com/apexcommunity_deutsch/rest-services-und-application-express-51-teil-1">REST Services und Application Express 5.1 - Teil 1</a>) </span>wurde vorgestellt, wie man mit dem REST Client Assistant PL/SQL und SQL Code erzeugen kann, so dass die Daten des REST Service in einer Application Express-Anwendung dargestellt oder verarbeitet werden k&ouml;nnen. In diesem Artikel machen wir den n&auml;chsten Schritt: Viele REST-Services liefern gro&szlig;e Ergebnismengen nicht komplett, sondern seitenweise aus.</p> <p style="color: rgb(0, 0, 0); font-size: 16px; font-family: Arial, Helvetica, sans-serif; line-height: 16pt; margin-top: 5mm;"><span style="color: rgb(0, 0, 0); font-family: Arial, Helvetica, sans-serif; font-size: 16px;">Ein Beispiel f&uuml;r einen REST Service, der mit gr&ouml;&szlig;eren Datenmengen arbeitet, l&auml;sst sich schnell in der eigenen Umgebung erstellen. Sie brauchen dazu lediglich eine Tabelle mit mehr als den 14 Zeilen, wie sie die wohlbekannte&nbsp;</span><span style="font-family: Arial, Helvetica, sans-serif; font-size: 16px; line-height: 16pt; font-weight: bold; color: rgb(0, 0, 0);">EMP</span><span style="color: rgb(0, 0, 0); font-family: Arial, Helvetica, sans-serif; font-size: 16px;">&nbsp;Tabelle enth&auml;lt. Einige hundert sollten es schon sein. Im Zweifelsfalle generieren Sie sich einfach eine solche.&nbsp;Den REST Service stellen Sie dann mit Hilfe von&nbsp;</span><a href="http://www.oracle.com/technetwork/developer-tools/rest-data-services/overview/index.html" target="_blank">Oracle REST Data Services</a><span style="color: rgb(0, 0, 0); font-family: Arial, Helvetica, sans-serif; font-size: 16px;">&nbsp;(ORDS) bereit.</span></p> <p style="color: rgb(0, 0, 0); font-size: 16px; font-family: Arial, Helvetica, sans-serif; line-height: 16pt; margin-top: 5mm;">Lesen Sie in <a href="https://apex.oracle.com/pls/apex/germancommunities/apexcommunity/tipp/6081/index.html" target="_blank">unserem aktuellen Tipp</a>, wie Sie einen solchen REST Service in Ihre APEX-Anwendung nicht nur einfach integrieren, sondern auch das Vor- und Zur&uuml;ckbl&auml;ttern in der Ergebnismenge unterst&uuml;tzen k&ouml;nnen. Bl&auml;ttert der Endbenutzer auf der APEX-Seite vor, so wird die n&auml;chste Seite <i>vom</i>&nbsp;REST-Service abgerufen, bl&auml;ttert er zur&uuml;ck, so wird auch diese Seite vom REST Service geholt. Lassen Sie sich schlie&szlig;lich vom REST Client Assistant eine <strong>Table Function</strong> generieren, welche die gesamte Ergebnismenge f&uuml;r Sie abruft.</p> <p style="color: rgb(0, 0, 0); font-size: 16px; font-family: Arial, Helvetica, sans-serif; line-height: 16pt; margin-top: 5mm;">&nbsp;</p> Carsten Czarski https://blogs.oracle.com/apexcommunity_deutsch/rest-services-und-application-express-51-teil-2 Mon May 15 2017 09:13:00 GMT-0400 (EDT) My opinion on Tabs vs Spaces http://vmorneau.me/tabs-vs-spaces/ <p><em>Disclaimer: This is just my opinion and if I am to work on your project, I would follow your standards.</em></p> <p>On this year <a href="https://insights.stackoverflow.com/survey/2017#work-tabs-or-spaces">Stack Overflow survey</a>, this never ending war showed some love in favor of Tabs.</p> <p><img src="http://vmorneau.me/content/images/2017/05/tabsspaces.png" alt=""></p> <p>I was a big Spaces user until a few months ago. </p> <p><strong>I now use Tabs and I don't think I'll switch back anytime soon.</strong></p> <h4 id="why">Why?</h4> <p>Like many devs, I've always been very thorough with my indentation style. I used to spend a lot of time indenting stuff.</p> <p>I'm a consultant in a consulting firm, so I get my hands on other people's code <strong>all the time</strong>. Trust me, not everyone thinks that consistent indentation is important...</p> <p>It became crystal clear to me shortly after I enabled the indent guide on my code editor. This truly reveals your coworkers indentation style.</p> <h6 id="1spacesareforpresentation">#1 Spaces are for presentation</h6> <p>With spaces, it's easier to achieve something like: <br> <img src="http://vmorneau.me/content/images/2017/05/space-align-1.png" alt=""></p> <p>To have done that for a long time myself, I find that this kind in indentation leads to wasted time. </p> <h6 id="2howmanyspaces">#2 How many spaces?</h6> <p>Are you using 2, 3 or 4 spaces per level? I tried them all for several months/years. Each had their advantages not none was perfect. 4 was my favorite.</p> <p>Using Spaces in a team makes inconsistency easier.</p> <h6 id="3tabsindentationiseasierforcollaboration">#3 Tabs indentation is easier for collaboration</h6> <p>1 tab = 1 level of indentation, regardless of your number of spaces preference. </p> <p>Let the others decide the width of that indentation.</p> <hr> <h6 id="thisismytypicalindentationstylenow">This is my typical indentation style now:</h6> <p><img src="http://vmorneau.me/content/images/2017/05/tabs-indent.png" alt=""></p> <p>Whether you use Tabs or Spaces doesn't make you a better or worst developer. Lack of consistency does!</p> <p>Hell, maybe I'll switch back to Spaces in a few years. Who knows.</p> <p>Oh and watch this...</p> <iframe width="560" height="315" src="https://www.youtube.com/embed/SsoOG6ZeyUI" frameborder="0" allowfullscreen></iframe> Vincent Morneau 4c730696-e2e0-4501-861c-ec5436845b43 Mon May 15 2017 07:57:25 GMT-0400 (EDT) Create a NodeJS Application to connect to Exadata Express https://jes.blogs.shellprompt.net/2017/05/15/create-a-nodejs-application-to-connect-to-exadata-express/ <p>Anyone who knows me, knows I&#8217;m a big NodeJS geek, so I thought I&#8217;d see how easily I could create a NodeJS application to connect to my Exadata Express instance.</p> <p>First of all, let&#8217;s create a basic Node application with the <a href="https://github.com/oracle/node-oracledb">node-oracledb driver</a> installed.</p> <pre class="brush: bash; title: ; notranslate"> bash-3.2$ pwd /Users/jes/Work/Node/oracle bash-3.2$ npm init -y Wrote to /Users/jes/Work/Node/oracle/package.json: { &quot;name&quot;: &quot;oracle&quot;, &quot;version&quot;: &quot;1.0.0&quot;, &quot;description&quot;: &quot;&quot;, &quot;main&quot;: &quot;index.js&quot;, &quot;scripts&quot;: { &quot;test&quot;: &quot;echo \&quot;Error: no test specified\&quot; &amp;&amp; exit 1&quot; }, &quot;keywords&quot;: [], &quot;author&quot;: &quot;&quot;, &quot;license&quot;: &quot;ISC&quot; } </pre> <p>The installation instructions for the Oracle Node driver are pretty comprehensive, but at a high level we need to &#8211;</p> <ul> <li>Set OCI_LIB_DIR andOCI_INC_DIR environment variables to point to a valid instant client location</li> <li>Run npm install oracledb</li> </ul> <p>On my Mac I already have the 12c Instant Client installed &#8211;</p> <pre class="brush: bash; title: ; notranslate"> bash-3.2$ export OCI_LIB_DIR=/Users/jes/tools/instantclient/instantclient_12_1 bash-3.2$ export OCI_INC_DIR=/Users/jes/tools/instantclient/instantclient_12_1/sdk/include </pre> <p>So I can just go ahead and run the npm install</p> <pre class="brush: bash; title: ; notranslate"> bash-3.2$ npm install oracledb --save &gt; oracledb@1.13.1 install /Users/jes/Work/Node/oracle/node_modules/oracledb &gt; node-gyp rebuild gyp WARN download NVM_NODEJS_ORG_MIRROR is deprecated and will be removed in node-gyp v4, please use NODEJS_ORG_MIRROR gyp WARN download NVM_NODEJS_ORG_MIRROR is deprecated and will be removed in node-gyp v4, please use NODEJS_ORG_MIRROR gyp WARN download NVM_NODEJS_ORG_MIRROR is deprecated and will be removed in node-gyp v4, please use NODEJS_ORG_MIRROR CXX(target) Release/obj.target/oracledb/src/njs/src/njsOracle.o CXX(target) Release/obj.target/oracledb/src/njs/src/njsPool.o CXX(target) Release/obj.target/oracledb/src/njs/src/njsConnection.o CXX(target) Release/obj.target/oracledb/src/njs/src/njsResultSet.o CXX(target) Release/obj.target/oracledb/src/njs/src/njsMessages.o CXX(target) Release/obj.target/oracledb/src/njs/src/njsIntLob.o ../src/njs/src/njsIntLob.cpp:1711:3: warning: cannot refer to a non-static member from the handler of a constructor function try block [-Wexceptions] cleanup(); ^ 1 warning generated. CXX(target) Release/obj.target/oracledb/src/dpi/src/dpiEnv.o CXX(target) Release/obj.target/oracledb/src/dpi/src/dpiEnvImpl.o ../src/dpi/src/dpiEnvImpl.cpp:117:3: warning: cannot refer to a non-static member from the handler of a constructor function try block [-Wexceptions] cleanup(); ^ &lt;OUTPUT OMITTED&gt; clang: warning: libstdc++ is deprecated; move to libc++ with a minimum deployment target of OS X 10.9 [-Wdeprecated] oracle@1.0.0 /Users/jes/Work/Node/oracle └─┬ oracledb@1.13.1 └── nan@2.5.1 npm WARN oracle@1.0.0 No description npm WARN oracle@1.0.0 No repository field. bash-3.2$ </pre> <p>I did get some warnings, but I&#8217;ve done this enough times to know that this successfully installed it.</p> <p>Now lets create a basic Node application that connects to a local XE instance (just to check connectivity).</p> <div> <div> <pre class="brush: jscript; title: ; notranslate"> var oracledb = require('oracledb'); oracledb.getConnection({ user: 'jes', password: 'password', connectString: 'localhost:1521/xe' }, function(err, connection) { if (err) { console.error(err.message); return; } connection.execute( // The statement to execute &quot;SELECT * &quot;+ &quot;FROM emp &quot;+ &quot;WHERE ename = 'SCOTT'&quot;, [], function(err, result) { if (err) { console.error(err.message); doRelease(connection); return; } console.log(result.metaData); // console.log(result.rows); // doRelease(connection); }); }); function doRelease(connection) { connection.close( function(err) { if (err) { console.error(err.message); } }); } </pre> </div> </div> <div></div> <div>this is a pretty simple Node / Oracle script (very similar to some of the examples you&#8217;ll find in the node driver documentation).</div> <div></div> <div>So let&#8217;s run our script to check it works ok &#8211;</div> <div></div> <div> <pre class="brush: bash; title: ; notranslate"> bash-3.2$ node index.js [ { name: 'EMPNO' }, { name: 'ENAME' }, { name: 'JOB' }, { name: 'MGR' }, { name: 'HIREDATE' }, { name: 'SAL' }, { name: 'COMM' }, { name: 'DEPTNO' } ] [ [ 7788, 'SCOTT', 'ANALYST', 7566, 1982-12-08T23:00:00.000Z, 3000, null, 20 ] ] </pre> </div> <div></div> <div>Success! So we can connect to a local XE database fine.</div> <div></div> <div></div> <div>But what about our Exadata Express instance?</div> <div></div> <div>The first step is to copy the client_credentials.zip file to a location your node script can access it, you should also unzip it.</div> <div></div> <div> <pre class="brush: bash; title: ; notranslate"> bash-3.2$ ls -al total 16 drwxr-xr-x 6 jes staff 204 15 May 12:39 . drwxr-xr-x 13 jes staff 442 15 May 11:40 .. drwxr-xr-x 3 jes staff 102 15 May 12:39 credentials -rw-r--r-- 1 jes staff 816 15 May 12:04 index.js drwxr-xr-x 4 jes staff 136 15 May 11:53 node_modules -rw-r--r-- 1 jes staff 271 15 May 11:53 package.json&lt;/div&gt; &lt;div&gt;&lt;/div&gt; &lt;div&gt;bash-3.2$ unzip credentials/client_credentials.zip Archive: credentials/client_credentials.zip extracting: cwallet.sso extracting: sqlnet.ora extracting: tnsnames.ora extracting: ewallet.p12 extracting: keystore.jks extracting: truststore.jks </pre> </div> <div> Note it&#8217;s really important that nobody else can access these files &#8211; otherwise they&#8217;ll be able to access your Exadata Express instance.</div> <div></div> <div>Now we need to edit the sqlnet.ora file to specify the path of the WALLET_LOCATION, so in my case it meant changing &#8211;</div> <div></div> <div> <pre class="brush: bash; title: ; notranslate">&lt;/div&gt; &lt;div&gt;WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY=&quot;?/network/admin&quot;)))&lt;/div&gt; &lt;div&gt;</pre> </div> <div></div> <div>to</div> <div></div> <div> <pre class="brush: bash; title: ; notranslate">&lt;/div&gt; &lt;div&gt;WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY=&quot;/Users/jes/Work/Node/oracle/credentials&quot;)))&lt;/div&gt; &lt;div&gt;</pre> </div> <div>Now we need to export the TNS_ADMIN environment variable to this location</div> <div></div> <div> <pre class="brush: bash; title: ; notranslate">&lt;/div&gt; &lt;div&gt;export TNS_ADMIN=/Users/jes/Work/Node/oracle/credentials&lt;/div&gt; &lt;div&gt;</pre> </div> <div></div> <div>We can update our node script to reference the Exdata Express Instance</div> <div></div> <div> <pre class="brush: bash; title: ; notranslate">&lt;/div&gt; &lt;div&gt; &lt;div&gt; &lt;div&gt;var oracledb = require('oracledb');&lt;/div&gt; &lt;div&gt;oracledb.getConnection({&lt;/div&gt; &lt;div&gt;user: 'PDB_ADMIN',&lt;/div&gt; &lt;div&gt;password: '&lt;MY PASSWORD&gt;',&lt;/div&gt; &lt;div&gt;connectString: 'dbaccess'&lt;/div&gt; &lt;div&gt;},&lt;/div&gt; &lt;div&gt;function(err, connection) {&lt;/div&gt; &lt;div&gt;if (err) {&lt;/div&gt; &lt;div&gt;console.error(err.message);&lt;/div&gt; &lt;div&gt;return;&lt;/div&gt; &lt;div&gt;}&lt;/div&gt; &lt;div&gt;connection.execute(&lt;/div&gt; &lt;div&gt;// The statement to execute&lt;/div&gt; &lt;div&gt;&quot;SELECT * &quot;+&lt;/div&gt; &lt;div&gt;&quot;FROM emp &quot;+&lt;/div&gt; &lt;div&gt;&quot;WHERE ename = 'SCOTT'&quot;,&lt;/div&gt; &lt;div&gt;[],&lt;/div&gt; &lt;div&gt;function(err, result) {&lt;/div&gt; &lt;div&gt;if (err) {&lt;/div&gt; &lt;div&gt;console.error(err.message);&lt;/div&gt; &lt;div&gt;doRelease(connection);&lt;/div&gt; &lt;div&gt;return;&lt;/div&gt; &lt;div&gt;}&lt;/div&gt; &lt;div&gt;console.log(result.metaData); //&lt;/div&gt; &lt;div&gt;console.log(result.rows); //&lt;/div&gt; &lt;div&gt;doRelease(connection);&lt;/div&gt; &lt;div&gt;});&lt;/div&gt; &lt;div&gt;});&lt;/div&gt; &lt;div&gt;function doRelease(connection) {&lt;/div&gt; &lt;div&gt;connection.close(&lt;/div&gt; &lt;div&gt;function(err) {&lt;/div&gt; &lt;div&gt;if (err) {&lt;/div&gt; &lt;div&gt;console.error(err.message);&lt;/div&gt; &lt;div&gt;}&lt;/div&gt; &lt;div&gt;});&lt;/div&gt; &lt;div&gt;}&lt;/div&gt; &lt;div&gt;</pre> </div> <div></div> <div>Note the only difference here is that I&#8217;ve changed the username to be <em><strong>PDB_ADMIN</strong></em> (together with the correct password) and also changed the <em><strong>connectString</strong></em> to be dbaccess (which is referenced from the client_credentials.zip file).</div> <div></div> <div>Now let&#8217;s try our script again &#8211;</div> <div></div> <div> <pre class="brush: bash; title: ; notranslate"> bash-3.2$ node index.js [ { name: 'EMPNO' }, { name: 'ENAME' }, { name: 'JOB' }, { name: 'MGR' }, { name: 'HIREDATE' }, { name: 'SAL' }, { name: 'COMM' }, { name: 'DEPTNO' } ] [ [ 7788, 'SCOTT', null, 7566, 1982-12-08T23:00:00.000Z, null, null, 20 ] ] bash-3.2$ </pre> </div> <div></div> <div>Success!</div> <div></div> <div>Now I&#8217;m sure you might say &#8211; that&#8217;s just the same output, let&#8217;s verify by changing the query in our script to &#8211;</div> <div></div> <div> <pre class="brush: sql; title: ; notranslate"> SELECT host_name from v$instance </pre> </div> <div></div> <div>now we get</div> <div></div> <div> <pre class="brush: bash; title: ; notranslate"> bash-3.2$ node index.js [ { name: 'HOST_NAME' } ] [ [ '&lt;intentionally obscured&gt;.nldc1.oraclecloud.com' ] ] bash-3.2$ </pre> </div> <div></div> <div>So we are 100% accessing the Exadata Express instance on Oracle Cloud.</div> <div></div> <div>I&#8217;m very impressed with how simple Oracle have made it to connect the different client tools to the Oracle Cloud, this is really low barrier to entry and I can see many more client applications moving to using Oracle Cloud as a backend service.</div><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aejes.wordpress.com/1736/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aejes.wordpress.com/1736/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=jes.blogs.shellprompt.net&#038;blog=71717384&#038;post=1736&#038;subd=aejes&#038;ref=&#038;feed=1" width="1" height="1" /> John Scott http://jes.blogs.shellprompt.net/?p=1736 Mon May 15 2017 03:41:11 GMT-0400 (EDT) Loading data from a web service. An alternate approach http://apextips.blogspot.com/2017/05/loading-data-from-web-service-alternate.html I was recently working on a project where my client had just implemented a new system, and now they wanted to utilise the provided web services on this platform for some more reporting that wasn't provided out of the box. Being we use APEX, we had the nice APEX_WEB_SERVICE API to use - which made things nice and simple, but before that we needed to perform a couple of extra steps, which is required each time you want to pull data over the web from another domain.<br /><br />It's actually, I feel, too complicated to get going - but I understand these restrictions are in place to keep systems nice and secure.<br /><br />In a nut shell, we should be dealing with resources secured with some certificates - so we need to create both an ACL to the resource followed by creating a wallet with all the certificates the site uses. After that, we are good to go - until some time down the track when the service updates there certificates, then we once again need to update our wallet with the sites certificates.<br /><br />Now, we got everything all working - the web service returns an XML feed. We parse the result and load it into tabular format into one of our tables. This was set up to run once a day - real time data isn't a strong requirement.<br /><br />Given we are only running this once a day, I thought another approach could be the leverage SQLcl. It supports running Java and JavaScript through it's scripting engine. So, first I fired up my Java IDE to prototype performing a GET request, and came up with the following:<br /><br /><pre>CredentialsProvider provider = new BasicCredentialsProvider();<br />UsernamePasswordCredentials creds = new UsernamePasswordCredentials("fakeuser", "fakepassword");<br />provider.setCredentials(AuthScope.ANY, creds);<br /><br />HttpClient client = HttpClientBuilder.create()<br /> .setDefaultCredentialsProvider(provider)<br /> .build();<br />HttpGet get = new HttpGet("https://example.com/path/to/resource");<br /><br />try {<br /><br /> HttpResponse resp = client.execute(get);<br /><br /> System.out.println(resp.getStatusLine().getStatusCode());<br /><br /> HttpEntity entity = resp.getEntity();<br /><br /> String respBody = EntityUtils.toString(entity);<br /> System.out.println(respBody);<br /><br />} catch (IOException e ) {<br /> e.printStackTrace();<br />}<br /></pre><br /><br />That worked well, so now I needed to convert this into a script that could be used with nashorn. So I figured out all the classes I needed, and added the following to a JavaScript (effectively, import statements):<br /><br /><pre>//All the required Java clasees<br />var CredentialsProvider = Java.type("org.apache.http.client.CredentialsProvider"),<br /> BasicCredentialsProvider = Java.type("org.apache.http.impl.client.BasicCredentialsProvider"),<br /> UsernamePasswordCredentials = Java.type("org.apache.http.auth.UsernamePasswordCredentials"),<br /> AuthScope = Java.type("org.apache.http.auth.AuthScope"),<br /> HttpClient = Java.type("org.apache.http.client.HttpClient"),<br /> HttpClientBuilder = Java.type("org.apache.http.impl.client.HttpClientBuilder"),<br /> HttpGet = Java.type("org.apache.http.client.methods.HttpGet"),<br /> HttpResponse = Java.type("org.apache.http.HttpResponse"),<br /> HttpEntity = Java.type("org.apache.http.HttpEntity"),<br /> EntityUtils = Java.type("org.apache.http.util.EntityUtils"),<br /> HashMap = Java.type("java.util.HashMap");<br /></pre><br /><br />So, with all those now available in my script, I could begin copying the same implementation that I had.<br /><br />Once I had my response coming through, I needed to add it to a HashMap, for a Clob datatype (I discovered that SQLcl cuts off values larger than 4000 characters, so it seems a Clob was necessary - especially if the web service response becomes too large).<br /><br />I took a look at some example code, and saw an example with a blob with `conn.createBlob()`. So I copied this style but used it for a clob instead, as per the following example:<br /><br /><pre>map = new HashMap();<br />xmlAsClob = conn.createClob();<br />xmlAsClob.setString(1, respBody);<br /><br />map.put("xml", xmlAsClob);<br /></pre><br /><br />This map allows us to use a bind value (xml) with our query using the provided function `util.execute`.<br /><br />So, for this basic example, I just wanted to log the count that was returned in the XML to run each day. So, for the insert statement, I came up with the following query and implementation:<br /><br /><pre>insertCountQuery =<br />"insert into org_count (date_run, count)" +<br />"select " +<br />" sysdate" +<br />" , orgs.org_count " +<br />"from " +<br />" xmltable( " +<br />" '/Result' " +<br />" passing xmltype.createxml(:xml) " +<br />" columns " +<br />" org_count number path '/Result/count' " +<br />" ) orgs";<br /><br />insertCountResult = util.execute(insertCountQuery, map);<br /><br />if (insertCountResult){<br /> print("Successfully updated from the web service");<br />} else {<br /> print ("An error occurred");<br /> print ("sqldev.last.err.message.forsqlcode reported:")<br /> print (ctx.getProperty("sqldev.last.err.message.forsqlcode"));<br />}<br /></pre><br /><br />I saved this script as `fetchAndLoad.js`. So when I'm connected to SQLcl, I just need to run the command: `script fetchAndLoad.js`. And voila - our data is sent into your table.<br /><br />To get this to run daily, it would be a good idea to wrap this in a little shell script and add it to your crontab (or task scheduler if you're on windows).<br /><br />Take a look at the full example code:&nbsp;<a href="https://github.com/tschf/orcl-wssync-sqlcl-demo">https://github.com/tschf/orcl-wssync-sqlcl-demo</a> trent tag:blogger.com,1999:blog-8785176694082881912.post-6999556622136351951 Sun May 14 2017 16:49:00 GMT-0400 (EDT) Transforming a heap table to a partitioned table - how and whats new in 12c R1 & R2 http://jaffardba.blogspot.com/2017/05/transforming-heap-table-to-partitioned.html <div dir="ltr" style="text-align: left;" trbidi="on">As part of the daily operational job, one of the typical requests we DBAs get is to convert a regular (heap) table into a partitioned table. This can be achieved either offline or online. This blog will demonstrate some of the pre-12c methods and enhancements in Oracle 12c R1 and R2.<br /><br />I remembered when I&nbsp; had such requests in the past, I used the following offline/online methods to achieve the goals, whatever best fit my application needs.<br /><br />The offline method involves the following action sequence:<br /><ol style="text-align: left;"><li>Create empty interim partitioned table, indexes and etc</li><li>Stop the application services if the non-partitioned table involved in any operations</li><li>Migrate the data from the non-partitioned table to partitioned table </li><li>Swap the table names</li><li>Drop the non-partitioned table </li><li>Compile any invalid package/procedure/functions/triggers</li><li>Gather table stats </li></ol>Note: If any integrity references, dependencies exists, the above procedure slightly defers with a couple of additional actions. The downside of this workaround is the service interruption during the course of transformation.<br /><br />To avoid any service interruption, Oracle provides redefinition feature to perform the action online, without actually impacting the going DML operations on the table. The redefinition option involves the following action sequence:<br /><ol style="text-align: left;"><li>&nbsp;Validate if the table can use redefinition feature or not (DBMS_REDEFINITION.CAN_REDEF_TABLE procedure)</li><li>&nbsp;Create interim partition table and all indexes</li><li>Start the online redefinition process (DBMS_REDEFINITION.START_REDEF_TABLE procedure)</li><li>Copy dependent objects (DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS procedure)</li><li>Perform data synchronization (DBMS_REDEFINITION.SYNC_INTERIM_TABLE procedure)</li><li>Stop the online redefinition process (DBMS_REDEFINITIONS.FINISH_REDEF_TABLE procedure) </li><li>Swap the table names</li><li>Compile any invalid package/procedure/functions/triggers</li><li>Gather table stats</li></ol>&nbsp;However, such sort of action is simplified in Oracle 12c R1 and made easier in R2. The following demonstraes12c R1 and R2 methods.<br /><br /><u><b>12cR1 EXCHANGE PARTITION</b></u><br />With EXCHANGE PARTITION feature, the data can be quickly loaded from a non-partitioned table to a partitioned table:<br /><br />Once you have the partitioned table, use the following example to exchange the data of heap table to partitioned table. In this example, the existing data will be copied to a single partition in the partitioned table.<br /><br /><span style="font-family: &quot;Courier New&quot;, Courier, monospace;">ALTER TABLE sales EXCHANGE PARTITION p1 WITH TABLE non_sales_part;</span><br /><br /><u><b>12cR2 MODIFY&nbsp;</b></u><br />With 12cR2 ALTER TABLE MODIFY option, a non-partitioned table can be easily transformed into a partitioned table, either offline or online. The example below demonstrate creating daily interval partition:<br /><br />offline procedure:<br /><span style="font-family: &quot;Courier New&quot;, Courier, monospace;">ALTER TABLE sales MODIFY</span><br /><span style="font-family: &quot;Courier New&quot;, Courier, monospace;">PARTITION BY RANGE (column_name) INTERVAL (1)</span><br /><span style="font-family: &quot;Courier New&quot;, Courier, monospace;">(partition p1 values less than (100),</span><br /><span style="font-family: &quot;Courier New&quot;, Courier, monospace;">partitionp2 values less than (1000)) ;</span><br /><br />Online procedure:<br /><span style="font-family: &quot;Courier New&quot;, Courier, monospace;">ALTER TABLE sales MODIFY</span><br /><span style="font-family: &quot;Courier New&quot;, Courier, monospace;">PARTITION BY RANGE (column_name) INTERVAL (1)</span><br /><span style="font-family: &quot;Courier New&quot;, Courier, monospace;">(partition p1 values less than (100),</span><br /><span style="font-family: &quot;Courier New&quot;, Courier, monospace;">partitionp2 values less than (1000))ONLINE UPDATE INDEXES (index1, index2 LOCAL) ;</span><br /><br /><br /><u>References:</u><br /><a href="https://uhesse.com/2010/02/15/partitioning-a-table-online-with-dbms_redefinition/">https://uhesse.com/2010/02/15/partitioning-a-table-online-with-dbms_redefinition/</a><br /><a href="https://docs.oracle.com/database/122/VLDBG/evolve-nopartition-table.htm#VLDBG-GUID-5FDB7D59-DD05-40E4-8AB4-AF82EA0D0FE5">https://docs.oracle.com/database/122/VLDBG/evolve-nopartition-table.htm#VLDBG-GUID-5FDB7D59-DD05-40E4-8AB4-AF82EA0D0FE5</a><br /><a href="https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:869096700346654484">https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:869096700346654484</a><br /><a href="https://oracle-base.com/articles/misc/partitioning-an-existing-table-using-exchange-partition">https://oracle-base.com/articles/misc/partitioning-an-existing-table-using-exchange-partition</a><br /><br /><div><br /><br /><br /></div></div> The Human Fly tag:blogger.com,1999:blog-19771507.post-4324098261027253332 Sun May 14 2017 05:13:00 GMT-0400 (EDT) Using SQLDeveloper Drag and Drop to Create Objects to Exadata Express https://jes.blogs.shellprompt.net/2017/05/12/using-sqldeveloper-drag-and-drop-to-create-objects-to-exadata-express/ <p>In a previous post I showed how to connect <a href="https://jes.blogs.shellprompt.net/2017/05/10/oracle-exadata-express-service-kicking-the-tires-part-5-sql-developer-connectivity/">SQLDeveloper to an Exadata Express Instance.</a></p> <p>I was creating some schema objects whilst playing around with my Instance and seemed to remember hearing that you can drag and drop objects straight from SQLDeveloper so I decided to give it a try.</p> <p>Firstly you need to open up a connection to your Exadata Express instance which I&#8217;ll use as my destination and a connection to your source instance.</p> <p><a href="https://aejes.files.wordpress.com/2017/05/2017-06-05_11-08-24.png"><img data-attachment-id="1730" data-permalink="https://jes.blogs.shellprompt.net/2017/05/12/using-sqldeveloper-drag-and-drop-to-create-objects-to-exadata-express/2017-06-05_11-08-24/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_11-08-24.png" data-orig-size="392,1141" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-11_11-08-24" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_11-08-24.png?w=103" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_11-08-24.png?w=352&#038;h=1024" class="alignnone size-large wp-image-1730" src="https://aejes.files.wordpress.com/2017/05/2017-06-05_11-08-24.png?w=352&#038;h=1024" alt="" width="352" height="1024" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-05_11-08-24.png?w=352&amp;h=1024 352w, https://aejes.files.wordpress.com/2017/05/2017-06-05_11-08-24.png?w=52&amp;h=150 52w, https://aejes.files.wordpress.com/2017/05/2017-06-05_11-08-24.png?w=103&amp;h=300 103w, https://aejes.files.wordpress.com/2017/05/2017-06-05_11-08-24.png 392w" sizes="(max-width: 352px) 100vw, 352px" /></a></p> <p>Currently my destination schema has no objects in it</p> <p><a href="https://aejes.files.wordpress.com/2017/05/2017-06-05_11-28-04.png"><img data-attachment-id="1733" data-permalink="https://jes.blogs.shellprompt.net/2017/05/12/using-sqldeveloper-drag-and-drop-to-create-objects-to-exadata-express/2017-06-05_11-28-04/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_11-28-04.png" data-orig-size="877,362" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-12_11-28-04" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_11-28-04.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_11-28-04.png?w=625&#038;h=258" class="alignnone size-large wp-image-1733" src="https://aejes.files.wordpress.com/2017/05/2017-06-05_11-28-04.png?w=625&#038;h=258" alt="" width="625" height="258" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-05_11-28-04.png?w=625&amp;h=258 625w, https://aejes.files.wordpress.com/2017/05/2017-06-05_11-28-04.png?w=150&amp;h=62 150w, https://aejes.files.wordpress.com/2017/05/2017-06-05_11-28-04.png?w=300&amp;h=124 300w, https://aejes.files.wordpress.com/2017/05/2017-06-05_11-28-04.png?w=768&amp;h=317 768w, https://aejes.files.wordpress.com/2017/05/2017-06-05_11-28-04.png 877w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>Now lets select the EMP and DEPT tables from the source connection and drag to our Exadata Express connection and you should see the following dialog pop-up.</p> <p><a href="https://aejes.files.wordpress.com/2017/05/2017-06-05_11-26-02.png"><img data-attachment-id="1732" data-permalink="https://jes.blogs.shellprompt.net/2017/05/12/using-sqldeveloper-drag-and-drop-to-create-objects-to-exadata-express/2017-06-05_11-26-02/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_11-26-02.png?w=625" data-orig-size="399,440" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-12_11-26-02" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_11-26-02.png?w=625?w=272" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_11-26-02.png?w=625?w=399" class="alignnone size-full wp-image-1732" src="https://aejes.files.wordpress.com/2017/05/2017-06-05_11-26-02.png?w=625" alt="" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-05_11-26-02.png 399w, https://aejes.files.wordpress.com/2017/05/2017-06-05_11-26-02.png?w=136 136w, https://aejes.files.wordpress.com/2017/05/2017-06-05_11-26-02.png?w=272 272w" sizes="(max-width: 399px) 100vw, 399px" /></a></p> <p>I&#8217;ll go with the defaults here, after a moment or two the migration should have worked and you can see the new objects in the Exadata Express instance.</p> <p><a href="https://aejes.files.wordpress.com/2017/05/2017-06-05_11-29-54.png"><img data-attachment-id="1734" data-permalink="https://jes.blogs.shellprompt.net/2017/05/12/using-sqldeveloper-drag-and-drop-to-create-objects-to-exadata-express/2017-06-05_11-29-54/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_11-29-54.png" data-orig-size="710,407" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-10_11-29-54" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_11-29-54.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_11-29-54.png?w=625&#038;h=358" class="alignnone size-large wp-image-1734" src="https://aejes.files.wordpress.com/2017/05/2017-06-05_11-29-54.png?w=625&#038;h=358" alt="" width="625" height="358" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-05_11-29-54.png?w=625&amp;h=358 625w, https://aejes.files.wordpress.com/2017/05/2017-06-05_11-29-54.png?w=150&amp;h=86 150w, https://aejes.files.wordpress.com/2017/05/2017-06-05_11-29-54.png?w=300&amp;h=172 300w, https://aejes.files.wordpress.com/2017/05/2017-06-05_11-29-54.png 710w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>See how easy that was? It even created the primary keys and foreign constraints.</p> <p>Note you&#8217;re not just limited to tables for this, it works for any type of database objects &#8211; packages, views, sequences etc.</p> <p>Very cool!</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aejes.wordpress.com/1728/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aejes.wordpress.com/1728/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=jes.blogs.shellprompt.net&#038;blog=71717384&#038;post=1728&#038;subd=aejes&#038;ref=&#038;feed=1" width="1" height="1" /> John Scott http://jes.blogs.shellprompt.net/?p=1728 Fri May 12 2017 07:02:21 GMT-0400 (EDT) Oracle Exadata Express Service – Kicking the Tires (Part 6 – Managing your Instance) https://jes.blogs.shellprompt.net/2017/05/11/oracle-exadata-express-service-kicking-the-tires-part-6-managing-your-instance/ <p>In the previous post I covered <a href="https://jes.blogs.shellprompt.net/2017/05/10/oracle-exadata-express-service-kicking-the-tires-part-5-sql-developer-connectivity/">connecting SQLDeveloper to your Exadata Express</a> instance, but how do you do basic DBA level tasks?</p> <p>Well, SQLDeveloper to the rescue &#8211; it has a very nice (albeit fairly minimal) DBA interface.</p> <p>Assuming you already have a connection to your Instance (this will need to be a user with sufficient privileges &#8211; in this case I&#8217;ll use the PDB_ADMIN user).</p> <p>In SQLDeveloper clicking the view menu reveals a DBA menu item.</p> <p><a href="https://aejes.files.wordpress.com/2017/06/2017-06-05_10-21-40.png"><img data-attachment-id="1719" data-permalink="https://jes.blogs.shellprompt.net/2017/05/11/oracle-exadata-express-service-kicking-the-tires-part-6-managing-your-instance/2017-06-05_10-21-40/" data-orig-file="https://aejes.files.wordpress.com/2017/06/2017-06-05_10-21-40.png?w=625" data-orig-size="244,852" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-11_10-21-40" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/06/2017-06-05_10-21-40.png?w=625?w=86" data-large-file="https://aejes.files.wordpress.com/2017/06/2017-06-05_10-21-40.png?w=625?w=244" class="alignnone size-full wp-image-1719" src="https://aejes.files.wordpress.com/2017/06/2017-06-05_10-21-40.png?w=625" alt="" srcset="https://aejes.files.wordpress.com/2017/06/2017-06-05_10-21-40.png 244w, https://aejes.files.wordpress.com/2017/06/2017-06-05_10-21-40.png?w=43 43w" sizes="(max-width: 244px) 100vw, 244px" /></a></p> <p>once you click this you can select your Exadata Express connection and you&#8217;ll see a new DBA panela become visible.</p> <p><a href="https://aejes.files.wordpress.com/2017/06/2017-06-05_10-27-19.png"><img data-attachment-id="1720" data-permalink="https://jes.blogs.shellprompt.net/2017/05/11/oracle-exadata-express-service-kicking-the-tires-part-6-managing-your-instance/2017-06-05_10-27-19/" data-orig-file="https://aejes.files.wordpress.com/2017/06/2017-06-05_10-27-19.png?w=625" data-orig-size="384,391" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-10_10-27-19" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/06/2017-06-05_10-27-19.png?w=625?w=295" data-large-file="https://aejes.files.wordpress.com/2017/06/2017-06-05_10-27-19.png?w=625?w=384" class="alignnone size-full wp-image-1720" src="https://aejes.files.wordpress.com/2017/06/2017-06-05_10-27-19.png?w=625" alt="" srcset="https://aejes.files.wordpress.com/2017/06/2017-06-05_10-27-19.png 384w, https://aejes.files.wordpress.com/2017/06/2017-06-05_10-27-19.png?w=147 147w, https://aejes.files.wordpress.com/2017/06/2017-06-05_10-27-19.png?w=295 295w" sizes="(max-width: 384px) 100vw, 384px" /></a></p> <p>From here you can view Database Configuration details such as the Initialisation Parameters, Database Feature Usage etc</p> <p>One of my favourite views (that not many people know about apparently) is the Instance Viewer, which gives you a great overview of the current status of your database and what it is doing.<a href="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-31-31.png"><img data-attachment-id="1722" data-permalink="https://jes.blogs.shellprompt.net/2017/05/11/oracle-exadata-express-service-kicking-the-tires-part-6-managing-your-instance/2017-06-05_10-31-31/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-31-31.png" data-orig-size="1429,877" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-10_10-31-31" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-31-31.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-31-31.png?w=625&#038;h=384" class="alignnone size-large wp-image-1722" src="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-31-31.png?w=625&#038;h=384" alt="" width="625" height="384" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-31-31.png?w=625&amp;h=384 625w, https://aejes.files.wordpress.com/2017/05/2017-06-05_10-31-31.png?w=1250&amp;h=768 1250w, https://aejes.files.wordpress.com/2017/05/2017-06-05_10-31-31.png?w=150&amp;h=92 150w, https://aejes.files.wordpress.com/2017/05/2017-06-05_10-31-31.png?w=300&amp;h=184 300w, https://aejes.files.wordpress.com/2017/05/2017-06-05_10-31-31.png?w=768&amp;h=471 768w, https://aejes.files.wordpress.com/2017/05/2017-06-05_10-31-31.png?w=1024&amp;h=628 1024w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>since I&#8217;m running in a PDB, I&#8217;m not sure about the accuracy of some of these figures, since it shows me I&#8217;m currently using 262Gb of SGA (but the X20 service should only have 3GB PGA and 3GB SGA). I&#8217;m assuming I&#8217;m getting insight into the figures from the CDB. I must admit when I first saw these figures I raced back to check I&#8217;d signed up for the X20 service and not an entire Exadata Instance to myself!</p> <p>So how about Importing and Exporting data? Well we can do Datapump Imports and Exports right out of SQLDeveloper</p> <p><a href="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-37-19.png"><img data-attachment-id="1723" data-permalink="https://jes.blogs.shellprompt.net/2017/05/11/oracle-exadata-express-service-kicking-the-tires-part-6-managing-your-instance/2017-06-05_10-37-19/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-37-19.png?w=625" data-orig-size="378,336" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-10_10-37-19" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-37-19.png?w=625?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-37-19.png?w=625?w=378" class="alignnone size-full wp-image-1723" src="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-37-19.png?w=625" alt="" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-37-19.png 378w, https://aejes.files.wordpress.com/2017/05/2017-06-05_10-37-19.png?w=150 150w, https://aejes.files.wordpress.com/2017/05/2017-06-05_10-37-19.png?w=300 300w" sizes="(max-width: 378px) 100vw, 378px" /></a></p> <p><a href="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-37-05.png"><img data-attachment-id="1724" data-permalink="https://jes.blogs.shellprompt.net/2017/05/11/oracle-exadata-express-service-kicking-the-tires-part-6-managing-your-instance/2017-06-05_10-37-05/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-37-05.png" data-orig-size="640,480" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-10_10-37-05" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-37-05.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-37-05.png?w=625&#038;h=469" class="alignnone size-large wp-image-1724" src="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-37-05.png?w=625&#038;h=469" alt="" width="625" height="469" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-37-05.png?w=625&amp;h=469 625w, https://aejes.files.wordpress.com/2017/05/2017-06-05_10-37-05.png?w=150&amp;h=113 150w, https://aejes.files.wordpress.com/2017/05/2017-06-05_10-37-05.png?w=300&amp;h=225 300w, https://aejes.files.wordpress.com/2017/05/2017-06-05_10-37-05.png 640w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>Under the Performance option we can also view ASH and AWR reports &#8211; you&#8217;ll get a warning about checking licence but the Exadata Express instance allows that option (at the time of writing!).</p> <p>Under the Security section we can create users</p> <p><a href="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-41-00.png"><img data-attachment-id="1725" data-permalink="https://jes.blogs.shellprompt.net/2017/05/11/oracle-exadata-express-service-kicking-the-tires-part-6-managing-your-instance/2017-06-05_10-41-00/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-41-00.png?w=625" data-orig-size="602,492" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-10_10-41-00" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-41-00.png?w=625?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-41-00.png?w=625?w=602" class="alignnone size-full wp-image-1725" src="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-41-00.png?w=625" alt="" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-41-00.png 602w, https://aejes.files.wordpress.com/2017/05/2017-06-05_10-41-00.png?w=150 150w, https://aejes.files.wordpress.com/2017/05/2017-06-05_10-41-00.png?w=300 300w" sizes="(max-width: 602px) 100vw, 602px" /></a></p> <p>You can create tablespaces directly from SQLDeveloper too</p> <p><a href="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-42-04.png"><img data-attachment-id="1726" data-permalink="https://jes.blogs.shellprompt.net/2017/05/11/oracle-exadata-express-service-kicking-the-tires-part-6-managing-your-instance/2017-06-05_10-42-04/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-42-04.png" data-orig-size="700,500" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-10_10-42-04" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-42-04.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-42-04.png?w=625&#038;h=446" class="alignnone size-large wp-image-1726" src="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-42-04.png?w=625&#038;h=446" alt="" width="625" height="446" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-42-04.png?w=625&amp;h=446 625w, https://aejes.files.wordpress.com/2017/05/2017-06-05_10-42-04.png?w=150&amp;h=107 150w, https://aejes.files.wordpress.com/2017/05/2017-06-05_10-42-04.png?w=300&amp;h=214 300w, https://aejes.files.wordpress.com/2017/05/2017-06-05_10-42-04.png 700w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>As you can see SQLDeveloper offers a rich enviroment for GUI DBA control over your Exadata Express Instance (and you can always drop down into the SQLcl command-line to perform manual DBA tasks!).</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aejes.wordpress.com/1718/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aejes.wordpress.com/1718/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=jes.blogs.shellprompt.net&#038;blog=71717384&#038;post=1718&#038;subd=aejes&#038;ref=&#038;feed=1" width="1" height="1" /> John Scott http://jes.blogs.shellprompt.net/?p=1718 Thu May 11 2017 05:12:07 GMT-0400 (EDT) APEX 5.1 migration mobile application http://lschilde.blogspot.com/2017/05/apex-51-migration-mobile-application.html <div dir="ltr" style="text-align: left;" trbidi="on"><div dir="ltr" style="text-align: left;" trbidi="on"><div dir="ltr" style="text-align: left;" trbidi="on"><div dir="ltr" style="text-align: left;" trbidi="on"><div dir="ltr" style="text-align: left;" trbidi="on"><h2 style="text-align: justify;"><span style="font-family: &quot;verdana&quot; , sans-serif;">APEX 5.1 migration</span></h2><h3 style="text-align: left;"><span style="font-family: &quot;verdana&quot; , sans-serif;">Our experience going 5.1</span></h3><h4 style="text-align: left;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;">Mobile Mi<span style="font-family: &quot;verdana&quot; , sans-serif;">gration</span></span></span> issues</span></h4><h4 style="text-align: left;"><span style="font-family: &quot;verdana&quot; , sans-serif;">&nbsp;</span></h4><div style="text-align: justify;"><div style="text-align: justify;"><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">The day has come to upgrade your system to APEX 5.1. This is a short post about things we encountered along the way.&nbsp;</span><br /><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">This post covers Mobile application version migration <span style="font-family: &quot;verdana&quot; , sans-serif;">e</span>rrors. There is a aeparate post for D<span style="font-family: &quot;verdana&quot; , sans-serif;">esktop version.</span></span><br /><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">Idea is to show case that even though <span style="font-family: &quot;verdana&quot; , sans-serif;">it</span> seem<span style="font-family: &quot;verdana&quot; , sans-serif;">s simple there might be more to it in terms of upgrade plans to 5.1.1 than you and I initially thought. You have been warned :)</span> </span><br /><br /><b><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">1. problem</span></b><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><b> - </b></span>apex.server.process</span></div></div></div></div></div><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">Simple page when rendered would give this error</span><br /><blockquote class="tr_bq"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: 12.0pt;">Uncaught TypeError: Cannot read property 'pageItems' of null </span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: 12.0pt;"> at i (mobile.min.js?v=5.1.1.00.08:10) </span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: 12.0pt;"> at h (mobile.min.js?v=5.1.1.00.08:10) </span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: 12.0pt;"> at Object.a.process (mobile.min.js?v=5.1.1.00.08:10) </span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: 12.0pt;"> at toggleFavourite (f?p=106:5:21::NO:RP,10:P5_STATION_CODE, P5_STATION_NAME,P5_SOURCE_PAGE:BA, Badgingarra,1:200) </span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: 12.0pt;"> at &lt;anonymous&gt;:1:1</span></blockquote><br /><div style="direction: ltr; margin-bottom: 0pt; margin-top: 0pt; text-align: left; unicode-bidi: embed; vertical-align: baseline;"><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="color: black;">The core of the problem was this JavaScript:</span></span></div><div><div style="text-align: justify;"><blockquote class="tr_bq"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: 12.0pt;">&lt;script&gt; </span><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: 12.0pt;"> function toggleFavourite() { </span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: 12.0pt;"> apex.server.process ( </span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: 12.0pt;"> "togglefavourite", </span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: 12.0pt;"> <span style="background-color: yellow;">null,</span> </span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: 12.0pt;"> { </span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: 12.0pt;"> dataType: 'text', </span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: 12.0pt;"> success: function(isFavourite) { </span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: 12.0pt;"> if(isFavourite=='Y') $('#favouritebutton').addClass('favourite'); </span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: 12.0pt;"> else $('#favouritebutton').removeClass('favourite'); </span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: 12.0pt;"> } </span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: 12.0pt;"> } ); </span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: 12.0pt;"> } </span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: 12.0pt;"> &lt;/script&gt;</span></blockquote><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><b>Solution:</b> remove null, line and things worked again.</span> <br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><br /></span><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><b>2. problem </b><span style="font-family: &quot;verdana&quot; , sans-serif;">Invalid JSON</span>. </span></div></div><div><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><br /></span><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;">Same process as in Problem 1. toogle<span style="font-family: &quot;verdana&quot; , sans-serif;">F</span>avourite <span style="font-family: &quot;verdana&quot; , sans-serif;">contained</span> this code<span style="font-family: &quot;verdana&quot; , sans-serif;">:</span></span></span></div><div></div><div><blockquote class="tr_bq"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: 12.0pt;">begin </span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: 12.0pt;">&nbsp;&nbsp;&nbsp; htp.prn('Y'); </span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: 12.0pt;"> end; </span></blockquote><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><b>Solution:</b> this now became an invalid JSON as characters need a quotes htp.prn('"Y"'); Once this was replaced things worked again.</span><br /><b><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><br />3. problem </span></b>-<span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"> Map error</span></div><br /><blockquote class="tr_bq"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: 12.0pt;">Uncaught ReferenceError: google is not defined </span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: 12.0pt;"> at HTMLDivElement.eval (eval at globalEval (jquery-2.2.3.min.js?v=5.1.1.00.08:2), &lt;anonymous&gt;:39:20) at HTMLDivElement.e (jquery-2.2.3.min.js?v=5.1.1.00.08:3) </span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: 12.0pt;"> at HTMLDivElement.dispatch (jquery-2.2.3.min.js?v=5.1.1.00.08:3) at HTMLDivElement.r.handle (jquery-2.2.3.min.js?v=5.1.1.00.08:3)</span></blockquote><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><b>Solution:</b> <br /><br />By changing reference to a a Google JS library from inline on page to page template </span><br /><blockquote class="tr_bq"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: 12.0pt;">https://maps.googleapis.com/maps/api/js?key=&amp;GOOGLE_API_KEY.&amp;v=3.26&amp;libraries=weather</span></blockquote><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">sorted the problem. This probably has to do with JavaScript and exact timing of when a certain libraries are expected to be loaded. This was working fine in 5.0.</span><br /><div><br /><div style="text-align: left;"><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><b>4. problem </b>- Menu Error</span><br /><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">In this application bigSlide menu JS library was used to implement a simple drop down menu. This was customization to the default apex template.</span><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><br />Menu did not work after Save </span><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">was clicked </span>or any navigation happened in the application.</span><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><br /><b>Solution:&nbsp;</b></span><br /><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">Problem was in a way APEX template work (since 4.2 version). If you are on page ID 1 and navigate to page ID 5 menu stops working because your page DOM holds more elements with same ID.<br /><br />Why? Inspect your DOM when you navigate from page to page. You will notice that DOM things are being added as you move along.</span><br /><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: 12.0pt;">&lt;div id="P1" data-role="page" data-apex-page-transition="none" data-apex-popup-transition="none" data-theme="c" data-url......<br />&lt;div id="P5" data-role="page" data-apex-page-transition="none" data-apex-popup-transition="none" data-theme="c" data-url......</span><br /><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">We had a button on page 0 called Menu with static ID = rightpanel-link.&nbsp;&nbsp; JavaScript was triggering on ID click which was now broken as multiple existed on same page. <span style="font-family: &quot;verdana&quot; , sans-serif;">&nbsp;</span></span><br /><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="font-family: &quot;verdana&quot; , sans-serif;">W</span>ork around apply logic but with the use of a classes.....</span><br /><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">instead of ID based selectors</span></div><div style="text-align: left;"><blockquote class="tr_bq"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: 12.0pt;">$('#rightpanel-link').bigSlide(</span></blockquote><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">use class based selectors</span><br /><blockquote class="tr_bq"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: 12.0pt;">$('.rightpanel-link').bigSlide(</span></blockquote><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><b>5. problem </b>- Menu display condition erro<span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">r</span></span> <br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">Server-side Condition was set to page is not in comma separated list of values that included 101 - Login page which cause the main menu not to be shown once you logged in. Menu would slide to the left but no content would be there.</span><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><br /> <b>Solution</b> was to<span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"> simply remove this con<span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">dition and menu would work fine.</span></span></span><br /><br /><div style="direction: ltr; language: en-AU; margin-bottom: 0pt; margin-top: 0pt; mso-line-break-override: restrictions; punctuation-wrap: simple; text-align: left; unicode-bidi: embed; vertical-align: baseline;"><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><b><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">6</span>. problem </b>-&nbsp;</span><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="color: black;"> APEX Mobile link bug?</span></span><br /><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-aC6MGo-mmao/WQFV-lKgWMI/AAAAAAAALGU/V3fNc2ow7_kLKafo-bzRMF4JXcZohZxgQCLcB/s1600/Demo_Link_error.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://1.bp.blogspot.com/-aC6MGo-mmao/WQFV-lKgWMI/AAAAAAAALGU/V3fNc2ow7_kLKafo-bzRMF4JXcZohZxgQCLcB/s320/Demo_Link_error.gif" width="265" /></a></div><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="color: black;">Page with a simple list that <span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">had a link to a certain page <span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">passing in few parameters. <span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">Y</span>ou would click <span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">on a link that takes you on next page but the URL o<span style="font-family: &quot;verdana&quot; , sans-serif;">f the new page is invalid<span style="font-family: &quot;verdana&quot; , sans-serif;"> as it was encoded by the engine<span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">. If you try refreshing the page you get APEX error.&nbsp;</span></span></span></span></span></span></span></span><br /><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><span style="color: black;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">I tested this on apex.oracle.com and <span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">the same issue<span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"> was there. This only happens in mobile version of UI. Not sure if this is a known thing or not. Currently we do not <span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">have a workaround. </span></span>&nbsp;</span></span></span></span> </span></span></span></span></span><br /><br /></div></div><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;">This is all for now. Over and out.</span><br /><br /><span style="font-family: &quot;verdana&quot; , sans-serif; font-size: 12.0pt;"><a href="https://www.slideshare.net/LinoSchildenfeld/oracle-apex-migration-to-51-our-experience"><span 12.0pt="" font-size:="" style="font-family: &quot;verdana&quot; , sans-serif;">https://www.slideshare.net/LinoSchildenfeld/oracle-apex-migration-to-51-our-experience</span></a></span>&nbsp;</div></div><div class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-size: 12.0pt;">&nbsp; </span></span></div><div class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-size: 12.0pt;">Thanks, </span></span></div><div class="MsoNormal" style="line-height: normal; mso-margin-bottom-alt: auto; mso-margin-top-alt: auto;"><span style="font-family: &quot;verdana&quot; , sans-serif;"><span style="font-size: 12.0pt;">SLino</span></span></div><br /></div> SLino tag:blogger.com,1999:blog-8185384792158425670.post-8832853376307490386 Wed May 10 2017 22:23:00 GMT-0400 (EDT) Oracle Exadata Express Service – Kicking the Tires (Part 5 – SQL Developer Connectivity) https://jes.blogs.shellprompt.net/2017/05/10/oracle-exadata-express-service-kicking-the-tires-part-5-sql-developer-connectivity/ <p>In the last post we discussed <a href="https://jes.blogs.shellprompt.net/2017/05/09/oracle-exadata-express-service-kicking-the-tires-part-4-sqlcl-connectivity/">connecting SQLcl to Oracle Exadata Express</a>, now lets see how we can connect SQL Developer</p> <p>EDIT: After writing this post, I found there was a detailed help available here &#8211; <a href="https://docs.oracle.com/en/cloud/paas/exadata-express-cloud/csdbp/connecting-sql-developer.html#GUID-00D45398-2BF3-48D5-B0E9-11979D5EAFFC" rel="nofollow">https://docs.oracle.com/en/cloud/paas/exadata-express-cloud/csdbp/connecting-sql-developer.html#GUID-00D45398-2BF3-48D5-B0E9-11979D5EAFFC</a></p> <h3>Step 1 &#8211; Create a new connection in SQL Developer</h3> <p><a href="https://aejes.files.wordpress.com/2017/06/2017-06-05_09-38-46.png"><img data-attachment-id="1710" data-permalink="https://jes.blogs.shellprompt.net/2017/05/10/oracle-exadata-express-service-kicking-the-tires-part-5-sql-developer-connectivity/2017-06-05_09-38-46/" data-orig-file="https://aejes.files.wordpress.com/2017/06/2017-06-05_09-38-46.png" data-orig-size="985,499" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-10_09-38-46" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/06/2017-06-05_09-38-46.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/06/2017-06-05_09-38-46.png?w=625&#038;h=317" class="alignnone size-large wp-image-1710" src="https://aejes.files.wordpress.com/2017/06/2017-06-05_09-38-46.png?w=625&#038;h=317" alt="" width="625" height="317" srcset="https://aejes.files.wordpress.com/2017/06/2017-06-05_09-38-46.png?w=625&amp;h=317 625w, https://aejes.files.wordpress.com/2017/06/2017-06-05_09-38-46.png?w=150&amp;h=76 150w, https://aejes.files.wordpress.com/2017/06/2017-06-05_09-38-46.png?w=300&amp;h=152 300w, https://aejes.files.wordpress.com/2017/06/2017-06-05_09-38-46.png?w=768&amp;h=389 768w, https://aejes.files.wordpress.com/2017/06/2017-06-05_09-38-46.png 985w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>Note &#8211; I&#8217;ve obscured my existing connections for obvious reasons.</p> <p>You&#8217;ll need to populate</p> <ul> <li>Connection Name</li> <li>Username (I&#8217;m going to use PDB_ADMIN)</li> <li>Password</li> <li>Connection Type &#8211; (there is a new connection  type of Cloud PDB)</li> <li>Configuration File</li> <li>Keystore Password</li> </ul> <p>&nbsp;</p> <p><a href="https://aejes.files.wordpress.com/2017/06/2017-06-05_09-41-19.png"><img data-attachment-id="1711" data-permalink="https://jes.blogs.shellprompt.net/2017/05/10/oracle-exadata-express-service-kicking-the-tires-part-5-sql-developer-connectivity/2017-06-05_09-41-19/" data-orig-file="https://aejes.files.wordpress.com/2017/06/2017-06-05_09-41-19.png" data-orig-size="985,499" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-10_09-41-19" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/06/2017-06-05_09-41-19.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/06/2017-06-05_09-41-19.png?w=625&#038;h=317" class="alignnone size-large wp-image-1711" src="https://aejes.files.wordpress.com/2017/06/2017-06-05_09-41-19.png?w=625&#038;h=317" alt="" width="625" height="317" srcset="https://aejes.files.wordpress.com/2017/06/2017-06-05_09-41-19.png?w=625&amp;h=317 625w, https://aejes.files.wordpress.com/2017/06/2017-06-05_09-41-19.png?w=150&amp;h=76 150w, https://aejes.files.wordpress.com/2017/06/2017-06-05_09-41-19.png?w=300&amp;h=152 300w, https://aejes.files.wordpress.com/2017/06/2017-06-05_09-41-19.png?w=768&amp;h=389 768w, https://aejes.files.wordpress.com/2017/06/2017-06-05_09-41-19.png 985w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <h3>Step 2- Ensure the JCE Policy files are installed</h3> <p>Recall in the post on connecting SQLcl to Exadata Express we needed to install the JCE Policy Files, we need to do the same for SQLDeveloper.</p> <p>Fortunately SQLDeveloper shows an error message which shows the location it is using to try and find the files.</p> <p><a href="https://aejes.files.wordpress.com/2017/06/2017-06-05_09-46-01.png"><img data-attachment-id="1712" data-permalink="https://jes.blogs.shellprompt.net/2017/05/10/oracle-exadata-express-service-kicking-the-tires-part-5-sql-developer-connectivity/2017-06-05_09-46-01/" data-orig-file="https://aejes.files.wordpress.com/2017/06/2017-06-05_09-46-01.png" data-orig-size="663,199" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-10_09-46-01" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/06/2017-06-05_09-46-01.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/06/2017-06-05_09-46-01.png?w=625&#038;h=188" class="alignnone size-large wp-image-1712" src="https://aejes.files.wordpress.com/2017/06/2017-06-05_09-46-01.png?w=625&#038;h=188" alt="" width="625" height="188" srcset="https://aejes.files.wordpress.com/2017/06/2017-06-05_09-46-01.png?w=625&amp;h=188 625w, https://aejes.files.wordpress.com/2017/06/2017-06-05_09-46-01.png?w=150&amp;h=45 150w, https://aejes.files.wordpress.com/2017/06/2017-06-05_09-46-01.png?w=300&amp;h=90 300w, https://aejes.files.wordpress.com/2017/06/2017-06-05_09-46-01.png 663w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>Hmmm, that&#8217;s weird &#8211; that is the location I put the files for my SQLcl installation.</p> <p>Ah! I realised my mistake, SQLDeveloper was already running when I installed the files for SQLcl, so I just needed to restart SQLDeveloper so it picked up the new JCE Policy files.</p> <p>After a quick restart, everything looks ok</p> <p><a href="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-00-05.png"><img data-attachment-id="1714" data-permalink="https://jes.blogs.shellprompt.net/2017/05/10/oracle-exadata-express-service-kicking-the-tires-part-5-sql-developer-connectivity/2017-06-05_10-00-05/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-00-05.png" data-orig-size="985,499" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-10_10-00-05" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-00-05.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-00-05.png?w=625&#038;h=317" class="alignnone size-large wp-image-1714" src="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-00-05.png?w=625&#038;h=317" alt="" width="625" height="317" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-00-05.png?w=625&amp;h=317 625w, https://aejes.files.wordpress.com/2017/05/2017-06-05_10-00-05.png?w=150&amp;h=76 150w, https://aejes.files.wordpress.com/2017/05/2017-06-05_10-00-05.png?w=300&amp;h=152 300w, https://aejes.files.wordpress.com/2017/05/2017-06-05_10-00-05.png?w=768&amp;h=389 768w, https://aejes.files.wordpress.com/2017/05/2017-06-05_10-00-05.png 985w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>Now we just select the same client_credentials.zip file we used earlier for the SQLcl connection and enter the keystore password that was entered when you downloaded the credentials file.</p> <p>Clicking the Test button shows we can connect ok!</p> <p><a href="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-02-33.png"><img data-attachment-id="1715" data-permalink="https://jes.blogs.shellprompt.net/2017/05/10/oracle-exadata-express-service-kicking-the-tires-part-5-sql-developer-connectivity/2017-06-05_10-02-33/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-02-33.png" data-orig-size="985,499" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-10_10-02-33" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-02-33.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-02-33.png?w=625&#038;h=317" class="alignnone size-large wp-image-1715" src="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-02-33.png?w=625&#038;h=317" alt="" width="625" height="317" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-02-33.png?w=625&amp;h=317 625w, https://aejes.files.wordpress.com/2017/05/2017-06-05_10-02-33.png?w=150&amp;h=76 150w, https://aejes.files.wordpress.com/2017/05/2017-06-05_10-02-33.png?w=300&amp;h=152 300w, https://aejes.files.wordpress.com/2017/05/2017-06-05_10-02-33.png?w=768&amp;h=389 768w, https://aejes.files.wordpress.com/2017/05/2017-06-05_10-02-33.png 985w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>Now we can save and open the connection and we should be good to go</p> <p><a href="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-04-42.png"><img data-attachment-id="1716" data-permalink="https://jes.blogs.shellprompt.net/2017/05/10/oracle-exadata-express-service-kicking-the-tires-part-5-sql-developer-connectivity/2017-06-05_10-04-42/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-04-42.png" data-orig-size="1595,1063" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-10_10-04-42" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-04-42.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-04-42.png?w=625&#038;h=417" class="alignnone size-large wp-image-1716" src="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-04-42.png?w=625&#038;h=417" alt="" width="625" height="417" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-05_10-04-42.png?w=625&amp;h=417 625w, https://aejes.files.wordpress.com/2017/05/2017-06-05_10-04-42.png?w=1250&amp;h=834 1250w, https://aejes.files.wordpress.com/2017/05/2017-06-05_10-04-42.png?w=150&amp;h=100 150w, https://aejes.files.wordpress.com/2017/05/2017-06-05_10-04-42.png?w=300&amp;h=200 300w, https://aejes.files.wordpress.com/2017/05/2017-06-05_10-04-42.png?w=768&amp;h=512 768w, https://aejes.files.wordpress.com/2017/05/2017-06-05_10-04-42.png?w=1024&amp;h=682 1024w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>In this example I connected as PDB_ADMIN, you can use the same technique to connect as your real development SCHEMA user.</p> <p>&nbsp;</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aejes.wordpress.com/1709/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aejes.wordpress.com/1709/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=jes.blogs.shellprompt.net&#038;blog=71717384&#038;post=1709&#038;subd=aejes&#038;ref=&#038;feed=1" width="1" height="1" /> John Scott http://jes.blogs.shellprompt.net/?p=1709 Wed May 10 2017 06:33:11 GMT-0400 (EDT) Oracle Exadata Express Service – Kicking the Tires (Part 4 – SQLcl Connectivity) https://jes.blogs.shellprompt.net/2017/05/09/oracle-exadata-express-service-kicking-the-tires-part-4-sqlcl-connectivity/ <p>In the <a href="https://jes.blogs.shellprompt.net/2017/05/08/oracle-exadata-express-service-kicking-the-tires-part-3-poking-around/">last post </a>we looked round connecting to our Exadata Express Instance via a browser to play with App Builder and SQL Workshop.</p> <p>How about if we want to connect via SQLcl (you can use SQLPlus if you like but SQLcl is sooo much more productive!)?</p> <p>Well if you recall from the earlier post there is an option in the Service Console to enable client access</p> <p><img data-attachment-id="1637" data-permalink="https://jes.blogs.shellprompt.net/2017/05/09/oracle-exadata-express-service-kicking-the-tires-part-4-sqlcl-connectivity/2017-06-04_23-37-34-2/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-37-341.png?w=625" data-orig-size="1674,817" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-06-04_23-37-34" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-37-341.png?w=625?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-37-341.png?w=625?w=625" class="alignnone size-full wp-image-1637" src="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-37-341.png?w=625" alt="2017-06-04_23-37-34.png" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-37-341.png?w=625 625w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-37-341.png?w=1250 1250w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-37-341.png?w=150 150w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-37-341.png?w=300 300w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-37-341.png?w=768 768w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-37-341.png?w=1024 1024w" sizes="(max-width: 625px) 100vw, 625px" /></p> <p>So, let&#8217;s click that link</p> <p><img data-attachment-id="1641" data-permalink="https://jes.blogs.shellprompt.net/2017/05/09/oracle-exadata-express-service-kicking-the-tires-part-4-sqlcl-connectivity/2017-06-05_00-12-07/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-12-07.png?w=625" data-orig-size="720,400" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Enable Client Access" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-12-07.png?w=625?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-12-07.png?w=625?w=625" class="alignnone size-full wp-image-1641" src="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-12-07.png?w=625" alt="Enable Client Access" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-12-07.png?w=625 625w, https://aejes.files.wordpress.com/2017/05/2017-06-05_00-12-07.png?w=150 150w, https://aejes.files.wordpress.com/2017/05/2017-06-05_00-12-07.png?w=300 300w, https://aejes.files.wordpress.com/2017/05/2017-06-05_00-12-07.png 720w" sizes="(max-width: 625px) 100vw, 625px" /></p> <p>Clicking the &#8216;Enable Client Access&#8217; button is a tad underwhelming (I&#8217;m not sure what I expected), but the Service Console now has some new options available.</p> <p><img data-attachment-id="1646" data-permalink="https://jes.blogs.shellprompt.net/2017/05/09/oracle-exadata-express-service-kicking-the-tires-part-4-sqlcl-connectivity/2017-06-05_00-14-20/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-14-20.png?w=625" data-orig-size="1663,809" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-06-05_00-14-20" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-14-20.png?w=625?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-14-20.png?w=625?w=625" class="alignnone size-full wp-image-1646" src="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-14-20.png?w=625" alt="2017-06-05_00-14-20.png" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-14-20.png?w=625 625w, https://aejes.files.wordpress.com/2017/05/2017-06-05_00-14-20.png?w=1250 1250w, https://aejes.files.wordpress.com/2017/05/2017-06-05_00-14-20.png?w=150 150w, https://aejes.files.wordpress.com/2017/05/2017-06-05_00-14-20.png?w=300 300w, https://aejes.files.wordpress.com/2017/05/2017-06-05_00-14-20.png?w=768 768w, https://aejes.files.wordpress.com/2017/05/2017-06-05_00-14-20.png?w=1024 1024w" sizes="(max-width: 625px) 100vw, 625px" /></p> <p>&nbsp;</p> <p>In order to connect via SQLcl we need to download some client credentials (think of it like private keys in SSH).</p> <p>We can also download drivers for other languages (e.g. NodeJS), also there are handy links for downloading SQLcl, SQL Developer etc.</p> <p>So clicking on the Download Client Credentials asks me to enter a password:</p> <p><img data-attachment-id="1656" data-permalink="https://jes.blogs.shellprompt.net/2017/05/09/oracle-exadata-express-service-kicking-the-tires-part-4-sqlcl-connectivity/2017-06-05_00-18-42/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-18-42.png?w=625" data-orig-size="721,499" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-06-05_00-18-42" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-18-42.png?w=625?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-18-42.png?w=625?w=625" class="alignnone size-full wp-image-1656" src="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-18-42.png?w=625" alt="2017-06-05_00-18-42.png" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-18-42.png?w=625 625w, https://aejes.files.wordpress.com/2017/05/2017-06-05_00-18-42.png?w=150 150w, https://aejes.files.wordpress.com/2017/05/2017-06-05_00-18-42.png?w=300 300w, https://aejes.files.wordpress.com/2017/05/2017-06-05_00-18-42.png 721w" sizes="(max-width: 625px) 100vw, 625px" /></p> <p>It took me a few attempts to create a password with sufficient complexity (even using 1Password), once I had a valid password it took 20 seconds or so to download the credentials (I assume in the background it&#8217;s generating a private / public key)</p> <p><img data-attachment-id="1659" data-permalink="https://jes.blogs.shellprompt.net/2017/05/09/oracle-exadata-express-service-kicking-the-tires-part-4-sqlcl-connectivity/2017-06-05_00-20-46/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-20-46.png?w=625" data-orig-size="718,498" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-06-05_00-20-46" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-20-46.png?w=625?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-20-46.png?w=625?w=625" class="alignnone size-full wp-image-1659" src="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-20-46.png?w=625" alt="2017-06-05_00-20-46.png" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-20-46.png?w=625 625w, https://aejes.files.wordpress.com/2017/05/2017-06-05_00-20-46.png?w=150 150w, https://aejes.files.wordpress.com/2017/05/2017-06-05_00-20-46.png?w=300 300w, https://aejes.files.wordpress.com/2017/05/2017-06-05_00-20-46.png 718w" sizes="(max-width: 625px) 100vw, 625px" /></p> <p>There is a very handy link at the end of the Instructions for step-by-step walkthroughs of connecting via the various clients. In essence it boils down to:</p> <p><img data-attachment-id="1676" data-permalink="https://jes.blogs.shellprompt.net/2017/05/09/oracle-exadata-express-service-kicking-the-tires-part-4-sqlcl-connectivity/2017-06-05_00-30-58/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-30-58.png?w=625" data-orig-size="889,342" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-06-05_00-30-58" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-30-58.png?w=625?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-30-58.png?w=625?w=625" class="alignnone size-full wp-image-1676" src="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-30-58.png?w=625" alt="2017-06-05_00-30-58.png" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-30-58.png?w=625 625w, https://aejes.files.wordpress.com/2017/05/2017-06-05_00-30-58.png?w=150 150w, https://aejes.files.wordpress.com/2017/05/2017-06-05_00-30-58.png?w=300 300w, https://aejes.files.wordpress.com/2017/05/2017-06-05_00-30-58.png?w=768 768w, https://aejes.files.wordpress.com/2017/05/2017-06-05_00-30-58.png 889w" sizes="(max-width: 625px) 100vw, 625px" /></p> <p>For SQLcl, I just needed to move the downloaded zipfile somewhere SQLcl will be able to access it &#8211; <strong>note you do not need to unzip the file.</strong></p> <pre class="brush: bash; title: ; notranslate"> bash-3.2$ ls -al total 48 drwxr-xr-x 3 jes staff 102 9 May 21:22 . drwxr-xr-x 3 jes staff 102 9 May 21:22 .. -rw-r--r--@ 1 jes staff 22421 9 May 21:22 client_credentials.zip </pre> <p>Now fire up SQLcl, using nolog mode.</p> <pre class="brush: bash; title: ; notranslate"> bash-3.2$ sql /nolog SQLcl: Release 4.1.0 Release Candidate on Tue May&amp;amp;nbsp;9 21:32:12 2016 Copyright (c) 1982, 2016, Oracle. All rights reserved. SQL&gt; </pre> <p>Now following the instructions we just need to tell SQLcl about the cloudconfig:</p> <pre class="brush: bash; title: ; notranslate"> SQL&gt; set cloudconfig client_credentials.zip ***** JCE NOT INSTALLED **** ***** CAN NOT CONNECT TO PDB Service without it **** Current Java: /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre Follow instructions on http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html SQL&gt; </pre> <p>Hmm ok, that didn&#8217;t work too well.</p> <p>Ah! Looking back at the requirements up above, I didn&#8217;t install the Java Cryptography Extension. Ok let&#8217;s do that by visiting the helpful link in the error message:</p> <p><img data-attachment-id="1686" data-permalink="https://jes.blogs.shellprompt.net/2017/05/09/oracle-exadata-express-service-kicking-the-tires-part-4-sqlcl-connectivity/2017-06-05_00-33-18/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-33-18.png?w=625" data-orig-size="1521,863" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-06-05_00-33-18" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-33-18.png?w=625?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-33-18.png?w=625?w=625" class="alignnone size-full wp-image-1686" src="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-33-18.png?w=625" alt="2017-06-05_00-33-18.png" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-33-18.png?w=625 625w, https://aejes.files.wordpress.com/2017/05/2017-06-05_00-33-18.png?w=1250 1250w, https://aejes.files.wordpress.com/2017/05/2017-06-05_00-33-18.png?w=150 150w, https://aejes.files.wordpress.com/2017/05/2017-06-05_00-33-18.png?w=300 300w, https://aejes.files.wordpress.com/2017/05/2017-06-05_00-33-18.png?w=768 768w, https://aejes.files.wordpress.com/2017/05/2017-06-05_00-33-18.png?w=1024 1024w" sizes="(max-width: 625px) 100vw, 625px" /></p> <p>When you download this zipfile you&#8217;ll find it contains 3 files:</p> <ul> <li>local_policy.jar</li> <li>README.txt</li> <li>US_export_policy.jar</li> </ul> <p>If you read the README.txt (everyone does that right?) &#8211; you&#8217;ll see you need to copy those 2 jar files to the location of your JRE (overwriting the originals after taking a backup incase you want to revert!).</p> <p>In my case, on a Mac I needed to copy them to-</p> <pre>/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/security</pre> <p>Once I&#8217;d done that I needed to quit out of SQLcl and reconnect so it picked up the new jar files, then I could retry the cloudconfig setting</p> <pre class="brush: bash; title: ; notranslate"> SQL&gt; set cloudconfig client_credentials.zip Using temp directory:/var/folders/2l/lnw1_vds343f1byjvzlr70y80000gn/T/oracle_cloud_config5160868892063171139 SQL&gt; </pre> <p>Curiously it doesn&#8217;t prompt me for my password here (the one I used when I Downloaded Client Credentials (even though the help says it should). Now according to the Help I should be able to just connect</p> <p><a href="https://aejes.files.wordpress.com/2017/05/2017-06-05_07-30-50.png"><img data-attachment-id="1698" data-permalink="https://jes.blogs.shellprompt.net/2017/05/09/oracle-exadata-express-service-kicking-the-tires-part-4-sqlcl-connectivity/2017-06-05_07-30-50/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_07-30-50.png" data-orig-size="871,330" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-09_22-30-50" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_07-30-50.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_07-30-50.png?w=625&#038;h=237" class="alignnone size-large wp-image-1698" src="https://aejes.files.wordpress.com/2017/05/2017-06-05_07-30-50.png?w=625&#038;h=237" alt="" width="625" height="237" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-05_07-30-50.png?w=625&amp;h=237 625w, https://aejes.files.wordpress.com/2017/05/2017-06-05_07-30-50.png?w=150&amp;h=57 150w, https://aejes.files.wordpress.com/2017/05/2017-06-05_07-30-50.png?w=300&amp;h=114 300w, https://aejes.files.wordpress.com/2017/05/2017-06-05_07-30-50.png?w=768&amp;h=291 768w, https://aejes.files.wordpress.com/2017/05/2017-06-05_07-30-50.png 871w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>and&#8230;here&#8217;s where some problems started&#8230;.this implies I should use the syntax</p> <pre>conn &lt;username&gt;/&lt;password&gt;@&lt;servicename&gt;</pre> <p>So I tried all types of combinations of my email address (assuming that was the right username), also for servicename I used &#8211;</p> <ul> <li>aeexa01</li> <li>aeexa01-&lt;Identity Domain&gt;</li> <li>aeexa01-&lt;Identity Domain&gt;.</li> <li>aeexa01-aeprod.db.em2.oraclecloudapps.com</li> </ul> <p>but almost everything I tried resulted in an error similar to</p> <pre class="brush: bash; title: ; notranslate"> SQL&gt; conn &lt;MY USERNAME&gt;@aeexa01 Password? (**********?) **************** USER = &lt;MY USERNAME&gt; URL = jdbc:oracle:thin:@aeexa01 Error Message = IO Error: Invalid connection string format, a valid format is: &quot;host:port:sid&quot; USER =&lt;MY USERNAME&gt; Error Message = IO Error: Invalid connection string format, a valid format is: &quot;host:port:sid&quot; Warning: You are no longer connected to ORACLE. SQL&gt; </pre> <h2>Question Everything</h2> <p>So, I fell back on an old technique I always have in these situations, step away from the computer for a bit, have a coffee, do something else entirely and then come back to it.</p> <p>The first thing I tried (I&#8217;m still not sure what made me do it), was trying the exact same connection details shown in the help, i.e.</p> <pre class="oac_no_warn">conn pdb_admin/welcome1@dbaccess</pre> <p>and i received this</p> <pre class="brush: bash; title: ; notranslate"> SQL&gt; conn pdb_admin/welcome1@dbaccess USER = pdb_admin URL = jdbc:oracle:thin:@(description= (address=(protocol=tcps)(port=1522)(host=dbaccess.em2.oraclecloudapps.com)) (connect_data=(service_name=xz2kksm1oe.nldc1.oraclecloud.com)) (security=(ssl_server_cert_dn=&quot;CN=dbaccess.em2.oraclecloudapps.com,O=Oracle Corporation,L=Redwood Shores,ST=California,C=US&quot;)) ) Error Message = ORA-28000: the account is locked Warning: You are no longer connected to ORACLE. SQL&gt; </pre> <p>check out the &#8220;the account is locked&#8221; message!</p> <p>How could this be? My instance is not named dbaccess so am I connecting to someone elses instance?</p> <p>Remember I told you earlier you didn&#8217;t need to unzip that zip file? Well that&#8217;s exactly what I did to see what was in it.</p> <pre class="brush: bash; title: ; notranslate"> bash-3.2$ ls -al total 112 drwxr-xr-x 9 jes staff 306 9 May 07:54 . drwxr-xr-x 4 jes staff 136 9 May 07:53 .. -rw-------@ 1 jes staff 7045 9 May 22:20 cwallet.sso -rw-------@ 1 jes staff 7000 9 May 22:20 ewallet.p12 -rw-------@ 1 jes staff 3181 9 May 22:20 keystore.jks -rw-r-----@ 1 jes staff 134 9 May 22:20 sqlnet.ora -rw-r-----@ 1 jes staff 334 9 May 22:20 tnsnames.ora -rw-------@ 1 jes staff 3797 9 May 22:20 truststore.jks bash-3.2$ </pre> <p>Ah, there&#8217;s a tnsnames.ora in there, let&#8217;s look at it &#8211;</p> <pre class="brush: bash; title: ; notranslate"> bash-3.2$ more tnsnames.ora dbaccess = (description= (address=(protocol=tcps)(port=1522)(host=dbaccess.em2.oraclecloudapps.com)) (connect_data=(service_name=&lt;SOME RANDOM STRING&gt;.nldc1.oraclecloud.com)) (security=(ssl_server_cert_dn=&quot;CN=dbaccess.em2.oraclecloudapps.com,O=Oracle Corporation,L=Redwood Shores,ST=California,C=US&quot;)) ) </pre> <p>Ah, so that explains it, looks like the default configuration gives a name of <em><strong>dbaccess</strong></em>.</p> <p>But what about the PDB_ADMIN user that we used? Well lets take a look back of the Service Console page &#8211;</p> <p><a href="https://aejes.files.wordpress.com/2017/05/2017-06-05_07-59-19.png"><img data-attachment-id="1700" data-permalink="https://jes.blogs.shellprompt.net/2017/05/09/oracle-exadata-express-service-kicking-the-tires-part-4-sqlcl-connectivity/2017-06-05_07-59-19/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_07-59-19.png" data-orig-size="954,648" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-09_22-59-19" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_07-59-19.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_07-59-19.png?w=625&#038;h=425" class="alignnone size-large wp-image-1700" src="https://aejes.files.wordpress.com/2017/05/2017-06-05_07-59-19.png?w=625&#038;h=425" alt="" width="625" height="425" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-05_07-59-19.png?w=625&amp;h=425 625w, https://aejes.files.wordpress.com/2017/05/2017-06-05_07-59-19.png?w=150&amp;h=102 150w, https://aejes.files.wordpress.com/2017/05/2017-06-05_07-59-19.png?w=300&amp;h=204 300w, https://aejes.files.wordpress.com/2017/05/2017-06-05_07-59-19.png?w=768&amp;h=522 768w, https://aejes.files.wordpress.com/2017/05/2017-06-05_07-59-19.png 954w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>Notice the PDB_ADMIN user is mentioned there. Now let&#8217;s set a password</p> <p><a href="https://aejes.files.wordpress.com/2017/05/2017-06-05_08-01-01.png"><img data-attachment-id="1701" data-permalink="https://jes.blogs.shellprompt.net/2017/05/09/oracle-exadata-express-service-kicking-the-tires-part-4-sqlcl-connectivity/2017-06-05_08-01-01/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_08-01-01.png" data-orig-size="650,370" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-09_23-01-01" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_08-01-01.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_08-01-01.png?w=625&#038;h=356" class="alignnone size-large wp-image-1701" src="https://aejes.files.wordpress.com/2017/05/2017-06-05_08-01-01.png?w=625&#038;h=356" alt="" width="625" height="356" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-05_08-01-01.png?w=625&amp;h=356 625w, https://aejes.files.wordpress.com/2017/05/2017-06-05_08-01-01.png?w=150&amp;h=85 150w, https://aejes.files.wordpress.com/2017/05/2017-06-05_08-01-01.png?w=300&amp;h=171 300w, https://aejes.files.wordpress.com/2017/05/2017-06-05_08-01-01.png 650w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p><a href="https://aejes.files.wordpress.com/2017/05/2017-06-05_08-01-55.png"><img data-attachment-id="1702" data-permalink="https://jes.blogs.shellprompt.net/2017/05/09/oracle-exadata-express-service-kicking-the-tires-part-4-sqlcl-connectivity/2017-06-05_08-01-55/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_08-01-55.png" data-orig-size="651,369" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-09_23-01-55" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_08-01-55.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_08-01-55.png?w=625&#038;h=354" class="alignnone size-large wp-image-1702" src="https://aejes.files.wordpress.com/2017/05/2017-06-05_08-01-55.png?w=625&#038;h=354" alt="" width="625" height="354" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-05_08-01-55.png?w=625&amp;h=354 625w, https://aejes.files.wordpress.com/2017/05/2017-06-05_08-01-55.png?w=150&amp;h=85 150w, https://aejes.files.wordpress.com/2017/05/2017-06-05_08-01-55.png?w=300&amp;h=170 300w, https://aejes.files.wordpress.com/2017/05/2017-06-05_08-01-55.png 651w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>Now lets try connecting again &#8211;</p> <pre class="brush: bash; title: ; notranslate"> SQL&gt; conn pdb_admin@dbaccess Password? (**********?) *********** Connected. SQL&gt; </pre> <p>Success!</p> <p>Let&#8217;s try some basic queries &#8211;</p> <pre class="brush: bash; title: ; notranslate"> SQL&gt; select object_name, object_type from user_objects; no rows selected </pre> <p>hmmm, not very exciting, let&#8217;s check which users are available</p> <pre class="brush: bash; title: ; notranslate"> SQL&gt; select username from all_users order by username; USERNAME --------------------------------------------------------------------------------------------------------------- ANONYMOUS APEX_050000 APEX_050100 APEX_INSTANCE_ADMIN_USER APEX_LISTENER APEX_PUBLIC_USER APEX_REST_PUBLIC_USER APPQOSSYS AUDSYS C##CLOUD$SERVICE C##CLOUD_OPS C##DBPOD C##DV_ACCT_ADMIN C##DV_OWNER C##PDBSERVICE$ADMIN C##SERVICE_CONFIG C9_OPS CTXSYS DBSFWUSER DBSNMP DIP DVF DVSYS FLOWS_FILES GGSYS GSMADMIN_INTERNAL GSMCATUSER GSMUSER LBACSYS OJVMSYS OLAPSYS ORACLE_OCM ORDS_METADATA ORDS_PUBLIC_USER OUTLN PDB_ADMIN PDB_MON REMOTE_SCHEDULER_AGENT SYS SYS$UMF SYSBACKUP SYSDG SYSKM SYSRAC SYSTEM WMSYS XDB XS$NULL XZ2KKSM1O 49 rows selected. &amp;nbsp; SQL&gt; </pre> <p>So quite a lot of default users setup. Notice also the schema named XZ2KKSM1OE which is the same default one I noticed in SQL Workshop in a previous post.</p> <p>So let&#8217;s set the password for that account and trying logging in &#8211;</p> <pre class="brush: bash; title: ; notranslate"> SQL&gt; alter user XZ2KKSM1OE identified by &lt;MY_NEW_PASSWORD&gt; 2 / User XZ2KKSM1OE altered. SQL&gt; conn XZ2KKSM1OE@dbaccess Password? (**********?) ************ Connected. </pre> <p>Great!</p> <pre class="brush: bash; title: ; notranslate"> SQL&gt; select object_name, object_type from user_objects; OBJECT_NAME OBJECT_TYPE DEPT                              TABLE SYS_C0013892             INDEX EMP                               TABLE &lt;rest of output ommitted&gt; </pre> <p>So, you see how easy it is to connect from your local machine to Exadata Express via SQLcl (that is, once you know all the quirks!)</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aejes.wordpress.com/1628/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aejes.wordpress.com/1628/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=jes.blogs.shellprompt.net&#038;blog=71717384&#038;post=1628&#038;subd=aejes&#038;ref=&#038;feed=1" width="1" height="1" /> John Scott http://jes.blogs.shellprompt.net/?p=1628 Tue May 09 2017 17:07:17 GMT-0400 (EDT) May ODTUG News http://www.odtug.com/p/bl/et/blogaid=717&source=1 Stay up to date on all things ODTUG: Read about the ODTUG Innovation Award, Kscope17 Updates, ODTUG Community News and Upcoming ODTUG Webinars. ODTUG http://www.odtug.com/p/bl/et/blogaid=717&source=1 Tue May 09 2017 14:15:07 GMT-0400 (EDT) Region display selector http://reynde.blogspot.com/2017/05/region-display-selector.html <h2>How to use the Region Display Selector</h2><div>in my previous blog post on <i>Sticking Information to the top of the page</i>&nbsp;I mentioned the <i>Region Display Selector</i>, but I thought in fact it may also be good to explain that a bit further as well.</div><div><br /></div><div>This mechanism is used in the APEX Builder all over the place.</div><div>I'm working here in APEX 5.1.1 ...</div><div><br /></div><h4>Example in APEX Builder</h4><div>This mechanism is used all over the place in the builder, but one example is the <i>Security Attributes</i>&nbsp;in <i>Shared Components</i>.</div><div>When "Show All" is selected, you can see all the tab pages. And when you scroll down, you'll notice the region indicator stays in its place and a visualisation effect shows you where you are while scrolling.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-C2sHpCPP4mk/WRHHTcXTKmI/AAAAAAAAAvM/Jid5fmw_7BsfzVWY6FqlcsTub_rlERKNQCLcB/s1600/Show%2BAll.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="334" src="https://1.bp.blogspot.com/-C2sHpCPP4mk/WRHHTcXTKmI/AAAAAAAAAvM/Jid5fmw_7BsfzVWY6FqlcsTub_rlERKNQCLcB/s640/Show%2BAll.png" width="640" /></a></div><div><br /></div><div>When you select one of the tab pages, only that specific region will be shown? In the example below the <i>Session Management</i>&nbsp;tab is selected.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-pLxQUimE1as/WRHIANzaxfI/AAAAAAAAAvU/KCghHN4eSakIL0sbgRNCiQQPBeQrrFgSgCLcB/s1600/Show%2BSession.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="334" src="https://3.bp.blogspot.com/-pLxQUimE1as/WRHIANzaxfI/AAAAAAAAAvU/KCghHN4eSakIL0sbgRNCiQQPBeQrrFgSgCLcB/s640/Show%2BSession.png" width="640" /></a></div><div><br /></div><div>This exact same mechanism I want to be able to use in my own applications ...</div><div><br /></div><h3>Example</h3><div>A very quick example: a (for now) two pages application: the Home page (which is empty) and the Region Display Indicator page. I'll walk through it while creating the page.</div><div><br /></div><h3>Starting point</h3><div>I used the wizard to create the application in its most simple way: application with home page!</div><div><br /></div><div>I added the page (2)&nbsp;<i>Region Display Selector</i>&nbsp;as an empty page:</div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-q8t7QEsPYSU/WRHLG3klRYI/AAAAAAAAAvg/U3idWcqivqQJYW_y9rgOfkBtb__jD7iqQCLcB/s1600/Builder.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="328" src="https://1.bp.blogspot.com/-q8t7QEsPYSU/WRHLG3klRYI/AAAAAAAAAvg/U3idWcqivqQJYW_y9rgOfkBtb__jD7iqQCLcB/s640/Builder.png" width="640" /></a></div><div><br /></div><div><br /></div><div>On Page 2 I've then created two regions in the <i>Content Body</i>:</div><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/--_aA3ksokRo/WRHLeNRWBqI/AAAAAAAAAvk/emBNuMBSFo4s3Z_H0dBCrASYAL-tcO4XQCLcB/s1600/Screen%2BShot%2B2017-05-09%2Bat%2B16.00.19.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://2.bp.blogspot.com/--_aA3ksokRo/WRHLeNRWBqI/AAAAAAAAAvk/emBNuMBSFo4s3Z_H0dBCrASYAL-tcO4XQCLcB/s320/Screen%2BShot%2B2017-05-09%2Bat%2B16.00.19.png" width="210" /></a></div><div><br /></div><div><br /></div><div>This is the result for now:</div><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-p8YSaY9O960/WRHLpjGNUFI/AAAAAAAAAvo/OjhxloSqByskU5KNpHXRnHA_-GtLh6MhgCLcB/s1600/Screen%2BShot%2B2017-05-09%2Bat%2B16.01.05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="270" src="https://2.bp.blogspot.com/-p8YSaY9O960/WRHLpjGNUFI/AAAAAAAAAvo/OjhxloSqByskU5KNpHXRnHA_-GtLh6MhgCLcB/s640/Screen%2BShot%2B2017-05-09%2Bat%2B16.01.05.png" width="640" /></a></div><div><br /></div><div><br /></div><h3>Creating the Region Display Selector region</h3><div>Simply create a new region of type <i>Region Display Selector</i>.</div><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-s3CjxqKnRFE/WRHMU9I2wyI/AAAAAAAAAvw/TXNP6MjDx6gY1jvVHDoVV-bkW_JFkyQpgCLcB/s1600/Screen%2BShot%2B2017-05-09%2Bat%2B16.03.58.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://2.bp.blogspot.com/-s3CjxqKnRFE/WRHMU9I2wyI/AAAAAAAAAvw/TXNP6MjDx6gY1jvVHDoVV-bkW_JFkyQpgCLcB/s320/Screen%2BShot%2B2017-05-09%2Bat%2B16.03.58.png" width="188" /></a></div><div><br /></div><div>You now already have all building blocks in place.&nbsp;</div><div>But I hope you agree with me that it's not yet the correct layout:</div><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-rHveBFfjZLU/WRHPYtMd2NI/AAAAAAAAAv8/meuwtmLhLrwo2TY15wdc9dt_SEKOETmNgCLcB/s1600/Screen%2BShot%2B2017-05-09%2Bat%2B16.16.56.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="290" src="https://3.bp.blogspot.com/-rHveBFfjZLU/WRHPYtMd2NI/AAAAAAAAAv8/meuwtmLhLrwo2TY15wdc9dt_SEKOETmNgCLcB/s640/Screen%2BShot%2B2017-05-09%2Bat%2B16.16.56.png" width="640" /></a></div><div><br /></div><div>But it does already work. In the screenshot above the "Show all" is selected and yes, both regions are shown.</div><div>But when you e.g. select "Sub Region2", you'll notice "Sub Region 1" is no longer displayed.</div><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-PpaxkV4ATVQ/WRHP1lvgcrI/AAAAAAAAAwA/Si0ZpV_bn8Yo8wf2R5ZuVdIJ3ATalFGLgCLcB/s1600/Screen%2BShot%2B2017-05-09%2Bat%2B16.18.53.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="214" src="https://4.bp.blogspot.com/-PpaxkV4ATVQ/WRHP1lvgcrI/AAAAAAAAAwA/Si0ZpV_bn8Yo8wf2R5ZuVdIJ3ATalFGLgCLcB/s640/Screen%2BShot%2B2017-05-09%2Bat%2B16.18.53.png" width="640" /></a></div><div><br /></div><div><br /></div><div>Now I want the <i>Selector</i>&nbsp;region on top of both sub regions and I want to hide the title.</div><div><br /></div><div>Moving it up the page is easy. Simply drag and drop the region where you want to have it.</div><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-9hokeSg3tHw/WRHQPr8aBVI/AAAAAAAAAwE/h_Dp0uGVQaMusBFlicciag6UWgnNhUKCACLcB/s1600/Screen%2BShot%2B2017-05-09%2Bat%2B16.20.18.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://2.bp.blogspot.com/-9hokeSg3tHw/WRHQPr8aBVI/AAAAAAAAAwE/h_Dp0uGVQaMusBFlicciag6UWgnNhUKCACLcB/s320/Screen%2BShot%2B2017-05-09%2Bat%2B16.20.18.png" width="185" /></a></div><div><br /></div><div>In the attributes pane for the <i>Selector</i>&nbsp;region, you can edit the <i>Template Options</i>:</div><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-bOQ0kzNLjkg/WRHQzhxVfyI/AAAAAAAAAwM/rRZx0Z0agqcBDJcrORFXrP_e6WDq23voQCK4B/s1600/Screen%2BShot%2B2017-05-09%2Bat%2B16.22.06.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="310" src="https://3.bp.blogspot.com/-bOQ0kzNLjkg/WRHQzhxVfyI/AAAAAAAAAwM/rRZx0Z0agqcBDJcrORFXrP_e6WDq23voQCK4B/s640/Screen%2BShot%2B2017-05-09%2Bat%2B16.22.06.png" width="640" /></a></div><div><br /></div><div>Set the header to <i>Hidden </i>and optionally also set style to <i>Remove UI Decoration</i>:</div><div><br /></div><div><a href="http://2.bp.blogspot.com/--WZNWbzdIJM/WRHRGmHwOgI/AAAAAAAAAwU/77BplUcSNp8e_8qnLhLA9mbnKUx2bFOCgCK4B/s1600/Screen%2BShot%2B2017-05-09%2Bat%2B16.23.59.png" imageanchor="1"><img border="0" height="307" src="https://2.bp.blogspot.com/--WZNWbzdIJM/WRHRGmHwOgI/AAAAAAAAAwU/77BplUcSNp8e_8qnLhLA9mbnKUx2bFOCgCK4B/s320/Screen%2BShot%2B2017-05-09%2Bat%2B16.23.59.png" width="320" /></a></div><div><br /></div><div><br /></div><div>This results in:</div><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-nTO0vNXmbTc/WRHRlGpc6_I/AAAAAAAAAwg/PWoOfDbfXogD7H80k489UdpXXoCH7xguACK4B/s1600/Screen%2BShot%2B2017-05-09%2Bat%2B16.26.17.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="274" src="https://4.bp.blogspot.com/-nTO0vNXmbTc/WRHRlGpc6_I/AAAAAAAAAwg/PWoOfDbfXogD7H80k489UdpXXoCH7xguACK4B/s640/Screen%2BShot%2B2017-05-09%2Bat%2B16.26.17.png" width="640" /></a></div><div><br /></div><div><br /></div><div>And I believe this does the trick.</div><div>If you want the <i>Selector</i>&nbsp;to stick to the page, you can move it into the Breadcrumb Bar.</div><div>Or have a look at my previous blogpost ;-)</div><div><br /></div><div>Happy to share</div><div><br /></div><div><br /></div><div><br /></div><div><br /></div> Roeland Van den Eynde tag:blogger.com,1999:blog-3391696929738939906.post-8088087154444026642 Tue May 09 2017 10:31:00 GMT-0400 (EDT) Fix items and buttons on top of your page http://reynde.blogspot.com/2017/05/fix-items-and-buttons-on-top-of-your.html <h2>Fix items and buttons on top of your page</h2><div>A requirement that regularly crossed my path and I didn't know of a standard way of doing it: on the top of a detail page some basic information is repeated and the page buttons are to be displayed at the same place. And more importantly: they must stick to that place while you scroll down to the bottom of the page.</div><div><br /></div><div>In this example I'm working on APEX 5.1.</div><div><br /></div><h3>Example</h3><div>We're dealing with a <i>form on a table with report</i> (IR).</div><div>The Interactive Report (IR) shows the name of an employee and some other general info. When you navigate to the detail page, the name must be repeated at the top of the page.</div><div>All input fields (there are a lot of them) are in a second region.</div><div><br /></div><div>We worked with a <i>Region Display Indicator </i>to keep on overview on the page. But couldn't find a way to keep that region display indicator sticking to the top of the page while scrolling down. Though in the APEX Builder this technique is used, somehow.</div><div><br /></div><div>There are some reasons why I decided to dig into this one today:</div><div><ol><li>it's a logical request</li><li>if I would manage to get this repeating information sticking to the page, I could use the same technique to stick the page buttons to the top of the page</li><li>when it's done in the APEX Builder, it <i>must be possible </i>in my own APEX applications as well</li></ol><div>So I started the research and asked my good friend, Mr. Google.</div></div><div>And it has been done before by several other people. I gathered some information here and there and made a solution that fits my needs by combining all the pieces.</div><div><br /></div><h3>Small introduction</h3><div>First this: I'm using screenshots of an application we're building for a customer. It's an application that supports the hiring process of new employees. And I must stress the fact that <b><span style="color: red;">the use-case, all names, characters, and incidents portrayed in this example are fictitious. No identification with actual persons (living or deceased), places, buildings, and products is intended or should be inferred</span>.</b></div><div><br /></div><div>For the screenshots I'm using the English version of the application. However, you'll notice that some of the lists of values are in Dutch simply because they are not translated in the base system of the customer.</div><div><br /></div><h3>The result</h3><div>Here's what I was going for in a few screenshots.</div><div><br /></div><div>The Overview page with general information is an <i>Interactive Report</i>.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-rw1QbuIMOig/WRGv0dtuPWI/AAAAAAAAAsw/237blQ-j1fUjH4gDITx3maReF2RmsRmBgCLcB/s1600/HRS%2BOverview.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="209" src="https://1.bp.blogspot.com/-rw1QbuIMOig/WRGv0dtuPWI/AAAAAAAAAsw/237blQ-j1fUjH4gDITx3maReF2RmsRmBgCLcB/s640/HRS%2BOverview.png" width="640" /></a></div><div><br /></div><div>To see (and possibly edit) the details, the first row has been selected. This is the page how it's shown on page load:</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-ukxYFX2Bx3U/WRGwK6CxflI/AAAAAAAAAs0/01mLNhHOP604FkLXUo-wSNodlL2ljTPJQCLcB/s1600/Detail%2BTop.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="284" src="https://2.bp.blogspot.com/-ukxYFX2Bx3U/WRGwK6CxflI/AAAAAAAAAs0/01mLNhHOP604FkLXUo-wSNodlL2ljTPJQCLcB/s640/Detail%2BTop.png" width="640" /></a></div><div><br /></div><div><br /></div><div>And when you scroll down, you'll notice the title "Candidate ..." and the buttons "Overview", "Apply Changes" and "Submit" always stick to the top of the page.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-_dqxV99bQSQ/WRGx6ALNTYI/AAAAAAAAAtA/dS5yGEIcF3sl0Fjg1YHCG7dvysECY-jYQCLcB/s1600/Detail%2Bbottom.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="252" src="https://1.bp.blogspot.com/-_dqxV99bQSQ/WRGx6ALNTYI/AAAAAAAAAtA/dS5yGEIcF3sl0Fjg1YHCG7dvysECY-jYQCLcB/s640/Detail%2Bbottom.png" width="640" /></a></div><div><br /></div><div><br /></div><h3>Step-by-step explained</h3><div>The two pages have been generated by the wizard <i>Form on a table with report</i>. All data (except for the address information and the attachments) is stored in one large table, which makes it easy when using the <i>Automatic Row Fetch</i>&nbsp;and <i>Automatic Row Processing</i>.</div><div><br /></div><div>All page items are placed in some regions, to logically structure the page. And by using the <i>Region Display Indicator</i>&nbsp;it's easy to navigate through all fields without having to scroll down like an idiot all the time.</div><div><br /></div><div>So when you do nothing, all the regions are placed in the&nbsp;<i>Content Body </i>of the page.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-dlRThUlN464/WRGyc9BX45I/AAAAAAAAAtI/Sri8y1lGaus3Ghq731t0avvVTWa-S86TQCLcB/s1600/Content%2BBody.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://3.bp.blogspot.com/-dlRThUlN464/WRGyc9BX45I/AAAAAAAAAtI/Sri8y1lGaus3Ghq731t0avvVTWa-S86TQCLcB/s320/Content%2BBody.png" width="247" /></a></div><div><br /></div><div>In this example the breadcrumbs were defined on P0, but no longer used. That's why you notice the "Breadcrumbs (Global Page)". As explained they are not used and conditionally set to never. That's not part of this solution, in fact has nothing to do with it, but in case you were wondering why the breadcrumbs entry is still there, you can stop wondering.</div><div><br /></div><div>I want to repeat only a minimal amount of data. In fact in this case only the name of the candidate is sufficient. So I opted to create a hidden page item that composes a so called <i>full name</i>&nbsp;of the candidate. This page item is part of the region that displays the region selector.</div><div><br /></div><div>On my first attempt the item was displayed in that region. But it takes away unnecessary space on the page. So I decided to hide the item and incorporate it in the the title by referencing the page item <i>&amp;P9_FULL_NAME.</i>&nbsp;which will probably never win the price for <i>Most cool and inventive solution</i>, but it does the job.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-JjqQyg1Pszg/WRG0h02HYHI/AAAAAAAAAtY/oK6VUyOjUA4Hlw-e5yNEb-dp7gttoGU3wCLcB/s1600/Regions.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://2.bp.blogspot.com/-JjqQyg1Pszg/WRG0h02HYHI/AAAAAAAAAtY/oK6VUyOjUA4Hlw-e5yNEb-dp7gttoGU3wCLcB/s320/Regions.png" width="242" /></a></div><div><br /></div><h4>Region Candidate: &amp;P9_FULL_NAME.</h4><div>I have moved the region outside the <i>Content Body</i>&nbsp;of the page into the <i>Breadcrumb Bar</i>. When this <i>Breadcrumb Bar </i>is not visible in the rendering pane of the Application Builder, you can always use the <i>Grid Layout</i>&nbsp;and drag and drop the region into the correct spot.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-kmZ4bJTMScc/WRG1hZBp-XI/AAAAAAAAAtg/fpmu1Fa2L0QzSlfJsgpGIRFBsY65xlCNwCLcB/s1600/Grid%2BLayout.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://2.bp.blogspot.com/-kmZ4bJTMScc/WRG1hZBp-XI/AAAAAAAAAtg/fpmu1Fa2L0QzSlfJsgpGIRFBsY65xlCNwCLcB/s320/Grid%2BLayout.png" width="316" /></a></div><div><br /></div><div>Along with some other hidden page items, you'll notice that P9_FULL_NAME is also a page item in this region. The buttons (Cancel, Delete, Save, Orca and Create) are defined in this region as well.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-n9PLPUd_IfY/WRG2YNGek4I/AAAAAAAAAto/IaCypNUu1p8XessrvJFmc_kImysyWH0IACLcB/s1600/Candidate%2BRegion.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://1.bp.blogspot.com/-n9PLPUd_IfY/WRG2YNGek4I/AAAAAAAAAto/IaCypNUu1p8XessrvJFmc_kImysyWH0IACLcB/s320/Candidate%2BRegion.png" width="248" /></a></div><div><br /></div><div>The buttons are all displayed in the <i>Edit</i>&nbsp;locator, to keep them next to the region title and aligned to the right.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-eNjhtnpFTmY/WRG3HmaQIKI/AAAAAAAAAtw/6NlBr2Hoskw2QwGgKhZW-IHqT8pBZUXZQCLcB/s1600/Button%2BDefinition.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://4.bp.blogspot.com/-eNjhtnpFTmY/WRG3HmaQIKI/AAAAAAAAAtw/6NlBr2Hoskw2QwGgKhZW-IHqT8pBZUXZQCLcB/s320/Button%2BDefinition.png" width="244" /></a></div><div><br /></div><div><br /></div><div>And page item <i>P9_FULL_NAME</i>&nbsp;is set in the Pre-Rendering page load process <i>Get Full Name of candidate</i>. For now it's a simple concatenation of the first-name, prefix and brith-name of the candidate.</div><div>When referencing this in the region title, it's important that the process is an <i>After Header</i>&nbsp;process. Don't forget the "&amp;" before and the "." after the referencing!</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-bLmHO8aGUjY/WRG32UvaIFI/AAAAAAAAAt4/wOfzUUolXVUvEDiKNB5dyClPWZ5FcbeUwCLcB/s1600/Get%2Bfull%2Bname%2Bprocess.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="160" src="https://3.bp.blogspot.com/-bLmHO8aGUjY/WRG32UvaIFI/AAAAAAAAAt4/wOfzUUolXVUvEDiKNB5dyClPWZ5FcbeUwCLcB/s320/Get%2Bfull%2Bname%2Bprocess.png" width="320" /></a></div><div><br /></div><div><br /></div><div>The <i>Candidate</i>&nbsp;region is in fact the region display selector. Traditionally you would also name it that way and then hide the title via the <i>Template Options</i>. But in this case I simply added the variable information in the region title.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-7ViGmv4-NBo/WRG5cKgXeLI/AAAAAAAAAuM/esCActJPinwQmI8GD3Lnv6V_itgE8R0TgCLcB/s1600/Candidate%2BRegion%2BDEtail%2B1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://3.bp.blogspot.com/-7ViGmv4-NBo/WRG5cKgXeLI/AAAAAAAAAuM/esCActJPinwQmI8GD3Lnv6V_itgE8R0TgCLcB/s320/Candidate%2BRegion%2BDEtail%2B1.png" width="271" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"></div><div><br /></div><div>Now we should have all in place to have this region in the Breadcrumb Bar and as a very nice consequence: have it sticking to the top of the page.</div><div><br /></div><div><br /></div><div>However ... due to requirements of this specific customer, all pages use Page Template <i>Minimal (No Navigation)</i>. And this makes my page look like:</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-3kTREry24XA/WRG7K4pa7XI/AAAAAAAAAuY/s5sttE_roCsoFulwTQC1OZZgeDEfa-tUQCLcB/s1600/Page%2BWrongly%2BDisplayed.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="174" src="https://2.bp.blogspot.com/-3kTREry24XA/WRG7K4pa7XI/AAAAAAAAAuY/s5sttE_roCsoFulwTQC1OZZgeDEfa-tUQCLcB/s640/Page%2BWrongly%2BDisplayed.png" width="640" /></a></div><div><br /></div><div><br /></div><div>I want to stretch this over the entire page, of course. To do so, I needed some minor CSS customisation. I decided to do this on page level on the Inline CSS attribute of page 9:</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-WmcBVmsVnlk/WRG72pTaWCI/AAAAAAAAAug/KrOuGiH5XJc6rtLMhYPx5IhMSjNLxhHYwCLcB/s1600/Inline%2BCSS.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="205" src="https://3.bp.blogspot.com/-WmcBVmsVnlk/WRG72pTaWCI/AAAAAAAAAug/KrOuGiH5XJc6rtLMhYPx5IhMSjNLxhHYwCLcB/s320/Inline%2BCSS.png" width="320" /></a></div><div><br /></div><div><br /></div><div>The <i>t_Body_title</i>&nbsp;is exact the DIV that makes this region align to the right. This I "discovered" by <i>inspecting</i>&nbsp;the page. By deselecting (at runtime) the part highlighted in red (see screenshot below), the region jumps to the left ....</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-6b4rPFgfacw/WRG9tuob_8I/AAAAAAAAAus/-leHxIYBH98bFDnN1gmH68sqzr6xyHLdACLcB/s1600/Inspect%2BElement.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://2.bp.blogspot.com/-6b4rPFgfacw/WRG9tuob_8I/AAAAAAAAAus/-leHxIYBH98bFDnN1gmH68sqzr6xyHLdACLcB/s640/Inspect%2BElement.png" width="640" /></a></div><div><br /></div><div><br /></div><div>So this bit is now&nbsp;<i>overwritten</i>&nbsp;by the custom CSS on page level. Setting <i>width: 100%</i>&nbsp;of course makes it render over the entire width of the page.</div><div><br /></div><h4>The other regions</h4><div>All other regions are displayed in the <i>Content Body</i>. And the <i>Region Display Selector </i>is set to 'Yes' in the <i>Advanced</i>&nbsp;tab of the pages' attributes.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-wlfqx2bet7I/WRG-mkZc89I/AAAAAAAAAu0/VTYo8ZhcvbUREthlBSTejL0RqN31BipIQCLcB/s1600/RegionDisplayYes.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="241" src="https://4.bp.blogspot.com/-wlfqx2bet7I/WRG-mkZc89I/AAAAAAAAAu0/VTYo8ZhcvbUREthlBSTejL0RqN31BipIQCLcB/s320/RegionDisplayYes.png" width="320" /></a></div><div><br /></div><div><br /></div><div>And that's it. I'm pretty happy with this result and I believe I will use this approach more often in the future.&nbsp;</div><div><br /></div><h4>And what if you actually use Breadcrumbs?</h4><div>Well, then sorry ... it won't work!</div><div><br /></div><div>Naaahhh ... just joking!</div><div>If you have a real Breadcrumb region in the Breadcrumb Bar, you can simply add your own region (in my example the Candidate ... region) into the Breadcrumb Bar, just below the breadcrumb region and it will work just fine.</div><div><br /></div><div><br /></div><div><br /></div><div>Happy to share ....</div><div><br /></div><div><br /></div> Roeland Van den Eynde tag:blogger.com,1999:blog-3391696929738939906.post-2922968001558873565 Tue May 09 2017 09:31:00 GMT-0400 (EDT) Oracle Exadata Express Service – Kicking the Tires (Part 3 – Poking Around) https://jes.blogs.shellprompt.net/2017/05/08/oracle-exadata-express-service-kicking-the-tires-part-3-poking-around/ <p>In the last post, I covered <a href="https://jes.blogs.shellprompt.net/2017/05/07/oracle-exadata-express-service-kicking-the-tires-part-2-initial-setup/">provisioning an Oracle Exadata Express instance</a>. Now we have one up and running let&#8217;s click the Service Instance URL and see what the dashboard looks like.</p> <p>In my case the format of the URL in the Service Console (and emails) was in the format &#8211;</p> <p><a href="https://&lt;INSTANCE" rel="nofollow">https://&lt;INSTANCE</a> NAME&gt;-&lt;IDENTITY_DOMAIN&gt;.db.&lt;DATACENTER_LOCATION&gt;.oraclecloudapps.com/console/</p> <p>For for example if you created &#8211;</p> <p>Instance; test01</p> <p>Identity domain: foobarcorp</p> <p>Data Center Location: EMEA</p> <p>then you might get a URL like:</p> <p><a href="https://test01-foobarcorp.db.em2.oraclecloudapps.com/console/" rel="nofollow">https://test01-foobarcorp.db.em2.oraclecloudapps.com/console/</a></p> <p>I like this format, since it&#8217;s entirely logical. I remember using the DBaaS service when it was first available and it seemed to me that the URL&#8217;s were far from logical (I noticed pretty quickly that newer instances got more logical URL&#8217;s, but some of our early instances stuck with the original format).</p> <p>Ok, so lets click on that URL (note my real URL, not the made up one above which certainly won&#8217;t work!)</p> <p>I immediately see this &#8211;</p> <p><a href="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-37-34.png"><img data-attachment-id="1617" data-permalink="https://jes.blogs.shellprompt.net/2017/05/08/oracle-exadata-express-service-kicking-the-tires-part-3-poking-around/2017-06-04_23-37-34/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-37-34.png" data-orig-size="1674,817" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-08_19-37-34" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-37-34.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-37-34.png?w=625&#038;h=305" class="alignnone size-large wp-image-1617" src="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-37-34.png?w=625&#038;h=305" alt="" width="625" height="305" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-37-34.png?w=625&amp;h=305 625w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-37-34.png?w=1250&amp;h=610 1250w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-37-34.png?w=150&amp;h=73 150w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-37-34.png?w=300&amp;h=146 300w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-37-34.png?w=768&amp;h=375 768w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-37-34.png?w=1024&amp;h=500 1024w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>A couple of things to note &#8211;</p> <ul> <li>It&#8217;s HTTPS by default (great!)</li> <li>You can only access that page if you&#8217;re logged into your Cloud Account (i.e. it&#8217;s not visible to the Public Internet-at-large yet)</li> </ul> <p>The one that intrigues me straight-away is access to SQL Workshop and App Builder, which are both part of <a href="https://apex.oracle.com/en/">Oracle APEX</a>.</p> <p>If I click on SQL Workshop, it takes me right into it (no need to re-authenticate since I&#8217;m already logged into my Cloud Account so it knows who I am).</p> <p><a href="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-41-20.png"><img data-attachment-id="1618" data-permalink="https://jes.blogs.shellprompt.net/2017/05/08/oracle-exadata-express-service-kicking-the-tires-part-3-poking-around/2017-06-04_23-41-20/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-41-20.png" data-orig-size="1674,860" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-08_19-41-20" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-41-20.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-41-20.png?w=625&#038;h=321" class="alignnone size-large wp-image-1618" src="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-41-20.png?w=625&#038;h=321" alt="" width="625" height="321" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-41-20.png?w=625&amp;h=321 625w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-41-20.png?w=1250&amp;h=642 1250w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-41-20.png?w=150&amp;h=77 150w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-41-20.png?w=300&amp;h=154 300w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-41-20.png?w=768&amp;h=395 768w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-41-20.png?w=1024&amp;h=526 1024w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>Now the really interesting thing here is right down in the bottom right corner, it shows us the installed APEX version &#8211;</p> <p><strong>Application Express 5.1.1.00.08</strong></p> <p>That&#8217;s the latest and greatest (at the time of writing), so that&#8217;s fantastic. I haven&#8217;t read anything so far on what the upgrade options are going to be once new versions of APEX are released (that would be interesting to know). But hey, at least it&#8217;s the latest version with all the nice features like Interactive Grid etc.</p> <p>So let&#8217;s jump into SQL Commands and run a quick query to see what objects are installed:</p> <p><a href="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-46-06.png"><img data-attachment-id="1619" data-permalink="https://jes.blogs.shellprompt.net/2017/05/08/oracle-exadata-express-service-kicking-the-tires-part-3-poking-around/2017-06-04_23-46-06/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-46-06.png" data-orig-size="1673,862" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-08_19-46-06" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-46-06.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-46-06.png?w=625&#038;h=322" class="alignnone size-large wp-image-1619" src="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-46-06.png?w=625&#038;h=322" alt="" width="625" height="322" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-46-06.png?w=625&amp;h=322 625w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-46-06.png?w=1250&amp;h=644 1250w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-46-06.png?w=150&amp;h=77 150w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-46-06.png?w=300&amp;h=155 300w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-46-06.png?w=768&amp;h=396 768w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-46-06.png?w=1024&amp;h=528 1024w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>So just the typical EMP / DEPT tables and a DEMO app / package, nothing unexpected.</p> <p>One key thing I noticed, take a look at the schema name it lists</p> <p><a href="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-48-17.png"><img data-attachment-id="1620" data-permalink="https://jes.blogs.shellprompt.net/2017/05/08/oracle-exadata-express-service-kicking-the-tires-part-3-poking-around/2017-06-04_23-48-17/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-48-17.png?w=625" data-orig-size="287,41" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-08_19-48-17" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-48-17.png?w=625?w=287" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-48-17.png?w=625?w=287" class="alignnone wp-image-1620 size-full" src="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-48-17.png?w=625" alt="" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-48-17.png 287w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-48-17.png?w=150 150w" sizes="(max-width: 287px) 100vw, 287px" /></a></p> <p>Urgh&#8230;that&#8217;s clearly generated and non-human-friendly.</p> <p>To be honest I didn&#8217;t spot when I was provisioning the schema that I wasn&#8217;t prompted for a schema name to use. However for those of you with good memories one of the options right back in the first screenshot above was the ability to create a new schema.</p> <p>Ok, now let&#8217;s try jumping into App Builder (which is part of APEX), clicking the link on the main dashboard takes me to the familiar App Builder interface:</p> <p><a href="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-51-37.png"><img data-attachment-id="1622" data-permalink="https://jes.blogs.shellprompt.net/2017/05/08/oracle-exadata-express-service-kicking-the-tires-part-3-poking-around/2017-06-04_23-51-37/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-51-37.png" data-orig-size="1672,502" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-08_19-51-37" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-51-37.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-51-37.png?w=625&#038;h=188" class="alignnone size-large wp-image-1622" src="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-51-37.png?w=625&#038;h=188" alt="" width="625" height="188" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-51-37.png?w=625&amp;h=188 625w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-51-37.png?w=1250&amp;h=376 1250w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-51-37.png?w=150&amp;h=45 150w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-51-37.png?w=300&amp;h=90 300w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-51-37.png?w=768&amp;h=231 768w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-51-37.png?w=1024&amp;h=307 1024w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>Notice the Sample Database Application is already pre-installed. I wanted to know if this application was available to anyone without having to be authenticated to the Cloud Account (i.e. could anyone on the internet access it?).</p> <p>Running the application gave me the (very familiar to me) Sample Application &#8211;</p> <p><a href="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-54-43.png"><img data-attachment-id="1623" data-permalink="https://jes.blogs.shellprompt.net/2017/05/08/oracle-exadata-express-service-kicking-the-tires-part-3-poking-around/2017-06-04_23-54-43/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-54-43.png" data-orig-size="1675,808" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-08_19-54-43" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-54-43.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-54-43.png?w=625&#038;h=301" class="alignnone size-large wp-image-1623" src="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-54-43.png?w=625&#038;h=301" alt="" width="625" height="301" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-54-43.png?w=625&amp;h=301 625w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-54-43.png?w=1248&amp;h=602 1248w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-54-43.png?w=150&amp;h=72 150w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-54-43.png?w=300&amp;h=145 300w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-54-43.png?w=768&amp;h=370 768w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-54-43.png?w=1024&amp;h=494 1024w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>So I fired up Google Chrome in Incognito mode from another laptop and tried to access the application directly using the same URL &#8211;</p> <p><a href="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-54-22.png"><img data-attachment-id="1624" data-permalink="https://jes.blogs.shellprompt.net/2017/05/08/oracle-exadata-express-service-kicking-the-tires-part-3-poking-around/2017-06-04_23-54-22/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-54-22.png" data-orig-size="1671,709" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-08_19-54-22" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-54-22.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-54-22.png?w=625&#038;h=265" class="alignnone size-large wp-image-1624" src="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-54-22.png?w=625&#038;h=265" alt="" width="625" height="265" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-54-22.png?w=625&amp;h=265 625w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-54-22.png?w=1250&amp;h=530 1250w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-54-22.png?w=150&amp;h=64 150w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-54-22.png?w=300&amp;h=127 300w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-54-22.png?w=768&amp;h=326 768w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-54-22.png?w=1024&amp;h=434 1024w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>Hmmm, so by default you need to be logged into the Oracle Cloud to access your APEX applications. How can we change that?</p> <p>I went looking in the Authentication Scheme for the Application and sure enough it was set to a new type of Authentication &#8211; &#8216;Oracle Cloud Identity Management&#8217;, which makes sense.</p> <p>I created a new Authentication Scheme based on APEX Accounts and enabled it and retried accessing the application from another browser:</p> <p><a href="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-02-59.png"><img data-attachment-id="1625" data-permalink="https://jes.blogs.shellprompt.net/2017/05/08/oracle-exadata-express-service-kicking-the-tires-part-3-poking-around/2017-06-05_00-02-59/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-02-59.png" data-orig-size="1249,793" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-08_20-02-59" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-02-59.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-02-59.png?w=625&#038;h=397" class="alignnone size-large wp-image-1625" src="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-02-59.png?w=625&#038;h=397" alt="" width="625" height="397" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-05_00-02-59.png?w=625&amp;h=397 625w, https://aejes.files.wordpress.com/2017/05/2017-06-05_00-02-59.png?w=150&amp;h=95 150w, https://aejes.files.wordpress.com/2017/05/2017-06-05_00-02-59.png?w=300&amp;h=190 300w, https://aejes.files.wordpress.com/2017/05/2017-06-05_00-02-59.png?w=768&amp;h=488 768w, https://aejes.files.wordpress.com/2017/05/2017-06-05_00-02-59.png?w=1024&amp;h=650 1024w, https://aejes.files.wordpress.com/2017/05/2017-06-05_00-02-59.png 1249w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>Success &#8211; the application is now visible to anyone on the internet!</p> <p>In the next post we&#8217;ll explore how to connect to the Instance remotely via SQLcl</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aejes.wordpress.com/1615/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aejes.wordpress.com/1615/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=jes.blogs.shellprompt.net&#038;blog=71717384&#038;post=1615&#038;subd=aejes&#038;ref=&#038;feed=1" width="1" height="1" /> John Scott http://jes.blogs.shellprompt.net/?p=1615 Mon May 08 2017 15:29:41 GMT-0400 (EDT) Oracle Exadata Express Service – Kicking the Tires (Part 2 – Initial Setup) https://jes.blogs.shellprompt.net/2017/05/07/oracle-exadata-express-service-kicking-the-tires-part-2-initial-setup/ <p>In the last blog post I discussed <a href="https://jes.blogs.shellprompt.net/2017/05/06/oracle-exadata-express-service-kicking-the-tires-part-1-signup/">signing up for the Exadata Express service</a>, now I have access to it let&#8217;s see what I can do.</p> <p>In the email I received after signing up, it contains some key information (obviously I&#8217;ve obscured it in the screenshot below) &#8211;</p> <p><a href="https://aejes.files.wordpress.com/2017/06/2017-06-04_22-52-25.png"><img data-attachment-id="1600" data-permalink="https://jes.blogs.shellprompt.net/2017/05/07/oracle-exadata-express-service-kicking-the-tires-part-2-initial-setup/2017-06-04_22-52-25/" data-orig-file="https://aejes.files.wordpress.com/2017/06/2017-06-04_22-52-25.png" data-orig-size="778,604" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-08_22-52-25" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/06/2017-06-04_22-52-25.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/06/2017-06-04_22-52-25.png?w=625&#038;h=485" class="alignnone size-large wp-image-1600" src="https://aejes.files.wordpress.com/2017/06/2017-06-04_22-52-25.png?w=625&#038;h=485" alt="" width="625" height="485" srcset="https://aejes.files.wordpress.com/2017/06/2017-06-04_22-52-25.png?w=625&amp;h=485 625w, https://aejes.files.wordpress.com/2017/06/2017-06-04_22-52-25.png?w=150&amp;h=116 150w, https://aejes.files.wordpress.com/2017/06/2017-06-04_22-52-25.png?w=300&amp;h=233 300w, https://aejes.files.wordpress.com/2017/06/2017-06-04_22-52-25.png?w=768&amp;h=596 768w, https://aejes.files.wordpress.com/2017/06/2017-06-04_22-52-25.png 778w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>Much like the Oracle DBaaS service I get my own Identity Domain and a URL that I can use to access my service via a browser.</p> <p>There is nothing in the email about how to connect via SQLPlus etc, but we&#8217;ll come to that in later posts (hopefully!).</p> <p>So, let&#8217;s point my browser at the URL in the email and enter my OTN credentials, I end up in my Cloud Dashboard page, but I now see an Exadata Express section.</p> <p><a href="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-07-45.png"><img data-attachment-id="1604" data-permalink="https://jes.blogs.shellprompt.net/2017/05/07/oracle-exadata-express-service-kicking-the-tires-part-2-initial-setup/2017-06-04_23-07-45/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-07-45.png" data-orig-size="1672,672" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-08_23-07-45" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-07-45.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-07-45.png?w=625&#038;h=251" class="alignnone size-large wp-image-1604" src="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-07-45.png?w=625&#038;h=251" alt="" width="625" height="251" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-07-45.png?w=625&amp;h=251 625w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-07-45.png?w=1250&amp;h=502 1250w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-07-45.png?w=150&amp;h=60 150w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-07-45.png?w=300&amp;h=121 300w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-07-45.png?w=768&amp;h=309 768w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-07-45.png?w=1024&amp;h=412 1024w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>(Side note &#8211; I did hear of a few people who didn&#8217;t see that region after signing up and they had to add it manually, but I did not experience that behaviour).</p> <p>Ok, so lets hit the &#8216;Create Instance&#8217; link and see where it takes us</p> <p><a href="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-10-131.png"><img data-attachment-id="1608" data-permalink="https://jes.blogs.shellprompt.net/2017/05/07/oracle-exadata-express-service-kicking-the-tires-part-2-initial-setup/2017-06-04_23-10-13-2/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-10-131.png" data-orig-size="1667,865" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-07_23-10-13" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-10-131.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-10-131.png?w=625&#038;h=324" class="alignnone size-large wp-image-1608" src="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-10-131.png?w=625&#038;h=324" alt="" width="625" height="324" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-10-131.png?w=625&amp;h=324 625w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-10-131.png?w=1250&amp;h=648 1250w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-10-131.png?w=150&amp;h=78 150w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-10-131.png?w=300&amp;h=156 300w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-10-131.png?w=768&amp;h=399 768w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-10-131.png?w=1024&amp;h=531 1024w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>So now it recognises that Exadata Express instances are available to me (that option was obviously not available to me before I signed up for it).</p> <p>On the next screen I just need to specify my new Instance name (I chose <em><strong>aeexa01 </strong></em>which was about as imaginative as I could get).</p> <p><a href="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-12-071.png"><img data-attachment-id="1607" data-permalink="https://jes.blogs.shellprompt.net/2017/05/07/oracle-exadata-express-service-kicking-the-tires-part-2-initial-setup/2017-06-04_23-12-07-2/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-12-071.png" data-orig-size="1661,509" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-07_23-12-07" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-12-071.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-12-071.png?w=625&#038;h=192" class="alignnone size-large wp-image-1607" src="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-12-071.png?w=625&#038;h=192" alt="" width="625" height="192" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-12-071.png?w=625&amp;h=192 625w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-12-071.png?w=1250&amp;h=384 1250w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-12-071.png?w=150&amp;h=46 150w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-12-071.png?w=300&amp;h=92 300w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-12-071.png?w=768&amp;h=235 768w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-12-071.png?w=1024&amp;h=314 1024w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>(again note I&#8217;ve obscured details like my Identity domain and email address)</p> <p>Clicking next takes me to a confirmation page where I can click on confirm and create my instance.</p> <p><a href="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-16-08.png"><img data-attachment-id="1610" data-permalink="https://jes.blogs.shellprompt.net/2017/05/07/oracle-exadata-express-service-kicking-the-tires-part-2-initial-setup/2017-06-04_23-16-08/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-16-08.png" data-orig-size="1669,678" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-07_23-16-08" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-16-08.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-16-08.png?w=625&#038;h=254" class="alignnone size-large wp-image-1610" src="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-16-08.png?w=625&#038;h=254" alt="" width="625" height="254" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-16-08.png?w=625&amp;h=254 625w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-16-08.png?w=1250&amp;h=508 1250w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-16-08.png?w=150&amp;h=61 150w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-16-08.png?w=300&amp;h=122 300w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-16-08.png?w=768&amp;h=312 768w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-16-08.png?w=1024&amp;h=416 1024w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>Returning back to the Dashboard I can see my Instance is being created</p> <p><a href="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-18-07.png"><img data-attachment-id="1611" data-permalink="https://jes.blogs.shellprompt.net/2017/05/07/oracle-exadata-express-service-kicking-the-tires-part-2-initial-setup/2017-06-04_23-18-07/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-18-07.png" data-orig-size="1673,695" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-07_23-18-07" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-18-07.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-18-07.png?w=625&#038;h=260" class="alignnone size-large wp-image-1611" src="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-18-07.png?w=625&#038;h=260" alt="" width="625" height="260" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-18-07.png?w=625&amp;h=260 625w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-18-07.png?w=1250&amp;h=520 1250w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-18-07.png?w=150&amp;h=62 150w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-18-07.png?w=300&amp;h=125 300w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-18-07.png?w=768&amp;h=319 768w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-18-07.png?w=1024&amp;h=425 1024w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>The eagle-eyed amongst you will also see a Red icon showing I had a previous failure &#8211; the first time I tried to create an instance it just hung &#8211; since it was the first one I created I wasn&#8217;t sure how long it should take, but it was a definite failure so I terminated it (even though it didn&#8217;t seem to be accessible).</p> <p>Roughly a couple of minutes after initiating the creation of the (second time) instance I received an email informing me it had been created, I could confirm this since the icon turned from Orange to Green in the dashboard.</p> <p><a href="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-21-27.png"><img data-attachment-id="1612" data-permalink="https://jes.blogs.shellprompt.net/2017/05/07/oracle-exadata-express-service-kicking-the-tires-part-2-initial-setup/2017-06-04_23-21-27/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-21-27.png?w=625" data-orig-size="409,105" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-07_23-21-27" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-21-27.png?w=625?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-21-27.png?w=625?w=409" class="alignnone size-full wp-image-1612" src="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-21-27.png?w=625" alt="" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-21-27.png 409w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-21-27.png?w=150 150w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-21-27.png?w=300 300w" sizes="(max-width: 409px) 100vw, 409px" /></a></p> <p>Drilling into the link showed me the Instance was indeed up and running</p> <p><a href="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-22-31.png"><img data-attachment-id="1613" data-permalink="https://jes.blogs.shellprompt.net/2017/05/07/oracle-exadata-express-service-kicking-the-tires-part-2-initial-setup/2017-06-04_23-22-31/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-22-31.png" data-orig-size="1665,650" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-07_23-22-31" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-22-31.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-22-31.png?w=625&#038;h=244" class="alignnone size-large wp-image-1613" src="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-22-31.png?w=625&#038;h=244" alt="" width="625" height="244" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-04_23-22-31.png?w=625&amp;h=244 625w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-22-31.png?w=1250&amp;h=488 1250w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-22-31.png?w=150&amp;h=59 150w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-22-31.png?w=300&amp;h=117 300w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-22-31.png?w=768&amp;h=300 768w, https://aejes.files.wordpress.com/2017/05/2017-06-04_23-22-31.png?w=1024&amp;h=400 1024w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>I&#8217;m pretty impressed, the time to create the instance (~ 2 minutes) was substantially quicker than the time it took to purchase the instance (~ 5 minutes buying in the Oracle Store and then over 2 hours waiting for the confirmation email)</p> <p>So that&#8217;s how easy / quick it is to provision an Oracle Exadata Express instance in Oracle Cloud!</p> <p>In the next post we&#8217;ll explore the instance by clicking on that lovely inviting <strong>Service Instance URL</strong> link <img src="https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> <p>&nbsp;</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aejes.wordpress.com/1599/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aejes.wordpress.com/1599/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=jes.blogs.shellprompt.net&#038;blog=71717384&#038;post=1599&#038;subd=aejes&#038;ref=&#038;feed=1" width="1" height="1" /> John Scott http://jes.blogs.shellprompt.net/?p=1599 Sun May 07 2017 17:50:23 GMT-0400 (EDT) Oracle Exadata Express Service – Kicking the Tires (Part 1 – SignUp) https://jes.blogs.shellprompt.net/2017/05/06/oracle-exadata-express-service-kicking-the-tires-part-1-signup/ <p>Pretty much immediately after I read the <a href="https://jes.blogs.shellprompt.net/2017/05/06/oracle-exadata-express-now-available-in-europe/">announcement</a> that the Oracle Exadata Express service was available in Europe I decided to sign up to test it out.</p> <p>Looking at the 3 options available (Exadata Express &#8211; X20, X50 and X50IM), I decided to go for the X20 option &#8211; primarily because I was interested how you connect to these instances, rather than.</p> <p>After looking at the pricing options, I noticed a couple of points that jumped out at me.</p> <p><a href="https://aejes.files.wordpress.com/2017/06/2017-06-04_22-25-45.png"><img data-attachment-id="1590" data-permalink="https://jes.blogs.shellprompt.net/2017/05/06/oracle-exadata-express-service-kicking-the-tires-part-1-signup/2017-06-04_22-25-45/" data-orig-file="https://aejes.files.wordpress.com/2017/06/2017-06-04_22-25-45.png" data-orig-size="1219,661" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-07_22-25-45" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/06/2017-06-04_22-25-45.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/06/2017-06-04_22-25-45.png?w=625&#038;h=339" class="alignnone size-large wp-image-1590" src="https://aejes.files.wordpress.com/2017/06/2017-06-04_22-25-45.png?w=625&#038;h=339" alt="" width="625" height="339" srcset="https://aejes.files.wordpress.com/2017/06/2017-06-04_22-25-45.png?w=625&amp;h=339 625w, https://aejes.files.wordpress.com/2017/06/2017-06-04_22-25-45.png?w=150&amp;h=81 150w, https://aejes.files.wordpress.com/2017/06/2017-06-04_22-25-45.png?w=300&amp;h=163 300w, https://aejes.files.wordpress.com/2017/06/2017-06-04_22-25-45.png?w=768&amp;h=416 768w, https://aejes.files.wordpress.com/2017/06/2017-06-04_22-25-45.png?w=1024&amp;h=555 1024w, https://aejes.files.wordpress.com/2017/06/2017-06-04_22-25-45.png 1219w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>Firstly you get 1 PDB, no mention of an option to purchase additional ones (I&#8217;m guessing you would need to sign up for a new instance rather than being able to clone an existing PDB for Dev / Test / Prod etc).</p> <p>Secondly it has APEX already installed, which is obviously great if you want to get up and running with APEX right away.</p> <p>Ok, so let&#8217;s go through the signup process and see how smooth it is&#8230;..!</p> <p>After clicking the &#8220;Buy Now&#8221; button, I&#8217;m redirected to the Oracle Store (which if you didn&#8217;t notice is an APEX application!).</p> <p><a href="https://aejes.files.wordpress.com/2017/06/2017-06-04_22-30-56.png"><img data-attachment-id="1591" data-permalink="https://jes.blogs.shellprompt.net/2017/05/06/oracle-exadata-express-service-kicking-the-tires-part-1-signup/2017-06-04_22-30-56/" data-orig-file="https://aejes.files.wordpress.com/2017/06/2017-06-04_22-30-56.png" data-orig-size="1670,859" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-07_22-30-56" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/06/2017-06-04_22-30-56.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/06/2017-06-04_22-30-56.png?w=625&#038;h=321" class="alignnone size-large wp-image-1591" src="https://aejes.files.wordpress.com/2017/06/2017-06-04_22-30-56.png?w=625&#038;h=321" alt="" width="625" height="321" srcset="https://aejes.files.wordpress.com/2017/06/2017-06-04_22-30-56.png?w=625&amp;h=321 625w, https://aejes.files.wordpress.com/2017/06/2017-06-04_22-30-56.png?w=1248&amp;h=642 1248w, https://aejes.files.wordpress.com/2017/06/2017-06-04_22-30-56.png?w=150&amp;h=77 150w, https://aejes.files.wordpress.com/2017/06/2017-06-04_22-30-56.png?w=300&amp;h=154 300w, https://aejes.files.wordpress.com/2017/06/2017-06-04_22-30-56.png?w=768&amp;h=395 768w, https://aejes.files.wordpress.com/2017/06/2017-06-04_22-30-56.png?w=1024&amp;h=527 1024w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>Clicking on the X20 option let&#8217;s me, choose whether I want to be billed &#8211;</p> <ul> <li>Month-to-Month</li> <li>1 Year</li> <li>2 year</li> <li>3 Year</li> </ul> <p><a href="https://aejes.files.wordpress.com/2017/05/2017-06-04_22-32-57.png"><img data-attachment-id="1593" data-permalink="https://jes.blogs.shellprompt.net/2017/05/06/oracle-exadata-express-service-kicking-the-tires-part-1-signup/2017-06-04_22-32-57/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_22-32-57.png" data-orig-size="1669,731" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-07_22-32-57" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_22-32-57.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_22-32-57.png?w=625&#038;h=274" class="alignnone size-large wp-image-1593" src="https://aejes.files.wordpress.com/2017/05/2017-06-04_22-32-57.png?w=625&#038;h=274" alt="" width="625" height="274" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-04_22-32-57.png?w=625&amp;h=274 625w, https://aejes.files.wordpress.com/2017/05/2017-06-04_22-32-57.png?w=1250&amp;h=548 1250w, https://aejes.files.wordpress.com/2017/05/2017-06-04_22-32-57.png?w=150&amp;h=66 150w, https://aejes.files.wordpress.com/2017/05/2017-06-04_22-32-57.png?w=300&amp;h=131 300w, https://aejes.files.wordpress.com/2017/05/2017-06-04_22-32-57.png?w=768&amp;h=336 768w, https://aejes.files.wordpress.com/2017/05/2017-06-04_22-32-57.png?w=1024&amp;h=448 1024w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>I must admit, I was slightly confused at this stage what the benefit of going for 1-Year or 2-Year etc versus Month-to-Month was. I didn&#8217;t seem to get a discount for going multi-year and in terms of flexibility for the same cost I could sign up month-to-month and cancel whenever I wanted to (please feel free to point out if I&#8217;m being dumb here, but I think they could highlight the differences clearer).</p> <p>Then it&#8217;s a simple matter of Adding my choice to the cart, hitting checkout and paying for it (nope I&#8217;m not going to show you that bit, too many personal details on that page!).</p> <p><a href="https://aejes.files.wordpress.com/2017/05/2017-06-04_22-37-27.png"><img data-attachment-id="1594" data-permalink="https://jes.blogs.shellprompt.net/2017/05/06/oracle-exadata-express-service-kicking-the-tires-part-1-signup/2017-06-04_22-37-27/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_22-37-27.png" data-orig-size="1413,499" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-07_22-37-27" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_22-37-27.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_22-37-27.png?w=625&#038;h=221" class="alignnone size-large wp-image-1594" src="https://aejes.files.wordpress.com/2017/05/2017-06-04_22-37-27.png?w=625&#038;h=221" alt="" width="625" height="221" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-04_22-37-27.png?w=625&amp;h=221 625w, https://aejes.files.wordpress.com/2017/05/2017-06-04_22-37-27.png?w=1250&amp;h=442 1250w, https://aejes.files.wordpress.com/2017/05/2017-06-04_22-37-27.png?w=150&amp;h=53 150w, https://aejes.files.wordpress.com/2017/05/2017-06-04_22-37-27.png?w=300&amp;h=106 300w, https://aejes.files.wordpress.com/2017/05/2017-06-04_22-37-27.png?w=768&amp;h=271 768w, https://aejes.files.wordpress.com/2017/05/2017-06-04_22-37-27.png?w=1024&amp;h=362 1024w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>All in all, I was pretty impressed &#8211; not too many clicks to sign up. I do have to say that I still find the Oracle Cloud payment / invoicing aspect slightly disconnected versus say Amazon. In Amazon AWS they already have my payment details &#8211; I just launch a new instance and get billed for it. Whereas with Oracle Cloud, I need to go through paying for each new instance before I can launch a new one (so in essence I&#8217;m paying to increase my quota for a specific service type). It might sound like a small quirk, but part of the real &#8216;wow&#8217; factor of Amazon is the immediacy of being able to spin up an instance on demand quickly. Oh well&#8230;I&#8217;m sure there&#8217;s reasons for doing it this way.</p> <p>So, after I sign up it tells me that I&#8217;ll receive an email once my service is available and that I can keep checking on progress via my Orders.</p> <p>So, I wait&#8230;</p> <p>and wait&#8230;</p> <p>and wait&#8230;</p> <p>About 2 1/2 hours (150 minutes!) later (I lost track of time but it was roughly then), I receive an email &#8211;</p> <p><a href="https://aejes.files.wordpress.com/2017/05/2017-06-04_22-39-36.png"><img data-attachment-id="1597" data-permalink="https://jes.blogs.shellprompt.net/2017/05/06/oracle-exadata-express-service-kicking-the-tires-part-1-signup/2017-06-04_22-39-36/" data-orig-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_22-39-36.png" data-orig-size="842,331" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2017-05-07_22-39-36" data-image-description="" data-medium-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_22-39-36.png?w=300" data-large-file="https://aejes.files.wordpress.com/2017/05/2017-06-04_22-39-36.png?w=625&#038;h=246" class="alignnone size-large wp-image-1597" src="https://aejes.files.wordpress.com/2017/05/2017-06-04_22-39-36.png?w=625&#038;h=246" alt="" width="625" height="246" srcset="https://aejes.files.wordpress.com/2017/05/2017-06-04_22-39-36.png?w=625&amp;h=246 625w, https://aejes.files.wordpress.com/2017/05/2017-06-04_22-39-36.png?w=150&amp;h=59 150w, https://aejes.files.wordpress.com/2017/05/2017-06-04_22-39-36.png?w=300&amp;h=118 300w, https://aejes.files.wordpress.com/2017/05/2017-06-04_22-39-36.png?w=768&amp;h=302 768w, https://aejes.files.wordpress.com/2017/05/2017-06-04_22-39-36.png 842w" sizes="(max-width: 625px) 100vw, 625px" /></a></p> <p>Note &#8211; I&#8217;ve omitted the majority of the email since it contains a lot of details on my service URL, CSI etc.</p> <p>Again, not to gripe too much but 2.5 hours seems WAY too long to wait. As a frequent Presenter at Conferences it would be nice to walk through showing how easy Exadata Express is to setup, but I&#8217;m not sure the attendees would wait 2.5 hours for my email confirmation to come through.</p> <p>Either there&#8217;s an element of human interaction going on here (why? Surely all this can be automated), or Oracle is so inundated with people signing up for the service that I ended up at the end of a very long queue. Either way I really do hope this signup time decreases in future or I predict people getting frustrated waiting for the mail to come through.</p> <p>So that&#8217;s it, I now have access to an Exadata Express instance to play with. In the next blog post I&#8217;ll go through setting it up and accessing it.</p> <p>&nbsp;</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aejes.wordpress.com/1589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aejes.wordpress.com/1589/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=jes.blogs.shellprompt.net&#038;blog=71717384&#038;post=1589&#038;subd=aejes&#038;ref=&#038;feed=1" width="1" height="1" /> John Scott http://jes.blogs.shellprompt.net/?p=1589 Sat May 06 2017 17:22:34 GMT-0400 (EDT) Oracle Exadata Express – Now Available in Europe! https://jes.blogs.shellprompt.net/2017/05/06/oracle-exadata-express-now-available-in-europe/ <p>I was very interested to see the announcement by Oracle that the Exadata Express service was now available in Europe</p> <p><a href="https://blogs.oracle.com/dbaas/exadata-express-cloud-service-now-available-in-europe" rel="nofollow">https://blogs.oracle.com/dbaas/exadata-express-cloud-service-now-available-in-europe</a></p> <p>I&#8217;ve been using the Oracle DBaaS service since it was (more or less) first publicly available and have been very impressed with the general performance and availability,</p> <p>If you&#8217;re not familiar with it, the Exadata Express service comes in 3 flavours,</p> <ul> <li>Exadata Express &#8211; X20</li> <li>Exadata Express &#8211; X50</li> <li>Exadata Express &#8211; X50IM</li> </ul> <p>As you would expect, the main differences are around the amount of memory and storage you get, together with some differences in feature availability.</p> <p>At the time of writing, it breaks down as &#8211;</p> <ul> <li>Exadata Express &#8211; X20 <ul> <li>20GB Storage</li> <li>3GB PGA, 3GB SGA</li> <li>120GB / Month data transfer</li> </ul> </li> <li>Exadata Express &#8211; X50 <ul> <li>50GB Storage</li> <li>5GB PGA, 5GB SGA</li> <li>300GB / Month data transfer</li> </ul> </li> <li>Exadata Express &#8211; X50IM <ul> <li>50GB Storage</li> <li>5GB PGA, 10GB SGA (5GB RAM for use with Database In-Memory Column Store)</li> <li>300GB / Month data transfer</li> </ul> </li> </ul> <p>So what about cost (prices correct at time of writing)?</p> <ul> <li>Exadata Express &#8211; X20 <ul> <li><span class="opcpartNumberPrices">$175.00</span> / Month (<span class="opcpartNumberPrices">£141.00</span> / Month)</li> </ul> </li> <li>Exadata Express &#8211; X50 <ul> <li><span class="opcpartNumberPrices">$750.00</span> / Month (<span class="opcpartNumberPrices">£604.00</span> / Month)</li> </ul> </li> <li>Exadata Express &#8211; X50IM <ul> <li><span class="opcpartNumberPrices">$950.00</span> / Month (<span class="opcpartNumberPrices">£765.00</span> / Month)</li> </ul> </li> </ul> <p>To be honest, when I saw these prices &#8211; I wondered what the break-point would be for choosing Exadata Express versus spinning up a dedicated DBaaS instance. The X20 looks like a decent price, the X50 and X50IM, well I&#8217;m not quite sure yet&#8230;.I suspect the prices are too high for the average individual user, but the specs aren&#8217;t high enough for corporate users (50Gb storage these days isn&#8217;t a lot).</p> <p>So&#8230;next steps&#8230;I&#8217;m going to sign up for the X20 and start kicking the tires!</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aejes.wordpress.com/1585/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aejes.wordpress.com/1585/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=jes.blogs.shellprompt.net&#038;blog=71717384&#038;post=1585&#038;subd=aejes&#038;ref=&#038;feed=1" width="1" height="1" /> John Scott http://jes.blogs.shellprompt.net/?p=1585 Sat May 06 2017 14:57:51 GMT-0400 (EDT) PLSQL Markdown HTML https://storm-petrel.com/orablog/2017/05/05/plsql-markdown-html/ <h1>PLSQL Markdown to HTML</h1> <p>I have posted a PLSQL Markdown to HTML package on my github site (<a href="https://github.com/cmoore-sp/plsql-markdown-2-html">https://github.com/cmoore-sp/plsql-markdown-2-html</a>).</p> <h2>Purpose</h2> <p>There are times with Oracle APEX when a development team may want to provide users with the ability to host modest HTML sections. Using Markdown is a whole lot friendlier than HTML. The package will return an HTML formatted CLOB after parsing the markdown annotations.</p> <p>The aim is to allow an application user to draft a quick post/message or email then let this format it to HTML.</p> <h2>Limitations</h2> <h3>CLOB Size</h3> <p>I took advantage of the apex_util.string_to_table to help read through the CLOB. Thereby limiting the size to 32K. This allows the process to kick start without being bogged down. If we need to expand, we can.</p> <h3>Nested Lists</h3> <p>I did not write a process for nesting lists. Given the intended use and audience, it seemed like a bridge too far. If we (collectively) need it, we can write it in.</p> <p>&lt;/qed&gt;</p> <p>The post <a rel="nofollow" href="https://storm-petrel.com/orablog/2017/05/05/plsql-markdown-html/">PLSQL Markdown HTML</a> appeared first on <a rel="nofollow" href="https://storm-petrel.com/orablog">Oracle Blog </a>.</p> Christina Moore http://storm-petrel.com/orablog/?p=437 Fri May 05 2017 14:53:23 GMT-0400 (EDT) PLSQL Compress BLOB https://storm-petrel.com/orablog/2017/05/05/plsql-compress-blob/ <h1>PLSQL Compress BLOB</h1> <p>Compressing binary large objects (BLOB) or files using PL/SQL has been challenging. For at least a decade, Oracle includes UTL_COMPRESS as a means of compressing or zipping files. This technology faced a few limitations specifically, adding a BLOB with the UTL_COMPRESS.LZ_COMPRESS_ADD procedure. The source “file” is required to be raw. The utility spews errors when you asked it compress a BLOB directly. PLSQL Compress BLOB is easier with APEX_ZIP.</p> <p>There are alternatives. Anton Scheffer wrote and maintains a fine package called AS_ZIP (the “AS” likely to reference Anton’s initials.</p> <p>I learned this week after searching and searching that Oracle has picked up nton’s utility and included it as an APEX Package. It is called APEX_ZIP. According to Christian Neumueller, it was Patrick Wolff that adopted Anton’s work.</p> <p>How did I miss this? Well I searched compress BLOB. I ought to have searched ZIP file. As of early May 2017, the phrases on the APEX_ZIP utility documentation are zip and unzip. The phrases on the UTL_COMPRESS utility are compress and uncompress. I avoided searching &#8220;ZIP&#8221; because of its association with a brand. Dooh! Let&#8217;s hope that this blog helps others find the compress blob utility APEX_ZIP.</p> <h2>PLSQL BLOB Compression</h2> <p>The purpose of this blog is to assist the next Oracle PLSQL developer who wants to compress blobs or zip blobs to find the APEX_ZIP utility. Have I used the phrases compress blob and zip blob enough to be picked up by search engines? I hope so.</p> <h2>APEX_ZIP</h2> <p>Please search for the APEX_ZIP utility. There are a few nuggets to know. First, you really can add a file to an empty set. Unlike Alice’s experience at a tea party, when offered “a little more tea?”. She states: “Well, I haven’t had any yet, so I can’t very well take more.” And the readers of all things Oracle PL/SQL know that one can’t add to a null. But, in this case you may add to an empty set.</p> <h2>ORA-06502</h2> <p>Protect the procedure call and screen for nulls. A null filename gives a ORA-06502 “numeric or value error” from sys.utl_raw.</p> <h2>What Next</h2> <p>Having a big ole BLOB with a set of zipped or compressed BLOBs doesn’t yet help the end user. We tend to use global temporary tables (“GTT”) as a means of hosting BLOBs for users to download via Oracle APEX. While GTT are self-cleaning and offer protection against nosy neighbors from seeing data, when using Global Temporary Tables in APEX, they can be seen by another user. So we always post the session ID with a record and we filter on that. That keeps nosy neighbors out and boundaries clean.</p> <h2>Function ZIP_BLOBS</h2> <p>The function below is a sample. It spins through a table with a bunch of blobs that need compressing. It puts the compressed BLOB into a global temporary table that is easily used in Oracle APEX.</p> <h2>Contributors</h2> <p>Anton Scheffer wrote a <a href="https://technology.amis.nl/2010/06/09/parsing-a-microsoft-word-docx-and-unzip-zipfiles-with-plsql/">fine blog and utility</a> in 2010. He has updated this utility as recently as April 2016. His code gives insights into the workings.<br /> <a href="http://dgielis.blogspot.com/">Dimitri Gielis </a>unceremoniously pointed out that had I searched ZIP instead of compress, I would have save days of misery. We really do need friends like that!<br /> <a href="https://chrisonoracle.wordpress.com/">Christian Neumueller</a> shared the story of APEX_ZIP package and confirmed its roots.<br /> <a href="http://www.inside-oracle-apex.com/">Patrick Wolf </a>adopted Anton’s work.</p> <h3>Sample Code/Function</h3> <pre><code class="language-sql">create or replace function zip_blobs return number as l_compress_blob blob; l_session number; l_zip_filename varchar2(60); l_sb_pk number; begin l_zip_filename := 'compressed_blobs.zip'; dbms_lob.createtemporary(l_compress_blob, false); l_session := apex_application.g_instance; delete from tg_store_blob where sb_session = l_session; -- fetch blobs, build zip file for i in ( select doc_pk, doc_blob, doc_filename from tg_doc ) loop -- Compress BLOB / ZIP BLOB if i.doc_filename is not null and i.doc_blob is not null then apex_zip.add_file ( p_zipped_blob =&gt; l_compress_blob, p_file_name =&gt; i.doc_filename, p_content =&gt; i.doc_blob); end if; -- parameters not null end loop; -- Let the utility close up the zip file and add necessary footers apex_zip.finish(l_compress_blob); insert into tg_store_blob ( sb_session, sess_date, blob_file, created_date, blob_mimetype, blob_filename ) values ( l_session, localtimestamp, l_compress_blob, localtimestamp, null, l_zip_filename ) returning sb_pk into l_sb_pk; commit; return l_sb_pk; end zip_blobs;</code></pre> <p>&nbsp;</p> <p>&nbsp;</p> <p>The post <a rel="nofollow" href="https://storm-petrel.com/orablog/2017/05/05/plsql-compress-blob/">PLSQL Compress BLOB</a> appeared first on <a rel="nofollow" href="https://storm-petrel.com/orablog">Oracle Blog </a>.</p> Christina Moore http://storm-petrel.com/orablog/?p=433 Fri May 05 2017 13:47:27 GMT-0400 (EDT) APEX mitsamt Webserver (ORDS) vollautomatisiert installieren https://blogs.oracle.com/apexcommunity_deutsch/entry/apex_mitsamt_webserver_ords_vollautomatisiert <p><img src="https://blogs.oracle.com/apexcommunity_deutsch/resource/apex-install.png" alt="Logo" align="left" hspace="10" vspace="5" /><font face="tahoma, arial, helvetica, sans-serif" size="2">Ob man mit Application Express eher entwickelt, es administriert oder testet - man ist hin und wieder in der Situation, sich eine APEX-Umgebung aufsetzen zu müssen. Im Installation Guide der Dokumentation kann man nachlesen, wie das geht - alle möglichen Szenarien sind dort beschrieben.</font></p> <p><font face="tahoma, arial, helvetica, sans-serif" size="2">Oft braucht es aber nur eine ganz einfache Installation - APEX soll in eine vorhandene Datenbankinstanz installiert und ORDS (Oracle REST Data Services) soll als Webserver hochgefahren werden. Am besten wäre es noch, wenn die nötigen Schritte automatisch ablaufen würden, so dass man während der Installation etwas anderes machen kann.</font></p> <p><font face="tahoma, arial, helvetica, sans-serif" size="2"><a href="http://joelkallman.blogspot.co.uk/2017/05/apex-and-ords-up-and-running-in2-steps.html" target="_blank" title="Joel Kallman on &quot;APEX and ORDS up and running in....2 steps!&quot;">Joel Kallman beschreibt in seinem Blog</a>, wie das geht. Die einzelnen Schritte sind aufgeführt, so dass sie sich problemlos an die eigene Umgebung anpassen und zu einem automatisch ablaufenden Skript zusammengefasst werden können. Schauen Sie mal rein!&nbsp;</font></p> Carsten Czarski-Oracle https://blogs.oracle.com/apexcommunity_deutsch/entry/apex_mitsamt_webserver_ords_vollautomatisiert Fri May 05 2017 09:58:55 GMT-0400 (EDT) BI and Reporting Kscope17 Track Highlights – Tracy McMullen http://www.odtug.com/p/bl/et/blogaid=716&source=1 Tracy McMullen, BI and Reporting Track Lead for ODTUG Kscope17, shares her top five BI and Reporting Track Sessions with reasons why they are her "don't miss sessions" at Kscope17: ODTUG http://www.odtug.com/p/bl/et/blogaid=716&source=1 Fri May 05 2017 09:54:00 GMT-0400 (EDT) APEX and ORDS up and running in....2 steps! http://joelkallman.blogspot.com/2017/05/apex-and-ords-up-and-running-in2-steps.html In January 2017, I had a meeting with <a href="https://www.linkedin.com/in/dr-sriram-birudavolu-8411704/" target="_blank">Dr. Sriram Birudavolu</a> from Hyderabad. &nbsp;He got my attention when he said he would love to start a 1000-person APEX Meetup group in Hyderabad (gotta love aggressive goals!). &nbsp;However, he spent much of December and January just trying to figure out how to get APEX installed, configured and running. &nbsp;He won't profess to be an expert, but he's exactly the type of person we want to enable. &nbsp;He was correct in saying that if a potential customer struggles to get APEX installed, we've already lost.<br /><div><br /></div>Recently, <a href="https://twitter.com/geraldvenzl" target="_blank">Gerald Venzl</a> asked for some assistance in creating a Docker image for <a href="https://apex.oracle.com/" target="_blank">APEX</a>. &nbsp;His goal was to create an APEX Docker image on top of the base Oracle Database Docker image. &nbsp;He knows a lot about Docker, but he won't claim to be an expert in APEX. &nbsp;He wanted something that is scriptable and can result in APEX being installed, configured and up and running, along with ORDS, in as few steps as possible. &nbsp;A "silent install", if you please. This was the final bit of motivation I needed for this blog post and video.<br /><br />While the <a href="http://docs.oracle.com/database/apex-5.1/HTMIG/toc.htm" target="_blank">installation documentation</a> is complete and detailed, it's also lengthy and sometimes confusing - especially for the new person. &nbsp;Thus, I wanted to provide the simplest set of instructions with as few steps as possible to get APEX installed, configured and up and running, along with ORDS configured and up and running. &nbsp;It can be done in two steps. &nbsp;That's right, <b>two</b>. &nbsp;While I explain the individual steps executed from SQL*Plus in detail below, you can combine all of these SQL commands into a single SQL script. &nbsp;I prefer the name "hookmeup.sql".<br /><br /><br /><br /><ol><li>Download and unzip APEX <a href="http://www.oracle.com/technetwork/developer-tools/apex/downloads/index.html" target="_blank">http://www.oracle.com/technetwork/developer-tools/apex/downloads/index.html</a></li><li>cd to apex directory</li><li>Start SQL*Plus and ensure you are connecting to your PDB and not to the "root" of the container database (APEX should not be installed at all): <pre class="brush:sql;toolbar:false;">sqlplus sys/your_password@localhost/your_pdb as sysdba @apexins sysaux sysaux temp /i/<br /></pre></li><li>Unlock the APEX_PUBLIC_USER account and set the password: <pre class="brush:sql;toolbar:false;">alter user apex_public_user identified by oracle account unlock;<br /></pre></li><li>Create the APEX Instance Administration user and set the password: <pre class="brush:sql;toolbar:false;">begin<br /> apex_util.set_security_group_id( 10 );<br /> apex_util.create_user(<br /> p_user_name =&gt; 'ADMIN',<br /> p_email_address =&gt; 'your@emailaddress.com',<br /> p_web_password =&gt; 'oracle',<br /> p_developer_privs =&gt; 'ADMIN' );<br /> apex_util.set_security_group_id( null );<br /> commit;<br />end;<br />/<br /></pre></li><li>Run APEX REST configuration, and set the passwords of APEX_REST_PUBLIC_USER and APEX_LISTENER: <pre class="brush:sql;toolbar:false;">@apex_rest_config_core.sql oracle oracle<br /></pre></li><li>Create a network ACE for APEX (this is used when consuming Web services or sending outbound mail): <pre class="brush:sql;toolbar:false;">declare<br /> l_acl_path varchar2(4000);<br /> l_apex_schema varchar2(100);<br />begin<br /> for c1 in (select schema<br /> from sys.dba_registry<br /> where comp_id = 'APEX') loop<br /> l_apex_schema := c1.schema;<br /> end loop;<br /> sys.dbms_network_acl_admin.append_host_ace(<br /> host =&gt; '*',<br /> ace =&gt; xs$ace_type(privilege_list =&gt; xs$name_list('connect'),<br /> principal_name =&gt; l_apex_schema,<br /> principal_type =&gt; xs_acl.ptype_db));<br /> commit;<br />end;<br />/<br /></pre></li><li>Exit SQL*Plus. &nbsp;Download and unzip ORDS <a href="http://www.oracle.com/technetwork/developer-tools/rest-data-services/downloads/index.html" target="_blank">http://www.oracle.com/technetwork/developer-tools/rest-data-services/downloads/index.html</a></li><li>cd to the directory where you unzipped ORDS (ensure that ords.war is in your current directory)</li><li>Copy the following into the file params/ords_params.properties and replace the contents with the text below (Note: &nbsp;this is the file ords_params.properties in the "params" subdirectory - a subdirectory of your current working directory): <pre class="brush:shell;toolbar:false;">db.hostname=localhost<br />db.port=1521<br /># CUSTOMIZE db.servicename<br />db.servicename=your_pdb<br />db.username=APEX_PUBLIC_USER<br />db.password=oracle<br />migrate.apex.rest=false<br />plsql.gateway.add=true<br />rest.services.apex.add=true<br />rest.services.ords.add=true<br />schema.tablespace.default=SYSAUX<br />schema.tablespace.temp=TEMP<br />standalone.mode=TRUE<br />standalone.http.port=8080<br />standalone.use.https=false<br /># CUSTOMIZE standalone.static.images to point to the directory <br /># containing the images directory of your APEX distribution<br />standalone.static.images=/home/oracle/apex/images<br />user.apex.listener.password=oracle<br />user.apex.restpublic.password=oracle<br />user.public.password=oracle<br />user.tablespace.default=SYSAUX<br />user.tablespace.temp=TEMP<br /></pre></li><li>Configure and start ORDS in stand-alone mode. &nbsp;You'll be prompted for the SYS username and SYS password: <pre class="brush:shell;toolbar:false;">java -Dconfig.dir=/your_ords_configuration_directory -jar ords.war install simple --preserveParamFile<br /></pre></li></ol><div><br /></div><div><div>That's it!! &nbsp;You should now be able to go to http://localhost:8080/ords/, and login with:<br /><br /></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">Workspace: internal</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">Username: &nbsp;admin</span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">Password: &nbsp;oracle</span><br /><br /><br /><iframe allowfullscreen="" frameborder="0" height="473" src="https://www.youtube.com/embed/amF01SpNLUo" width="840"></iframe> <br /><br /><br /><b>IMPORTANT, PLEASE READ:</b><br /><br />By no means is this a recommended or secure installation. &nbsp;These are minimal instructions to get someone from zero to up and running easily and quickly. &nbsp;In a production instance, I would create different tablespaces for APEX and ORDS, I would use far more complex and distinct passwords, I would use HTTPS and not HTTP, I would deploy ORDS on a physically distinct server, and more.<br /><br />The above steps were tested with Oracle Application Express 5.1.1.00.08, Oracle REST Data Services 3.0.9, and Oracle Database 12.2.0.1 running on Oracle Linux.</div></div><br /><br /> Joel R. Kallman tag:blogger.com,1999:blog-12214002.post-2685476771187410898 Thu May 04 2017 14:36:00 GMT-0400 (EDT) Oracle APEX Version Control: Give a Little, Gain a Lot https://www.insum.ca/oracle-apex-version-control/ <h1>Oracle APEX Version Control: Give a Little, Gain a Lot</h1> <p>I’ve been using Oracle Application Express (APEX) for more years than I can count on my fingers. Throughout the entire time, I, along with many others, have grappled with version controlling APEX applications. Before diving into this controversial topic, it’s important to recap some background information around APEX and version control.</p> <p>APEX is a development framework whose source is primarily maintained in the database. It is not file based, which is very different from “traditional” development frameworks and languages. The one file it does produce (called an export file which is used as an install script), is automatically generated and uses many randomized values which don’t easily allow for comparing two copies of the same application. Another way to think of APEX and its file/install process is that it’s an “all or nothing” approach.</p> <p>Not surprisingly, this can make developers coming from traditional file based frameworks a little nervous at best, or set them off to gather up their torches and pitchforks at worst.</p> <p>Let me pause for a minute and ask a question: what’s your favorite “but where’s the X” story? A friend of mine who grew up on ranch and learned to drive at a very young age, it was when he first got into an automatic pickup truck after only ever driving a standard and asked, “But where’s the clutch?!?” His dad’s reply, “There is no clutch; it’s all automatic,” was of course met with suspicion.</p> <p>Similarly, developers coming to APEX from traditional file based frameworks who ask, “But where are the source files to put in our version control system?”, are suspicious when they hear, “It doesn’t work like that”. Of course, some jump to the conclusion that there is no version control with APEX at all, but that’s not the case. It’s just done differently, and that’s what this blog post covers.</p> <p>To get started, let’s first clarify what we mean by “version control” as it can mean different things to different people. In most cases, it covers the following:</p> <ol> <li>Tracking versions of the application by tagging the code at a given point in time</li> <li>Tracking changes between code check-ins <ul> <li>Enable developers to view specific changes in the code and/or track when a feature was introduced into the code.</li> </ul> </li> <li>Rolling back changes for a specific file or entire version</li> <li>Merging code to allow multiple developers to work on the same piece of code at the same time</li> </ol> <p>Given how APEX works, it supports the first point listed above for version control. Basically, you “version” the entire application at a given point in time. The other points need to be handled differently, and this can be a contention point for some people when evaluating APEX as it may not comply with their current release management practices.</p> <p>I had the same concern when I became more involved with APEX, and over the years, I’ve learned to get over it. Despite APEX’s inability to support “traditional” version control, it hasn’t prevented people from not only developing many applications with it, but also running their entire business on APEX applications. One must look no further than Oracle itself; a significant portion Oracle’s cloud UI is run on APEX applications.</p> <p>Basically, for me and many others, <a href="https://www.insum.ca/about-apex/">benefits of APEX, (e.g. development and deployment speed)</a>, far outweigh any perceived limitations with version control. APEX developers everywhere have been able to mitigate APEX’s version control constraints by using good development practices that work well with APEX and support traditional version control standards. As a result, organizations have been able to reap the benefits of using a high-productivity development tool like APEX, while at the same time ensuring they have adequate controls in place. The processes are different, but the end result is more or less the same. You give a little, but gain a lot. For me, the choice is clear, but each organization will have to decide what is most important to them.</p> <p>Below I’ve addressed each of the points I listed above, and have included suggestions on how to address when developing with APEX.</p> <p>&nbsp;</p> <h2>1 &#8211; Tagging the code</h2> <p>This is a very simple thing to do with APEX applications. In your source directories, ensure that you have a folder for APEX apps (an example shown below). As part of your build script <a href="https://www.insum.ca/oracle-apex-deployments-youre-doing-it-wrong/">auto-export your APEX applications</a> and check them into the <em>apex</em> folder.</p> <h2><img class="alignnone size-full wp-image-7578" src="https://www.insum.ca/wp-content/uploads/2017/05/oracle-apex-folder.png" alt="oracle apex folder" width="830" height="374" srcset="https://www.insum.ca/wp-content/uploads/2017/05/oracle-apex-folder.png 830w, https://www.insum.ca/wp-content/uploads/2017/05/oracle-apex-folder-300x135.png 300w, https://www.insum.ca/wp-content/uploads/2017/05/oracle-apex-folder-768x346.png 768w, https://www.insum.ca/wp-content/uploads/2017/05/oracle-apex-folder-450x203.png 450w" sizes="(max-width: 830px) 100vw, 830px" /></h2> <h2>2 &#8211; Track changes</h2> <p>Since APEX is table based, everything ends up being a row in a table. The export file, (which is used to install the application), reflects this table-driving architecture. The export file is really a PL/SQL script that re-inserts the application into rows (a snippet of the export file is shown below). The IDs may easily change in export files. When doing a file comparison, commonly called a <em>diff</em>, most rows will be marked as changed, since the IDs are different, making it nearly impossible to see what has really changed in an app between versions.</p> <p><img class="alignnone size-full wp-image-7580" src="https://www.insum.ca/wp-content/uploads/2017/05/oracle-apex-diff.jpg" alt="oracle-apex-diff" width="1122" height="832" srcset="https://www.insum.ca/wp-content/uploads/2017/05/oracle-apex-diff.jpg 1122w, https://www.insum.ca/wp-content/uploads/2017/05/oracle-apex-diff-300x222.jpg 300w, https://www.insum.ca/wp-content/uploads/2017/05/oracle-apex-diff-768x569.jpg 768w, https://www.insum.ca/wp-content/uploads/2017/05/oracle-apex-diff-1024x759.jpg 1024w, https://www.insum.ca/wp-content/uploads/2017/05/oracle-apex-diff-880x653.jpg 880w, https://www.insum.ca/wp-content/uploads/2017/05/oracle-apex-diff-450x334.jpg 450w" sizes="(max-width: 1122px) 100vw, 1122px" /></p> <p>There are ways you can mitigate the inability to track changes in an APEX export file:</p> <ul> <li>Store as much code as possible in packages, views, CSS, JavaScript, etc. These database objects can be stored as “regular” files and handle diffs very easily. See the previous image on a standard version controlled directory structure. <ul> <li>This means that instead of having large blocks of code in an APEX application, you move the business logic to packages and views and reference those instead.</li> </ul> </li> <li>The previous point still doesn’t address the root of the problem of diffing two versions of an APEX application. <a href="https://github.com/OraOpenSource/apex-diff">APEX Diff</a> is an open source tool that will export an APEX application in a JSON format. Using the JSON format export you can do diffs on different version of an APEX application as it allows you to remove the row IDs and focus just on the APEX modifications that developers make.After using this tool for a while, I’ve found that it helps identify small changes (when doing minor releases), but if comparing versions with a lot of work in between, it can become hard to determine what has changed as there are a lot of modified lines.</li> <li>APEX 5.2 may have native built in version control. I saw this on a tweet from a conference and should be treated as speculation as of now. The APEX development team has been testing out a new feature called “Blueprints” which allows you to save templates of APEX applications as a JSON structure. Based on this initiative, I expect to see a JSON export of APEX applications in future versions that will diff a lot better than the current expert file. Again, this is a guess and no purchasing decisions should be made based on this information.</li> </ul> <p>&nbsp;</p> <h2>3 &#8211; Rollback changes</h2> <p>If you look at the underlying tables in the APEX schema, you’ll see that they share many relationships. These relationships mean that a lot of the APEX objects are tightly integrated with one another. This has its pros and cons. The pros are that it allows for a declarative development framework. The con, with respect to version control, is that items are very tightly integrated with one another.</p> <p>An example of this tight integration is a page item and a validation on that page item. The validation is tied directly to the page item. What happens if someone wanted to roll back the change of creating a given page item? What would happen to the validation? For this reason I don’t see the ability to rollback specific changes happening anytime soon.</p> <p>For the most part, this hasn’t been too big of an issue. They’re some things that can help with this:</p> <ul> <li>Storing as much code in files outside of APEX (see SVN folder structure above as an example)</li> <li>Using <a href="http://www.grassroots-oracle.com/2010/06/oracle-apex-build-options.html">Build Options</a> for controlling which objects are available in specific releases <ul> <li>This allows teams to develop on future work but not make it available</li> </ul> </li> <li>Shorter release cycles <ul> <li>By having shorter release cycles problems will be identified and fixed quickly</li> <li>It will help mitigate the need to rollback changes to a specific version</li> </ul> </li> </ul> <p>&nbsp;</p> <h2>4 &#8211; Merge code</h2> <p>As mentioned in the previous point, merging two APEX files doesn’t work well as there could be many cross dependencies. It also isn’t a common requirement since most teams work on APEX applications that exist in one database (i.e. they develop on the same system).</p> <p>In most situations, developers tend to “own” a set of pages and do most of their work in those areas. It’s rare that multiple developers are trying to work on the same page at the same time. In the case that certain areas in an application are contention points for developers the following tips can help:</p> <ul> <li>Store as much code as possible in files <ul> <li><em>I realize I have mentioned this many times. This was done on purpose to emphasize how most of the “version control” problem in APEX can be mitigated by doing so.</em></li> </ul> </li> <li><a href="http://www.talkapex.com/2010/09/apex-page-locks/">Lock pages</a> before developing them. <ul> <li>This will only give a single developer access to the page while working on it</li> <li>Don’t forget to unlock the page once done!</li> </ul> </li> </ul> <p>If you want more information about version control and APEX, Oracle has written a white paper about <a href="http://www.oracle.com/technetwork/developer-tools/apex/learnmore/apex-life-cycle-management-wp-3030229.pdf">Life Cycle Management with Oracle Application Express</a> that covers a lot of what was mentioned in this article (full disclosure: Insum helped contribute to this white paper). Of course, if you need some help setting things up or want to discuss your current APEX development setup and how you can improve it for better version control, let us know.</p> <p><span id="hs-cta-wrapper-afef109b-a319-4fc1-8c7e-1f2038fff509" class="hs-cta-wrapper"><span id="hs-cta-afef109b-a319-4fc1-8c7e-1f2038fff509" class="hs-cta-node hs-cta-afef109b-a319-4fc1-8c7e-1f2038fff509"><!-- [if lte IE 8]> <div id="hs-cta-ie-element"></div> <![endif]--><a href="http://cta-redirect.hubspot.com/cta/redirect/1918225/afef109b-a319-4fc1-8c7e-1f2038fff509"><img id="hs-cta-img-afef109b-a319-4fc1-8c7e-1f2038fff509" class="hs-cta-img" style="border-width: 0px;" src="https://no-cache.hubspot.com/cta/default/1918225/afef109b-a319-4fc1-8c7e-1f2038fff509.png" alt="Contact Us" /></a></span><script charset="utf-8" src="https://js.hscta.net/cta/current.js"></script><script type="text/javascript"> hbspt.cta.load(1918225, 'afef109b-a319-4fc1-8c7e-1f2038fff509', {}); </script></span></p> Martin D'Souza https://www.insum.ca/?p=7576 Thu May 04 2017 14:34:34 GMT-0400 (EDT) The Benefits of an IoT Cloud Infrastructure http://c2anton.blogspot.com/2017/05/the-benefits-of-iot-cloud-infrastructure.html I recently presented on the Internet of Things at the <a href="http://info.insum.ca/en/oracle-developer-day-montreal" target="_blank">Montreal Oracle Developer Day</a>. It was a great day of Oracle tech and I had an engaged and enthusiastic group of participants. The session was less than on hour long, yet during this time a few attendees assembled an <a href="http://concept2completion.com/iot" target="_blank">IoT thermostat</a> while I created an Oracle REST Data Services (ORDS) JSON service to interact with device. I also created an APEX application to control the device and report on the data it passed to the service. I ended the session with an overview of the benefits of an IoT Cloud Infrastructure--specifically Oracle's IoT Cloud Service. After the session a couple people asked me why I used an <a href="https://electricimp.com/" target="_blank">Electric Imp</a> instead of a Raspberry Pi. These questions let me know that I didn't do enough to highlight the benefits of the infrastructure services.<br /><br />I often do this presentation as a hands-on lab during which every participant builds a physical device. I may have 60 or more devices to prepare for a single session. While that is a lot of devices, it pales in comparison to the volume of devices that a typical IoT product might involve. How many Nest and Ecobee thermostats are in the wild? Fitbits? Initially programming the devices, hooking them up to a wifi network, communicating with the devices through firewalls and across wide area networks, pushing patches to the devices are big concerns when dealing with the scale associated with IoT. A few years ago, I chose the Electric Imp as a device because it has a built-in infrastructure for handling these kinds of concerns. A Raspberry Pi is a great device, but it doesn't have the built-in IoT support that comes with an Electric Imp.<br /><br />Oracle is addressing these requirements through its <a href="https://cloud.oracle.com/iot" target="_blank">IoT Cloud Service (IOTCS).</a> The benefits of using an IoT infrastructure include the following:<br /><br /><ul><li>Device Virtualization</li><li>High Speed Bi-Directional Messaging</li><li>Device Management</li><li>Stream Processing, Data Enrichment, Event Store</li><li>Integration via applications and APIs</li></ul><br />If you are looking to build a product, it's time to consider an IoT platform. I'll discuss more about the Oracle IoTCS in a future post.<br /><br />For now, though, I want to encourage people to play with whatever physical to software interface is fun to work with. Inexpensive and effective sensors are readily available. Electric Imp, Raspberry Pi, Arduino, Zensio, Sparkfun Thing and many other platforms make it easy to build up a device. Have fun.<br /><br /><br /> Anton Nielsen tag:blogger.com,1999:blog-24686153.post-752009272320274642 Thu May 04 2017 13:41:00 GMT-0400 (EDT) Oracle Code – London (April 17) http://www.explorer-development.uk.com/oracle-code-london-april-17/ <p>Oracle Code – London (April 17) I recently attended the Oracle Code event in London; a free event hosted by Oracle showcasing the latest technologies, practices and trends in development. As a developer who spends a lot of time working with the database, this event was slightly different to the ones I’m used to. The event kicked</p> <p>The post <a rel="nofollow" href="http://www.explorer-development.uk.com/oracle-code-london-april-17/">Oracle Code – London (April 17)</a> appeared first on <a rel="nofollow" href="http://www.explorer-development.uk.com">Oracle Application Express (APEX) Consultants, developers and APEX training courses UK</a>.</p> Explorer Development UK http://www.explorer-development.uk.com/?p=4262 Thu May 04 2017 12:29:03 GMT-0400 (EDT) Checkbox Pills http://vmorneau.me/checkbox-pills/ <img src="http://vmorneau.me/content/images/2017/05/may-the-fourth-yoda-1.jpg" alt="Checkbox Pills"><p>Demo: <a href="https://apex.oracle.com/pls/apex/f?p=128166:1">https://apex.oracle.com/pls/apex/f?p=128166:1</a> </p> <p>Universal Theme offers a template option for radio button items to make them look like buttons:</p> <p><img src="http://vmorneau.me/content/images/2017/05/radio.png" alt="Checkbox Pills"></p> <p>As of this writing (APEX 5.1.1), this template option does not work on checkboxes. But wouldn't it be nice to have something like this?</p> <p><img src="http://vmorneau.me/content/images/2017/05/checkbox-1.png" alt="Checkbox Pills"></p> <ol> <li><p>Apply these settings to your checkbox item: </p> <ol><li>Apply template option <em>Display as Pill Button</em> </li> <li>Set the number of columns to be equals or greater than your number of checkboxes <img src="http://vmorneau.me/content/images/2017/05/settings.png" alt="Checkbox Pills" title=""></li></ol></li> <li><p>Add this CSS to your page: </p></li> </ol> <pre><code class="language-css">.t-Form-fieldContainer--radioButtonGroup .apex-item-checkbox table.checkbox_group tr td { padding: 0; } .t-Form-fieldContainer--radioButtonGroup .apex-item-checkbox table.checkbox_group input+label:after, .t-Form-fieldContainer--radioButtonGroup .apex-item-checkbox table.checkbox_group input+label:before { display: none; } .t-Form-fieldContainer--radioButtonGroup .apex-item-checkbox label { min-width: 48px; } .t-Form-fieldContainer--radioButtonGroup .apex-item-checkbox input+label { color: #383838; background-color: #f8f8f8; box-shadow: 0 0 0 1px rgba(0, 0, 0, .125) inset; } .t-Form-fieldContainer--radioButtonGroup .apex-item-checkbox input:checked+label { background-color: #dedede; color: #383838; box-shadow: 0 0 0 1px rgba(0, 0, 0, .15) inset, 0 2px 2px rgba(0, 0, 0, .1) inset; } .t-Form-fieldContainer--radioButtonGroup .apex-item-checkbox table.checkbox_group input+label { padding: 4px 8px; width: 100%; text-align: center; } .t-Form-fieldContainer--radioButtonGroup .apex-item-checkbox table.checkbox_group td label { border-radius: 2px; margin: 0; display: block; } .t-Form-fieldContainer--radioButtonGroup .apex-item-checkbox table.checkbox_group td:first-child label { border-top-right-radius: 0; border-bottom-right-radius: 0; } </code></pre> <p><em>Note: this will work best when using the <strong>Vita</strong> theme style. Feel free to change to color values according to your theme style.</em></p> Vincent Morneau 13e3669a-3266-46e1-bbbd-c6a082b53bff Thu May 04 2017 11:34:55 GMT-0400 (EDT) Oracle Code – London (2017) http://www.explorer.uk.com/oracle-code-london-2017/ <p><strong>Last week I attended the <a href="https://developer.oracle.com/code/london" target="_blank">Oracle Code event in London</a>; a free event hosted by Oracle showcasing the latest technologies, practices and trends in development. As a developer who spends a lot of time working with the database, this event was slightly different to the ones I’m used to.</strong></p> <p>The event kicked off with <a href="https://twitter.com/AdamBien" target="_blank">Adam Bien</a> giving a demonstration of how to create a small Java EE application on top of a stack of Docker images, allowing him to then only update the small Java application layer when deploying. This setup allows the developer to create “Microservices”.</p> <p>The second keynote saw Deepak Patil letting us know it is a great time to be a software developer, and how current trends such as DevOps, CICD and Microservices (again) all relate to the Oracle Cloud. There was also an appearance by Mark Shuttleworth to back all this up.</p> <p>The rest of the morning saw <a href="https://twitter.com/prpatel" target="_blank">Pratik Patel</a> talking about the modern Javascript stack and, believe it or not, Microservices. Then Davide Fiorentino with a practical guide to Docker and service deployments (or, how to deploy your Microservices).</p> <p><a href="http://www.oracle.com/technetwork/issue-archive/2015/15-mar/o25architect-2458702.html" target="_blank">Here’s</a> a link to a 2015 Oracle article about Microservices and SOA. In summary, the Microservice architecture is a collection of standalone services to implement business capabilities. This architecture allows complex applications to be delivered via the deployment of small, individual pieces rather than as a single, whole application each time. OratoolWatch is a good site for getting a straight opinion regarding Oracle technology and SOA and Micorservices have been discussed <a href="http://www.oratoolwatch.com/2017/03/why-you-dont-want-to-become-an-oracle-soa-developer/" target="_blank">recently</a>.</p> <p>After lunch oracle-base’s <a href="https://twitter.com/oraclebase" target="_blank">Tim Hall</a> spoke about how we can use RESTful Web Services to make database code relevant to other technologies. This tied in to what I was thinking all morning – aren’t Microservices just the same thing as PL/SQL functions with web services on top of them? It turns out, technically they aren’t, but as Tim said to me – “There will no doubt be purists that turn their nose up at it, but as long as you are following the proper path, you will be producing web services that can be used by other developers and they will be happy.”</p> <p>It was nice to see the APEX team’s <a href="https://twitter.com/shakeeb" target="_blank">Shakeeb Rahman</a> speaking generally about UI later on in the afternoon and using APEX screenshots to demonstrate his points – the Universal Theme really does hold its own against other UIs!</p> <p>The day was great overall, and it was good to see some different ideas and approaches to development. It looks to me like Docker could be really useful – I’ve seen other APEX developers singing its praises, and I used it myself to get Node.JS up and running. Hopefully Oracle will release more official Docker images in the future (a Docker XE image perhaps?).</p> <p>Microservices look like they could be really cool, but in reality, I can’t see myself using them in their true form at the minute. However, the ideas that they represent are definitely worth keeping in mind. Separating code into packages isn’t something new for Oracle developers, but making functions and procedures available via web services might be to some. This is definitely something you should be looking at to keep your data accessible no matter which direction front end development goes in. Front end technology is constantly changing, and I am sure in a couple of years a future Oracle Code event will be completely different, but your data will still be there and there is no reason your existing business logic shouldn’t be either, as long as it is easily accessible.</p> <p>The post <a rel="nofollow" href="http://www.explorer.uk.com/oracle-code-london-2017/">Oracle Code &#8211; London (2017)</a> appeared first on <a rel="nofollow" href="http://www.explorer.uk.com">Explorer New</a>.</p> admin http://www.explorer.uk.com/?p=5663 Thu May 04 2017 06:29:10 GMT-0400 (EDT) APEX CONNECT and POUG High Five http://www.apex-at-work.com/2017/05/apex-connect-and-poug-high-five.html <a href="https://2.bp.blogspot.com/-h939EhgHc3g/WQo7iS0sP2I/AAAAAAAABww/zXNn7f4GIvo0Jd7xXx4zuHmfWun2A9zugCLcB/s1600/arnhold-1024x1024.jpeg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="100" src="https://2.bp.blogspot.com/-h939EhgHc3g/WQo7iS0sP2I/AAAAAAAABww/zXNn7f4GIvo0Jd7xXx4zuHmfWun2A9zugCLcB/s200/arnhold-1024x1024.jpeg" width="100" /></a>Next week the APEX CONNECT 2017 will start. Besides the latest News about Oracle APEX you will have the chance to talk to some of the best developers worldwide.<br />As I mentioned at the beginning of the year <a href="http://www.apex-at-work.com/2017/01/new-year-means-new-possibilites.html">"A new year promises new possibilities!"</a> I'm focusing on students and will hold a presentation about <a href="https://www.doag.org/konferenz/konferenzplaner/konferenzplaner_details.php?id=527880&amp;locS=0&amp;vid=535497" target="_blank">"Next Generation - Erreiche die Mitarbeiter von Morgen"</a>.<br />Besides that I'm always willing to help others so if you have questions don't hesitate to talk to me. I will take the time to listen to your APEX related problem and may be able to help you or guide you a way to success. You know the best thing on conferences is to meet new people.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-A2r7towv0Rs/WQo6XAzfArI/AAAAAAAABwk/pbqehQwKl44EoA4p3ATzPSMe_69wrl0yQCLcB/s1600/2017-Apex-Connect-Banner-600x100.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="106" src="https://2.bp.blogspot.com/-A2r7towv0Rs/WQo6XAzfArI/AAAAAAAABwk/pbqehQwKl44EoA4p3ATzPSMe_69wrl0yQCLcB/s640/2017-Apex-Connect-Banner-600x100.jpeg" width="640" /></a></div>The other real highlights for me are:<br />1. Meet the Oracle APEX developers in person. <br />You need some good APEX related advice then talk to them they wont bite you. :) I'm especially looking forward to talk to Joel Kallman.<br /><br />2. The hidden jewels besides the keynotes<br />- APEX / JavaScript / UX / SQL / PLSQL Q&amp;A Panel (<a href="https://www.doag.org/konferenz/konferenzplaner/konferenzplaner_details.php?id=527880&amp;locS=0&amp;vid=534686">Wednesday</a>)<br />- 1:1 Gespräche - Ask the Oracle Experts (<a href="https://www.doag.org/konferenz/konferenzplaner/konferenzplaner_details.php?id=527880&amp;locS=0&amp;vid=534675">Thursday</a>)<br /><br />3. Deutsche Bahn is looking for you. <br />If you searching for a new challenge as an APEX developer and/or project manager then talk to the "Small Solutions" team from Deutsche Bahn. They are searching for more experts and have their own stand at APEX CONNECT.<br /><br />And after that... <br /><br /><br /><br />I prepare myself for the most community driven Oracle conference on the planet.<br /><br /><div style="text-align: center;"><a href="http://poug.org/en/edycja/high-five-poug/" target="_blank"><span style="font-size: large;"><b>The POUG High Five in September 2017</b></span></a></div><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-LZhMZz7UdGo/WQo3PlRkG4I/AAAAAAAABwY/FCGOGd9-Ci8DwcXQsewAdW0t1jPgexafACLcB/s1600/poug_-_Twitter_Search.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="192" src="https://2.bp.blogspot.com/-LZhMZz7UdGo/WQo3PlRkG4I/AAAAAAAABwY/FCGOGd9-Ci8DwcXQsewAdW0t1jPgexafACLcB/s640/poug_-_Twitter_Search.png" width="640" /></a></div>The best known DBA's and developers from all over Europe come to present at the event. They pay for themselves just to be there. Why? It's the common passion which they can't get anywhere else in this concentrated form. I'm happy to be there as well and I will hold the only APEX related presentation. All presentations are held in English. Everyone is welcome to join this amazing event! Tobias Arnhold tag:blogger.com,1999:blog-6481483192141562388.post-4526629227471778941 Wed May 03 2017 16:57:00 GMT-0400 (EDT) End users still on IE8? Upgrade them before upgrading to Application Express 5.1 or later http://joelkallman.blogspot.com/2017/05/end-users-still-on-ie8-upgrade-them.html If you have end users of your <a href="https://apex.oracle.com/" target="_blank">Application Express</a> (APEX) applications still using Internet Explorer 8, you should upgrade their browsers before upgrading to Oracle Application Express 5.1 or later.<br /><br />The <a href="http://docs.oracle.com/database/apex-5.1/HTMIG/Oracle-AE-installation-requirements.htm#HTMIG381" target="_blank">documented general browser compatibility</a> for Oracle Application Express is N-1, where N is the latest production version of a browser, and N-1 is the major production version prior to that. &nbsp;At the time of release of Application Express 5.1, Microsoft Edge was the current Microsoft browser and Internet Explorer 11 was the prior major version.<br /><br />The <a href="https://cloud.oracle.com/en_US/database/schema/pricing" target="_blank">Oracle Cloud Database Schema Service</a> was recently upgraded to APEX 5.1.1, and a customer contacted me directly, saying that some of his end users who were still on IE8 couldn't even login to the application. &nbsp;"We" (<a href="https://twitter.com/anthonyrayner" target="_blank">Anthony</a> and <a href="https://twitter.com/j_snyders" target="_blank">John</a>) reviewed these issues, but concluded that there really wasn't any practical way for us to resolve this for the customer. &nbsp;We'll move heaven and earth to not impact a customer and avoid unplanned cost and work for them, but in this case, there simply wasn't anything we could do.<br /><br />If you need a compelling reason to have your end users upgrade to a modern version of Internet Explorer, remember that <a href="https://www.microsoft.com/en-us/windowsforbusiness/end-of-ie-support" target="_blank">Microsoft no longer supports or provides security patches</a> for the older IE versions. Joel R. Kallman tag:blogger.com,1999:blog-12214002.post-4194116475366730976 Wed May 03 2017 08:30:00 GMT-0400 (EDT) Creating a Sandbox for Learning Node.js and Oracle Database https://jsao.io/2017/05/creating-a-sandbox-for-learning-nodejs-and-oracle-database/ <p>With Oracle Database 12.2 now available and Node.js 8 just around the corner, this is a great time to create a local sandbox for learning. Thanks to some prebuilt VMs provided by Oracle, you can have such an environment up and running in less than 20 minutes (excluding download times) without spending a dime! <img src="https://s.w.org/images/core/emoji/2.3/72x72/1f604.png" alt="😄" class="wp-smiley" style="height: 1em; max-height: 1em;" /><br /> <span id="more-1884"></span><br /> In this post, I&#8217;ll walk you through the creation of such a sandbox. Here&#8217;s an overview of what we&#8217;ll be working through:</p> <ul> <li><a href="#install-virtualbox">Part 1: Install VirtualBox</a></li> <li><a href="#import-db-vm">Part 2: Import Database App Development VM</a></li> <li><a href="#install-nodejs-and-git">Part 3: Install Node.js and Git</a></li> <li><a href="#install-driver">Part 4: Install the Node.js Driver and Run a Test</a></li> </ul> <h4 id="install-virtualbox">Part 1: Install VirtualBox</h4> <p>The first thing you&#8217;ll want to do is install <a href="https://www.virtualbox.org/">VirtualBox 5.1 or later</a>. What is VirtualBox? From <a href="https://www.virtualbox.org/manual/ch01.html">the online documentation</a>:</p> <blockquote><p> VirtualBox is a cross-platform virtualization application. What does that mean? For one thing, it installs on your existing Intel or AMD-based computers, whether they are running Windows, Mac, Linux or Solaris operating systems. Secondly, it extends the capabilities of your existing computer so that it can run multiple operating systems (inside multiple virtual machines) at the same time. </p></blockquote> <p>VirtualBox is a great solution for this type of sandbox because we don&#8217;t have to install any software on our host operating system which would consume resources when not in use. I will not cover the installation process in any detail as it will vary depending on your host OS. Just <a href="https://www.virtualbox.org/wiki/Downloads">navigate to the downloads page</a> and download &#038; install the appropriate binaries for your OS.</p> <p><a href="https://jsao.io/wp-content/uploads/2017/05/virtualbox-5.1.22-binaries.png" rel="prettyPhoto[gallery-NZCI]"><img src="https://jsao.io/wp-content/uploads/2017/05/virtualbox-5.1.22-binaries.png" alt="" width="802" height="169" class="alignnone size-full wp-image-1893" srcset="https://jsao.io/wp-content/uploads/2017/05/virtualbox-5.1.22-binaries.png 802w, https://jsao.io/wp-content/uploads/2017/05/virtualbox-5.1.22-binaries-300x63.png 300w, https://jsao.io/wp-content/uploads/2017/05/virtualbox-5.1.22-binaries-768x162.png 768w" sizes="(max-width: 802px) 100vw, 802px" /></a></p> <h4 id="import-db-vm">Part 2: Import the Database App Development VM</h4> <p>Oracle provides a number of pre-built development VMs that are great for learning Oracle technology as you don&#8217;t have to muddle through complicated installs to get going. Head to<br /> <a href="http://www.oracle.com/technetwork/community/developer-vm/index.html">http://www.oracle.com/technetwork/community/developer-vm/index.html</a> and scroll down until you see the Database App Development VM.</p> <p><a href="https://jsao.io/wp-content/uploads/2017/05/db-app-dev-vm-12.2.png" rel="prettyPhoto[gallery-NZCI]"><img src="https://jsao.io/wp-content/uploads/2017/05/db-app-dev-vm-12.2.png" alt="" width="802" height="330" class="alignnone size-full wp-image-1897" srcset="https://jsao.io/wp-content/uploads/2017/05/db-app-dev-vm-12.2.png 802w, https://jsao.io/wp-content/uploads/2017/05/db-app-dev-vm-12.2-300x123.png 300w, https://jsao.io/wp-content/uploads/2017/05/db-app-dev-vm-12.2-768x316.png 768w" sizes="(max-width: 802px) 100vw, 802px" /></a></p> <p>Check out all the goodies in that VM! Note that Oracle Database 12.2.0.1 includes a number of enhancements for working with JSON. See the <a href="https://docs.oracle.com/database/122/ADJSN/toc.htm">Database JSON Developer&#8217;s Guide</a> for details and give them a go once the VM is up and running. </p> <p>Click the link that says <span class="inline-code">Downloads and Instructions</span>. On the next page, accept the license agreement and then click the link to download the VM.</p> <p><a href="https://jsao.io/wp-content/uploads/2017/05/db-app-dev-vm-license-agreement.png" rel="prettyPhoto[gallery-NZCI]"><img src="https://jsao.io/wp-content/uploads/2017/05/db-app-dev-vm-license-agreement.png" alt="" width="802" height="330" class="alignnone size-full wp-image-1900" /></a></p> <p>If you&#8217;ve not already authenticated with your Oracle account, you&#8217;ll be redirected to a page to do so before the download begins. If you don&#8217;t have an account just click the Create Account button on that page to create your free account. </p> <p>Once the download completes you&#8217;ll be ready to import the VM into VirtualBox. Open VirtualBox and click <span class="inline-code">File > Import Appliance</span>. Use the appliance import wizard to select the <span class="inline-code">DeveloperDaysVM2017-03-02_12</span> file you downloaded and click <span class="inline-code">Import</span>.</p> <p><a href="https://jsao.io/wp-content/uploads/2017/05/virtualbox-5.1.22-import.png" rel="prettyPhoto[gallery-NZCI]"><img src="https://jsao.io/wp-content/uploads/2017/05/virtualbox-5.1.22-import.png" alt="" width="802" height="465" class="alignnone size-full wp-image-1903" srcset="https://jsao.io/wp-content/uploads/2017/05/virtualbox-5.1.22-import.png 802w, https://jsao.io/wp-content/uploads/2017/05/virtualbox-5.1.22-import-300x174.png 300w, https://jsao.io/wp-content/uploads/2017/05/virtualbox-5.1.22-import-768x445.png 768w" sizes="(max-width: 802px) 100vw, 802px" /></a></p> <p>The import process will begin once you accept the license agreement. After a few minutes, you should see the following screen.</p> <p><a href="https://jsao.io/wp-content/uploads/2017/05/db-app-dev-vm-after-import.png" rel="prettyPhoto[gallery-NZCI]"><img src="https://jsao.io/wp-content/uploads/2017/05/db-app-dev-vm-after-import.png" alt="" width="802" height="564" class="alignnone size-full wp-image-1908" srcset="https://jsao.io/wp-content/uploads/2017/05/db-app-dev-vm-after-import.png 802w, https://jsao.io/wp-content/uploads/2017/05/db-app-dev-vm-after-import-300x211.png 300w, https://jsao.io/wp-content/uploads/2017/05/db-app-dev-vm-after-import-768x540.png 768w" sizes="(max-width: 802px) 100vw, 802px" /></a></p> <p>If you click the <span class="inline-code">Start</span> button a new window will open up with the VM running a terminal inside (you can resize the VM window as needed). </p> <p><a href="https://jsao.io/wp-content/uploads/2017/05/db-app-dev-vm-running.png" rel="prettyPhoto[gallery-NZCI]"><img src="https://jsao.io/wp-content/uploads/2017/05/db-app-dev-vm-running.png" alt="" width="802" height="645" class="alignnone size-full wp-image-1911" srcset="https://jsao.io/wp-content/uploads/2017/05/db-app-dev-vm-running.png 802w, https://jsao.io/wp-content/uploads/2017/05/db-app-dev-vm-running-300x241.png 300w, https://jsao.io/wp-content/uploads/2017/05/db-app-dev-vm-running-768x618.png 768w" sizes="(max-width: 802px) 100vw, 802px" /></a></p> <p>Here are a few tips to get you started inside the VM:</p> <ul> <li>The password for everthing is: <span class="inline-code">oracle</span></li> <li>Double-click the large START icon on the desktop to open a browser with labs on a variety of Oracle technology.</li> <li>To access APEX, navigate the browser to http://localhost:8080/apex. Log in using <span class="inline-code">OBE</span> for the workspace and username fields and <span class="inline-code">oracle</span> for the password.</li> <li>To be able to copy/paste things between the host and guest OS, go to the VirtualBox menu bar and select <span class="inline-code">Devices > Shared Clipboard > Bidirectional</span>. Trust me, this will come in handy!</li> </ul> <p>With the VM up and running we&#8217;re ready to install Node.js and Git.</p> <h4 id="install-nodejs-and-git">Part 3: Install Node.js and Git</h4> <p>The current <a href="https://github.com/nodejs/LTS#lts-schedule1">LTS</a> version of Node.js is v6. We&#8217;ll use that version for now but I&#8217;ll update this post when v8 is released at the end of May, 2017 as it brings async/await. Git will be used to install the Node.js driver for Oracle Database in the next step.</p> <p>Open a terminal and switch to the root user:</p> <pre class="crayon-plain-tag">su - root # password is oracle</pre> <p>Run the following commands as the root user:</p> <pre class="crayon-plain-tag">curl --silent --location https://rpm.nodesource.com/setup_6.x | bash - yum install nodejs -y yum install git -y</pre> <p>That&#8217;s all there is to it, Node.js and Git are ready to go. On to the driver!</p> <h4 id="install-driver">Part 4: Install the Node.js Driver and Run a Test</h4> <p>Example scripts for the driver can be found at: <a href="https://github.com/oracle/node-oracledb/tree/master/examples">https://github.com/oracle/node-oracledb/tree/master/examples</a>. The easiest way to start running the examples is to use Git to clone the driver repo from GitHub. From there we can copy the examples into our own directory, change the password in <span class="inline-code">dbconfig.js</span>, install the driver, and start testing! </p> <p>Close the previously opened terminal and open a new one (user should be oracle). Then run the following commands:</p> <pre class="crayon-plain-tag">cd ~ echo 'export LD_LIBRARY_PATH=$ORACLE_HOME/lib' &gt;&gt; .bashrc source .bashrc git clone https://github.com/oracle/node-oracledb.git mkdir -p projects/oracledb-examples cp node-oracledb/examples/* projects/oracledb-examples cd projects/oracledb-examples sed -i -e 's/&quot;welcome&quot;/&quot;oracle&quot;/' dbconfig.js npm install oracledb node select1.js</pre> </p> <p>Running subsequent examples only requires <span class="inline-code">node</span> followed by the name of the example you&#8217;d like to run:</p> <pre class="crayon-plain-tag">cd ~/projects/oracledb-examples node resultset1.js</pre> </p> <p>Enjoy your new sandbox!</p> danmcghan https://jsao.io/?p=1884 Wed May 03 2017 08:25:03 GMT-0400 (EDT) JET pie chart in APEX with absolute numbers as data labels http://www.apex-at-work.com/2017/05/jet-pie-chart-in-apex-with-absolute.html The new APEX pie charts only allows percent values as data labels. Luckily the APEX team added an great example in the "Sample Chart" application which shows how to add custom data labels including absolute values by adding custom JavaScript code.<br /><br />For German applications I prefer to display 10k (10000) like this: <b>10.000</b>.<br />Thanks to APEX and JET it is easy to implement.<br /><br /><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">function( options ){ <br />&nbsp;&nbsp;&nbsp; this.donutSliceLabel = function( dataContext ){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var value_ger;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value_ger = dataContext.value.toLocaleString('de-DE', {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; minimumFractionDigits: 0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&am;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return value_ger;<br />&nbsp;&nbsp;&nbsp; }&nbsp; <br />&nbsp;&nbsp;&nbsp; options.dataLabel = donutSliceLabel; <br />&nbsp;&nbsp;&nbsp; return options; <br />}</span> <br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-OyFsgDTGX4g/WQjwkLN0BMI/AAAAAAAABwE/aYvtKK4jfiA80upbdHxQepCxCPNcHZzfQCLcB/s1600/pie_chart_absolute_numbers.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="410" src="https://1.bp.blogspot.com/-OyFsgDTGX4g/WQjwkLN0BMI/AAAAAAAABwE/aYvtKK4jfiA80upbdHxQepCxCPNcHZzfQCLcB/s640/pie_chart_absolute_numbers.gif" width="640" /></a></div><br />Info: Technical updates in the JavaScript area are not supported by APEX updates. For example: A future JET version could have some engine changes which will not accept my JS example anymore.<br /><br /><br /> Tobias Arnhold tag:blogger.com,1999:blog-6481483192141562388.post-5271625551158305225 Tue May 02 2017 16:59:00 GMT-0400 (EDT) Big Data and Data Warehousing Kscope17 Track Highlights – Michael Rainey http://www.odtug.com/p/bl/et/blogaid=715&source=1 Here is an overview of Big Data and Data Warehousing sessions Track Lead Michael Rainey is most looking forward to at Kscope17 with reasons why he thinks you should attend them: ODTUG http://www.odtug.com/p/bl/et/blogaid=715&source=1 Mon May 01 2017 09:55:08 GMT-0400 (EDT) 2017 ODTUG Innovation Award http://www.odtug.com/p/bl/et/blogaid=711&source=1 ODTUG is excited to announce the 2nd annual ODTUG Innovation Award. The ODTUG Innovation Award honors excellence in creative, effective, innovative use of Oracle development tools within ODTUG's supported communities - ADF, APEX, BI, Database, EPM and Career. ODTUG http://www.odtug.com/p/bl/et/blogaid=711&source=1 Mon May 01 2017 08:32:18 GMT-0400 (EDT) Oracle Private Cloud Appliance (PCA) - when and why? http://jaffardba.blogspot.com/2017/04/oracle-private-cloud-appliance-pca-when.html <div dir="ltr" style="text-align: left;" trbidi="on"><br />What has become so critical in today's competitive business is the ability to fulfill the sudden and unpredictable demands that arises. It requires data centers agility, rapid deployments and cloud ready solutions. To succeed in today's modern business, companies must be ready to deploy innovative applications and quickly adopt the changes in the market. <br /><br />Oracle Private Cloud Appliance (PCA) is an integrated, 'wire once' converged system designed for fast cloud and rapid application deployments at the data centers. PCA is a one stop system for all your applications, where mixed operating systems (Linux, Solaris, RHEL and Windows) workloads can be consolidated into a single machine.<br /><br />Its has been observed off-late here in GCC specially, more and more organization are moving towards the PCA adoption. Hence, I thought of just writing a blog explaining the prime features and functionalities of PCA.&nbsp; Once I get some hands-on (which is in the very near future), I would love to write some advance concepts about of PCA and how really organization benefited with PCA.<br /><br /><br />Here are the key features of PCA: <br /><ul style="text-align: left;"><li>Engineered system comes with fully prebuilt and preconfigured setup</li><li>Cost effective solution for most of the Oracle and non-Oracle workloads</li><li>Automated installation and configuration software controller</li><li>Prebuilt OVM to speed-up the Oracle deployments</li><li>Single-button DR solutions through OEM</li><li>Pay for only you use policy</li><li>Flexibility to Oracle storage or any pre-existing storage</li><li>PCA certifies all Oracle software that is certified to run on OVM&nbsp;&nbsp; </li><li>Deployment of PCA at the data center is very straightforward and simple. The system will be ready within minutes/</li><li>You can add virtual machines (OVM) either with some basic configuration or use the standard OVM templates</li><li>No additional software licenses are required on PCA</li><li>Greatly reduces the time required for deployments. A new deployment can be achieved in hours rather than days in contrast to the traditional infrastructure</li><li>Easy integration into to existing data center models</li><li>OVM included with no additional cost</li><li><br /></li></ul>Below picture depicts the typical architecture, what PCA comprises of and supports:<br /><br /><img alt="" height="352" src="data:image/png;base64,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