ODTUG Aggregator ODTUG Blogs http://localhost:8080 Fri, 24 Mar 2017 09:58:24 +0000 http://aggrssgator.com/ APEX 5.1 Series Line Graph opportunity and its simple fix! http://jsidler.blogspot.com/2017/03/apex-51-series-line-graph-opportunity.html Have you ever needed a Line graph with missing Data points.. The standard line graph included in APEX 5.1 does not handle the missing data in a nice way. &nbsp;Examples are worth a thousand words so..<br />We have a table<br /><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">create table temp</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">( s varchar2(20),&nbsp; l varchar2(20),&nbsp; n number ) tablespace db_info_ts;</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">&nbsp; </div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">insert into temp values ('L1','a',5);&nbsp; </div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">insert into temp values ('l1','c',10);</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">insert into temp values ('L1','e',15);</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">insert into temp values ('L2','b',5);</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">insert into temp values (' l2 ','d',10);</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">insert into temp values ('L3','B',3);&nbsp; </div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">insert into temp values ('L3','c',3);&nbsp; </div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">insert into temp values ('L3','d',3);&nbsp; </div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">insert into temp values ('l3','e',3);</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">insert into temp values ('L4','a',7);&nbsp; </div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">insert into temp values ('L4','f',7);&nbsp;&nbsp; </div><br /><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">commit;&nbsp;</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><br /></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">The S column here stands for my series, L stands for labels (x values) and n stand for the values.</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">Notice Series are missing some of the labels I want a report showing labels a-f</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">Also the series and labels must have been hand entered as there are spaces and upper/lower values.. In short we have a mess.</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><br /></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">If I create a series line graph using this data with</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b>select s,l,n from temp&nbsp;</b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><br /></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">The results are disasterous!</div><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-XK_IkZD3paM/WNQ_HpNnv3I/AAAAAAAACp0/Jftzd3BJJ-oU19W1bFoo8F_yG5yySeLjgCLcB/s1600/Line%2Bb4.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="272" src="https://4.bp.blogspot.com/-XK_IkZD3paM/WNQ_HpNnv3I/AAAAAAAACp0/Jftzd3BJJ-oU19W1bFoo8F_yG5yySeLjgCLcB/s400/Line%2Bb4.JPG" width="400" /></a></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">But there is an easy way to fix it, using function returning sql&nbsp;</div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><b><i>declare</i></b></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><b><i>t_id number;</i></b></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><b><i>begin</i></b></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><b><i>&nbsp; &nbsp;t_id := fill_graph_gaps('select s,l,n from temp','I');</i></b></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><b><i>&nbsp; &nbsp;return 'select s,l,v from graph_data where graph_data_id = '||t_id||'order by l';</i></b></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><b><i>end;</i></b></span></span></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><br /></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">And Poof! you have a beautiful graphs</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-fg57h5pNKYY/WNQ_4AKmbHI/AAAAAAAACp8/ldiTemLWYN8ZRZH9RrOHEQrcCTu6DnV8QCLcB/s1600/Line%2Bafter.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="282" src="https://4.bp.blogspot.com/-fg57h5pNKYY/WNQ_4AKmbHI/AAAAAAAACp8/ldiTemLWYN8ZRZH9RrOHEQrcCTu6DnV8QCLcB/s400/Line%2Bafter.JPG" width="400" /></a></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">The magic is in using a combination of a Global temporary table&nbsp;</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b>create global temporary table tmp_graph_align </b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b>( series_col varchar2(200), label_col varchar2(200), graph_value number) on commit delete rows;</b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b><br /></b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">and a permanent table</div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b>CREATE TABLE GRAPH_DATA</b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b>(</b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b>&nbsp; GRAPH_DATA_ID&nbsp; NUMBER,</b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b>&nbsp; BUILD_DT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TIMESTAMP(6)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DEFAULT systimestamp,</b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b>&nbsp; S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2(200 BYTE),</b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b>&nbsp; L&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2(200 BYTE),</b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b>&nbsp; V&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NUMBER</b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b>);</b></i><br /><i><b>create sequence graph_data_seq start with 1 nocache;</b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"><i><b><br /></b></i></div><div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">Finally, the function&nbsp;</div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>CREATE OR REPLACE function fill_graph_gaps&nbsp;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>( p_sql_stmt varchar2, p_format varchar2 default 'N') return varchar2 is</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- &nbsp; Fill_graph_gaps</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- &nbsp; Created by Jerry Sidler 3/23/2017</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- &nbsp; All rights reserved</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- &nbsp; Free to use as long as this notice is maintained.</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-------------------------------------------</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- Parameters</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- p_sql_stmt is the select you wish to graph It must contain 3 columns</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- &nbsp;Column 1 Series</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- &nbsp;Column 2 Labels</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- &nbsp;Column 3 a number item</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>--</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- p_format attempts to cleanup inconsistent label data</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- &nbsp; &nbsp; &nbsp;N - No cleanup</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- &nbsp; &nbsp; &nbsp;L - Lower case Labels</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- &nbsp; &nbsp; &nbsp;U - Upper case labels</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>-- &nbsp; &nbsp; &nbsp;I - Initcap labels</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>t_cnt number;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>t_seq number;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>begin</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; delete from graph_data where build_dt &lt; sysdate-1;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; execute immediate 'insert into tmp_graph_align '||p_sql_stmt;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; if upper(p_format) &lt;&gt; 'N' then</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; update tmp_graph_align set label_col = trim(label_col),</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;series_col=trim(series_col);</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; if upper(p_format) = 'I' then&nbsp;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;update tmp_graph_align</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set label_col = initcap(label_col),</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; series_col = initcap(series_col);</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; elsif upper(p_format) = 'U' then&nbsp;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;update tmp_graph_align</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set label_col = upper(label_col),</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; series_col = upper(series_col);</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; elsif upper(p_format) = 'L' then&nbsp;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;update tmp_graph_align</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set label_col = lower(label_col),</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; series_col = lower(series_col);</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; end if;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; end if;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; for c1Rec in (select distinct label_col from tmp_graph_align ) loop</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; for c2Rec in (select distinct series_col from tmp_graph_align ) loop</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; select count(*) into t_cnt from tmp_graph_align where label_col = c1Rec.label_col and series_col = c2Rec.series_col;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if t_cnt = 0 then</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;insert into tmp_graph_align</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;values (c2Rec.series_col, c1Rec.label_col, 0);</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end if;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; end loop;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; end loop;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; select graph_data_seq.nextval into t_seq from dual;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; insert into graph_data</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; ( graph_data_id, s, l, v )&nbsp;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; select t_seq, series_col, label_col, graph_value&nbsp;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; &nbsp; &nbsp; from tmp_graph_align;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; commit;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp; return t_seq;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>&nbsp; &nbsp;&nbsp;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>end;</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>/</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b><br /></b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>Notice I welcome comments and hope to present this at KScope 17. &nbsp;Send me comments/suggestions so when I present it will have many new features to make our lives easier!</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b><br /></b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>Enjoy</b></i></span></span></div><div style="margin: 0in;"><span style="font-family: &quot;calibri&quot;;"><span style="font-size: 14.6667px;"><i><b>Jerry</b></i></span></span></div> Gerald Sidler tag:blogger.com,1999:blog-6605807732177081806.post-2340570339317682396 Thu Mar 23 2017 17:45:00 GMT-0400 (EDT) #fakecode http://spendolini.blogspot.com/2017/03/fakecode.html Unless you've managed to somehow filter out everything about US politics over the last few months (and if you have, please let me know your secret), then you've likely heard about "fake news". &nbsp;From a high level, my basic understanding of "fake news" is that it refers to stories or websites that are fabricated to advance the political beliefs and/or ideologies of one site or the other. &nbsp;Your definition may differ.<br /><br />So what is fake code? &nbsp;That, I can at least try to explain in a bit more detail.<br /><br />The other day, I saw this image posted on <a href="http://krisrice.blogspot.com/" target="_blank">Kris Rice's</a> twitter feed:<br /><br /><a href="http://4.bp.blogspot.com/-Tvifcip9F_4/WNPcG2ezipI/AAAAAAAAAd0/fJWa5vadtXoWbhiuJFhbp7dO1GhQBouAACK4B/s1600/SZPjHwz.jpg" imageanchor="1"><img border="0" height="320" src="https://4.bp.blogspot.com/-Tvifcip9F_4/WNPcG2ezipI/AAAAAAAAAd0/fJWa5vadtXoWbhiuJFhbp7dO1GhQBouAACK4B/s320/SZPjHwz.jpg" width="244" /></a><br /><br />I thought it was a joke, but it's actually a <a href="https://www.gitbook.com/book/tra38/essential-copying-and-pasting-from-stack-overflow/details" target="_blank">real book</a>. That made me laugh. &nbsp;Then cry. &nbsp;Then I read the book, mainly since it's only 4 pages. &nbsp;Believe it or not, &nbsp;there's actually some really good content packed in there. &nbsp;Let me summarize:<br /><br />If you choose to copy code from Stack Overflow, the OTN forum, or anywhere, really, there's a few things to keep in mind:<br /><br /><br /><ol><li><b>Who owns the code</b>. &nbsp;It's more than likely perfectly legal to copy and use the code you find on these sites "as is", but keep in mind there may be exceptions to this rule. &nbsp;The first page in the booklet offers some insight as to what they are.</li><li><b>Who gets credit for the code</b>. &nbsp;While not required, it's a good idea to credit the author of the snippet that you used. &nbsp;This is not just courteous, but also provides a reference back to the source of the code, so when it breaks, you know where to start looking. &nbsp;Which brings me to the third and most important thing to consider:</li><li><b>How good is the code</b>. Unfortunately, there is no easy way to verify this. &nbsp;You can look at the number of up votes for a specific response, but even that can be easily faked - or more likely, just be wrong because it is based on an older version.</li></ol><br />The first two issues don't concern me all that much, as the first is rarely an issue and the second is simple to solve. &nbsp;The third however, does concern me a lot. &nbsp;FAKE code - where FAKE stands for Found Another Killer Example (yes, I made that up) - is fast becoming the way that we develop solutions. &nbsp;Simply enter in some string of what you're trying to do into Google, and a set of possible solutions will magically appear on the page.<br /><br />With very little effort, you can copy &amp; paste that snippet into your application, run it, and if it works, then you're job is done and you're a hero. &nbsp;If it doesn't, some more searching and some more tinkering is in order. &nbsp;Maybe it's a 15 minute task instead of a 5 minute one. &nbsp;But that doesn't matter, as what you were asked to do is done, and you can move on to the next problem. <br /><br />There's definitely some problems with this approach. &nbsp;If you don't understand what the code is doing, who is going to fix it when it breaks? &nbsp;And it will break at some point. &nbsp;As other libraries or components get upgraded and/or browser versions change, code will eventually break - usually at the worst possible time.<br /><br />If you get lucky, and it doesn't break, then who is going to change how it works when the users come up with new requirements? &nbsp;If you don't have a full grasp as to what it does or how it does it, then you'll have little success in changing how it works.<br /><br />And just because there's a solution, does it mean that is the best, most secure, most performant solution? &nbsp;It may work fine for a single user on a development environment, but what happens when its implemented in the real world? &nbsp;This is especially a concern when you're implementing something in a language that you're not as proficient in, as you won't be able to readily spot bad practices.<br /><br />In no way am I saying that any of these sites are bad, nor saying don't use them. &nbsp;I use them all of the time to find solutions to problems and contribute solutions, as do many others. &nbsp;They are all a valuable resource that makes our jobs a lot easier to do.<br /><br />What I do want to emphasize is that when you do use any site that presents a solution or code snippet, be sure to not only vet the solution, but also ensure that you completely understand how it works, and be ready to fix it if it breaks. &nbsp;If you can't do either of these things easily, then perhaps its best to find an alternate solution to your problem - one that you can understand and maintain<br /><br />FAKE code is a real danger to any development project. &nbsp;Sprinkle enough of it around, and you're essentially creating a ticking time bomb, that's just waiting to explode. &nbsp;But FAKE code can be spotted and stopped fairly easily: Document the source of any snippet or blog you use. &nbsp;Take the time to learn what it does line-by-line, and document that, too. &nbsp;Be ready to support it if in the case it breaks. &nbsp;And if you're not comfortable doing so, have alternative resources lined up or at least identified.<br /><br />Together, with a little bit of work, we can stop the FAKEcode epidemic. Scott tag:blogger.com,1999:blog-8449039.post-1440595503019216880 Thu Mar 23 2017 11:03:00 GMT-0400 (EDT) Bulk Updating Interactive Grid Records https://ruepprich.wordpress.com/2017/03/23/bulk-updating-interactive-grid-records/ <p>After my previous post on <a href="https://ruepprich.wordpress.com/2017/03/09/apex-updating-interactive-grid-cells/" target="_blank">Updating Interactive Grid Cells</a>, I wanted to try bulk updating IG records.</p> <p>In this example I want to bulk update the salaries and commissions for the employees. I created a new button called <strong>Double Salaries</strong>. When the button is clicked, the salaries of the selected employees get doubled. The employees with no salary get a salary of 1000. Sales people will get their commission updated to 10% of their new salary.</p> <p>Employees are selected by clicking the row selector checkbox of the interactive grid. The interactive grid&#8217;s static ID is <em>emps.</em></p> <p>The work is done by a dynamic action on the <strong>Double Salaries</strong> button:</p> <pre><pre class="brush: jscript; title: ; notranslate"> var record, sal; //Identify the particular interactive grid var ig$ = apex.region(&amp;quot;emps&amp;quot;).widget(); //Fetch the model for the interactive grid var grid = ig$.interactiveGrid(&amp;quot;getViews&amp;quot;,&amp;quot;grid&amp;quot;); //Fetch the model for the interactive grid var model = ig$.interactiveGrid(&amp;quot;getViews&amp;quot;,&amp;quot;grid&amp;quot;).model; //Fetch selected records var selectedRecords = apex.region(&amp;quot;emps&amp;quot;).widget().interactiveGrid(&amp;quot;getViews&amp;quot;,&amp;quot;grid&amp;quot;).view$.grid(&amp;quot;getSelectedRecords&amp;quot;); //Loop through selected records and update value of the salary column for (idx=0; idx &amp;amp;lt; selectedRecords.length; idx++) { //Get the record record = model.getRecord(selectedRecords[idx][0]); //Get the current salary and commision values sal = model.getValue(record,&amp;quot;SAL&amp;quot;); job = model.getValue(record,&amp;quot;JOB&amp;quot;); comm = model.getValue(record,&amp;quot;COMM&amp;quot;); //If there is no salary, set it to 1000, else double it if (sal === '') { sal = 1000; } else { sal = sal * 2; } //Update the record with doubled salary and new commission model.setValue(record,&amp;quot;SAL&amp;quot;, sal); //Set commission to 10% of salary for sales people if (job = 'SALESMAN') { comm = sal *.1; model.setValue(record,&amp;quot;COMM&amp;quot;, comm); } } </pre> <p><img data-attachment-id="2196" data-permalink="https://ruepprich.wordpress.com/2017/03/23/bulk-updating-interactive-grid-records/emps_bulk-2/" data-orig-file="https://ruepprich.files.wordpress.com/2017/03/emps_bulk1.gif?w=550" data-orig-size="646,385" 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="emps_bulk" data-image-description="" data-medium-file="https://ruepprich.files.wordpress.com/2017/03/emps_bulk1.gif?w=550?w=300" data-large-file="https://ruepprich.files.wordpress.com/2017/03/emps_bulk1.gif?w=550?w=550" class=" size-full wp-image-2196 aligncenter" src="https://ruepprich.files.wordpress.com/2017/03/emps_bulk1.gif?w=550" alt="emps_bulk" /></p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ruepprich.wordpress.com/2148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ruepprich.wordpress.com/2148/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=ruepprich.wordpress.com&#038;blog=12765658&#038;post=2148&#038;subd=ruepprich&#038;ref=&#038;feed=1" width="1" height="1" /> Christoph Ruepprich http://ruepprich.wordpress.com/?p=2148 Thu Mar 23 2017 10:36:25 GMT-0400 (EDT) Node Newbie Error – NPM Refusing to Install Package as a Dependency of Itself https://ruepprich.wordpress.com/2017/03/22/node-newbie-error-npm-refusing-to-install-package-as-a-dependency-of-itself/ <p>Source: <a href="http://thisdavej.com/node-newbie-error-npm-refusing-to-install-package-as-a-dependency-of-itself/">Node Newbie Error – NPM Refusing to Install Package as a Dependency of Itself</a></p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ruepprich.wordpress.com/2146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ruepprich.wordpress.com/2146/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=ruepprich.wordpress.com&#038;blog=12765658&#038;post=2146&#038;subd=ruepprich&#038;ref=&#038;feed=1" width="1" height="1" /> Christoph Ruepprich http://ruepprich.wordpress.com/?p=2146 Wed Mar 22 2017 11:36:21 GMT-0400 (EDT) Oracle APEX: Low Code, High Innovation https://www.insum.ca/oracle-apex-low-code-high-innovation/ <h1>Oracle APEX: Low Code, High Innovation</h1> <p>Several years ago, I came across a story that has remained one of my favorites:</p> <blockquote><p>A toothpaste factory had a problem: they sometimes shipped empty boxes, without the tube inside.</p> <p>Those familiar with production lines know how difficult it is to have everything run perfectly in sync, and needless to say, empty toothpaste boxes in the supermarket move customer satisfaction scores in the wrong direction.</p> <p>Understanding how important that was, the CEO got the top people in the company together and they decided to start a new project, in which they would hire an external engineering company to solve their empty boxes problem, as their engineering department was already too stretched.</p> <p>The project followed the usual process: budget and project sponsor allocated, RFP, third-parties selected, and six months (and $8 million) later, they had a fantastic solution — on time, on budget, high quality, and everyone in the project had a great time. They solved the problem by using high-tech precision scales that would sound a bell and flash lights whenever a toothpaste box weighed less than it should. The line would stop, someone would walk over and yank out the defective box, then press a button to restart everything.</p> <p>A while later, the CEO decides to have a look at the ROI of the project: amazing results! No empty boxes ever shipped out of the factory. Very few customer complaints, and they were gaining market share. “That’s some money well spent!” &#8211; he says, before looking closely at the other statistics in the report.</p> <p>It turns out, the number of defects picked up by the scales was 0. It should’ve been picking up at least a dozen a day, so maybe there was something wrong with the report? He filed a bug on the report, and after some investigation, the engineers came back saying the report was actually correct. The scales really weren’t picking up any defects, because all boxes that got to that point on the conveyor belt were good.</p> <p>Puzzled, the CEO travels down to the factory, and walks up to the part of the line where the precision scales were installed. A few feet before it, there was a $20 desk fan blowing the empty boxes off the belt and into a bin.</p> <p>“Oh, that — one of the guys put it there ’cause he was tired of walking over every time the bell rang”, said one of the workers.</p></blockquote> <p>The story appeared in a post entitled <em>Networks are Smart Around the Edges</em>, and dubious veracity aside, I love it since it highlights several things about corporations and people we all know to be true from experience. In fact, since it demonstrates so clearly how we can often overlook simple yet effective solutions due to a biased frame of reference, I’ve used it several times when <a href="https://www.insum.ca/about-apex/">introducing Oracle APEX</a>.</p> <p><img class="aligncenter wp-image-7479 size-full" src="https://www.insum.ca/wp-content/uploads/2017/03/ray-ozzie-complexity-it.jpg" alt="ray-ozzie-complexity-it" width="624" height="469" srcset="https://www.insum.ca/wp-content/uploads/2017/03/ray-ozzie-complexity-it.jpg 624w, https://www.insum.ca/wp-content/uploads/2017/03/ray-ozzie-complexity-it-300x225.jpg 300w, https://www.insum.ca/wp-content/uploads/2017/03/ray-ozzie-complexity-it-450x338.jpg 450w" sizes="(max-width: 624px) 100vw, 624px" /></p> <p>For the same reason, the story also works well to introduce the topic of this post, which is the growing popularity of low code platforms, or what some are calling the <a href="https://www.salesforce.com/blog/2016/06/leading-the-low-code-revolution.html">low code revolution</a>.</p> <p>Successful business and IT leaders alike recognize that “complexity kills”, and they look for simple solutions that both enable speed and agility (see my previous <a href="https://www.insum.ca/oracle-apex-and-bimodal-it/">bimodal or two speed speed IT post</a>). And, they also recognize the tremendous value in unleashing the collective knowledge and creativity of their teams. Since low code platforms hold promise on both fronts, it’s no wonder we are seeing more and more adoption.</p> <h2>What are low code platforms?</h2> <p>A low code platform is an application development framework typically consisting of visual based, “drag and drop”, type development tools, which enable technically inclined non-programmers, (aka “citizen developers”), to build surprisingly functional business applications without having to write a lot of complex code.</p> <p>Forrester describes low-code platforms as “<em>platforms that enable rapid delivery of business applications with a minimum of hand-coding and minimal upfront investment in setup, training, and deployment</em>.”</p> <p>Two good examples are <a href="https://ifttt.com/">IFFTT </a>and <a href="https://zapier.com/">Zapier</a>, which are used to automate workflows by connecting services using pre-defined recipes. They enable non-programmers to develop quite involved workflows for everything from automating social media posts to managing email to building notifications and alerts when tickets go on sale or something is posted on craigslist.</p> <p>In the enterprise space, Salesforce.com is a good example, as is <a href="http://insum.ca/about-apex/">Oracle Application Express (APEX)</a>.  In fact, Oracle has recently announced<a href="https://www.oracle.com/corporate/pressrelease/low-code-development-092016.html"> a push towards low code tools</a>, and has ramped up efforts to make it as easy as possible for organizations to <a href="https://apex.oracle.com/lowcode/">get started with Oracle APEX</a>. To see the low code features of Oracle APEX, <a href="https://www.periscope.tv/w/1PlKQZzelVWGE">see a demo by </a><a href="https://www.periscope.tv/w/1PlKQZzelVWGE">Mike Hichwa</a>, VP of Software Development at Oracle.</p> <h1>Low Code Platforms &#8211; Why Now?</h1> <p>First, it’s worth noting that the adoption of low code tools is really just part of a larger trend we’ve been experiencing, which is the “<a href="https://en.wikipedia.org/wiki/Democratization_of_technology">democratization of IT</a>”.  Simply put, advancements in technology and user interface design are making powerful tools accessible to more and more people, meaning they are no longer restricted to specialized, highly trained experts.</p> <p><img class="size-full wp-image-7474 alignright" src="https://www.insum.ca/wp-content/uploads/2017/03/low-code-revolution-talent.png" alt="" width="480" height="332" srcset="https://www.insum.ca/wp-content/uploads/2017/03/low-code-revolution-talent.png 480w, https://www.insum.ca/wp-content/uploads/2017/03/low-code-revolution-talent-300x208.png 300w, https://www.insum.ca/wp-content/uploads/2017/03/low-code-revolution-talent-450x311.png 450w" sizes="(max-width: 480px) 100vw, 480px" /></p> <p>Aided and abetted by the democratization of IT, the primary reason for the low code revolution is rooted in the ever-increasing technology demands of modern businesses, combined with a general shortage of IT talent. In short, IT has become a major bottleneck in many organizations, and business leaders are scrambling for solutions. After all, today’s markets are not kind to those who move slowly with technology adoption &#8211; just ask Blockbuster.</p> <p>This of course is not surprising.  In this age of rapid digital transformation where it’s said that “every company is a technology company whether they want to be or not”, new initiatives typically have a technology component, resulting in a steadily rising demand for software developers. And, as highlighted in a recent Forbes article entitled “<a href="https://www.forbes.com/sites/panosmourdoukoutas/2017/03/02/wal-mart-target-and-cvs-need-software-talent-where-will-it-come-from/#865aff94bb4f">Wal-Mart, Target and CVS Need Software Talent; Where Will it come From?</a>”, not only are universities not churning out enough new grads, but the competition for software talent is becoming more fierce, especially from well funded Silicon Valley companies with highly sought-after workplaces. Oh, and did I mention the need to go fast?</p> <h1>How Low Code Platforms Help</h1> <h2>More Hands on Deck</h2> <p>Easily the biggest benefit of low code platforms is that they increase the number people who can be involved in delivering technical solutions. A recent <a href="https://www.salesforce.com/blog/2016/06/leading-the-low-code-revolution.html">article by Salesforce</a> explains that “<em>the ‘low-code revolution’ opens up an enormous opportunity to empower employees to get involved in the app-development process</em>” and means that “<em>the ability to build apps (and the responsibility for innovating) for a business becomes decentralized: anyone in any department can create software to solve a problem or address a need. Not only are problems being solved at the source, but coders are freed up to solve higher-order problems.</em>”</p> <p>A key point not to be missed here is “<em>problems being solved at the source</em>”.</p> <p>Intuitively, the closer someone is to the problem domain and solution context, the easier it will be for them to see and understand the types of optimizations required to improve efficiencies, and the more invested they will be in finding solutions. With their unique perspective and access to low code platforms, technically savvy business users can start servicing their own needs. This reduces dependency on overworked and potentially unsympathetic IT departments who are not only several steps removed from the problem, but who all too often deliver applications through a long, meandering process that begins with uninspired requirements gathering interviews and ends with “thanks, but that’s not really what we wanted.&#8221;</p> <p><img class="size-vntd-sidebar-auto wp-image-7478 aligncenter" src="https://www.insum.ca/wp-content/uploads/2017/03/ed-catmull-creativitiy-880x390.jpg" alt="ed-catmull-creativitiy" width="880" height="390" srcset="https://www.insum.ca/wp-content/uploads/2017/03/ed-catmull-creativitiy-880x390.jpg 880w, https://www.insum.ca/wp-content/uploads/2017/03/ed-catmull-creativitiy-300x133.jpg 300w, https://www.insum.ca/wp-content/uploads/2017/03/ed-catmull-creativitiy-768x340.jpg 768w, https://www.insum.ca/wp-content/uploads/2017/03/ed-catmull-creativitiy-450x199.jpg 450w, https://www.insum.ca/wp-content/uploads/2017/03/ed-catmull-creativitiy.jpg 1000w" sizes="(max-width: 880px) 100vw, 880px" /></p> <p>&nbsp;</p> <h2>Breaking the Requirements Gathering Challenge</h2> <p>Speaking of requirements gathering, nailing down user requirements is one of the most challenging aspects of application development projects. Although the blame is often placed on dithering users who don’t know what they want, to be fair, it’s not easy or even always possible for users to specify everything they’ll need upfront. People don’t always know exactly what they want until they start to see something take shape, and requirements can also shift since projects are not completed in a vacuum. Low code platforms can be a big help as they enable power users to iterate on solutions in an exploratory manner, and constantly refine until they have something suited to their needs.</p> <p>Additionally, platforms like Oracle APEX not only enable low code development, they also support “full control” development, which means experienced developers can get under the hood and write as much code as they need. So, much initial work can be done by citizen developers using the low code features, and professional developers can step in where necessary to complete the more complex features using the full power of HTML, CSS, JavaScript, and PL/SQL. At the very least, applications built by the citizen developers can act as a prototypes that help flush out requirements.</p> <p>&nbsp;</p> <h2>Turbo Charging Professional Developers</h2> <p>Finally, it’s not just non-coders that can benefit for low code platforms – there are benefits for professional developers as well.</p> <p>First, with pre-built packages and components that can be assembled via “drag and drop” configured with “point and click” interfaces, low code platforms help reduce the time and complexity involved with building and deploying applications. This, of course, is a welcomed outcome given the relentless pressure to produce more in less time.</p> <p><img class="alignright wp-image-7472 size-medium" src="https://www.insum.ca/wp-content/uploads/2017/03/low-code-backend-developers-300x141.png" alt="" width="300" height="141" srcset="https://www.insum.ca/wp-content/uploads/2017/03/low-code-backend-developers-300x141.png 300w, https://www.insum.ca/wp-content/uploads/2017/03/low-code-backend-developers.png 440w" sizes="(max-width: 300px) 100vw, 300px" /></p> <p>Second, low code platforms also enable back end developers to “move up the stack” and build actual end user applications.  In the past, given the complexity of front-end application development platforms and the associated learning curves (see ADF and .Net), back end developers were effectively “locked out” of application development and were forced to defer to experienced front-end programmers.  However, with low code platforms, that changes.  Using Oracle APEX as an example again, back end database developers can leverage their existing SQL and PL/SQL skills and build robust and professional looking applications without having to dedicate hours and hours to learning front-end programming.  So again, low code platforms can broaden the number of people who can deliver applications, and especially those with existing systems knowledge.</p> <h1>Sounds good. What’s the catch?</h1> <p>The criticisms of low code platforms seem to fall into two areas.</p> <p>The first is the claim that low code platforms “over promise and under deliver”, meaning they are not yet mature enough to be deemed useful beyond simple applications. As a result, the argument is that citizen developers will quickly hit a ceiling or get in over their heads. They&#8217;ll then have to be bailed out by professionals who&#8217;ll need to rebuild everything from scratch, and who will no doubt do so with no shortage of colorful “tsk tsks” and “who the heck built this” type exclamations, muttered under their breath while madly posting submissions to codinghorror.com.</p> <p>Although it may be true that the low code platforms are not yet fully mature, (see Forrester’s study entitled “<a href="https://www.forrester.com/report/Vendor+Landscape+The+Fractured+Fertile+Terrain+Of+LowCode+Application+Platforms/-/E-RES122549">Vendor Landscape: The Fractured, Fertile Terrain of Low-Code Application Platforms</a>”), it’s important to note they are steadily getting better all the time.</p> <p>For example, consider how advances in word processors and desktop publishing tools completely disrupted the graphic design and publishing industries. With tools like <a href="https://prezi.com/">Preszi</a>, an amateur with an eye for design can create professional looking presentations quickly and cost effectively, which not too long ago would have been significant undertakings involving graphic design and/or video production agencies.  Or, for those familiar with Oracle APEX, consider the difference between APEX 4.0 and 5.1, and then imagine where things will be in another 3 to 5 years.</p> <p><img class="aligncenter wp-image-7496 size-vntd-portfolio-auto" src="https://www.insum.ca/wp-content/uploads/2017/03/william-iven-22449-450x299.jpg" alt="" width="450" height="299" srcset="https://www.insum.ca/wp-content/uploads/2017/03/william-iven-22449-450x299.jpg 450w, https://www.insum.ca/wp-content/uploads/2017/03/william-iven-22449-300x199.jpg 300w, https://www.insum.ca/wp-content/uploads/2017/03/william-iven-22449-768x510.jpg 768w, https://www.insum.ca/wp-content/uploads/2017/03/william-iven-22449-1024x680.jpg 1024w, https://www.insum.ca/wp-content/uploads/2017/03/william-iven-22449-880x584.jpg 880w" sizes="(max-width: 450px) 100vw, 450px" /></p> <p>Also, it’s important to note that what I’m discussing here are “low code” and not “no code” platforms. It’s still necessary for citizen developers to have a high level understanding of how systems are built, as well as the ability to string together at least a few lines of code. The point is that they do to not have to be professional programmers who’ve dedicated months or years to learning how to write software. Think of people who might have built complex Excel and Word macros in the past &#8211; these are the types of people who will “take flight” with low code platforms.</p> <h2>Risks of Shadow IT?</h2> <p>The second area of criticism is that low code platforms can make it easy for someone who “knows enough to be dangerous” to, well, do something dangerous. Yes, this is true too, and much has been written about “shadow IT” and business users adopting tools not sanctioned or supported by the IT department.</p> <p><img class="size-full wp-image-7475 alignright" src="https://www.insum.ca/wp-content/uploads/2017/03/oracle-apex-built-in-features.png" alt="oracle apex built in features" width="444" height="253" srcset="https://www.insum.ca/wp-content/uploads/2017/03/oracle-apex-built-in-features.png 444w, https://www.insum.ca/wp-content/uploads/2017/03/oracle-apex-built-in-features-300x171.png 300w" sizes="(max-width: 444px) 100vw, 444px" /></p> <p>However, much has also been written about the need to <a href="http://www.cio.com/article/3119588/cio-role/empower-your-employees-by-embracing-shadow-it.html"><em>embrace </em></a><a href="http://www.cio.com/article/3119588/cio-role/empower-your-employees-by-embracing-shadow-it.html">shadow IT</a>. While there certainly are risks to manage, low code platforms often provide guardrails and can in fact encapsulate and enforce “best practices”.  For example, Oracle APEX includes built-in features to help citizen developers make good design choices and be <a href="https://www.insum.ca/oracle-apex-security-where-do-start/">mindful of application security</a>. And, since APEX runs entirely in the database, any applications developed by citizen developers can be carefully monitored by experienced DBAs using tools like Oracle Enterprise Manager, and disabled if problems arise.</p> <p>Incidentally, this is also where you’ll hear critics bring up tools like Microsoft Access or FoxPro, along with amusing anecdotes about a monstrosity someone built that blew up and almost ended the world. Yes, this has happened, and in fact, I’ve built a few of those monstrosities myself. However, for every MS Access horror story out there, there also exists a story about how an MS Access application built by a citizen developer was of enormous benefit to a business (I’ve built a few of those too).</p> <p>Clearly, the net gain from tools like MS Access and FoxPro has been very positive for businesses overall, and I believe the same will prove to be true for low code platforms.</p> <h1>Being Left Behind</h1> <p>The biggest risk with low code platforms is that overly cautious IT managers will ban them altogether, and in doing so throw the proverbial baby out with the bath water. In banning such tools, they reduce their organization’s “solutions surface area”, and limit their ability to innovate and keep pace with more forward thinking competitors. (In fact, overly restrictive IT policies that kill innovation is the subject of my next post.)</p> <p><img class="size-full wp-image-7473 alignright" src="https://www.insum.ca/wp-content/uploads/2017/03/low-code-it-managers.png" alt="low code it managers" width="444" height="299" srcset="https://www.insum.ca/wp-content/uploads/2017/03/low-code-it-managers.png 444w, https://www.insum.ca/wp-content/uploads/2017/03/low-code-it-managers-300x202.png 300w" sizes="(max-width: 444px) 100vw, 444px" /></p> <p>The truth is, more and more organizations are seeing the benefit of low code platforms. Not only do they reduce complexity and improve delivery speed, but they also act as a “force multiplier” by unlocking the creativity and ingenuity of a broader group of people. If the history of companies who are slow to adopt new technology is our guide, not exploring the possibilities of low code platforms will prove to be a costly mistake.</p> <p>The post <a rel="nofollow" href="https://www.insum.ca/oracle-apex-low-code-high-innovation/">Oracle APEX: Low Code, High Innovation</a> appeared first on <a rel="nofollow" href="https://www.insum.ca">Insum</a>.</p> Frank Hoogendoorn https://www.insum.ca/?p=7468 Tue Mar 21 2017 17:12:12 GMT-0400 (EDT) EECS - Oracle Exadate Express Cloud Service, Step 4 : APEX ! http://roelhartman.blogspot.com/2017/03/eecs-oracle-exadate-express-cloud.html So what are my experiences using EECS doing some APEX work?<span class="fullpost"></span><br /><div><br /></div><div>First of all, it is not blazing fast. Probably caused by the latency (as mentioned in my previous post). It is not slow, it is just ok('ish).&nbsp;</div><div><br /></div><div>Second, and way more important, it runs <b><u>APEX 5.0.4</u></b>! So whatever Oracle advertises about "<i>Cloud first</i>" ... it doesn't seem to apply to APEX (or APEX on EECS). So this fact alone makes this environment <u>useless</u> for demo, development and presentation purposes at this moment. I heard through the grapevine that 5.1 will be available from April 25 - but that's still a month away. And that rumour could be false.</div><div><br /></div><div>Third, because you don't have access to a SYS account, you can't install something like <a href="http://www.oraopensource.com/apex-sert/" target="_blank">APEX-SERT</a>. Maybe the install scripts can be adapted for the PDB_ADMIN account - I haven't looked into that yet.</div><div><br /></div><div>Four : As mentioned in an earlier post, within an EECS PDB instance you get one and only one APEX Workspace. You can't add one (nor delete). You can create as much schema's as you wish, but you have to assign them all to that same Workspace. Thus if you need more Workspaces, you either buy multiple EECS instances or look into another - more expensive - Database Cloud offering.</div><div><br /></div><div>Five : The default Authentication Scheme is the new "Oracle Cloud Identity Management" scheme. If you have admin rights for the Service you can add users in that layer. If you would like to use "APEX Users" as an Authentication Scheme, you need admin rights as well to create those users. Or create your own scheme if you like that better.</div><div><br /></div><div>And finally, when you buy an EECS, you get a Customer Support (CSI) number. You should be able to use this number to access My Oracle Support (MOS) to get information, ask questions etc. But the first few weeks that number was not recognised by MOS. But as I tried it again today, it seems to "know" the number and registration is in progress.</div><div><br /></div><div>Reading the points above and the previous post, you might think EECS is not that good. But that all depends on what you expect to get for your money. Compared with other Oracle Cloud products, EECS is rather cheap. At some points it could do better, but especially when the service is upgraded to APEX 5.1, I will use it more for demo / development and presentations. Multiple Workspaces would be second on my wish list.&nbsp;</div><div><br /></div><div>And also Oracle announced a free APEX development environment a while ago - comparable to apex.oracle.com, but with that major difference that you are officially allowed to develop applications in that new environment (apex.oracle.com is targeted as a playground - despite all the development that is probably happening there....).&nbsp;</div> Roel Hartman tag:blogger.com,1999:blog-20567072.post-6644866443997566288 Tue Mar 21 2017 09:31:00 GMT-0400 (EDT) Using VS Code for PL/SQL development http://ora-00001.blogspot.com/2017/03/using-vs-code-for-plsql-development.html I've been using Sublime Text as my main editor for PL/SQL development for many years, but I'm now in the process of switching to <a href="https://code.visualstudio.com/">Visual Studio Code</a> (VS Code).<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-St5URa61wE8/WNAOn7qnBxI/AAAAAAAABQQ/QpnrTKxxhFU75yzGVlojRhRBIxURyN7iwCLcB/s1600/Screen%2BShot%2B2017-03-20%2Bat%2B18.16.26.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="380" src="https://4.bp.blogspot.com/-St5URa61wE8/WNAOn7qnBxI/AAAAAAAABQQ/QpnrTKxxhFU75yzGVlojRhRBIxURyN7iwCLcB/s640/Screen%2BShot%2B2017-03-20%2Bat%2B18.16.26.png" width="640" /></a></div><br /><br />Some good reasons to use VS Code:<br /><ul><li>Multi-platform (Windows, OS X, Linux)</li><li>Free, open source</li><li>Lightweight, fast</li><li>Large ecosystem of <a href="https://marketplace.visualstudio.com/VSCode">extensions</a></li><li>Built-in <a href="https://code.visualstudio.com/docs/editor/versioncontrol">Git support</a></li><li>Can be adapted to PL/SQL coding via a <a href="https://marketplace.visualstudio.com/items?itemName=xyz.plsql-language">plsql language extension</a> (syntax highlighting, go to/peek definition, go to symbol) and PL/SQL compilation using sqlplus via a <a href="https://code.visualstudio.com/docs/editor/tasks">Task Runner</a> (see below for PL/SQL specifics)</li></ul><br /><span style="font-size: large;">Installing VS Code and extensions</span><br /><br />Download VS Code from <a href="https://code.visualstudio.com/">https://code.visualstudio.com/</a> and run the installer. <br /><br />Start VS Code and click the Extensions icon.<br /><ul><li>Search for "plsql" and install the "xyz.plsql-language" extension</li></ul>&nbsp;The following are all optional but recommended: <br /><ul><li>Search for "git history" and install the "donjayamanne.githistory" extension</li><li>Search for "better merge" and install the "pprice.better-merge" extension</li><li>Search for "tag" and install the "formulahendry.auto-close-tag" extension</li><li>Search for "blackboard" and install the "gerane.Theme-Blackboard" extension</li><li>Search for "material icon" and install the "PKief.material-icon-theme" extension </li></ul>Click on "Reload" to restart VS Code with the new extensions loaded.<br /><br />Your list of extensions should now look something like this:<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-4G_ik9PDLzQ/WNAQcHl2XSI/AAAAAAAABQc/srU-Qb39FS8Q7M_SWyn7bZ95QfmBASktQCLcB/s1600/Screen%2BShot%2B2017-03-20%2Bat%2B18.23.48.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-4G_ik9PDLzQ/WNAQcHl2XSI/AAAAAAAABQc/srU-Qb39FS8Q7M_SWyn7bZ95QfmBASktQCLcB/s1600/Screen%2BShot%2B2017-03-20%2Bat%2B18.23.48.png" /></a></div><br />Click File, Preferences, Color Theme and select the "Blackboard" theme.<br />Click File, Preferences, File Icon Theme and select the "Material Icon" theme.<br /><br /><span style="font-size: large;">Configuring a Task Runner to compile PL/SQL code</span><br /><br />Click File, Open Folder and open a folder containing your PL/SQL code.<br />Click View, Command Palette and enter "task" then select "Configure Task Runner", select "Others".<br /><br />Copy the following text and paste it into the <span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">tasks.json</span> file:<br /><br /><script src="https://gist.github.com/mortenbra/9d7bd2147b02ae8fa2e14dbc38935e5e.js"></script><br /><br />Adjust the connection string as appropriate to your environment.<br /><br />Copy the following text and save it as <span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">_show_errors.sql </span>in the project root folder:<br /><br /><script src="https://gist.github.com/mortenbra/3204a125e3da1008e19b36bf94586950.js"></script><br /><br />Linux and Mac: Copy the following text and save it as <span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">_run_sqlplus.sh</span> in the project root folder (remember to <span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">chmod +x</span> the file to make it executable).<br /><br /><script src="https://gist.github.com/mortenbra/9af4b0211782161619c0bab01ed7031a.js"></script><br /><br />Windows: Copy the following text and save it as <span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">_run_sqlplus.bat</span> in the project root folder.<br /><br /><script src="https://gist.github.com/mortenbra/bda9b46f1af45ffa8a72d49739d7782e.js"></script> <br /><br />Optionally create a <span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">login.sql</span> file in project root folder and add:<br /><br /><script src="https://gist.github.com/mortenbra/6a10aa6b09fb470e6b91bc3b5adb19af.js"></script><br /><br /><span style="font-size: large;">Editing code</span><br /><br />The <a href="https://marketplace.visualstudio.com/items?itemName=xyz.plsql-language">PL/SQL language extension by xyz</a> provides syntax highlighting for PL/SQL, as well as a couple of very useful code navigation features.<br /><br />You can go to a "symbol" (ie a function or procedure) inside a package by pressing Shift+Ctrl+O and typing the name of the symbol: <br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-h1FQ8fQdNhA/WNDf6LO-PjI/AAAAAAAABQ4/dTGH_gK3sXMcWBOzw4rJ4sQoNuL-AG_MwCLcB/s1600/DocumentSymbol.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="458" src="https://1.bp.blogspot.com/-h1FQ8fQdNhA/WNDf6LO-PjI/AAAAAAAABQ4/dTGH_gK3sXMcWBOzw4rJ4sQoNuL-AG_MwCLcB/s640/DocumentSymbol.gif" width="640" /></a></div><br />You can go to the definition of a function or procedure by pressing F12 when the cursor is on the function or procedure name (or right-click on the function or procedure name and select either "Go to definition", or "Peek definition" to see the definition in a popup window without leaving the current file).<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-bkP7jePkARI/WNDhImC0AoI/AAAAAAAABRA/buWmDJMVax0Uoe3sqKm9e8OGox0lGJnJACLcB/s1600/Definition.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="458" src="https://1.bp.blogspot.com/-bkP7jePkARI/WNDhImC0AoI/AAAAAAAABRA/buWmDJMVax0Uoe3sqKm9e8OGox0lGJnJACLcB/s640/Definition.gif" width="640" /></a></div><br /><br /><br /><span style="font-size: large;">Snippets</span><br /><br />You can define your own snippets for frequently used code; see <a href="https://code.visualstudio.com/docs/editor/userdefinedsnippets">this how-to article</a>. I recommend that you create snippets for frequently used code blocks such as if/then/else statements, case statements, and larger code blocks such as the skeleton for a package, procedure or function.<br /><br /><span style="font-size: large;">Building code</span><br /><br />To build (compile) the current file into the database, press Shift+Ctrl+B (or click View, Command Palette, and type "build" to search for the relevant command).<br /><br />The build task runs sqlplus and passes it the filename of the current file. This creates or replaces the object in the database (you can see the commands being executed in the "Output" pane in VS Code). The build task then queries <span style="font-family: &quot;Courier New&quot;,Courier,monospace;">user_errors</span> to get any errors and warnings from the database, and these are shown in the "Problems" pane in VS Code.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-ojUO78KeArs/WNDbwYBe6ZI/AAAAAAAABQs/p6nbzS0CYwM70-JdATffK0MpedTBq29rACLcB/s1600/Screen%2BShot%2B2017-03-21%2Bat%2B08.50.30.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://1.bp.blogspot.com/-ojUO78KeArs/WNDbwYBe6ZI/AAAAAAAABQs/p6nbzS0CYwM70-JdATffK0MpedTBq29rACLcB/s640/Screen%2BShot%2B2017-03-21%2Bat%2B08.50.30.png" width="617" /></a></div><br />You can click on each problem to jump to the relevant line of code. You'll also see squiggly lines under the errors in the code itself, and you can hover over the text to see a tooltip containing the error message.<br /><br />Note that since the build task queries the <span style="font-family: &quot;Courier New&quot;,Courier,monospace;">user_errors</span> view without any filters, you get to see all errors in the schema, not just the errors for the current file. I actually like this, because it instantly shows me if there are any other problems in the schema that I might not otherwise be aware of.<br /><br />Also, the build task assumes that you have one file per database object (ie separate files for package specifications and package bodies), and that the filenames match the database object names. This makes sense to me and I assume that's how most people organize their files, but you can tweak the <span style="font-family: &quot;Courier New&quot;,Courier,monospace;">_show_errors.sql</span> script to generate output appropriate to your setup.<br /><br /><br /><span style="font-size: large;">Version control with Git</span><br /><br />VS Code has great built-in support for Git. I recommend installing a couple of git-related extensions (see above), but other than that, I'll just refer you to <a href="https://code.visualstudio.com/docs/editor/versioncontrol">the official tutorial for using Git in VS Code</a>.<br /><br /><br />That's it, enjoy using VS Code for PL/SQL development! :-)<br /><br /><br /> Morten Braten tag:blogger.com,1999:blog-5215551487816981140.post-6246776665906215004 Tue Mar 21 2017 04:19:00 GMT-0400 (EDT) Kscope17 Preview: Your Destination Awaits http://www.odtug.com/p/bl/et/blogaid=685&source=1 Kscope12, my very first Kscope and the one that shares this year's location, was a superbly unique event. In last year's ODTUG Cinco de Mayo #tbt Twitter party ("tbt" = "ThrowBack Thursday" for those of you who don't use Twitter), pictures from Kscope12 kept surfacing attached to fond memories... ODTUG http://www.odtug.com/p/bl/et/blogaid=685&source=1 Mon Mar 20 2017 11:09:55 GMT-0400 (EDT) March ODTUG News http://www.odtug.com/p/bl/et/blogaid=687&source=1 ODTUG celebrated its 20th birthday! The ODTUG News will keep you up to date on ODTUG Kscope17 updates, events, and sponsorship opportunities. Read more to learn about Meetups and events in your area, and mark your calendars for our upcoming March and April webinars. ODTUG http://www.odtug.com/p/bl/et/blogaid=687&source=1 Mon Mar 20 2017 11:04:27 GMT-0400 (EDT) Oracle Analytics Cloud Release - Blog Hop Takeaways http://www.odtug.com/p/bl/et/blogaid=686&source=1 If you haven’t heard already, Oracle Analytics Cloud (OAC) is officially released! This includes the Essbase Cloud (EssCS), Business Intelligence Cloud (BICS), and Data Visualization Cloud (DVCS). Find out more here! ODTUG http://www.odtug.com/p/bl/et/blogaid=686&source=1 Fri Mar 17 2017 14:34:06 GMT-0400 (EDT) APEX 5.1 Master detail (with Interactive/Classic Detail Report) http://apexbyg.blogspot.com/2017/03/apex-51-master-detail-with.html <div dir="ltr" style="text-align: left;" trbidi="on">You probably know that in APEX 5.1 you can easily make a master-detail report regions declaratively by using an Interactive Grids (IG).<br /><br />But what if you don't want all those fancy IG stuff (I know, I know...you can hide/disable all of it) but plain old Classic (or Interactive) Report for a detail report. No problem, it's only few clicks away!<br /><br />Let's take a well known example with the dept and emp tables.<br /><br />First of all you have to create an Interactive Grid over the dept table (master):<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-LObbf0XjCQo/WMuajzKSpLI/AAAAAAAAEdM/wzk9JsgTYPICsLqwVXF9lgvujGIcKdB2gCLcB/s1600/Screen%2BShot%2B2017-03-17%2Bat%2B09.12.41.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="185" src="https://2.bp.blogspot.com/-LObbf0XjCQo/WMuajzKSpLI/AAAAAAAAEdM/wzk9JsgTYPICsLqwVXF9lgvujGIcKdB2gCLcB/s640/Screen%2BShot%2B2017-03-17%2Bat%2B09.12.41.png" width="640" /></a></div><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />Don't forget to put the DEPTNO into SQL Query. It can be hidden, but you have to put it in.<br /><br />Next step is to create a hidden item (with Value Protected property set to No) where you will temporary store the DEPTNO of the selected grid row (in my case it's P28_DEPTNO):<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-TEaNlEclXI8/WMubz_MlM1I/AAAAAAAAEdY/dScy_BYNLP0WN-99RPwNCEIqDTX2weslwCLcB/s1600/Screen%2BShot%2B2017-03-17%2Bat%2B09.18.06.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-TEaNlEclXI8/WMubz_MlM1I/AAAAAAAAEdY/dScy_BYNLP0WN-99RPwNCEIqDTX2weslwCLcB/s1600/Screen%2BShot%2B2017-03-17%2Bat%2B09.18.06.png" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><br />Then you can create your detail report (Classic or Interactive) over the emp table with where condition that references your hidden item (don't forget to put it in Page Items to Submit):<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-CXoV9Ktjfws/WMugH76HivI/AAAAAAAAEdw/MH4RJrKPOBork0tJH8cj7tDfTx4Bu1fFQCLcB/s1600/Screen%2BShot%2B2017-03-17%2Bat%2B09.36.13.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-CXoV9Ktjfws/WMugH76HivI/AAAAAAAAEdw/MH4RJrKPOBork0tJH8cj7tDfTx4Bu1fFQCLcB/s1600/Screen%2BShot%2B2017-03-17%2Bat%2B09.36.13.png" /></a></div><br /><br />Next step is to create a dynamic action with event Selection Change [Interactive Grid] over the dept region:<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-HZTtQ4SyEs4/WMuch8LShOI/AAAAAAAAEdg/2ekQ_6cNlZEFsorAUKnjfODOwJHoP3KzgCLcB/s1600/Screen%2BShot%2B2017-03-17%2Bat%2B09.20.59.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-HZTtQ4SyEs4/WMuch8LShOI/AAAAAAAAEdg/2ekQ_6cNlZEFsorAUKnjfODOwJHoP3KzgCLcB/s1600/Screen%2BShot%2B2017-03-17%2Bat%2B09.20.59.png" /></a></div><br />For first true action use Set Value with the Set Type Javascript Expression and define it as:<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;">this.data.selectedRecords.length != 1 ? '': this.data.model.getValue( this.data.selectedRecords[0], "DEPTNO")</pre>and for an Affected element choose your hidden item:<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-UmQfM4S-84c/WMuhwduU9-I/AAAAAAAAEd8/8oztBbxuBQQbI_MrGYZXRXqJ9OOCSHEcQCLcB/s1600/Screen%2BShot%2B2017-03-17%2Bat%2B09.43.25.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-UmQfM4S-84c/WMuhwduU9-I/AAAAAAAAEd8/8oztBbxuBQQbI_MrGYZXRXqJ9OOCSHEcQCLcB/s1600/Screen%2BShot%2B2017-03-17%2Bat%2B09.43.25.png" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">The second true action should be a refresh of your detail region...and thats all.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Live demo is available&nbsp;<a href="https://apex.oracle.com/pls/apex/f?p=100309:28" target="_blank">here</a>.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">You can use similar approach if you want this to work with a multiple selected rows (for example in editable grid) but then you should change Set Value DA and where condition of your emp query to support this.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Enjoy!</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><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.0.00.45</i></div><br /></div> Marko Gorički tag:blogger.com,1999:blog-1003209687173038896.post-87993622082839211 Fri Mar 17 2017 05:03:00 GMT-0400 (EDT) ODTUG Turns 20 http://www.odtug.com/p/bl/et/blogaid=684&source=1 ODTUG Turns 20On March 13, 2017, ODTUG celebrated its 20th birthday! Yes, there’s been a lot of changes over the years, but one thing remains the same: ODTUG’s commitment to keeping you on the cutting-edge of the constantly changing Oracle technology landscape. Check out these highlights: ODTUG http://www.odtug.com/p/bl/et/blogaid=684&source=1 Wed Mar 15 2017 09:32:08 GMT-0400 (EDT) Iceland, Iceland, Baby http://spendolini.blogspot.com/2017/03/iceland-iceland-baby.html <p>Alright, stop!  Collaborate and listen!  Ok, I’ll be the one to take my own advice here and stop...</p><p>Later this month, I’ll be heading to Reykjavík, Iceland to deliver our 3-day training class “Developing Desktop APEX Applications”.  This class will be open to the public and costs about $2500 per student, so anyone is welcome to sign up. You’ll have to make your way to Iceland, of course.</p><p><img style="display: block; margin-left: auto; margin-right: auto;" title="miracle_logo1.png" src="https://lh3.googleusercontent.com/-93e23u3Ysr4/WMqI1UcwCDI/AAAAAAAAAc8/75aaeY0Vap8/miracle_logo1.png?imgmax=1600" alt="Miracle logo1" width="147" height="28" border="0" /></p><p>Here’s a brief overview of what we’re going to cover:</p><p><em>This 3-day course is an introduction to developing web applications using Oracle Application Express, or simply APEX. The course starts out with an overview of data model of the application that student will build. It then transitions to the SQL Workshop portion of APEX, where basic database object management concepts are addressed.</em></p><p><em></em><em>The bulk of the remainder of the class focuses on building an APEX application, starting with the core components that make up the foundation of the application. Students will then build several forms and reports, which allow user interaction with the data. Next, additional types of forms and reports will be introduced, as well as more advanced techniques used when managing them. The course will conclude with a review of the basic security attributes of an application as well as how to prepare and deploy it to a production environment.</em></p><p>The course will run from March 28th through March 30th, and will be held in a location TBD in Reykjavík. More details, as well as the course outline and a link to register can be found on Miracle’s site here: <a href="http://miracle.is/en/building-apex-applications/">http://miracle.is/en/building-apex-applications/</a></p> Scott tag:blogger.com,1999:blog-8449039.post-8659831856170805387 Tue Mar 14 2017 19:37:00 GMT-0400 (EDT) Taste of KScope 2017 Webinars http://spendolini.blogspot.com/2017/03/taste-of-kscope-2017-webinars.html <p>This Thursday, I’ll be participating in the Taste of KScope 2017 webinar series by presenting GET POST ORDS JSON: Web Services for APEX Decoded.  The webinar will begin at noon EDT on Thursday, March 16th.  The webinar is completely free, and you don’t need to be an ODTUG member to attend.</p><p>Here’s a summary of the abstract:</p><p><em>Web Services in the APEX world are becoming more and more popular.  However, there is still a lot of confusion as to what they are and how they could benefit the APEX developer.  After a review of the syntax and jargon associated with web services, this session will review and boil down web services to their basic components.  It will then demonstrate how APEX developers can start to use these powerful components - both to send and receive data from other sites.  </em></p><p>Not only will I be presenting this session at KScope later this year, but I’ve also done it a few times already, so most of the kinks are (hopefully) worked out.</p><p>You can register for the webinar here: <a href="https://attendee.gotowebinar.com/register/2300788935263147265" target="blank">https://attendee.gotowebinar.com/register/2300788935263147265</a></p> Scott tag:blogger.com,1999:blog-8449039.post-4562458505101911573 Tue Mar 14 2017 18:05:00 GMT-0400 (EDT) 12cR1 RMAN Restore/Duplicate from ASM to Non ASM takes a longer time waiting for the ASMB process http://jaffardba.blogspot.com/2017/03/12cr1-rman-restoreduplicate-from-asm-to.html <div dir="ltr" style="text-align: left;" trbidi="on">Yet another exciting journey with Oracle bugs and challenges. Here is the story for you.<br /><br />One of our recent successful migrations was a single instance Oracle EBS 12cR1 database to Oracle Super Cluster M7 as a RAC database with 2 instances on the same DB version (12.1.0.2). Subsequently, the customer wants to run through EBS cloning and set up an Oracle active data guard configuration.<br /><br />The target systems are not Super Cluster. The requirement to clone and set up an Oracle data guard is to configure as a single-instance database onto a filesystem (non-ASM). After initiating the cloning procedure using the DUPLICATE TARGET DATABASE method trough RMAN, we noticed that RMAN is taking significant time to restore(ship) the data files to the remote server. Also, the following warning messages were appeared in the alert.log:<br /><br /><span style="font-size: x-small;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"></span></span><br /><div></div><div><span style="font-size: x-small;"><span style="font-size: x-small;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"></span></span></span><br /><div><span style="font-size: x-small;"><span style="font-size: x-small;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">ASMB started with pid=63, OS id=18085</span></span></span></div><span style="font-size: x-small;"><span style="font-size: x-small;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><div>WARNING: failed to start ASMB (connection failed) state=0x1 sid=''</div><div>WARNING: ASMB exiting with error</div><div>Starting background process ASMB</div><div>Sat Mar 11 13:53:24 2017</div><div>ASMB started with pid=63, OS id=18087</div><div>WARNING: failed to start ASMB (connection failed) state=0x1 sid=''</div><div>WARNING: ASMB exiting with error</div><div>Starting background process ASMB</div><div>Sat Mar 11 13:53:27 2017</div><div>ASMB started with pid=63, OS id=18089</div><div>WARNING: failed to start ASMB (connection failed) state=0x1 sid=''</div><div>WARNING: ASMB exiting with error</div><div>Starting background process ASMB</div></span></span>&nbsp;</span></div><br />The situation raised couple of concerns in our minds:<br /><ol style="text-align: left;"><li>Why is the restore is too slow from RMAN? (while there is no Network latency and DB files are not so big sized)</li><li>Why Oracle is looking for an ASM instance on a non-Cluster home? (not even a standard Grid home)</li></ol>After some initial investigation, we come across following MOS Docs: <br /><ul style="text-align: left;"><li>'<b>12c RMAN Operations from ASM To Non-ASM Slow (Doc ID 2081537.1)</b>'.<span style="font-size: x-small;">&nbsp;</span></li><li><span style="font-size: x-small;"><span class="xq" id="kmPgTpl:sd_r1:0:dv_rDoc:0:ol22" style="color: black; font-size: 130%; font-weight: bold;">WARNING: failed to start ASMB after RAC Database on ASM converted to Single Instance Non-ASM Database (Doc ID 2138520.1)</span> </span></li></ul>According to the above MOS Docs, this is an expected behavior&nbsp; due to an&nbsp; <span class="kmContent" id="kmPgTpl:sd_r1:0:dv_rDoc:ot71" style="color: black; font-size: x-small;">Unpublished&nbsp;<b>BUG 19503821: &nbsp;RMAN CATALOG EXTREMELY SLOW WHEN MIGRATING DATABASE FROM ASM TO FILE SYSTEM</b></span><br /><br />You need to apply a patch <b>19503821 </b>to overcome from the bug.<br /><br /><br />If you similar demand, make sure you apply the patch in your environmet before you proceed with the restore/duplicate procedure.<br /><br />-- Excerpt from the above notes:<br /><br /><u>APPLIES TO</u>:<br /><span class="kmContent" id="kmPgTpl:sd_r1:0:dv_rDoc:ot71" style="color: black; font-size: x-small;">Oracle Database - Enterprise Edition - Version </span><span class="kmContent" id="kmPgTpl:sd_r1:0:dv_rDoc:ot71" style="color: black; font-size: x-small;"><span class="kmContent" id="kmPgTpl:sd_r1:0:dv_rDoc:ot71" style="color: black; font-size: x-small;">12.1.0.1 to 12.1.0.2 [Release 12.1]</span></span><br /><span class="kmContent" id="kmPgTpl:sd_r1:0:dv_rDoc:ot71" style="color: black; font-size: x-small;"><span class="kmContent" id="kmPgTpl:sd_r1:0:dv_rDoc:ot71" style="color: black; font-size: x-small;">&nbsp;</span>Information in this document applies to any platform.</span><br /><span class="kmContent" id="kmPgTpl:sd_r1:0:dv_rDoc:ot71" style="color: black; font-size: x-small;">&nbsp; </span><br /><u>SYMPTOMS</u>:<br /><span class="kmContent" id="kmPgTpl:sd_r1:0:dv_rDoc:ot71" style="color: black; font-size: x-small;"></span><br /><span style="font-size: x-small;">1*. RAC Database with ASM has been converted or restored to Standalone Single Instance Non-ASM Database.</span><br /><span style="font-size: x-small;">2*. From the RDBMS alert.log, it is showing continuous following messages.</span><br /><span style="font-size: x-small;"><span class="kmContent" id="kmPgTpl:sd_r1:0:dv_rDoc:ot71" style="color: black; font-size: x-small;"></span></span><br />3*.RMAN Restore/Duplicate from ASM to Non ASM in 12.1 take a longer time waiting for the ASMB process. <br />4*.Any RMAN command at the mount state which involves Non ASM location can take more time.<br /><br /><span style="font-size: x-small;">&nbsp;</span><u>SOLUTION</u>:<br /><br /><span class="kmContent" id="kmPgTpl:sd_r1:0:dv_rDoc:ot71" style="color: black; font-size: x-small;"></span><br /><span class="kmContent" id="kmPgTpl:sd_r1:0:dv_rDoc:ot71" style="color: black; font-size: x-small;"><span style="font-size: x-small;">Apply the patch 19503821, if not available for your version/OS then please log a SR with the support to get the patch for your version.</span></span><span class="kmContent" id="kmPgTpl:sd_r1:0:dv_rDoc:ot71" style="color: black; font-size: x-small;"><br /></span><span class="kmContent" id="kmPgTpl:sd_r1:0:dv_rDoc:ot71" style="color: black; font-size: x-small;"><br /></span></div> The Human Fly tag:blogger.com,1999:blog-19771507.post-116618770481114125 Tue Mar 14 2017 09:51:00 GMT-0400 (EDT) Speaking at DOAG and RMOUG rocked http://oradbdev.mathiasmagnusson.com/2017/03/14/speaking-report/ <p>As I wrote a while <a href="http://oradbdev.mathiasmagnusson.com/2016/11/06/signing-up-for-scary-stuff/">back</a> I was accepted to speak both at the User Group Leader summit at DOAG16 and at RMOUG Training Days.</p> <p>The first one was a short presentation where I talked about a large bug in Oracle security and the need to patch and upgrade to not have that exposure. It was great fun as it was limited to a four-minute talk. I learned a lot from preparing for it as that short time allows for no questions and no spur of the moment comments. Each slide has to be carefully timed to make sure the time is enough for all slides.</p> <p>The last one was about a customer case where a severe performance issue was handled where I talk about all the assumptions we challenged in the process of resolving it. The job took 36 hours and it could only use 8 and soon the amount of work was expected to double. It ended up taking just a few minutes when we were done. Part regular tuning and part using the &#8220;magic&#8221; of the EXADATA.</p> <p>While the talk ended up having few attendees &#8211; competing with <a href="https://twitter.com/sqlmaria?lang=en">Maria Colgan</a> and <a href="https://twitter.com/oraclegraham?lang=en">Graham Wood</a> is tough &#8211; it was a great experience. I have not presented at a conference this big before. Training Days is also a conference that scares me to present at. I lived in Denver and my respect for the conference, the presenters and the quality expected is almost at an unhealthy level. So being there to present was a way to slay a dragon of mine. I had a great time at the conference and I enjoyed presenting. Even though I did not have an oversubscribed room, those who came seems to have enjoyed the session as I was rewarded with a 9.0 rating for the talk.</p> <p>If you&#8217;re thinking about maybe going to Training Days next year, my advice is to do it. It is a great conference and it is extremely well-organized. It is small enough to know the layout and the rooms fast, while still being big enough to have a lot of great talks to choose from every session. There were several where I wanted to go to three and I still regret having missed those where 2-3 fantastic sessions were held at the same time.</p> <p>I really liked the effort made to make the biggest names available and approachable by everyone by having them have their own tables at lunch time and letting people sit at the table where one of the persons they respect the most sits. I really enjoyed my lunch at <a href="https://twitter.com/carymillsap?lang=en">Cary Millsap&#8217;s</a> table. It was a great group and a very inspiring discussion about performance and discussing old battles in the field.</p> <p>It is far away, but I&#8217;ll be back. I had a blast.</p> mathias http://oradbdev.mathiasmagnusson.com/?p=472 Tue Mar 14 2017 05:50:23 GMT-0400 (EDT) Show greyscale icon as red https://jeffkemponoracle.com/2017/03/14/show-greyscale-icon-as-red/ <p>I have an editable tabular form using Apex&#8217;s old greyscale edit link icons:</p> <p><img data-attachment-id="3776" data-permalink="https://jeffkemponoracle.com/2017/03/14/show-greyscale-icon-as-red/greyscale-icons/" data-orig-file="https://jeffkemponoracle.files.wordpress.com/2017/03/greyscale-icons.png?w=1108" data-orig-size="697,190" 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="greyscale-icons" data-image-description="" data-medium-file="https://jeffkemponoracle.files.wordpress.com/2017/03/greyscale-icons.png?w=1108?w=300" data-large-file="https://jeffkemponoracle.files.wordpress.com/2017/03/greyscale-icons.png?w=1108?w=697" class="alignnone size-full wp-image-3776" src="https://jeffkemponoracle.files.wordpress.com/2017/03/greyscale-icons.png?w=1108" alt="greyscale-icons" srcset="https://jeffkemponoracle.files.wordpress.com/2017/03/greyscale-icons.png 697w, https://jeffkemponoracle.files.wordpress.com/2017/03/greyscale-icons.png?w=150 150w, https://jeffkemponoracle.files.wordpress.com/2017/03/greyscale-icons.png?w=300 300w" sizes="(max-width: 697px) 100vw, 697px" /></p> <p>The users complained that they currently have to click each link to drill down to the detail records to find and fix any errors; they wanted the screen to indicate which detail records were already fine and which ones needed attention.</p> <p>Since screen real-estate is limited here, I wanted to indicate the problems by showing a red edit link instead of the default greyscale one; since this application is using an old theme I didn&#8217;t feel like converting it to use Font Awesome (not yet, at least) and neither did I want to create a whole new image and upload it. Instead, I tried a CSS trick to convert the greyscale image to a red shade.</p> <p>I used this informative post to work out what I needed: <a href="https://css-tricks.com/color-filters-can-turn-your-gray-skies-blue/">https://css-tricks.com/color-filters-can-turn-your-gray-skies-blue/</a></p> <p><em>WARNING: Unfortunately this trick does NOT work in IE (tested in IE11). Blast.</em></p> <p>Firstly, I added a column to the underlying query that determines if the error needs to be indicated or not:</p> <pre class="brush: sql; title: ; notranslate"> select ..., case when {error condition} then 'btnerr' end as year1_err from mytable... </pre> <p>I set the new column type to <strong>Hidden Column</strong>.</p> <p>The link column is rendered using a <strong>Link</strong>-type column, with <strong>Link Text</strong> set to:</p> <pre><code>&lt;img src="#IMAGE_PREFIX#e2.gif" alt=""&gt; </code></pre> <p>I changed this to:</p> <pre><code>&lt;img src="#IMAGE_PREFIX#e2.gif" alt="" class="#YEAR1_ERR#"&gt; </code></pre> <p>What this does is if there is an error for a particular record, the class <code>"btnerr"</code> is added to the img tag. Rows with no error will simply have <code>class=""</code> which does nothing.</p> <p>Now, to make the greyscale image show up as red, I need to add an SVG filter to the <strong>HTML Header</strong> in the page:</p> <pre class="brush: xml; title: ; notranslate"> &lt;svg style=&quot;display:none&quot;&gt;&lt;defs&gt; &lt;filter id=&quot;redshader&quot;&gt; &lt;feColorMatrix type=&quot;matrix&quot; values=&quot;0.7 0.7 0.7 0 0 0.2 0.2 0.2 0 0 0.2 0.2 0.2 0 0 0 0 0 1 0&quot;/&gt; &lt;/filter&gt; &lt;/defs&gt;&lt;/svg&gt; </pre> <p>I made up the values for the R G B lines with some trial and error. The filter is applied to the buttons with the btnerr class with this CSS in the <strong>Inline CSS</strong> property of the page:</p> <pre><code>img.btnerr {filter:url(#redshader);} </code></pre> <p>The result is quite effective:</p> <p><img data-attachment-id="3799" data-permalink="https://jeffkemponoracle.com/2017/03/14/show-greyscale-icon-as-red/greyscale-colorize/" data-orig-file="https://jeffkemponoracle.files.wordpress.com/2017/03/greyscale-colorize.png?w=1108" data-orig-size="699,186" 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="greyscale-colorize" data-image-description="" data-medium-file="https://jeffkemponoracle.files.wordpress.com/2017/03/greyscale-colorize.png?w=1108?w=300" data-large-file="https://jeffkemponoracle.files.wordpress.com/2017/03/greyscale-colorize.png?w=1108?w=699" class="alignnone size-full wp-image-3799" src="https://jeffkemponoracle.files.wordpress.com/2017/03/greyscale-colorize.png?w=1108" alt="greyscale-colorize" srcset="https://jeffkemponoracle.files.wordpress.com/2017/03/greyscale-colorize.png 699w, https://jeffkemponoracle.files.wordpress.com/2017/03/greyscale-colorize.png?w=150 150w, https://jeffkemponoracle.files.wordpress.com/2017/03/greyscale-colorize.png?w=300 300w" sizes="(max-width: 699px) 100vw, 699px" /></p> <p>But, as I noted earlier, this solution does not work in IE, so that&#8217;s a big fail.</p> <p><em>NOTE: if this application was using the Universal Theme I would simply apply a simple font color style to the icon since it would be using a font instead of an image icon.</em></p><br />Filed under: <a href='https://jeffkemponoracle.com/category/oracle/apex/'>APEX</a> Tagged: <a href='https://jeffkemponoracle.com/tag/apex/'>APEX</a>, <a href='https://jeffkemponoracle.com/tag/css/'>CSS</a>, <a href='https://jeffkemponoracle.com/tag/tips-tricks/'>tips-&amp;-tricks</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeffkemponoracle.wordpress.com/3774/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeffkemponoracle.wordpress.com/3774/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeffkemponoracle.wordpress.com/3774/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeffkemponoracle.wordpress.com/3774/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jeffkemponoracle.wordpress.com/3774/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jeffkemponoracle.wordpress.com/3774/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jeffkemponoracle.wordpress.com/3774/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jeffkemponoracle.wordpress.com/3774/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeffkemponoracle.wordpress.com/3774/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeffkemponoracle.wordpress.com/3774/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeffkemponoracle.wordpress.com/3774/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeffkemponoracle.wordpress.com/3774/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeffkemponoracle.wordpress.com/3774/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeffkemponoracle.wordpress.com/3774/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=jeffkemponoracle.com&#038;blog=12972578&#038;post=3774&#038;subd=jeffkemponoracle&#038;ref=&#038;feed=1" width="1" height="1" /> Jeffrey Kemp http://jeffkemponoracle.com/?p=3774 Tue Mar 14 2017 04:03:18 GMT-0400 (EDT) Font APEX between versions http://www.grassroots-oracle.com/2017/03/font-apex-between-versions.html Sometimes, it's the little things in an application that make users happy.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-G30evTbf3x4/WMaXwgThxAI/AAAAAAAAQtY/7dg8GUgfkrYEJl9v4lbqR034Dp1gNq0DQCLcB/s1600/icon_example2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-G30evTbf3x4/WMaXwgThxAI/AAAAAAAAQtY/7dg8GUgfkrYEJl9v4lbqR034Dp1gNq0DQCLcB/s1600/icon_example2.png" /></a></div><br />Sometimes, it's just the icon on a darn button, card, or menu that makes all the difference.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-BlDVJrjTLI4/WMaI3tkpVpI/AAAAAAAAQtE/PKbqFX36PxkYwZRzZHeYtqbKIPt9V13VACLcB/s1600/icon_example.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-BlDVJrjTLI4/WMaI3tkpVpI/AAAAAAAAQtE/PKbqFX36PxkYwZRzZHeYtqbKIPt9V13VACLcB/s1600/icon_example.png" /></a></div><br />Surely by now you've encountered using icons within Oracle APEX, and we've come a long way since <a href="http://apex.shak.us/post/35134643503/icons-in-buttons-theme-25-blue-responsive" target="_blank">Theme 25</a>. To get anyone up to speed, APEX 5.0 saw the introduction of <a href="http://fontawesome.io/icons/" target="_blank">Font Awesome</a>&nbsp;baked into the builder, which is a reputable CSS icon library for such things.<br /><br /><table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody><tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-rykIdKIiLuo/WMaI3nfquDI/AAAAAAAAQtA/0ZtqDfh3XxM1myu49HDVZFpFQF9JdMyrACLcB/s1600/fontapex.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://3.bp.blogspot.com/-rykIdKIiLuo/WMaI3nfquDI/AAAAAAAAQtA/0ZtqDfh3XxM1myu49HDVZFpFQF9JdMyrACLcB/s320/fontapex.png" width="35" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">5.1 vs 5.0</td></tr></tbody></table>As with other 'plugins', Font Awesome library releases new versions with new icons at a different schedule to APEX releases. It's easy to get your 5.0 instance up to speed with the latest library, thanks to Patrick's <a href="http://www.inside-oracle-apex.com/apex-5-0-upgrade-to-the-newest-fontawesome-icon-library/" target="_blank">simple write-up</a>.<br /><br />Now the same goes for the 1000+ icons that come with Font APEX, some of them database specific which for some reason excites me a little. If you need to catch up, Dick Dral has a great <a href="https://dickdral.blogspot.com.au/2016/12/new-icons-in-apex-51.html" target="_blank">low down</a>&nbsp;on what makes Font APEX awesome, so to speak, and for those who are familiar with Dick's work, that's a double down on <a href="http://www.grassroots-oracle.com/2015/11/apex-gaming-competition-submission-boggex.html" target="_blank">word play</a>&nbsp;-&nbsp;see his URL of his <a href="http://www.speech2form.com/ords/f?p=opfg:fonts51:0" target="_blank">sample application</a>, which is growing to quite a utility.<br /><br />But if you would like to use the latest library, or even use it within APEX 5.0, Max Tremblay gave us <a href="http://max-tremblay.blogspot.com.au/2017/02/using-font-apex-in-apex-50.html" target="_blank">this great post</a>. It's a little more involved than Patrick's, but things aren't as easy.<br /><br />The long snapshot of menu icons shows the difference between 5.1 on the left, and 5.0 on the right. They've cleaner, they scale better, and we can no doubt all thank Shakeeb.<br /><br />Max provided some CSS that's required to suit adjust usage to Font APEX, but having an app with icons found all over the place, I encountered some other components that needed adjustment. With some further back &amp; forth on the <a href="https://orclapex.slack.com/" target="_blank">APEX slack channel</a>, Max helped me come up with these.<br /><pre class="brush:plain">/* Font APEX <br />CSS required to make Font APEX from 5.1 work in 5.0<br />Headstart provided by Max Tremblay<br />https://max-tremblay.blogspot.com.au/2017/02/using-font-apex-in-apex-50.html<br />*/<br /><br />/* Most icons around the place */<br />.t-Icon[class*=' fa-'],.t-Icon[class^=fa-]{<br /> font-family: font-apex!important;<br /> font-size: initial;<br />}<br /><br />/* Left side menu */<br />.t-TreeNav .a-TreeView-node--topLevel&gt;.a-TreeView-content .fa{<br /> font-size: initial;<br />}<br /><br />/* Left side sub menu */<br />#t_TreeNav ul ul .a-TreeView-content .fa {<br /> font-size: 12px;<br /> padding: 10px 0;<br />}<br /><br />/* Navbar dropdown */<br />.t-NavigationBar-menu .a-Menu-content .a-Menu-item .fa {<br /> font-size: 12px;<br />}<br /><br />/* Navbar top row */<br />.t-NavigationBar-item span.t-Icon {<br /> padding-right: 5px;<br /> padding-top: 0px;<br /> font-size: 14px;<br />}<br /><br />/* Slide tooltip plugin */<br />.a-DetailedContentList-icon {<br /> padding-top: 10px;<br />}<br /><br />/* Custom icon usage within breadcrumb */<br />.t-Breadcrumb-label .fa {<br /> padding-top: 3px; <br />}</pre>I think this once again shows the versatility APEX has between versions, quite literally replacing one plugin with another, with a little help from the community.<br /><br />#letswreckthistogether Scott Wesley tag:blogger.com,1999:blog-4818542164384221282.post-785818643346272452 Mon Mar 13 2017 10:43:00 GMT-0400 (EDT) Customising chart colours in APEX 5.1 http://www.explorer-development.uk.com/customising-chart-colours-apex-5-1/ <p>Customising chart colours in APEX 5.1 One of the new features of APEX 5.1 is the introduction of Jet Charts which are highly customisable using JavaScript and CSS. One particular issue I recently came across was the removal of two chart region attributes that allowed easy customisation of a chart, namely COLOR SCHEME and CUSTOM</p> <p>The post <a rel="nofollow" href="http://www.explorer-development.uk.com/customising-chart-colours-apex-5-1/">Customising chart colours in APEX 5.1</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> factory-admin http://www.explorer-development.uk.com/?p=4134 Mon Mar 13 2017 08:13:12 GMT-0400 (EDT) Recover accidentally deleted APEX components: Flashback Export https://blogs.oracle.com/apex/entry/recover_accidentally_deleted_apex_components <p><img src="https://blogs.oracle.com/apex/resource/logo-export-flashback.png" alt="Flashback Export of APEX Components" align="right" hspace="5" vspace="5" /><font face="tahoma, arial, helvetica, sans-serif" size="2">Accidentally deleting an Application Express page or shared component (or even a complete application) can be a real pain for the developer. Even a simple component, like an LOV, might rely on a complex SQL query, which is hard to recover manually.</font></p> <p><font face="tahoma, arial, helvetica, sans-serif" size="2">The good news is: If you act quickly, you can recover your application or component yourself. The Flashback Option within the Application Express export functionality, helps you with this. Our <a href="https://apex.oracle.com/pls/apex/germancommunities/apexcommunity/tipp/5921/index-en.html" target="_blank" title="Application Express tip &quot;Recover accidentally deleted APEX components: Flashback Export&quot;">latest Application Express tip</a> shows, how this works.</font></p> <p> </p> Carsten Czarski-Oracle https://blogs.oracle.com/apex/entry/recover_accidentally_deleted_apex_components Mon Mar 13 2017 08:00:00 GMT-0400 (EDT) Recover accidentally deleted APEX components: Flashback Export https://blogs.oracle.com/apex/entry/recover_accidentally_deleted_apex_components <p><img src="https://blogs.oracle.com/apex/resource/logo-export-flashback.png" alt="Flashback Export of APEX Components" align="right" hspace="5" vspace="5" /><font face="tahoma, arial, helvetica, sans-serif" size="2">Accidentally deleting an Application Express page or shared component (or even a complete application) can be a real pain for the developer. Even a simple component, like an LOV, might rely on a complex SQL query, which is hard to recover manually.</font></p> <p><font face="tahoma, arial, helvetica, sans-serif" size="2">The good news is: If you act quickly, you can recover your application or component yourself. The Flashback Option within the Application Express export functionality, helps you with this. Our <a href="https://apex.oracle.com/pls/apex/germancommunities/apexcommunity/tipp/5921/index-en.html" target="_blank" title="Application Express tip &quot;Recover accidentally deleted APEX components: Flashback Export&quot;">latest Application Express tip</a> shows, how this works.</font></p> <p> </p> Carsten Czarski-Oracle https://blogs.oracle.com/apex/entry/recover_accidentally_deleted_apex_components Mon Mar 13 2017 08:00:00 GMT-0400 (EDT) Versehentlich gelöschte Komponenten wiederherstellen https://blogs.oracle.com/apexcommunity_deutsch/entry/versehentlich_gel%C3%B6schte_anwendung_oder_komponenten <p><font face="Arial, Helvetica, sans-serif" style="font-size: 16px;"><img src="https://blogs.oracle.com/apexcommunity_deutsch/resource/logo-export-flashback.png" alt="Export mit der Flashback Option" align="right" hspace="5" vspace="5" /></font><font size="2"><font face="tahoma, arial, helvetica, sans-serif">Es kommt nicht oft vor, wenn es jedoch passiert, ist der Ärger groß: Eine Anwendung, eine Seite oder eine Gemeinsame Komponente wurde versehentlich gelöscht. Wenn man schnell ist, kann man den Fehler ganz einfach beheben - und zwar mit der&nbsp;</font><font face="tahoma, arial, helvetica, sans-serif"><span class="italicbodycopy" style="line-height: 16pt; font-style: italic;">Flashback-Option</span>&nbsp;beim&nbsp;<span class="boldbodycopy" style="line-height: 16pt; font-weight: bold;">Export&nbsp;</span>einer Anwendung, Seite oder Komponente.&nbsp;Erfahren Sie in unserem <a href="https://apex.oracle.com/pls/apex/germancommunities/apexcommunity/tipp/5921/index.html" target="_blank" title="Community Tipp &quot;Versehentlich gelöschte Anwendung oder Komponenten wiederherstellen&quot;">aktuellen Community-Tipp</a>, wie das geht.</font></font></p> Carsten Czarski-Oracle https://blogs.oracle.com/apexcommunity_deutsch/entry/versehentlich_gel%C3%B6schte_anwendung_oder_komponenten Mon Mar 13 2017 03:00:00 GMT-0400 (EDT) Fixing Skillbuilders Super LOV (v3) in APEX 5.1 http://b-apex.blogspot.com/2017/03/fixing-skillbuilders-super-lov-v3-in.html <div>We have already migrated some of the existing applications to a new version of Oracle Application Express - 5.1. After few weeks in production I can just say...do it :). But when doing an upgrade there is always a possibility that you will hit some issues. For me one of the issue was Skillbuilders Super LOV (v3), and it looks like I'm not alone (<a href="https://community.oracle.com/thread/4010580">https://community.oracle.com/thread/4010580</a>)</div><div><br /></div><div>So what is the issue?&nbsp;</div><div><br /></div><div>When you select a value (Super LOV item) and try to save a form then the value is not submitted. Now if you are lucky, then your item is mandatory and you will see the error - end users will tell you right away that something is not working. If your item is not mandatory then you might see this error much later, with complaints that some data is not saved correctly.</div><div><br /></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-waq-SrcSRPs/WMY37Box3qI/AAAAAAAASEw/IoUAq7vbam8mT8A4dLMK6v_nJpss8d4RACLcB/s1600/fslov_1.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="179" src="https://1.bp.blogspot.com/-waq-SrcSRPs/WMY37Box3qI/AAAAAAAASEw/IoUAq7vbam8mT8A4dLMK6v_nJpss8d4RACLcB/s640/fslov_1.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Value is selected</td></tr></tbody></table><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-OLQb-AjN7pQ/WMY4X0BRulI/AAAAAAAASE0/Ecm2WIqhQHg_D5Le-dHqJ69RjI4kyv-IwCLcB/s1600/fslov_2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="192" src="https://1.bp.blogspot.com/-OLQb-AjN7pQ/WMY4X0BRulI/AAAAAAAASE0/Ecm2WIqhQHg_D5Le-dHqJ69RjI4kyv-IwCLcB/s640/fslov_2.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">After submit, value is cleared and we see an error</td></tr></tbody></table><div><br /></div><div>After a bit of research I have found a quick fix, that you can use, until the plugin is fixed by original authors. What has to be done is just one small change in plugin's render function. Search in the source for line with <b>disabled="disabled"</b> (should be somewhere in line 157, if you haven't done some changes)</div><div><br /></div><div style="text-align: center;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">THEN '<span style="color: red;">disabled="disabled"</span> onfocus="this.blur();"'</span></div><div><br /></div><div>and change it to:</div><div><br /></div><div style="text-align: center;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">THEN '<span style="color: red;">readonly="readonly"</span> onfocus="this.blur();"'</span></div><div style="text-align: center;"><br /></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-Ufgpkr8eqeU/WMY6fJOsANI/AAAAAAAASFE/qDpRQqgFFQEOmPuMWieJ4DRn76FkbWXWgCLcB/s1600/fslov_3.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="338" src="https://1.bp.blogspot.com/-Ufgpkr8eqeU/WMY6fJOsANI/AAAAAAAASFE/qDpRQqgFFQEOmPuMWieJ4DRn76FkbWXWgCLcB/s640/fslov_3.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Notice the change is line 157 and 158</td></tr></tbody></table><div><br /></div><div>It looks like that something has changed from version 5.0 to 5.1. If you have an item with a property <span style="color: red;">disabled="disabled"</span>, then after submitting the page you will not see value for this item.</div><div><br /></div><div>To test this, I have created an After Submit Process with the code:</div><div><br /></div><div style="text-align: center;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">apex_debug.error('Value of P2_LOV : %s', :P2_LOV);</span></div><div style="text-align: center;"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><br /></span></div><div style="text-align: left;">I have tried this on version 5.0.4 and 5.1 and after checking the debug there is a clear difference:</div><div style="text-align: left;"><br /></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="https://4.bp.blogspot.com/-hgEDeZrpa1A/WMY-Se-v95I/AAAAAAAASFc/ihtzeuRt9K8agHzZAUefcL06eAA5s-aaQCLcB/s1600/fslov_4.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="220" src="https://4.bp.blogspot.com/-hgEDeZrpa1A/WMY-Se-v95I/AAAAAAAASFc/ihtzeuRt9K8agHzZAUefcL06eAA5s-aaQCLcB/s640/fslov_4.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Debug in APEX 5.0</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="https://2.bp.blogspot.com/-50x4I_CRr9Y/WMY-SPZ9ebI/AAAAAAAASFY/wYSV08aPaVoL16QplLgDsZiSqlr7AMFxQCLcB/s1600/fslov_5.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="218" src="https://2.bp.blogspot.com/-50x4I_CRr9Y/WMY-SPZ9ebI/AAAAAAAASFY/wYSV08aPaVoL16QplLgDsZiSqlr7AMFxQCLcB/s640/fslov_5.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Debug in APEX 5.1</td></tr></tbody></table><div style="text-align: left;"><br /></div><div style="text-align: left;"><br /></div><div style="text-align: left;"><span style="font-family: &quot;arial&quot; , &quot;helvetica&quot; , sans-serif;">Aljaz</span></div> Aljaž Mali tag:blogger.com,1999:blog-6273129051310972036.post-7124579738375600426 Mon Mar 13 2017 02:44:00 GMT-0400 (EDT) Get your virtual mojo on http://oradbdev.mathiasmagnusson.com/2017/03/11/get-your-virtual-mojo-on/ <p>I have for a few years created a play environment in a similar way. Getting a database installed in a VM is not too hard. But I found that I did it fairly often and not always in the same way and not always without having to resolve problems I know I had solved before but since forgotten the solution for.</p> <p>Right, write everything down. Yes, it was time for that.</p> <p>So I now have my notes in order so I can run through the creation of a new VM when a new version of any software I want to have installed becomes available.</p> <p>Since 12c is out and more importantly 12.2 was released just a week ago it was time to include multitennant in the model.</p> <p>This is what I want to have in my VM  I use to test and evaluate Oracle Database stuff.</p> <ul> <li><a href="http://www.oracle.com/technetwork/server-storage/linux/overview/index.html">Oracle Linux 7.3</a></li> <li><a href="https://www.oracle.com/database/index.html">Oracle Database 12.2 </a> <ul> <li>CDB</li> <li>PDB dev</li> <li>PDB test</li> <li>PDB prod</li> </ul> </li> <li><a href="http://www.oracle.com/technetwork/developer-tools/apex/overview/index.html">Oracle APEX 5.1</a> installed in each PDB</li> <li><a href="http://www.oracle.com/technetwork/developer-tools/rest-data-services/overview/index.html">ORDS 3.0</a></li> <li><a href="http://www.oracle.com/technetwork/middleware/glassfish/overview/index.html">Glassfish 3.1</a></li> </ul> <p>Thus, with this I have three PDBs simulating dev, test , and prod when I want to model  migrating things through an environment. Each of them has APEX so that too can be tested for migrating through an environment.</p> <p>Including ORDS and glassfish makes then installation complete and not only allows using all features of APEX but also prepares the VM to be used for REST services.</p> <p>For database work this is to me a very complete VM to test and learn new things with.</p> <p>I&#8217;d recommend that you do the same for what you want. There is the Oracle Developer VM you can get and lots of other ones too. But I find you learn a lot by creating your own. If you install yourself you also get it to be set up the way you want it.</p> <p>The one I create, I set up as a template and then I clone it to have one that I con make changes to. That allows me to have a pristine version to clone from. Yes, I could use snapshots to achieve much of the same. Having a separate template makes maintaining it much easier in my experience.</p> <p>When you do install, remember to make a snapshot at least after each individual product has been installed and configured. You will end up going back and redoing it when you run into problems or think of improvements to your install.</p> <p>The template I create I share with friends and coworkers who may not want to do their own installation. While installing teaches you lots, for some it is not worth it. They just want to play. For those people using mine or the Oracle App Development VM is a quick way to do that. Oracle provides a lot of different ones for that or when you want to try something new. All of them can be found <a href="http://www.oracle.com/technetwork/community/developer-vm/index.html">here</a>.</p> <p>To finish up, I just have to link to <a href="https://twitter.com/oraclebase">Tim Hall</a>. He has a fantastic number of articles and for this stuff his writeup of <a href="https://oracle-base.com/articles/12c/oracle-db-12cr2-installation-on-oracle-linux-6-and-7">installing Oracle DB 12.2</a>. When I find a problem it is most of the time already covered in his article. Even more impressing is that he gets it out before you even get your VirtualBox  loaded. I think he had the 12.2 version of this updated and posted within four hours of the release of 12.2.</p> <p>GO! Create your own VM and get hacking. 12.2 has too much cool stuff in it to not keep you hacking for a long time.</p> <p>Make hacking a legal sport. <img src="https://s.w.org/images/core/emoji/2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p> mathias http://oradbdev.mathiasmagnusson.com/?p=423 Sat Mar 11 2017 01:01:27 GMT-0500 (EST) Low http://spendolini.blogspot.com/2017/03/low.html <div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-P6wm3UBis80/WMFnLETZi1I/AAAAAAAAAcg/dVDNoc0Ku00UYqBiezBQ9vWED3Cw6FXBgCLcB/s1600/Low_fr_tp.JPG" style="margin-left: 1em; margin-right: 1em;"><img alt="" border="0" src="https://1.bp.blogspot.com/-P6wm3UBis80/WMFnLETZi1I/AAAAAAAAAcg/dVDNoc0Ku00UYqBiezBQ9vWED3Cw6FXBgCLcB/s1600/Low_fr_tp.JPG" /></a></div><br />Recently, there has been a lot of buzz about "low code" development platforms. &nbsp;Even the Oracle APEX team has embraced this term (see&nbsp;<a href="https://apex.oracle.com/lowcode/">https://apex.oracle.com/lowcode/</a> for details). This approach allows the "citizen developer" - someone without a traditional IT background - to build basic applications with little to no code. Platforms such as QuickBase, Appian, Mendix and even SalesForce.com have popup up, offering the promise to quickly build applications with little to no code. &nbsp;Users from all walks of life can now build and deploy applications to some sort of cloud in just minutes!<br /><br />But is it possible to build a truly useful application with little to no code? &nbsp;Perhaps. &nbsp;Perhaps not. &nbsp;I suppose that all depends on what you want the application to do and what data it will use. &nbsp;It probably also depends on the security of the application, and how easy it will be to integrate into a corporate identity management system behind a firewall. &nbsp;It also probably depends on what type of availability and reliability you need. &nbsp;And it will definitely depend on how much any of these solutions cost, especially if your application gets popular and more users need to use it. &nbsp;While some of these companies are solid and not going anywhere soon, a few of these names are new to me, and if they were to fold, it would not be the first time a startup failed.<br /><br />While I have not tried any of the products that I mentioned, I do have a bit of experience with Oracle APEX, so I'll speak from that angle. APEX does fit into the "low code" profile, as you can easily build an application that manages data, provides visualizations, and even facilitates some basic workflows. &nbsp;You can do all of this without writing any code, save for maybe a query or two. &nbsp;There’s even an “App Store” of sorts - called Packaged Applications - that can get you create a fully functional point-solution application with a single click. &nbsp;I’ve seen people from skilled developers with multiple IT-related degrees to vice presidents with limited IT experience build and deploy APEX applications. &nbsp;The "citizen developer" term truly fits in here.<br /><br />However, there is a limit as to what you can make any application do without writing code. &nbsp;Over the years, APEX has done a great job of pushing this limit out further and further. &nbsp;You can create a much better looking, more secure, more functional APEX application with APEX 5.1 in much less time than you could with versions as recent as APEX 4.0. &nbsp;But even with the latest and greatest release, if you want to add some business rules or put basic conditions on a region, you’re likely going to have to use a little bit of code.<br /><br />Think about this: if you had a couple of citizen developers build a basic project management tool in APEX, and then as it becomes more popular, more people in the organization start to use it. &nbsp;Thus, the citizen developers enhance and modify it to support multiple teams, multiple users and roles, etc. &nbsp;All along, there is no oversight from IT about how the application is enhanced and managed. &nbsp;No standards are followed, as it’s totally up to the citizen developers to choose how it looks and works. &nbsp;It’s fairly likely that at some point, bad decisions were made. &nbsp;Perhaps a few security vulnerabilities were introduced, or a couple of poorly-written SQL statements were created. &nbsp;It’s not all that different from the MS Access mess, but at least this one is backed up...<br /><br />Low code is fine when it’s just that: low code. &nbsp;As soon as applications cross some threshold and become a critical component of an enterprise, it’s time to stop calling them low code and transition their ownership to the professionals. With most of the online tools, I don’t believe that this is an option, or at least not a simple one. &nbsp;If you exceed the capabilities of the platform which you’re building on, it’s going to be a good amount of work to migrate to another one.<br />This is where APEX differs. While APEX does seem to fit the low code moniker, it’s so much more capable than that. &nbsp;Calling APEX low code makes me think of other “low” branded things: low fat, low carb, <a href="https://www.youtube.com/watch?v=7poACHOknfY">low T</a>, etc. &nbsp;It’s perfectly possible to start citizen developers in APEX, and show them how to build basic applications that meet some of their less critical business needs. &nbsp;Some applications will remain somewhat simple, and that’s just fine. &nbsp;But for the ones that don’t - it doesn’t take much at all to transition ownership of that application to IT, or perhaps just monitor and manage it a bit while still allowing the citizen developer to own it. <br /><br />Those who have used APEX for years know this: it’s one of the few development platforms that you can become productive with in just a few days, but it will take your entire career to master all it can do. &nbsp;It’s an ideal platform that meets the criteria of low code. &nbsp;But it’s so much more - offering one of the most seamless transition paths from low code to enterprise applications. Scott tag:blogger.com,1999:blog-8449039.post-4107790677205309594 Fri Mar 10 2017 08:00:00 GMT-0500 (EST) A nice Descending Index Range Scan https://jeffkemponoracle.com/2017/03/10/a-nice-descending-index-range-scan/ <p>I&#8217;ve been aware of some of the ways that Oracle database optimises index accesses for queries, but I&#8217;m also aware that you have to test each critical query to ensure that the expected optimisations are taking effect.</p> <p>I had this simple query, the requirement of which is to get the &#8220;previous status&#8221; for a record from a journal table. Since the journal table records all inserts, updates and deletes, and this query is called immediately <em>after</em> an update, to get the previous status we need to query the journal for the record most recently <em>prior to </em>the most recent record. Since the &#8220;version_id&#8221; column is incremented for each update, we can use that as the sort order.</p> <pre class="brush: sql; title: ; notranslate"> select status_code from (select rownum rn, status_code from xxtim_requests$jn jn where jn.trq_id = :trq_id order by version_id desc) where rn = 2; </pre> <p>The xxtim_requests$jn table has an ordinary index on (trq_id, version_id). This query is embedded in some PL/SQL with an INTO clause &#8211; so it will only fetch one record (plus a 2nd fetch to detect TOO_MANY_ROWS which we know won&#8217;t happen).</p> <p>The table is relatively small (in dev it only has 6K records, and production data volumes are expected to grow very slowly) but regardless, I was pleased to find that (at least, in Oracle 12.1) it uses a nice optimisation so that it not only uses the index, it is choosing to use a Descending scan on it &#8211; which means it avoids a SORT operation, and should very quickly return the 2nd record that we desire.</p> <p><img data-attachment-id="3755" data-permalink="https://jeffkemponoracle.com/2017/03/10/a-nice-descending-index-range-scan/index_scan_range_descending/" data-orig-file="https://jeffkemponoracle.files.wordpress.com/2017/03/index_scan_range_descending.png?w=1108" data-orig-size="613,175" 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="index_scan_range_descending" data-image-description="" data-medium-file="https://jeffkemponoracle.files.wordpress.com/2017/03/index_scan_range_descending.png?w=1108?w=300" data-large-file="https://jeffkemponoracle.files.wordpress.com/2017/03/index_scan_range_descending.png?w=1108?w=613" class="alignnone size-full wp-image-3755" src="https://jeffkemponoracle.files.wordpress.com/2017/03/index_scan_range_descending.png?w=1108" alt="index_scan_range_descending.PNG" srcset="https://jeffkemponoracle.files.wordpress.com/2017/03/index_scan_range_descending.png 613w, https://jeffkemponoracle.files.wordpress.com/2017/03/index_scan_range_descending.png?w=150 150w, https://jeffkemponoracle.files.wordpress.com/2017/03/index_scan_range_descending.png?w=300 300w" sizes="(max-width: 613px) 100vw, 613px" /></p> <p>It looks quite similar in effect to the &#8220;COUNT STOPKEY&#8221; optimisation you can see on &#8220;ROWNUM=1&#8221; queries. If this was a much larger table and this query needed to be faster or was being run more frequently, I&#8217;d probably consider appending status_code to the index in order to avoid the table access. In this case, however, I don&#8217;t think it&#8217;s necessary.</p><br />Filed under: <a href='https://jeffkemponoracle.com/category/oracle/sql/'>SQL</a> Tagged: <a href='https://jeffkemponoracle.com/tag/oracle12c/'>oracle12c</a>, <a href='https://jeffkemponoracle.com/tag/sql/'>SQL</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeffkemponoracle.wordpress.com/3739/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeffkemponoracle.wordpress.com/3739/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeffkemponoracle.wordpress.com/3739/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeffkemponoracle.wordpress.com/3739/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jeffkemponoracle.wordpress.com/3739/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jeffkemponoracle.wordpress.com/3739/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jeffkemponoracle.wordpress.com/3739/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jeffkemponoracle.wordpress.com/3739/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeffkemponoracle.wordpress.com/3739/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeffkemponoracle.wordpress.com/3739/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeffkemponoracle.wordpress.com/3739/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeffkemponoracle.wordpress.com/3739/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeffkemponoracle.wordpress.com/3739/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeffkemponoracle.wordpress.com/3739/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=jeffkemponoracle.com&#038;blog=12972578&#038;post=3739&#038;subd=jeffkemponoracle&#038;ref=&#038;feed=1" width="1" height="1" /> Jeffrey Kemp http://jeffkemponoracle.com/?p=3739 Thu Mar 09 2017 21:06:04 GMT-0500 (EST) APEX: Updating Interactive Grid Cells https://ruepprich.wordpress.com/2017/03/09/apex-updating-interactive-grid-cells/ <p>Moving from the old tabular form to the interactive grid takes some getting used to. Especially when trying to manually update cells with JavaScript.</p> <p>Here is an example of how to access and modify particular cells in an interactive grid with JavaScript. The example promotes an employee when the <em>Promote</em> link is clicked, which doubles the employee&#8217;s salary, and assigns him a new job.</p> <p>First I built an interactive grid on the EMP table. I&#8217;ve used all the defaults except:<br /> Enable editing with <em>Update Row</em>.<br /> Set the region&#8217;s static ID to <em>emps</em>.<br /> Added a link column with target type: <em>URL,</em> URL: <em>#</em></p> <p><img data-attachment-id="2111" data-permalink="https://ruepprich.wordpress.com/2017/03/09/apex-updating-interactive-grid-cells/ir-link/" data-orig-file="https://ruepprich.files.wordpress.com/2017/03/ir-link.png?w=550" data-orig-size="511,92" 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="ir-link" data-image-description="" data-medium-file="https://ruepprich.files.wordpress.com/2017/03/ir-link.png?w=550?w=300" data-large-file="https://ruepprich.files.wordpress.com/2017/03/ir-link.png?w=550?w=511" class="alignnone size-full wp-image-2111" src="https://ruepprich.files.wordpress.com/2017/03/ir-link.png?w=550" alt="ir-link" srcset="https://ruepprich.files.wordpress.com/2017/03/ir-link.png 511w, https://ruepprich.files.wordpress.com/2017/03/ir-link.png?w=150 150w, https://ruepprich.files.wordpress.com/2017/03/ir-link.png?w=300 300w" sizes="(max-width: 511px) 100vw, 511px" /></p> <p>The link text is set to <em>Promote</em>, and I added class (ig-link) so that I can connect a dynamic action to it:</p> <p><img data-attachment-id="2127" data-permalink="https://ruepprich.wordpress.com/2017/03/09/apex-updating-interactive-grid-cells/ig-link2/" data-orig-file="https://ruepprich.files.wordpress.com/2017/03/ig-link2.png?w=550" data-orig-size="545,64" 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;tile&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="ig-link2" data-image-description="" data-medium-file="https://ruepprich.files.wordpress.com/2017/03/ig-link2.png?w=550?w=300" data-large-file="https://ruepprich.files.wordpress.com/2017/03/ig-link2.png?w=550?w=545" class="alignnone size-full wp-image-2127" src="https://ruepprich.files.wordpress.com/2017/03/ig-link2.png?w=550" alt="ig-link2" srcset="https://ruepprich.files.wordpress.com/2017/03/ig-link2.png 545w, https://ruepprich.files.wordpress.com/2017/03/ig-link2.png?w=150 150w, https://ruepprich.files.wordpress.com/2017/03/ig-link2.png?w=300 300w" sizes="(max-width: 545px) 100vw, 545px" /></p> <p>Next I created a dynamic action that fires when the <em>Promote</em> link is clicked.</p> <p><img data-attachment-id="2122" data-permalink="https://ruepprich.wordpress.com/2017/03/09/apex-updating-interactive-grid-cells/ig-da1/" data-orig-file="https://ruepprich.files.wordpress.com/2017/03/ig-da1.png?w=550" data-orig-size="541,236" 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="ig-da1" data-image-description="" data-medium-file="https://ruepprich.files.wordpress.com/2017/03/ig-da1.png?w=550?w=300" data-large-file="https://ruepprich.files.wordpress.com/2017/03/ig-da1.png?w=550?w=541" class="alignnone size-full wp-image-2122" src="https://ruepprich.files.wordpress.com/2017/03/ig-da1.png?w=550" alt="ig-da1" srcset="https://ruepprich.files.wordpress.com/2017/03/ig-da1.png 541w, https://ruepprich.files.wordpress.com/2017/03/ig-da1.png?w=150 150w, https://ruepprich.files.wordpress.com/2017/03/ig-da1.png?w=300 300w" sizes="(max-width: 541px) 100vw, 541px" /></p> <p>The true action is a <em>Execute JavaScript Code</em> action, with the following code:</p> <pre class="brush: jscript; title: ; notranslate"> //Get the link element that was clicked var $te = $(this.triggeringElement); //Get the ID of the row var rowId = $te.closest('tr').data('id'); //Identify the particular interactive grid var ig$ = apex.region(&quot;emps&quot;).widget(); //Fetch the model for the interactive grid var model = ig$.interactiveGrid(&quot;getViews&quot;,&quot;grid&quot;).model; //Fetch the record for the particular rowId var record = model.getRecord(rowId); //Access the cell value via the column name var sal = model.getValue(record,&quot;SAL&quot;); //Set the values for the JOB and SAL cells model.setValue(record,&quot;JOB&quot;,'MANAGER'); model.setValue(record,&quot;SAL&quot;,sal*2); </pre> <p>Here is the working example:</p> <p><img data-attachment-id="2139" data-permalink="https://ruepprich.wordpress.com/2017/03/09/apex-updating-interactive-grid-cells/emps/" data-orig-file="https://ruepprich.files.wordpress.com/2017/03/emps.gif?w=550" data-orig-size="615,329" 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="emps" data-image-description="" data-medium-file="https://ruepprich.files.wordpress.com/2017/03/emps.gif?w=550?w=300" data-large-file="https://ruepprich.files.wordpress.com/2017/03/emps.gif?w=550?w=550" class="alignnone size-full wp-image-2139" src="https://ruepprich.files.wordpress.com/2017/03/emps.gif?w=550" alt="emps" /></p> <p>It is worth noting that the &lt;tr&gt; element of the interactive grid row contains the row&#8217;s unique identifier. This could be a row ID or a primary key value, depending on how you configured the grid.</p> <p>&nbsp;</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ruepprich.wordpress.com/2102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ruepprich.wordpress.com/2102/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=ruepprich.wordpress.com&#038;blog=12765658&#038;post=2102&#038;subd=ruepprich&#038;ref=&#038;feed=1" width="1" height="1" /> Christoph Ruepprich http://ruepprich.wordpress.com/?p=2102 Thu Mar 09 2017 17:34:14 GMT-0500 (EST) Understanding Slashes and Semicolons in Oracle DDL Scripts https://www.insum.ca/understanding-slashes-semicolons-oracle-ddl-scripts/ <h1>Understanding Slashes and Semicolons in Oracle DDL Scripts</h1> <h2>Data Definition Language Problems</h2> <p>Oracle developers are often asked to create Data Definition Language (DDL) scripts to support an application. These scripts create database objects like tables, views, triggers, and PL/SQL packages.</p> <p>The developer uses a favorite database GUI tool (ex. Oracle’s <em>SQL Developer</em>) to create and test the scripts. Rigorous tests show that everything works.</p> <p>The developer then sends the script to a Database Analyst (DBA) so that the scripts can be run into a production database. The DBA does not do this; instead, the script is immediately sent back to the developer to get fixed. The developer is confused because explicit tests have proven that the script works flawlessly.</p> <p>So what’s up with this?</p> <h2>Cause of the Issue</h2> <p>Here is the simplified workflow that leads to the problem.</p> <p>1. The developer creates a table with a trigger by using the following SQL code.</p> <blockquote><p>drop table foo;</p> <p>/</p> <p>create table foo</p> <p>( id number</p> <p>,code varchar2(10)</p> <p>,description varchar2(100)</p> <p>) ;</p> <p>/</p> <p>create or replace trigger foo_trig_bi</p> <p>before insert on foo</p> <p>for each row</p> <p>begin</p> <p>:new.id := nvl(:new.id,foo_seq.nextval) ;</p> <p>end ;</p> <p>/</p></blockquote> <p>2. The developer runs this code repeatedly in <strong>SQL Developer</strong> to make sure it works flawlessly. SQL Developer’s output indicates that all is good.</p> <p>&nbsp;</p> <p><img class="size-full wp-image-7424" src="https://www.insum.ca/wp-content/uploads/2017/03/sql-developer.png" alt="sql developer" width="310" height="186" srcset="https://www.insum.ca/wp-content/uploads/2017/03/sql-developer.png 310w, https://www.insum.ca/wp-content/uploads/2017/03/sql-developer-300x180.png 300w" sizes="(max-width: 310px) 100vw, 310px" /></p> <p>&nbsp;</p> <p style="text-align: left;">3. The developer then sends the “flawless” script to the DBA who runs the “flawless” script using <strong>SQL*Plus</strong>. The result is <strong><u>not</u></strong> “flawless”. The code tries to drop the table twice and create the table twice. Errors are not good when the script will be run in a production database.</p> <h2><img class="alignnone size-full wp-image-7425" src="https://www.insum.ca/wp-content/uploads/2017/03/sql-plus-production-database.png" alt="sql plus production database" width="332" height="470" srcset="https://www.insum.ca/wp-content/uploads/2017/03/sql-plus-production-database.png 332w, https://www.insum.ca/wp-content/uploads/2017/03/sql-plus-production-database-212x300.png 212w" sizes="(max-width: 332px) 100vw, 332px" /></h2> <p>&nbsp;</p> <h2>Mastering Your Slashes and Semicolons</h2> <p>The solution is simple. Do one of the following in the script file:</p> <ul> <li>Remove the <strong>slashes</strong> that come after the <strong>drop</strong> and the <strong>table create</strong> Leave the <strong>semicolons</strong> in place.</li> </ul> <p>OR</p> <ul> <li>Remove the <strong>semicolons</strong> that come after the <strong>drop</strong> and the <strong>table create</strong> Leave the <strong>slashes</strong> in place.</li> </ul> <p>The solution works because <strong>SQL*Plus</strong> runs a simple SQL statement when it sees a trailing <strong>semicolon</strong>. It also runs the code that it finds in its buffer when it sees the trailing <strong>slash</strong>. Thus, the simple statements are run twice.</p> <p>The trigger, which is a block of PL/SQL code, needs both the <strong>semicolon</strong> and the <strong>slash</strong> at the end of the block. In this case, the <strong>semicolon</strong> is actually part of the PL/SQL syntax and is stored with the PL/SQL in the buffer; the last <strong>semicolon</strong> in the PL/SQL block is not part of the SQL statement that runs the code. The <strong>slash</strong> runs the code in the buffer.</p> <p>The rules for <strong>SQL*Plus</strong> are summarized as:</p> <ol> <li>Simple SQL statements can be terminated by a <strong>semicolon</strong> <u>OR</u> a <strong>slash</strong>.</li> <li>PL/SQL blocks must be terminated by a <strong>slash</strong>.</li> </ol> <p>The rules are illustrated in the following <strong>SQL*Plus</strong> snippets.</p> <p><img class="alignnone size-full wp-image-7423" src="https://www.insum.ca/wp-content/uploads/2017/03/slashes-sql-statements.png" alt="slashes sql statements" width="314" height="311" srcset="https://www.insum.ca/wp-content/uploads/2017/03/slashes-sql-statements.png 314w, https://www.insum.ca/wp-content/uploads/2017/03/slashes-sql-statements-150x150.png 150w, https://www.insum.ca/wp-content/uploads/2017/03/slashes-sql-statements-300x297.png 300w, https://www.insum.ca/wp-content/uploads/2017/03/slashes-sql-statements-100x100.png 100w" sizes="(max-width: 314px) 100vw, 314px" />   <img class="alignnone size-full wp-image-7422" src="https://www.insum.ca/wp-content/uploads/2017/03/semicolons-sql-lpsql.png" alt="semicolons sql lpsql" width="313" height="310" srcset="https://www.insum.ca/wp-content/uploads/2017/03/semicolons-sql-lpsql.png 313w, https://www.insum.ca/wp-content/uploads/2017/03/semicolons-sql-lpsql-150x150.png 150w, https://www.insum.ca/wp-content/uploads/2017/03/semicolons-sql-lpsql-300x297.png 300w, https://www.insum.ca/wp-content/uploads/2017/03/semicolons-sql-lpsql-100x100.png 100w" sizes="(max-width: 313px) 100vw, 313px" /></p> <p><strong>SQL Developer</strong> is a bit friendlier because it automatically does the correct action no matter how the SQL statements are terminated.</p> <p>&nbsp;</p> <h1>Comments on the Tools</h1> <p><strong>SQL Developer</strong> and similar products are rich GUI tools that developers love; however, in the past, the early versions were buggy. The buggy history makes DBAs uneasy with these tools.</p> <p><strong>SQL*Plus</strong>, by comparison, has a very “old school” command line interface; however, it has a long history and many DBAs consider it to be the “gold standard” of stability and reliability.</p> <p>As a result, many DBAs run scripts into their production databases with <strong>SQL*Plus</strong>, a tool that they trust. This conservative point of view reflects the fact that when a production database goes down, the DBA is hanged, not the developer.</p> <p>Once we all understand the situation and code accordingly, everyone is happy.</p> <p>The post <a rel="nofollow" href="https://www.insum.ca/understanding-slashes-semicolons-oracle-ddl-scripts/">Understanding Slashes and Semicolons in Oracle DDL Scripts</a> appeared first on <a rel="nofollow" href="https://www.insum.ca">Insum</a>.</p> Patrick Cimolini https://www.insum.ca/?p=7421 Thu Mar 09 2017 14:37:30 GMT-0500 (EST) jQuery, Security and Web Services - Oh My! http://spendolini.blogspot.com/2017/03/jquery-security-and-web-services-oh-my.html <br />It's going to be a hectic couple of weeks for me, as I get ready to head to Utah this weekend for the annual <a href="http://www.utoug.org/TrainingDays" target="_blank">UTOUG Training Days</a> conference next week. &nbsp;I love Salt Lake City, and the UTOUG conference is just the right size - not too large, but large enough that most of the rooms are full of attendees.<br /><div><br /></div><div>This year, I've got three slots, each as different as the next:</div><div><br /></div><div><u>jQuery &amp; APEX Primer</u></div><div>This session is aimed at the APEX developer who has just never had the time to get into the details of jQuery. &nbsp;It starts with an overview of the basics, and then proceeds to demonstrate these concepts using a simple HTML page. &nbsp;After that, it will show some more practical examples of how jQuery can work in an APEX application.</div><div><br /></div><div><u>Secure Your APEX Applications with APEX-SERT</u></div><div>Security is as important as ever, and this session will show you how APEX-SERT - a free, open source tool - can be integrated into your development process. &nbsp;Once installed, APEX-SERT is instantly available to any and all workspace developers. &nbsp;Evaluations can also be scheduled to run daily, so your application is constantly being checked for potential threats.</div><div><br /></div><div><u>GET POST ORDS JSON: Web Services for APEX Decoded</u></div><div>Lastly, web services are also one of the things that APEX developers may not have a lot of experience with. &nbsp;They are becoming more and more critical in modern web development, and it's a matter of when you'll need to learn them, not if. &nbsp;This session covers the basics then walks through how to take a standard APEX form and modify it to use web services instead of the built-in DML &nbsp;processes.</div><div><br /></div><div>If that wasn't enough, I'll also be a part of the APEX panel on Tuesday - but will likely have to bail out a bit early to make my flights back home.</div><div><br /></div><div>The full schedule can be found here:&nbsp;<a href="http://www.utoug.org/Schedule">http://www.utoug.org/Schedule</a></div><div><br /></div><div>See you in SLC!<br /><br /></div> Scott tag:blogger.com,1999:blog-8449039.post-3397484583696757096 Thu Mar 09 2017 12:33:00 GMT-0500 (EST) Happy 20th Birthday ODTUG http://www.odtug.com/p/bl/et/blogaid=680&source=1 On March 13, 2017, ODTUG celebrates its 20th birthday! 20 years of evolving technology and ODTUG is still the user group that keeps you on the cutting-edge of the constantly changing Oracle technology landscape. In honor of ODTUG’s birthday you can save $200 off your ODTUG Kscope17 registration. ODTUG http://www.odtug.com/p/bl/et/blogaid=680&source=1 Thu Mar 09 2017 11:22:59 GMT-0500 (EST) Welcome to Ghost http://vmorneau.me/welcome-to-ghost/ <p>You're live! Nice. We've put together a little post to introduce you to the Ghost editor and get you started. You can manage your content by signing in to the admin area at <code>&lt;your blog URL&gt;/ghost/</code>. When you arrive, you can select this post from a list on the left and see a preview of it on the right. Click the little pencil icon at the top of the preview to edit this post and read the next section!</p> <h2 id="gettingstarted">Getting Started</h2> <p>Ghost uses something called Markdown for writing. Essentially, it's a shorthand way to manage your post formatting as you write!</p> <p>Writing in Markdown is really easy. In the left hand panel of Ghost, you simply write as you normally would. Where appropriate, you can use <em>shortcuts</em> to <strong>style</strong> your content. For example, a list:</p> <ul> <li>Item number one</li> <li>Item number two <ul><li>A nested item</li></ul></li> <li>A final item</li> </ul> <p>or with numbers!</p> <ol> <li>Remember to buy some milk </li> <li>Drink the milk </li> <li>Tweet that I remembered to buy the milk, and drank it</li> </ol> <h3 id="links">Links</h3> <p>Want to link to a source? No problem. If you paste in a URL, like <a href="http://ghost.org">http://ghost.org</a> - it'll automatically be linked up. But if you want to customise your anchor text, you can do that too! Here's a link to <a href="http://ghost.org">the Ghost website</a>. Neat.</p> <h3 id="whataboutimages">What about Images?</h3> <p>Images work too! Already know the URL of the image you want to include in your article? Simply paste it in like this to make it show up:</p> <p><img src="https://ghost.org/images/ghost.png" alt="The Ghost Logo"></p> <p>Not sure which image you want to use yet? That's ok too. Leave yourself a descriptive placeholder and keep writing. Come back later and drag and drop the image in to upload:</p> <h3 id="quoting">Quoting</h3> <p>Sometimes a link isn't enough, you want to quote someone on what they've said. Perhaps you've started using a new blogging platform and feel the sudden urge to share their slogan? A quote might be just the way to do it!</p> <blockquote> <p>Ghost - Just a blogging platform</p> </blockquote> <h3 id="workingwithcode">Working with Code</h3> <p>Got a streak of geek? We've got you covered there, too. You can write inline <code>&lt;code&gt;</code> blocks really easily with back ticks. Want to show off something more comprehensive? 4 spaces of indentation gets you there.</p> <pre><code>.awesome-thing { display: block; width: 100%; } </code></pre> <h3 id="readyforabreak">Ready for a Break?</h3> <p>Throw 3 or more dashes down on any new line and you've got yourself a fancy new divider. Aw yeah.</p> <hr> <h3 id="advancedusage">Advanced Usage</h3> <p>There's one fantastic secret about Markdown. If you want, you can write plain old HTML and it'll still work! Very flexible.</p> <p><input type="text" placeholder="I'm an input field!"></p> <p>That should be enough to get you started. Have fun - and let us know what you think :)</p> Ghost Owner a6e7c691-d9b8-478e-bbfb-1315f185ef5a Thu Mar 09 2017 10:55:38 GMT-0500 (EST) Theme Roller not saving changes http://www.explorer-development.uk.com/theme-roller-not-saving-changes/ <p>Theme Roller not saving changes on a 5.1 ORDS standalone environment A very quick entry so we have this written down and so that it may help anyone in the future who faces the same problem.. We were having a problem on some of our new 5.1 environments where when using the theme roller and</p> <p>The post <a rel="nofollow" href="http://www.explorer-development.uk.com/theme-roller-not-saving-changes/">Theme Roller not saving changes</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> factory-admin http://www.explorer-development.uk.com/?p=4119 Thu Mar 09 2017 06:06:09 GMT-0500 (EST) Upcoming ODTUG Webinars http://www.odtug.com/p/bl/et/blogaid=679&source=1 ODTUG Online EducationBelow is the list of upcoming webinars. If there is a topic you would like covered that is not on our current list, or if you would like to present a webinar, please email alicia@odtug.com. Did you miss a webinar? Our Webinar File Library lists all of our webinars and ODTUG http://www.odtug.com/p/bl/et/blogaid=679&source=1 Wed Mar 08 2017 13:31:48 GMT-0500 (EST) NATCAP OUG Reboot http://spendolini.blogspot.com/2017/03/natcap-oug-reboot.html NATCAP OUG - or the National Capitol Region Oracle Users Group - has a long history of providing Oracle-related content to those in the DC metro area. &nbsp;I remember presenting there back in my Oracle days (early 2000's) on multiple occasions.<div><br /></div><div>Over the last few months, a few of us have been trying to resurrect this group, as there are likely more Oracle developers &amp; DBAs in the DC area than any other area in the US, perhaps even the world! &nbsp;This region has long been underserved, and we hope to change that.</div><div><br /></div><div>We have had a couple of meeting at Oracle's campus in Reston, and attendance has been, well, not where we need it to be. &nbsp;So, if you're in the DC area, please consider joining this group. &nbsp;It's free, and our goal is to have quarterly meetings where both experienced presenters and NATCAP members alike provide the content.</div><div><br /></div><div>If interested, please sign up on the NATCAP website here:&nbsp;<a href="http://natcapoug.org/">http://natcapoug.org</a></div><div><br /></div><div>Let's grow this group and give the DC metro area the user group it so badly needs!</div> Scott tag:blogger.com,1999:blog-8449039.post-6502792823297121193 Wed Mar 08 2017 08:03:00 GMT-0500 (EST) Oracle Forms and Firefox 52 http://talk2gerd.blogspot.com/2017/03/oracle-forms-and-firefox-52.html This morning was the last day for Oracle Forms in Firefox, I thought...<br /><br />At 9:00 AM I had no problems starting my Forms-Runtime. Firefox 51.0 was the actual version at that point.<br /><br />After lunch and restarting my Firefox I was running 52.0 with the new feature "no JAVA please" :-)<br /><br />Very bad is, that firefox didn't give you any hint, when starting a Forms-URL. The only thing you see is an empty screen.<br /><br /><br />If you have this problem, here is the workaround:<br /><br />Start the URL "about:config" in your Firefox. After the message, that from now on you are responsible for all things you are doing in the settings, you see all Firefox config-parameters.<br /><br />Here you have to right mouse click and use "New"-"Boolean"<br /><br /><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a aiotitle="" href="https://2.bp.blogspot.com/-7aBX95dcBp8/WMACi0UWZ5I/AAAAAAAAMp8/Rs-QXQYdi5M0E74oihdeOiDoYCINFmRzwCLcB/s1600/firefox_52.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-7aBX95dcBp8/WMACi0UWZ5I/AAAAAAAAMp8/Rs-QXQYdi5M0E74oihdeOiDoYCINFmRzwCLcB/s1600/firefox_52.png" /></a></div><br />The name of the new parameter is: <b>plugin.load_flash_only</b><br />The value of the new parameter is: <b>false</b><br /><br />Now you have a new Firefox-parameter, which lets you run Oracle Forms as before!<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-ZaUpdu0Bx-Y/WMAElglNJqI/AAAAAAAAMqI/TyNz3F1leaIIgvUP7FV5W-9VCnerZkAngCLcB/s1600/firefox_52_config.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-ZaUpdu0Bx-Y/WMAElglNJqI/AAAAAAAAMqI/TyNz3F1leaIIgvUP7FV5W-9VCnerZkAngCLcB/s1600/firefox_52_config.png" /></a></div><br />Have fun<br />Gerd<br /><br /><br /><b><br /></b> Gerd Volberg tag:blogger.com,1999:blog-17069431.post-6904060251518406709 Wed Mar 08 2017 06:00:00 GMT-0500 (EST) SQLcl جايگزين مناسب براي SQL Plus http://oracleapex.blogfa.com/post/44 </p> <p><img src="http://www.upload-photos.ir/images/05737487309232927767.png" alt="" width="437" height="115" /></p> <p> </p> oracleapex http://oracleapex.blogfa.com/post/44 Sun Mar 05 2017 08:18:00 GMT-0500 (EST) Swift 3 – Das umfassende Handbuch http://feedproxy.google.com/~r/CC13com/~3/bX16COt39AU/ <p>Nicht nur die Versionsnummer hat sich geändert, auch der <a href="http://www.cc13.com/wordpress_21/2015/12/05/swift-2-das-umfassende-praxisbuch/" class="liinternal">Untertitel</a> wurde vom Autor angepasst. Dass sich Swift, die &#8222;neue&#8220; <a href="http://www.apple.com/de/swift/" target="_blank" class="liexternal">Programmiersprache von Apple</a> schnell entwickelt, kann man u.a. daran sehen, dass fast im Jahresrhythmus eine neue Version erscheint. Und somit habe ich nun wieder die Möglichkeit, mich mit dem vorliegenden Buch über Swift 3 zu informieren.</p> <h3>Titel: <strong><a href="https://www.rheinwerk-verlag.de/swift-3_4115/" target="_blank" class="liexternal">Swift 3 &#8211; Das umfassende Handbuch</a></strong><br /> Autor: <strong>Michael Kofler</strong><br /> Verlag: <strong><a href="https://www.rheinwerk-verlag.de/" class="liexternal" target="_blank">Rheinwerk-Verlag</a></strong><br /> Erscheinungsdatum: <strong>Ende</strong><span style="color: #000000;"><b> 2016</b></span><br /> ISBN: 978-3-8362-4127-4<span class="s1"><br /> Seitenzahl: <strong>1174</strong></span></h3> <p>Und nicht nur das, mit knapp 1200 Seiten hat das Buch zum <a href="http://www.cc13.com/wordpress_21/2015/12/05/swift-2-das-umfassende-praxisbuch/" target="_blank" class="liinternal">Vorgänger</a> um ganze 400 Seiten zugelegt. Auch diesmal ist das Buch nicht für Anfänger der Programmierung geeignet. Ein paar Grundlagen in modernen, objektorientierten Sprachen sollte der Leser schon mitbringen.</p> <div id="attachment_870" style="width: 160px" class="wp-caption aligncenter"><a href="https://www.rheinwerk-verlag.de/swift-3_4115/" class="liimagelink"><img class="size-thumbnail wp-image-870" src="http://www.cc13.com/wordpress_21/wp-content/uploads/2017/03/Swift3-150x150.png" alt="Swift 3 - Buch" width="150" height="150" /></a><p class="wp-caption-text">Swift 3 &#8211; Das umfassende Handbuch</p></div> <p>Aufgeteilt ist das Buch in die Teile &#8222;Swift&#8220;, &#8222;App-Programmierung&#8220;, &#8222;Programmier- und Arbeitstechniken&#8220; und &#8222;Beispielprojekte&#8220;. Im ersten Teil geht der Autor auf die Programmiersprache selber ein. Der Leser erfährt die Neuerungen der Version 3 und bekommt Hilfestellungen für die weiteren Teile an die Hand.</p> <p>Der Abschnitt zur &#8222;App-Programmierung&#8220; war im zuvor erschienenen Buch noch in zwei getrennten Teilen aufgeführt. Das ist aber nicht von Nachteil, da es Themenübergreifende Erklärungen gibt. Zusätzlich zur iOS- und macOS-Programmierung zeigt der aktuelle Band die Erstellung von tvOS Anwendungen. Auf spezielle Anforderungen in der täglichen Programmierung geht der dritte Teil des Buches ein. Der Leser erfährt u.a. Techniken zur Netzwerkprogrammierung, wie man GPS- und Kompassfunktionen in seinen Programmen, oder den App Store nutzt.</p> <p>Im vierten und letzten Teil behandelt der Autor anhand von Beispielprogrammen Themen ab, die man für eigene Projekte sehr gut verwenden kann. Sei es ein Währungskalkulator, oder kleine Spiele wie <a href="https://de.wikipedia.org/wiki/Breakout_(Computerspiel)" target="_blank" rel="nofollow" class="liwikipedia">Breakout</a>, <a href="https://de.wikipedia.org/wiki/Pac-Man" target="_blank" rel="nofollow" class="liwikipedia">Pac-Man</a> oder Asteroids, welche dann auf einem <a href="http://www.apple.com/de/iphone/" target="_blank" class="liexternal">iOS</a> oder <a href="http://www.apple.com/de/tv/" target="_blank" class="liexternal">tvOS</a> Gerät lauffähig sind.</p> <h2>Zusammenfassung</h2> <p>Wie immer kann ich das Buch Lesern empfehlen, die Grundlagen der Programmierung mitbringen und sich über die Programmiersprache von Apple informieren möchten. Da Apple die Sprache als Open Source <a href="https://www.heise.de/developer/meldung/Programmiersprachen-Apples-Swift-ist-jetzt-Open-Source-und-fuer-Linux-verfuegbar-3031557.html" target="_blank" class="liexternal">freigegeben</a> hat und die ersten Portierungen für Linux verfügbar sind, ist man nicht mehr auf die Marke mit dem angebissenen Apfel beschränkt, um mit Swift arbeiten zu können. Programmieranfänger empfehle ich zuvor, sich mit einem Grundlagenbuch zu beschäftigen und dann das hier besprochene Buch zur Hand zu nehmen.</p> <h5><em>Disclaimer: Das Buch wurde mir vom Rheinwerk Computing Verlag kostenfrei zur Verfügung gestellt.</em></h5> <p>Der Beitrag <a rel="nofollow" href="http://www.cc13.com/wordpress_21/2017/03/05/swift-3-das-umfassende-handbuch/">Swift 3 &#8211; Das umfassende Handbuch</a> erschien zuerst auf <a rel="nofollow" href="http://www.cc13.com/wordpress_21">CC13.com</a>.</p> cc13 http://www.cc13.com/wordpress_21/?p=869 Sun Mar 05 2017 05:35:19 GMT-0500 (EST) Using APIs to set Application and Build Status in Oracle Application Express 5.1 http://b-apex.blogspot.com/2017/03/using-api-to-set-application.html In Oracle Application Express it is possible to specify application-level attributes: Build Status and Application Status. With Build Status we can prevent that an application is being modified by other developers. With Application Status we can specify whether an application is available or unavailable for use.<br /><div><br /></div><div>Topic of this blog post is not to talk in detail about this two attributes (if you want to know more, then check the&nbsp;<a href="http://docs.oracle.com/database/apex-5.1/AEADM/changing-build-status-for-multiple-applications.htm#AEADM165" target="_blank">official documentation</a>), but to mention how we can use APIs to manage this attributes in Oracle Application Express 5.1</div><div><br /></div><div><b>Build Status</b></div><div><br /></div><div>For setting build status we can use the following procedure:</div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><br /></span><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">&nbsp; <i>apex_util.set_app_build_status(&nbsp;</i></span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><i>&nbsp; &nbsp; &nbsp;p_application_id IN NUMBER,</i></span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><i>&nbsp; &nbsp; &nbsp;p_build_status IN VARCHAR2);</i></span><br /><div><div><br /></div><div>For <span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><i>p_build_status</i></span> we can specify <span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><i>RUN_ONLY</i></span> &nbsp;and <span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><i>RUN_AND_BUILD</i></span>. &nbsp;More details about this API can be found <a href="http://docs.oracle.com/database/apex-5.1/AEAPI/SET_APP_BUILD_STATUS_Procedure.htm" target="_blank">here</a>.</div></div><div><br /></div><div><b>Application Status</b></div><div><b><br /></b></div><div>For changing the status of the application, we can use the following procedure:</div><div><br /></div><div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">&nbsp; <i>apex_util.set_application_status(</i></span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><i>&nbsp; &nbsp; &nbsp; &nbsp; p_application_id IN NUMBER,</i></span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><i>&nbsp; &nbsp; &nbsp; &nbsp; p_application_status IN VARCHAR2,</i></span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><i>&nbsp; &nbsp; &nbsp; &nbsp; p_unavailable_value IN VARCHAR2,</i></span></div><div><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><i>&nbsp; &nbsp; &nbsp; &nbsp; p_restricted_user_list IN VARCHAR2);&nbsp;</i></span></div></div><div><br /></div><div>I don't want to do a copy/paste from the official documentation, so please check this <a href="http://docs.oracle.com/database/apex-5.1/AEAPI/SET_APPLICATION_STATUS-Procedure.htm" target="_blank">link</a> for parameters description and examples.&nbsp;</div><div><br />Aljaz</div><div><div></div></div> Aljaž Mali tag:blogger.com,1999:blog-6273129051310972036.post-6752446765667037928 Sat Mar 04 2017 17:17:00 GMT-0500 (EST) 12cR2 new features for Developers and DBAs - Here is my pick (Part 2) http://jaffardba.blogspot.com/2017/03/12cr2-new-features-for-developers-and_4.html <div dir="ltr" style="text-align: left;" trbidi="on"><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: rgba(0, 0, 0, 0.701961); font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; font-stretch: inherit; font-variant-numeric: inherit; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">In&nbsp;<a href="http://jaffardba.blogspot.com/2017/03/12cr2-new-features-for-developers-and.html" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: #8c68cb; cursor: pointer; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; outline: none; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">Part 1</a>, I have outlined a few (my pick) 12cR2 new features useful for Developers and DBAs. In the part 2, I am going to discuss a few more new features.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: rgba(0, 0, 0, 0.701961); font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; font-stretch: inherit; font-variant-numeric: inherit; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><strong style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: rgba(0, 0, 0, 0.85098); font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Read/Write and Read-Only Instances</strong></div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: rgba(0, 0, 0, 0.701961); font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; font-stretch: inherit; font-variant-numeric: inherit; line-height: 32px; margin-bottom: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">Read-write and read-only database instances of the same primary database can coexist in an Oracle Flex Cluster.</div><h3 style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: rgba(0, 0, 0, 0.85098); font-family: &quot;Source Sans Pro&quot;, Helvetica, Arial, sans-serif; font-size: 21px; font-stretch: inherit; font-variant-numeric: inherit; line-height: 28px; margin: 2.4rem 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Advanced Index Compression</h3><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: rgba(0, 0, 0, 0.701961); font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; font-stretch: inherit; font-variant-numeric: inherit; line-height: 32px; margin-bottom: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">Prior to this release, the only form of advanced index compression was low compression. Now you can also specify high compression. High compression provides even more space savings than low compression.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: rgba(0, 0, 0, 0.701961); font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; font-stretch: inherit; font-variant-numeric: inherit; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><strong style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">PDBs Enhancements</strong></div><ul style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: rgba(0, 0, 0, 0.701961); font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; font-stretch: inherit; font-variant-numeric: inherit; line-height: 32px; list-style-image: initial; list-style-position: initial; margin: 3.2rem 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><li style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">I/O Rate Limits for PDBs</li><li style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">Different character sets of PDBs in a CDB</li><li style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;">PDB refresh to periodically propagate changes from a source PDB to its cloned copy</li><li style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><strong style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">CONTAINERS</strong>&nbsp;hint : When a&nbsp;CONTAINERS ()query is submitted, recursive SQL statements are generated and executed in each PDB. Hints can be passed to these recursive SQL statements by using the&nbsp;CONTAINERS&nbsp;statement-level hint.&nbsp;</li><li style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><strong style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Cloning PDB no longer to be in R/W mode&nbsp;</strong>: Cloning of a pluggable database (PDB) resolves the issue of setting the source system to read-only mode before creating a full or snapshot clone of a PDB.</li><li style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><strong style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Near Zero Downtime PDB Relocation</strong>:This new feature significantly reduces downtime by leveraging the clone functionality to relocate a pluggable database (PDB) from one multitenant container database (CDB) to another CDB. The source PDB is still open and fully functional while the actual cloning operation is taking place.</li><li style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><strong style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Proxy PDB</strong>: A proxy pluggable database (PDB) provides fully functional access to another PDB in a remote multitenant container database (CDB). This feature enables you to build location-transparent applications that can aggregate data from multiple sources that are in the same data center or distributed across data centers.</li></ul><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: rgba(0, 0, 0, 0.701961); font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; font-stretch: inherit; font-variant-numeric: inherit; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><strong style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Oracle Data Pump Parallel Export of Metadata</strong>: The&nbsp;PARALLEL&nbsp;parameter for Oracle Data Pump, which previously applied only to data, is extended to include metadata export operations. The performance of Oracle Data Pump export jobs is improved by enabling the use of multiple processes working in parallel to export metadata.</div><h3 style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: rgba(0, 0, 0, 0.85098); font-family: &quot;Source Sans Pro&quot;, Helvetica, Arial, sans-serif; font-size: 21px; font-stretch: inherit; font-variant-numeric: inherit; line-height: 28px; margin: 2.4rem 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Renaming Data Files During Import</h3><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: rgba(0, 0, 0, 0.701961); font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; font-stretch: inherit; font-variant-numeric: inherit; line-height: 32px; margin-bottom: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><u style="border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;">Oracle RAC :</u></div><ul style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: rgba(0, 0, 0, 0.701961); font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; font-stretch: inherit; font-variant-numeric: inherit; line-height: 32px; list-style-image: initial; list-style-position: initial; margin: 3.2rem 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><li style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><strong style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Server Weight-Based Node Eviction</strong>&nbsp;:Server weight-based node eviction acts as a tie-breaker mechanism in situations where Oracle Clusterware needs to evict a particular node or a group of nodes from a cluster, in which all nodes represent an equal choice for eviction. In such cases, the server weight-based node eviction mechanism helps to identify the node or the group of nodes to be evicted based on additional information about the load on those servers. Two principle mechanisms, a system inherent automatic mechanism and a user input-based mechanism exist to provide respective guidance.</li><li style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><strong style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Load-Aware Resource Placement</strong>&nbsp;: Load-aware resource placement prevents overloading a server with more applications than the server is capable of running. The metrics used to determine whether an application can be started on a given server, either as part of the startup or as a result of a failover, are based on the anticipated resource consumption of the application as well as the capacity of the server in terms of CPU and memory.</li></ul><h3 style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: rgba(0, 0, 0, 0.85098); font-family: &quot;Source Sans Pro&quot;, Helvetica, Arial, sans-serif; font-size: 21px; font-stretch: inherit; font-variant-numeric: inherit; line-height: 28px; margin: 2.4rem 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Enhanced Rapid Home Provisioning and Patch Management</h3><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: rgba(0, 0, 0, 0.701961); font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; font-stretch: inherit; font-variant-numeric: inherit; line-height: 32px; margin-bottom: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><strong style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">TDE Tablespace Live Conversion</strong>: You can now encrypt, decrypt, and rekey existing tablespaces with Transparent Data Encryption (TDE) tablespace live conversion. A TDE tablespace can be easily deployed, performing the initial encryption that migrates to an encrypted tablespace with zero downtime. This feature also enables automated deep rotation of data encryption keys used by TDE tablespace encryption in the background with zero downtime.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: rgba(0, 0, 0, 0.701961); font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; font-stretch: inherit; font-variant-numeric: inherit; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><strong style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Fully Encrypted Database:</strong>&nbsp;Transparent Data Encryption (TDE) tablespace encryption is applied to database internals including&nbsp;SYSTEM,&nbsp;SYSAUX, and&nbsp;UNDO.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: rgba(0, 0, 0, 0.701961); font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; font-stretch: inherit; font-variant-numeric: inherit; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;"><strong style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">TDE Tablespace Offline Conversion</strong>: This release introduces new SQL commands to encrypt tablespace files in place with no storage overhead. You can do this on multiple instances across multiple cores. Using this feature requires downtime, because you must take the tablespace temporarily offline. With Data Guard configurations, you can either encrypt the physical standby first and switchover, or encrypt the primary database, one tablespace at a time.</div></div> The Human Fly tag:blogger.com,1999:blog-19771507.post-8887351906997145893 Sat Mar 04 2017 11:29:00 GMT-0500 (EST) APEX 5.1 quick fix: Closing modal page before confirm/alert dialog http://apexbyg.blogspot.com/2017/03/apex-51-quick-fix-closing-modal-page.html <div dir="ltr" style="text-align: left;" trbidi="on"><div class="p1"><span class="s1">When I have to do some things repeatedly it’s good indication that I should share this in a blog post. This time it's quick one and I’m sure that it will be fixed by Shakeeb in next the APEX (Universal theme) version.</span></div><div class="p1"><span class="s1"><br /></span></div><div class="p1"><span class="s1">There’s a problem in APEX 5.1.0.00.45 UT when you call confirm/alert dialog with apex.message JS API from modal page. The problem is that you can close modal page before closing confirm/alert dialog.</span></div><div class="p1"><span class="s1"><br /></span></div><div class="p1"><span class="s1">You can fix this by adding this CSS block to your custom CSS files or to Theme Roller’s Custom&nbsp;</span>CSS property:</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;"><code style="border: 0px; 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; margin: 0px; padding: 0px; white-space: inherit;"><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">body .ui-front ~ .ui-front{<br /> z-index:902 <br />}</span></code></pre><div class="p1"><span class="s1">Demo is available <a href="https://apex.oracle.com/pls/apex/f?p=100309:23:" target="_blank">here</a>.</span></div><div class="p1"><span class="s1"><br /></span></div><style type="text/css">p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Helvetica; -webkit-text-stroke: #000000} span.s1 {font-kerning: none} </style> <br /><div class="p1"><span class="s1">Enjoy!</span></div></div> Marko Gorički tag:blogger.com,1999:blog-1003209687173038896.post-2569777739035201066 Fri Mar 03 2017 03:25:00 GMT-0500 (EST) 12cR2 new features for Developers and DBAs - Here is my pick (Part 1) http://jaffardba.blogspot.com/2017/03/12cr2-new-features-for-developers-and.html <div dir="ltr" style="text-align: left;" trbidi="on"><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;">Since the announcement of 12cR2 on-premises availability, the Oracle community become energetic and busy tweeting/blogging the new features, demonstrating installation &amp; upgrades. Hence, I have decided to pick my favorite list of 12cR2 new features for Developers and &amp; DBAs. Here is the high-level summary, until I write a detailed post for each feature (<em style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; font-family: Georgia, &quot;Source Serif Pro&quot;, serif; font-size: 0.975em; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><u style="box-sizing: border-box;">excerpt from Oracle 12cR2 new features document</u></em>).</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;"><span style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Command history for SQL * Plus</span>: Pre 12cR2, this could be achieved through a workaround, now, the <em style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; font-family: Georgia, &quot;Source Serif Pro&quot;, serif; font-size: 0.975em; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">history</em> command would do the magic for you.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;"><span style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Materialized Views: Real-Time Materialized Views</span>: Materialized views can be used for query rewrite even if they are not fully synchronized with the base tables and are considered stale. Using materialized view logs for delta computation together with the stale materialized view, the database can compute the query and return correct results in real time.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;">For materialized views that can be used for query rewrite all of the time, with the accurate result being computed in real time, the result is optimized and fast query processing for best performance. This alleviates the stringent requirement of always having to have fresh materialized views for the best performance.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;"><span style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Materialized Views: Statement-Level Refresh</span>: In addition to&nbsp;ON COMMIT&nbsp;and&nbsp;ON DEMAND&nbsp;refresh, the materialized join views can be refreshed when a DML operation takes place, without the need to commit such a transaction. This is predominantly relevant for star schema deployments.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;">The new&nbsp;ON STATEMENT&nbsp;refresh capability provides more flexibility to the application developers to take advantage of the materialized view rewrite, especially for complex transactions involving multiple DML statements. It offers built-in refresh capabilities that can replace customer-written trigger-based solutions, simplifying an application while offering higher performance.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;"><span style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Oracle Data Guard Database Compare:</span> This new tool compares data blocks stored in an Oracle Data Guard primary database and its physical standby databases. Use this tool to find disk errors (such as lost write) that cannot be detected by other tools like the&nbsp;DBVERIFY&nbsp;utility.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;"><span style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Subset Standby</span>: A subset standby enables users of Oracle Multitenant to designate a subset of the pluggable databases (PDBs) in a multitenant container database (CDB) for replication to a standby database.&nbsp;</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;"><span style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Automatically Synchronize Password Files in Oracle Data Guard Configurations:</span> This feature automatically synchronizes password files across Oracle Data Guard configurations. When the passwords of&nbsp;SYS,&nbsp;SYSDG, and so on, are changed, the password file at the primary database is updated and then the changes are propagated to all standby databases in the configuration.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;"><span style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Preserving Application Connections to An Active Data Guard Standby During Role Changes</span>: Currently, when a role change occurs and an Active Data Guard standby becomes the primary, all read-only user connections are disconnected and must reconnect, losing their state information. This feature enables a role change to occur without disconnecting the read-only user connections. Instead, the read-only user connections experience a pause while the state of the standby database is changed to primary. Read-only user connections that use a service designed to run in both the primary and physical standby roles are maintained. Users connected through a physical standby only role continue to be disconnected.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;"><span style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Oracle Data Guard for Data Warehouses</span>: The use of&nbsp;NOLOGGING&nbsp;for direct loads on a primary database has always been difficult to correct on an associated standby database. On a physical standby database the data blocks were marked unrecoverable and any SQL operation that tried to read them would return an error. Or, for a logical standby database, SQL apply would stop upon encountering the invalidation redo.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;"><span style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Rolling Back Redefinition:</span> There is a new&nbsp;ROLLBACK&nbsp;parameter for the&nbsp;FINISH_REDEF_TABLE&nbsp;procedure that tracks DML on a newly redefined table so that changes can be easily synchronized with the original table using the&nbsp;SYNC_INTERIM_TABLE&nbsp;procedure.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;">The new&nbsp;V$ONLINE_REDEF&nbsp;view displays runtime information related to the current redefinition procedure being executed based on a redefinition session identifier.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;"><span style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Online Conversion of a Nonpartitioned Table to a Partitioned Table</span>: Nonpartitioned tables can be converted to partitioned tables online. Indexes are maintained as part of this operation and can be partitioned as well. The conversion has no impact on the ongoing DML operations.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;"><span style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Online SPLIT Partition and Subpartition</span>: The partition maintenance operations&nbsp;SPLIT PARTITION&nbsp;and&nbsp;SPLIT SUBPARTITION&nbsp;can now be executed as online operations for heap organized tables, allowing the concurrent DML operations with the ongoing partition maintenance operation.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;"><span style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Online Table Move</span>: Nonpartitioned tables can be moved as an online operation without blocking any concurrent DML operations. A table move operation now also supports automatic index maintenance as part of the move.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;"><span style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Oracle Database Sharding</span>: Sharding with Oracle Database 12c&nbsp;Release 2 (12.2) is an architecture for suitable online transaction processing (OLTP) applications where data is horizontally partitioned across multiple discrete Oracle databases, called shards, which share no hardware or software. The collection of shards is presented to an application as a single logical Oracle database.</div><div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: 0px 0px; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.701961); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: &quot;Source Serif Pro&quot;, serif; font-size: 21px; line-height: 32px; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;">Stay tuned for Part 2..</div></div> The Human Fly tag:blogger.com,1999:blog-19771507.post-3525777023764041884 Thu Mar 02 2017 15:07:00 GMT-0500 (EST) Acaba de salir la nueva directiva para APEX 5.2!!! http://feedproxy.google.com/~r/DescubriendoElMundoDeOracle/~3/abt0js_ralc/acaba-de-salir-la-nueva-directiva-para.html <div class="m-Section"><div class="m-Section-title">David Peake, Product Manager de Application Express compartió la nueva directiva para Apex 5.2.</div><div class="m-Section-title"><br /></div><div class="m-Section-title">Estas serán serán las mejoras que se realizarán!!!</div><div class="m-Section-title"></div><h3 class="m-Section-title">Oracle Application Express 5.2</h3><div class="m-Section-text">Oracle Application Express 5.2 will focus on both new features and enhancements to existing functionality, and is planned to incorporate the following:</div><ul class="m-List m-List--arrows"><li class="m-List-item">Remote SQL Data Access ‐ Extend common components such as Interactive Grids, Classic Reports and Charts to interface with data stored in remote databases using ORDS and REST.</li><li class="m-List-item">REST Service Consumption ‐ Provide declarative methods to define references to external REST APIs and generic JSON data feeds and to use these references as data sources for Interactive Grids, Reports and Forms.</li><li class="m-List-item">Declarative App Features ‐ Introduce a new Create App Wizard that allows for adding components and app features to new and existing applications.</li><li class="m-List-item">Interactive Grid enhancements ‐ Add additional reporting capabilities such as Group-By and Pivot, support for subscriptions and computations, flexible row height and general UI improvements.</li><li class="m-List-item">Page Designer ‐ Provide client-side wizards for the creation of more complex components like Dynamic Actions, Forms and Shared Components, User interface improvements.</li><li class="m-List-item">Upgrade Oracle JET and jQuery ‐ Adopt the most recent versions of the integrated JavaScript libraries to take advantage of new Data Visualizations such as Gantt charts and new Form widgets and controls.</li><li class="m-List-item">New REST Workshop ‐ Provide declarative methods to support the development of ORDS enabled REST web services, taking advantage of the latest features and functionality of ORDS.</li><li class="m-List-item">Packaged Applications ‐ Improved framework and enhancements to the packaged applications.</li></ul>Para descargar la directiva lo puedes hacer desde este <a href="http://www.oracle.com/technetwork/developer-tools/apex/application-express/oracle-application-express-sod-1596338.pdf" target="_blank">link</a>.</div><img src="http://feeds.feedburner.com/~r/DescubriendoElMundoDeOracle/~4/abt0js_ralc" height="1" width="1" alt=""/> Clarisa J. Maman Orfali tag:blogger.com,1999:blog-1315583943401206186.post-4903945441001730179 Wed Mar 01 2017 19:28:00 GMT-0500 (EST) Un poco de mi historia ha sido publicada en la revista Miniondas and Farandula USA en este mes!! http://feedproxy.google.com/~r/DescubriendoElMundoDeOracle/~3/zXQwaU4mdXQ/un-poco-de-mi-historia-ha-sido.html <span class="ember-view" id="ember4857"><span>Estoy muy feliz!!! la revista Hispana Miniondas and Farandula USA han dedicado 2 páginas a mi historia, festejando este mes el "Día Internacional de la Mujer". Gracias por tan hermoso reportaje y por compartir fragmentos de mi vida con la comunidad hispana del Sur de California!!! mi hijo Nicolas es el chef!!!! </span><a class="hashtag-link ember-view" data-control-name="update_hashtag" href="https://www.linkedin.com/search/results/content/?keywords=%23loveminiondas&amp;origin=HASH_TAG_FROM_FEED" id="ember4860">#loveminiondas</a><span> </span><a class="hashtag-link ember-view" data-control-name="update_hashtag" href="https://www.linkedin.com/search/results/content/?keywords=%23shareminiondas&amp;origin=HASH_TAG_FROM_FEED" id="ember4863">#shareminiondas</a><span> Les dejo el enalce para que vean la nota completa: <a href="http://miniondas.com/edicion-electronica/" target="_blank">http://miniondas.com/edicion-electronica/ </a></span></span><br /><span class="ember-view" id="ember4857"><span><br /></span></span><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-75_8rcqwWb4/WLdDAcjXB6I/AAAAAAAAB0s/j1dNHYM5caUkRsL9EKSKUBUMCEE3jbgTwCLcB/s1600/clarisa-entrevista.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="253" src="https://3.bp.blogspot.com/-75_8rcqwWb4/WLdDAcjXB6I/AAAAAAAAB0s/j1dNHYM5caUkRsL9EKSKUBUMCEE3jbgTwCLcB/s400/clarisa-entrevista.jpg" width="400" /></a></div><span class="ember-view" id="ember4857"><span><br /></span></span><img src="http://feeds.feedburner.com/~r/DescubriendoElMundoDeOracle/~4/zXQwaU4mdXQ" height="1" width="1" alt=""/> Clarisa J. Maman Orfali tag:blogger.com,1999:blog-1315583943401206186.post-8561789456967701524 Wed Mar 01 2017 16:56:00 GMT-0500 (EST) APEX 5.2 - czyli co jest planowane http://apex.dbe.pl/2017/03/apex-52-czyli-co-jest-planowane.html Dopiero co weszła wersja 5.1 a już można poznać więcej szczegółów dotyczących przyszłej wersji 5.2. Widać wyraźny nacisk na webservice-y co mnie osobiście bardzo cieszy : )<br /><br /> <div style="text-align: center;"> Kto zainteresowany odsyłam do tego <a href="http://www.oracle.com/technetwork/developer-tools/apex/learnmore/apex-sod-087560.html">WPISU.</a></div> ) tag:blogger.com,1999:blog-7531463720728239813.post-8655548433520238174 Wed Mar 01 2017 15:53:00 GMT-0500 (EST) Make tomcat wait until oracle database is available http://warp11.nl/2017/03/make-tomcat-wait-until-oracle-database-is-available/ <p>Recently I&#8217;ve been installing the OATOA (Oracle APEX on Tomcat with ORDS behind Apache) stack a number of times on both Oracle Linux 7 and CentOS7.</p> <p>In the past this was no problem, Tomcat came up and a request to http://myserver:8080/ords/ gave me the expected APEX login screen.</p> <p>However since Oracle Linux 7 and CentOS7, it seemed that Tomcat started before it could find the Oracle database. A simple restart of the tomcat service would do the trick. On my virtual machine (recently switched from VirtualBox to parallels btw) meant for doing presentations no problem at all.</p> <p><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">systemctl restart tomcat</span></p> <p>Now I&#8217;m playing around with &#8220;droplets&#8221; at DigitalOcean, just another name for virtual servers in my opinion, but they have great features at a reasonable price. Take a look: <a href="https://m.do.co/c/187c0416a2b3">https://m.do.co/c/187c0416a2b3</a>.</p> <p>But my droplets showed the same behaviour as my parallels virtual machine. I first had to restart tomcat to get a working system.</p> <p>You all should know that I&#8217;m not a linux guru (really I&#8217;m not), so broke my brains about this for a looooong time.</p> <p>Yesterday I finally managed to get this working. The idea is to make the tomcat start-script wait until it can see &#8220;something&#8221; on port 1521 (the db listener) and only then continue to start.</p> <p>Open the file /usr/libexec/tomcat/server</p> <p><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">nano /usr/libexec/tomcat/server</span></p> <p>now add some lines of code _before_ the line that starts with MAIN_CLASS like this:</p> <p><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">#!/bin/bash</span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><br /> </span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">. /usr/libexec/tomcat/preamble</span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"><br /> </span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"># .=.=.=.=.= START Make tomcat wait on oracle .=.=.=.=.=<br /> </span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">i=1<br /> </span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">while netstat -lnt | awk &#8216;$4 ~ /:1521$/ {exit 1}&#8217;0<br /> </span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">do<br /> </span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">  sleep 10<br /> </span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">  let i+=1<br /> </span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">  if [ &#8220;$i&#8221; -gt &#8220;5&#8221; ]<br /> </span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">  then<br /> </span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">    break    #Abandon the loop.<br /> </span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">  fi<br /> </span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">done<br /> </span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"># give Oracle some slack to also start the database<br /> </span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">sleep 10<br /> </span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;"># .=.=.=.=.= END Make tomcat wait on oracle .=.=.=.=.=</p> <p></span><span style="font-family: 'courier new', courier, monospace;" data-blogger-escaped-style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">MAIN_CLASS=org.apache.catalina.startup.Bootstrap</span></p> <p>add the obvious lines to your script.</p> <p>What is happening?</p> <p>The line &#8220;netstat -lnt | awk &#8230;&#8221; tries to find the string &#8220;:1521&#8221; in the result of a &#8220;netstat -lnt&#8221; command. This would indicate that something is listening on that port. In our case it will be the Oracle Listener.</p> <p>If it does not find an open port 1521, it will sleep for 10 seconds, increment a counter (&#8220;i&#8221;) by 1 and do the loop again. The loop will loop a maximum of five times to prevent an endless loop.</p> <p>After the loop completes we give the Oracle database another 10 seconds to get started.</p> <p>That should do the trick. It does for me (I use the same code at digitalocean as well as my parallels virtual linux server.</p> <p>I&#8217;m sure linux must have some system in place that could do the trick as well (make one service dependable on the other) but I haven&#8217;t found an easy one to use. If someone could help me out here, feel free to leave a comment.</p> <p>Regards,</p> <p>Richard</p> Richard Martens http://warp11.nl/?p=1498 Wed Mar 01 2017 09:32:26 GMT-0500 (EST) A complete guide to #ORCLAPEX Dynamic Actions http://www.explorer-development.uk.com/complete-guide-da/ <p>A complete guide to #ORCLAPEX Dynamic Actions Last year, Craig Sykes and I were discussing ideas for presentations at Tech16 and one idea made us quite excited to turn in to a paper for submission. We hadn’t seen a presentation on a complete coverage of all the Dynamic Actions available in APEX 5 &#8211; yet</p> <p>The post <a rel="nofollow" href="http://www.explorer-development.uk.com/complete-guide-da/">A complete guide to #ORCLAPEX Dynamic Actions</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> factory-admin http://www.explorer-development.uk.com/?p=4100 Wed Mar 01 2017 09:08:56 GMT-0500 (EST) APEX 5.1 - Goodbye Component View http://oracleinsights.blogspot.com/2017/03/apex-51-goodbye-component-view.html <div dir="ltr" style="text-align: left;" trbidi="on"> In Oracle APEX 5.1 it's possible to remove the Component View from the Page Designer.<br /> <br /> From the Page Designer open the browsers console window and type the following code:<br /> <br /> <pre style="border: 1px solid rgba(0, 0, 0, 0.0980392); box-sizing: border-box; color: #2b2b2b; font-family: monospace, serif; font-size: 15px; hyphens: none; line-height: 1.6; margin-bottom: 24px; max-width: 100%; outline: 0px; overflow: auto; padding: 12px; vertical-align: baseline; word-wrap: normal;"><code style="border: 0px; font-family: monospace, serif; font-style: inherit; font-weight: inherit; hyphens: none; line-height: 1.6; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">$("#componentView,[aria-controls='componentView']").remove();pageDesigner.storeTabsLayout(); </code></pre> <div> <code style="border: 0px; font-family: monospace, serif; font-style: inherit; font-weight: inherit; hyphens: none; line-height: 1.6; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">This is a per user preference, and persists across APEX sessions.</code></div> <div> <code style="border: 0px; font-family: monospace, serif; font-style: inherit; font-weight: inherit; hyphens: none; line-height: 1.6; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><br /></code></div> <div> <code style="border: 0px; font-family: monospace, serif; font-style: inherit; font-weight: inherit; hyphens: none; line-height: 1.6; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">For more details see <a href="http://hardlikesoftware.com/weblog/2016/12/" target="_blank">John Snyders' blog</a>, I've just repeated it here so I don't forget.</code></div> </div> Mark Lancaster tag:blogger.com,1999:blog-869579236085438805.post-763961626466025236 Tue Feb 28 2017 20:54:00 GMT-0500 (EST) Oracle APEX and Statistics – R U Serious? https://www.insum.ca/oracle-apex-statistics-r-u-serious/ <h1>Oracle APEX and Statistics &#8211; R U Serious?</h1> <p>The R-programming language is probably the most popular statistical programming language used today, and much of its success could be attributed to its availability to anyone with a computer. R is open sourced, freely available and easily installed on most operating systems including Microsoft Windows, Mac OS and Linux.</p> <p>Perhaps because of its deep roots in open source and its wide adoption in academia, there is a plethora of R packages that can be installed and used in your projects. These packages have a wide variety of applications including data visualization, machine learning, complex statistical calculations and much more!</p> <p>As an <a href="https://www.insum.ca/about-apex/">Oracle Application Express (APEX)</a> developer, what do you do when your customer asks for the ability to dynamically generate a <a href="https://en.wikipedia.org/wiki/Linear_regression" target="_blank">linear regression</a> model based on the information stored in the database? The application should display simple summary statistics and allow users to predict future values given some parameters?</p> <p>For statistical calculations, it is possible to code a solution with Oracle&#8217;s aggregate and/or analytic functions. For example, the following SQL statement will return the Y-intercept and slope (coefficient) using data stored in a database table:</p> <pre style="padding-left: 30px;">select regr_intercept(roll, unem) as intercept , regr_slope(roll, unem) as coefficient from apexr_enrollments</pre> <p>Another alternative would be to use R! To call the standard linear model function (lm), data must be loaded into a structure that R can understand, e.g. a data frame or list. After that, creating a linear model is as simple as: my_model &lt;- lm(roll~unem, d) where d is the reference to the data frame or list containing the data. The challenge is how R scripts can be executed from within PL/SQL?</p> <p>The official Oracle recommendation would likely be to license the Advanced Analytics Options, and that also assumes that you are running the enterprise edition of the database. The Oracle R Enterprise team provides a <a href="https://blogs.oracle.com/R/entry/invoking_r_scripts_via_oracle" target="_blank">blog series</a> that introduces this approach. However, if resources are limited, or the use case is simple enough not to justify a huge purchase, then here is a workaround that works even with Oracle Database XE.</p> <p>Tools Required:</p> <ul> <li>CentOS with <a href="https://github.com/OraOpenSource/OXAR" target="_blank">OXAR</a>.</li> </ul> <h2>Step 1</h2> <p>From with a valid OXAR instance, install additional software and R packages as root:</p> <ul> <li>Latest version of R from the EPEL repository: <pre>&gt; yum install -y R</pre> </li> <li>Create an R script with the following contents: <pre>install.packages('needs', repos='http://cran.us.r-project.org') install.packages('jsonlite', repos='http://cran.us.r-project.org')</pre> </li> <li>Save the file as install-packages.R</li> <li>Execute the R script from command line <pre>&gt; Rscript install-packages.R</pre> </li> </ul> <h2>Step 2</h2> <ul> <li>Create a new project folder and creating a new package.json file <pre>&gt; npm init</pre> </li> <li>Install the required node packages: <pre>&gt; npm install --save r-script &gt; npm install --save body-parser &gt; npm install --save express </pre> </li> </ul> <h2>Step 3</h2> <ul> <li>Create the two R scripts that performs the computation <ul> <li>calculator.R: <pre>x &lt;- as.numeric(input[[1]]) y &lt;- as.numeric(input[[2]]) sum &lt;- x + y product &lt;- x * y data.frame(sum, product)</pre> </li> <li>linear_model.R: <pre>d &lt;- input[[1]] fit &lt;- lm(roll~unem, d) summary &lt;- summary(fit) data.frame(summary$coefficients)</pre> </li> </ul> </li> </ul> <h2>Step 4</h2> <p>Create the REST service using Express:</p> <pre style="padding-left: 30px;">var express = require('express'); var app = express(); var bodyParser = require('body-parser'); var R = require('r-script'); app.use(bodyParser.urlencoded({extended: true})); app.use(bodyParser.json()); var port = process.env.PORT || 4000; var router = express.Router(); router.get('/', function(req, res) { res.json({ message: 'running' }); }); router.route('/calculate').get(function(req, res) { var result = R('calculator.R') .data(req.query.left_op, req.query.right_op) .callSync(); res.json({ result: result }); }); router.route('/model').post(function(req, res) { var result = R('linear_model.R') .data(JSON.parse(req.body.data)) .callSync(); res.json({ result: result }); }); app.use('/api', router); app.listen(port); console.log('Running on port ' + port);</pre> <h2>Step 5</h2> <p>There are many ways to start and daemonize the REST service. My current favourite is to use <a href="http://pm2.keymetrics.io/" target="_blank">PM2</a>, or simply run the app with the command:</p> <pre>node server.js.</pre> <h2>Step 6</h2> <p>Finally, create the APEX application. Add three pages to the sample application.</p> <p>The first is a simple form that has two numeric fields for the left and right operand. Clicking on the button &#8220;Calculate&#8221; submits and calls the process that will compute the sum and product of the two numbers and display them.</p> <pre style="padding-left: 30px;">declare l_result clob; l_values apex_json.t_values; begin l_result := apex_web_service.make_rest_request( p_url =&gt; 'http://localhost:4000/api/calculate' , p_http_method =&gt; 'GET' , p_parm_name =&gt; apex_util.string_to_table('left_op:right_op') , p_parm_value =&gt; apex_util.string_to_table( :P1_LEFT_OPERAND || ':' || :P1_RIGHT_OPERAND ) ); apex_debug.info(l_result); apex_json.parse( p_values =&gt; l_values , p_source =&gt; l_result ); :P1_SUM := apex_json.get_varchar2( p_path =&gt; 'result[%d].sum' , p0 =&gt; 1 , p_values =&gt; l_values ); :P1_PRODUCT := apex_json.get_varchar2( p_path =&gt; 'result[%d].product' , p0 =&gt; 1 , p_values =&gt; l_values ); end;</pre> <p><img class="alignnone wp-image-7381 size-vntd-fullwidth-landscape" title="Oracle APEX R Demo - Simple Calculator" src="https://www.insum.ca/wp-content/uploads/2017/02/apexr-screen-01-1008x620.png" alt="Oracle APEX R Demo - Simple Calculator" width="1008" height="620" /></p> <p>The second page displays a report containing data imported from the sample file obtained a tutorial on performing simple linear regression with R. Clicking on the button &#8220;Generate Model&#8221; launches a third modal page that generates a linear model and then return the intercept and coefficient using a page load process.</p> <pre style="padding-left: 30px;">declare l_request_body clob; l_result clob; l_values apex_json.t_values; begin apex_json.initialize_clob_output; apex_json.open_array(); for result in ( select * from apexr_enrollments ) loop apex_json.open_object; apex_json.write('year', result.year); apex_json.write('roll', result.roll); apex_json.write('unem', result.unem); apex_json.close_object; end loop; apex_json.close_all; l_request_body := apex_json.get_clob_output; apex_web_service.g_request_headers(1).name := 'Content-Type'; apex_web_service.g_request_headers(1).value := 'application/x-www-form-urlencoded'; l_result := apex_web_service.make_rest_request( p_url =&gt; 'http://localhost:4000/api/model' , p_http_method =&gt; 'POST' , p_body =&gt; 'data=' || l_request_body ); apex_debug.info(l_result); apex_json.parse( p_values =&gt; l_values , p_source =&gt; l_result ); :P3_INTERCEPT := apex_json.get_varchar2( p_path =&gt; 'result[%d].Estimate' , p0 =&gt; 1 , p_values =&gt; l_values ); :P3_COEFFICIENT := apex_json.get_varchar2( p_path =&gt; 'result[%d].Estimate' , p0 =&gt; 2 , p_values =&gt; l_values ); apex_json.free_output; end;</pre> <p><img class="alignnone wp-image-7382 size-vntd-fullwidth-landscape" title="Oracle APEX R Demo - Simple Calculator" src="https://www.insum.ca/wp-content/uploads/2017/02/apexr-screen-02-1008x620.png" alt="Oracle APEX R Demo - Simple Calculator" width="1008" height="620" /></p> <p>The intercept and coefficient can then be used to predict enrollment rates given an unemployment rate. For the adventurous, try modifying the data using the Interactive Grid and see how the model and predicted values change.</p> <p>Access a functional <a href="https://demo.insum.ca/ords/f?p=apexr:1:0">demonstration of this APEX application here</a>.</p> <p>This is a very simple demonstration on how you can integrate and combine the powers of R and APEX, and is only meant as a starting references. There are many ways to improve the solution. For example, using database connectors to have either R or Node.js interact directly with the database. Some might even question, why not do everything in PL/SQL?</p> <p>In preparation of my upcoming <a href="http://kscope17.com/" target="_blank">Kscope 17</a> presentation on <a href="http://kscope17.com/component/seminar/seminarslist#Building%20in%20Blocks" target="_blank">Building in Blocks</a>, I have been reading a lot on the <a href="https://martinfowler.com/articles/microservices.html" target="_blank">Microservices Architecture</a> and how the hype applies to us APEX developers. One characteristic that stands out to me is Decentralized Governance, and I quote:</p> <blockquote><p>“One of the consequences of centralized governance is the tendency to standardize on single technology platforms. Experience shows that this approach is constricting &#8211; not every problem is a nail and not every solution a hammer. We prefer using the right tool for the job and while monolithic applications can take advantage of different languages to a certain extent, it isn&#8217;t that common.”</p></blockquote> <p>If we had access to data analysts who are proficient in R, should we not spare them the effort of learning PL/SQL and re-implementing statistical computing code that has already been more elegantly addressed by R? And of course, vice versa.</p> <p>At Insum, we believe that this is perhaps one of the biggest advantages of using APEX as the core development platform. With so much extensible features available to developers, APEX can be leveraged as a “construction based” or “breadboard”. Simply wire up other third-party application code like R or Node.js scripts, and benefit from other architectural components such as authentication, authorization, session state management and much more!</p> <p>To learn more about how you can use APEX and Node.js to incorporate advanced JavaScript libraries, please <a href="https://www.insum.ca/contact/">contact us</a> about our training and consulting services.</p> <p>The post <a rel="nofollow" href="https://www.insum.ca/oracle-apex-statistics-r-u-serious/">Oracle APEX and Statistics &#8211; R U Serious?</a> appeared first on <a rel="nofollow" href="https://www.insum.ca">Insum</a>.</p> Adrian Png https://www.insum.ca/?p=7390 Tue Feb 28 2017 15:51:07 GMT-0500 (EST) ODA: What you need to know http://www.explorer-development.uk.com/oda-blog/ <p>Oracle Engineered Systems are a range of hardware appliances designed to address different business problems or objectives. The entry level member of this group is the Oracle Database Appliance (ODA). Explorer recommend the use of ODA’s when Oracle customers are looking to achieve any of the following: There is actually a family of ODA models</p> <p>The post <a rel="nofollow" href="http://www.explorer-development.uk.com/oda-blog/">ODA: What you need to know</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> factory-admin http://www.explorer-development.uk.com/?p=4096 Tue Feb 28 2017 04:56:37 GMT-0500 (EST) Dynamic Date Time Picker http://apex-plugin.com/oracle-apex-plugins/item-plugin/dynamic-date-time-picker_518.html Oracle APEX item plugin v1.0 This plugin is date and time picker with many options. The plugin is tested to work with Oracle APEX Universal Theme. Instructions and more details about the plugin are available directly at gitHub Readme. (https://github.com/planetapex/apex-plugin-dynamicDateTimePicker)Check for Live demo (https://apex.oracle.com/pls/apex/f?p=83009:2) . Plugin Features 11 Types of Date and Time Picker to choose from: Single Date Picker Date Range Picker Multiple Dates Picker Single Month Picker Months Range Picker Multiple Months Picker Single Year Picker Years Range Picker Multiple Years Picker Time Picker Only Date Time Split Time Picker Addon to Widget with Date Time Separator and Minimum and Maximum Hours,Minutes. Multi-Languages, 16 Languages support Showing Methods: Inline as part of the page or On Show events like click, focus or mouse enter 8 Display Positions to choose from. Date validation Option. Custom Date Picker Title Previous and Forward Navigation Buttons Icons Minimum and Maximum Date Options Other Advance Options http://apex-plugin.com/oracle-apex-plugins/item-plugin/dynamic-date-time-picker_518.html Sun Feb 26 2017 09:07:50 GMT-0500 (EST) Understanding the User's Perspective http://www.grassroots-oracle.com/2017/02/understanding-users-perspective.html Recently I encountered what I thought was an interesting allegory in regard to software development and understanding the user experience.<br /><br />My three year old approached me with her bottle of milk and requested more, insisting it was empty.<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://2.bp.blogspot.com/-gcJy1L0S5bk/WLA1bDpR_pI/AAAAAAAAQrQ/_Aa0KWqJHiowBs8cBKRPptTogdgqYVi9gCLcB/s1600/IMAG6827.jpg" style="margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://2.bp.blogspot.com/-gcJy1L0S5bk/WLA1bDpR_pI/AAAAAAAAQrQ/_Aa0KWqJHiowBs8cBKRPptTogdgqYVi9gCLcB/s320/IMAG6827.jpg" width="181" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Exhibit A - One non-empty receptacle</td></tr></tbody></table><br />I assessed what was presented to me:<br /><br /><ol><li>There was milk in the container</li><li>The straw reached the current milk level</li><li>The straw was not blocked (I didn't feel like milk. I did not enjoy this test)</li></ol><br />It worked for me.<br /><br />So I returned the bottle and went back to ... cooking dinner. Right, let's go with that.<br /><br />The <strike>user</strike> child came back telling me the <strike>page</strike> bottle still wasn't working, so I asked for a demonstration.<br /><br />Of course, the user was doing it wrong.<br /><br />All programmers know this is the eventual outcome&nbsp;because the user is always clicking the wrong buttons at the wrong times. The real challenge is working out what to do next.<br /><br />In this case, I filled up the bottle with more milk. Any other outcome with a boundary-pushing young child will not be acceptable.<br /><br />However, once gratified, I also educated the user with not only the appropriate use&nbsp;but <i>why</i> that's the case. I think the reason "why" is as opposed to "just because" is partially what's wrong with society's ability to comprehend and assess new information.<br /><i><br /></i> <i>Have you worked it out yet?&nbsp;</i><br /><br />She was turning it upside-down to have a drink. This meant thanks to gravity, the milk was no longer near the end of the straw, and it was deemed 'empty'.<br /><br />I figured she turned it upside-down because that's how most of the other drink bottles work. Then I realised that's not accurate. Most of her bottles involve sucking liquid <i>up</i>&nbsp;a straw. I'm not sure why she often makes this mistake with this particular bottle, but I figure if I teach her some basic physics, not only can she potentially work out the problem herself next time, but maybe even apply the reasoning to other problems.<br /><br />So perhaps two lessons<br /><br /><b>1) Watch your users.</b> Don't be creepy about it, but somehow I'm always stunned by a number of notes I make when watching users operate software.<br /><br /><b>2) Educate your users.</b> There are<i> so many ways</i> you can give your users cues as to how to use your software, but the best-designed tools <a href="http://www.grassroots-oracle.com/2009/09/thinking-differently-about-application.html" target="_blank">don't need instructions</a>. They're inherently&nbsp;intuitive.<br /><br />When testing our own software, the more we can think like users instead of developers, the better our product will become.<br /><br />Sounds like an old adage, but what do you think of the analogy? Have you encountered similar ways to relate to non-IT folk? Scott Wesley tag:blogger.com,1999:blog-4818542164384221282.post-3140248939036469287 Fri Feb 24 2017 21:58:00 GMT-0500 (EST) Overriding the Default Properties of Inline Dialogs http://max-tremblay.blogspot.com/2017/02/overriding-default-properties-of-inline.html When using inline modal, you can display them using the <code class="language-javascript">openModal</code> JavaScript function.<br /><br />That function is wrapping the jQuery UI Dialog Open method.<br /><pre class="line-numbers"><code class="language-javascript">/* **********************************************<br /> From Theme42.js<br />********************************************** */<br />window.openModal = function(pDialogId, pDialogTriggerId, pSetFocusId, pClear) {<br /> $("#" + pDialogId).dialog("open")<br /> }<br /></code></pre><br />What we can do to override the default properties is to set them either on page or right before calling the Open method.<br /><br />Let's say we would like to have a smaller dialog (e.g. height of 200px)<br /><br /><br /><h2><u>Option 1</u></h2>On page load<br /><pre class="line-numbers"><code class="language-javascript">$('#INLINE_REGION_STATIC_ID').dialog('option', 'height', 200);<br /></code></pre><br />Then you can use<br /><pre class="line-numbers"><code class="language-javascript">openModal('INLINE_REGION_STATIC_ID');<br /></code></pre>or<br /><pre class="line-numbers"><code class="language-javascript">$('#INLINE_REGION_STATIC_ID').dialog('open');<br /></code></pre><br /><h2><u>Option 2</u></h2>When openning the Dialog:<br /><pre class="line-numbers"><code class="language-javascript">$('#INLINE_REGION_STATIC_ID').dialog('option', 'height', 200).dialog('open')<br /></code></pre><br />For more information, you can have a look at the <a href="http://api.jqueryui.com/dialog/" target="_blank">Dialog Widget documentation</a> Maxime Tremblay tag:blogger.com,1999:blog-267713902572011003.post-4620503529705718078 Fri Feb 24 2017 15:46:00 GMT-0500 (EST) Need more oomph from Oracle? http://www.explorer-development.uk.com/need-oomph-oracle/ <p>Need more oomph from Oracle?! Read on. Since joining Explorer in 2010 and working with customers with varying sizes of Oracle estates there are 2 key drivers that push customers to want to talk to me; reducing costs and improving performance. I’ve already shared my thoughts on reducing costs in another blog and here I</p> <p>The post <a rel="nofollow" href="http://www.explorer-development.uk.com/need-oomph-oracle/">Need more oomph from Oracle?</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> factory-admin http://www.explorer-development.uk.com/?p=4081 Fri Feb 24 2017 10:06:17 GMT-0500 (EST) How to reduce your Oracle Costs http://www.explorer-development.uk.com/reduce-oracle-costs/ <p>How to reduce your Oracle Costs Businesses up and down the country relying on Oracle technology to deliver and underpin key business applications all have one thing in common; they chose Oracle because it was the best solution to address their requirements. That said, as the cost of supporting Oracle continues to increase our customers</p> <p>The post <a rel="nofollow" href="http://www.explorer-development.uk.com/reduce-oracle-costs/">How to reduce your Oracle Costs</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> factory-admin http://www.explorer-development.uk.com/?p=4066 Fri Feb 24 2017 09:58:37 GMT-0500 (EST) How to create simple local web server for APEX static files http://apexbyg.blogspot.com/2017/02/how-to-create-simple-local-web-server.html <div dir="ltr" style="text-align: left;" trbidi="on">Today I've run into a problem that happens to me quite often. I've started a new project at the new client and one of the first things that I've had to do is to modify Universal Theme to meet their corporate design. They had simple APEX architecture with the EPG and without any custom CSS or JS in their apps.<br /><br />At first, I thought that I would have to do some minor changes in CSS so I've started to use Custom CSS property in Theme Roller. It's great tool, but as I had to do more and more changes it was just too slow.<br /><br />So I've asked them to provide me with some Web repository where I can easily put and change my files. Because this is a quite big company (actually a bank) with very strict security policies I knew that this would take a too looooong time. So I've started to look for an alternative.<br /><br />Off course, my first thought was a great tool named <a href="https://github.com/OraOpenSource/apex-frontend-boost" target="_blank">APEX Front End Boost</a> (if you don't know it, check it out), but again, because strict security policies, I wasn't been able to install it on the PC that I was working on. The good thing was that I had Node.js already installed there.<br /><br />So I've googled around for other solutions, but almost every solution was starting like this:<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;"><code style="border: 0px; 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; margin: 0px; padding: 0px; white-space: inherit;"><span class="pln" style="border: 0px; color: #303336; margin: 0px; padding: 0px;">npm install ...</span></code></pre>and it was a bummer because I couldn't install anything from npm.<br /><br />So I've decided to build my own solution. I thought, I'm not a Node.js developer but I know JavaScript so it shouldn't be too hard...and it wasn't.<br /><br />I've found one simple server script and added some additional stuff like Access-Control-Allow-Origin and Content-Type headers:<br /><pre class="lang-js prettyprint prettyprinted" style="background-color: #eff0f1; border: 0px; margin-bottom: 1em; max-height: 600px; overflow: auto; padding: 5px; width: auto; word-wrap: normal;"><span style="color: #303336; font-family: consolas, menlo, monaco, lucida console, liberation mono, dejavu sans mono, bitstream vera sans mono, courier new, monospace, sans-serif;">var fs = require('fs'); <br />var path = require('path'); <br />var http = require('http');<br />var staticBasePath = '.';<br /><br />var staticServe = function(req, res) { <br /> var fileLoc = path.resolve(staticBasePath);<br /> fileLoc = path.join(fileLoc, req.url);<br /><br /> fs.readFile(fileLoc, function(err, data) {<br /> if (err) {<br /> res.writeHead(404, 'Not Found');<br /> res.write('404: File Not Found!');<br /> return res.end();<br /> }<br /> <br /> var vExt = req.url.split('.').pop(), vContType;<br /> switch(vExt) {<br /> case 'css':<br /> vContType = 'text/css';<br /> break;<br /> case 'js':<br /> vContType = 'text/javascript';<br /> break;<br /> case 'png':<br /> vContType = 'image/png';<br /> break; <br /> default:<br /> vContType = 'text/plain';<br /> } <br /><br /> res.setHeader('Content-Type', vContType);<br /> // Chrome Fix<br /> res.setHeader('Access-Control-Allow-Origin', '*');<br /> res.statusCode = 200;<br /> res.write(data);<br /> return res.end();<br /> });<br />};<br /><br />var httpServer = http.createServer(staticServe);<br /><br />httpServer.listen(8085); </span></pre>...started it:<br /><pre class="lang-js prettyprint prettyprinted" style="background-color: #eff0f1; border: 0px; 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;"><span style="color: #303336;">node node_server.js</span></pre>..and voila! I had my static file server running on localhost:8085 (change the port number if you already have something running on 8085) and I could access files through URL like this&nbsp;http://localhost:8085/custom_theme/custom.css (where custom_theme is directory where node_server.js is located).<br /><br />The next goal was that other developers don't have any problems with the application runtime while I'm doing my CSS changes. So at first, I've created one application item F_THEME_PATH<br /><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-kw3zEShBgRg/WK_2g6aYCiI/AAAAAAAAEbw/TnH06awKBAkN_frt4HiKvxUFPEwtMAVMwCLcB/s1600/app_item.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="323" src="https://3.bp.blogspot.com/-kw3zEShBgRg/WK_2g6aYCiI/AAAAAAAAEbw/TnH06awKBAkN_frt4HiKvxUFPEwtMAVMwCLcB/s640/app_item.png" width="640" /></a></div><br /><br />and application computation (after authentication) to populate it in developement environment (with build option included for developement only)<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-x4v53gJ0e8s/WK_3UEpdfoI/AAAAAAAAEb4/HVSGWbTx7Y8Hi8VFghPVzvnicbPr3s5iACLcB/s1600/app_computation.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="369" src="https://4.bp.blogspot.com/-x4v53gJ0e8s/WK_3UEpdfoI/AAAAAAAAEb4/HVSGWbTx7Y8Hi8VFghPVzvnicbPr3s5iACLcB/s640/app_computation.png" width="640" /></a></div><br />and the other application computation to populate it on production and test environments which always returns path to workspace images (also defined by build option):<br /><br /><pre class="lang-js prettyprint prettyprinted" style="background-color: #eff0f1; border: 0px; margin-bottom: 1em; max-height: 600px; overflow: auto; padding: 5px; width: auto; word-wrap: normal;"><span style="color: #303336; font-family: consolas, menlo, monaco, lucida console, liberation mono, dejavu sans mono, bitstream vera sans mono, courier new, monospace, sans-serif;">return '&amp;WORKSPACE_IMAGES.custom_theme/';</span><span style="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;"><br /></span></pre><div><br /></div>The idea is - if I'm logged in take files from my local server and for other users take files from APEX workspace files. On test and production evnironments always take files from APEX workspace files.<br /><br />Because there's a great feature to upload zip file with directory structure to APEX workspace files it was really easy to refresh new version of my files when I was sattisfied with my modifications. &nbsp;<br /><br />The last thing was to add reference to my files. You can do this in several places in APEX. I've decided to do it in user interface properties:<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-AVmVEJRaZqo/WLAU-keZhHI/AAAAAAAAEcM/DozadIEC0f4thJPnOYCD5V9OyhOlruOrQCLcB/s1600/files.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="113" src="https://4.bp.blogspot.com/-AVmVEJRaZqo/WLAU-keZhHI/AAAAAAAAEcM/DozadIEC0f4thJPnOYCD5V9OyhOlruOrQCLcB/s400/files.png" width="400" /></a></div><br /><br /><br /><br />Enjoy!<br /><br /><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.0.00.45 and Node 5.2.0</i><br /><br /></div> Marko Gorički tag:blogger.com,1999:blog-1003209687173038896.post-4372130164574029042 Fri Feb 24 2017 06:17:00 GMT-0500 (EST) IRs with Subscriptions that might not work https://jeffkemponoracle.com/2017/02/24/irs-with-subscriptions-that-might-not-work/ <p>If you have an Interactive Report with the Subscription feature enabled, users can &#8220;subscribe&#8221; to the report, getting a daily email with the results of the report. Unfortunately, however, this feature doesn&#8217;t work as expected if it relies on session state &#8211; e.g. if the query uses bind variables based on page items to filter the records. In this case, the subscription will run the query with a default session state &#8211; Apex doesn&#8217;t remember what the page item values were when the user subscribed to the report.</p> <p>This is a query I used to quickly pick out all the Interactive Reports that have the Subscription feature enabled but which might rely on session state to work &#8211; i.e. it relies on items submitted from the page, refers to a bind variable or to a system context:</p> <pre class="brush: sql; title: ; notranslate"> select workspace, application_id, application_name, page_id, region_name, page_items_to_submit from apex_application_page_ir where show_notify = 'Yes' and (page_items_to_submit is not null or regexp_like(sql_query,':[A-Z]','i') or regexp_like(sql_query,'SYS_CONTEXT','i') ); </pre> <p>For these reports, I reviewed them and where appropriate, turned off the Subscription feature. Note that this query is not perfect and might give some false positives and negatives.</p><br />Filed under: <a href='https://jeffkemponoracle.com/category/oracle/'>Oracle</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jeffkemponoracle.wordpress.com/3670/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jeffkemponoracle.wordpress.com/3670/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jeffkemponoracle.wordpress.com/3670/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jeffkemponoracle.wordpress.com/3670/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jeffkemponoracle.wordpress.com/3670/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jeffkemponoracle.wordpress.com/3670/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jeffkemponoracle.wordpress.com/3670/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jeffkemponoracle.wordpress.com/3670/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jeffkemponoracle.wordpress.com/3670/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jeffkemponoracle.wordpress.com/3670/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jeffkemponoracle.wordpress.com/3670/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jeffkemponoracle.wordpress.com/3670/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jeffkemponoracle.wordpress.com/3670/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jeffkemponoracle.wordpress.com/3670/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=jeffkemponoracle.com&#038;blog=12972578&#038;post=3670&#038;subd=jeffkemponoracle&#038;ref=&#038;feed=1" width="1" height="1" /> Jeffrey Kemp http://jeffkemponoracle.com/?p=3670 Thu Feb 23 2017 21:31:12 GMT-0500 (EST) Ready to get “Up and Running” with Oracle APEX and EBS? https://www.insum.ca/get-up-running-oracle-apex-oracle-ebs/ <h1>Ready to get “Up and Running” with Oracle APEX and EBS?</h1> <p>It should come as no surprise that we love <a href="https://www.insum.ca/about-apex/">Oracle APEX</a> at Insum. We’ve seen time and time again how organizations have used this simple yet powerful tool to build applications that have been incredibly successful, especially given the attractive ROI due to the speed at which APEX applications can be developed and deployed.</p> <p>One area where we’ve really seen APEX grow in popularity is with building Oracle E-Business Suite (EBS) extensions. Of course, for those familiar with APEX and EBS, it’s not hard to see why; APEX provides an effective and economical way to enhance EBS functionality with little to no impact to existing installations. And, in addition to providing rich user interfaces through stand-alone or fully integrated applications, using APEX to move customizations out of EBS simplifies future upgrading and patching.</p> <p><img class="alignnone wp-image-7365 size-vntd-portfolio-square" src="https://www.insum.ca/wp-content/uploads/2017/02/e-business-suite-extensions-oracle-apex-450x340.jpg" alt="e-business-suite-extensions-oracle-apex" width="450" height="340" /></p> <p>Due to the demand for more information, over the past year, we’ve been sharing a lot more about using APEX with EBS. We’ve blogged about the <a href="https://www.insum.ca/top-reasons-use-oracle-apex-to-build-ebs-extensions/">top reasons organizations choose APEX for building EBS extensions</a>, about the <a href="https://www.insum.ca/top-use-cases-e-business-suite-oracle-apex/">types of extensions you can build with APEX</a>, we’ve spoken at conferences and produced <a href="https://www.insum.ca/learn-apex/">webinars</a> showing how it can be done,   we’ve even provided <a href="http://info.insum.ca/insum-ebs-apex-integration-package">an </a><a href="http://info.insum.ca/insum-ebs-apex-integration-package">integration package</a><a href="http://info.insum.ca/insum-ebs-apex-integration-package"> free to download</a> to help organizations get started. (If you want a “single source” overview of the material we’ve produced, then please <a href="http://info.insum.ca/ebs-apex-technical-brief-download">download our EBS-APEX technical brief</a> to learn more.)</p> <p>However, people are busy. Although they see the value in using APEX to build EBS extensions and want to explore further, they’ve struggled to find the time to pull everything together to get started. Well, if that describes you and your organization, you’ll be happy to know we’ve made it easier than ever to get going.</p> <p><img class="alignnone wp-image-7364 size-vntd-portfolio-square" src="https://www.insum.ca/wp-content/uploads/2017/02/ebs-apex-up-and-running-450x340.jpg" width="450" height="340" /></p> <h2>Oracle EBS &amp; APEX <em>Up and Running </em>Package</h2> <p>We’ve developed an <a href="https://www.insum.ca/e-business-suite-oracle-apex-package/">EBS &amp; APEX </a><em><a href="https://www.insum.ca/e-business-suite-oracle-apex-package/">Up and Running Package</a> </em>designed specifically to help organizations quickly get started with developing EBS extensions using APEX.  Delivered remotely or onsite, the package contains everything an organization needs to begin EBS-APEX development including installation and setup guidance, preconfigured integration packages, starter application templates, and APEX development coaching.</p> <p>You can download a more detailed description of the Up and Running package below, and please feel free to contact our EBS-APEX Practice Director, Sylvain Martel, if you have any further questions.<span id="hs-cta-wrapper-c284e8fd-5104-4b9a-a439-832edfd49f29" class="hs-cta-wrapper"><span id="hs-cta-c284e8fd-5104-4b9a-a439-832edfd49f29" class="hs-cta-node hs-cta-c284e8fd-5104-4b9a-a439-832edfd49f29"><br /> <!-- [if lte IE 8]> <div id="hs-cta-ie-element"></div> <![endif]--><br /> <a href="http://cta-redirect.hubspot.com/cta/redirect/1918225/c284e8fd-5104-4b9a-a439-832edfd49f29" target="_blank"><img id="hs-cta-img-c284e8fd-5104-4b9a-a439-832edfd49f29" class="hs-cta-img" style="border-width: 0px;" src="https://no-cache.hubspot.com/cta/default/1918225/c284e8fd-5104-4b9a-a439-832edfd49f29.png" alt="Learn more about the EBS-APEX Package" /></a></span><br /> </span></p> <p>The post <a rel="nofollow" href="https://www.insum.ca/get-up-running-oracle-apex-oracle-ebs/">Ready to get “Up and Running” with Oracle APEX and EBS?</a> appeared first on <a rel="nofollow" href="https://www.insum.ca">Insum</a>.</p> Frank Hoogendoorn https://www.insum.ca/?p=7362 Thu Feb 23 2017 14:41:02 GMT-0500 (EST) Run dynamic action from report row and pass multiple variables http://www.apex-at-work.com/2017/02/run-dynamic-action-from-report-row-and.html Execute a "Dynamic Action" by clicking on a button/link inside a report row is mostly handled by some triggering HTML class.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-cHQeAOickoI/WK4Rdpebs_I/AAAAAAAABqM/o9b5zz2Gvz0SMauS2deWARMjzPzdKXtQQCK4B/s1600/Page_Designer_und_201702.png" imageanchor="1"><img border="0" src="https://2.bp.blogspot.com/-cHQeAOickoI/WK4Rdpebs_I/AAAAAAAABqM/o9b5zz2Gvz0SMauS2deWARMjzPzdKXtQQCK4B/s400/Page_Designer_und_201702.png" /></a></div><br />It actually works in 95% of all cases. But it is not the best way to do it. It is much more effective to execute the "Dynamic Action" with a custom event.<br /><br />Reason is simple: You don't need to allocate unnecessary elements via a class by jQuery. You execute the "Dynamic Action" in the moment when it is needed. Like calling explicitly a Javascript function.<br />This matters if you show maybe 500 rows or more on a single page or you handle several dynamic actions in one report.<br /><br />Running a dynamic action from inside a report is actually an old hat because there are a few guys which have been written about it. Anyway I'm still searching for it every time I need it and some of the code pieces are not up to date anymore. So I will show you the way I handle it today and probably tomorrow, too. :)<br /><br />First I must thank Jeff Eberhard for his examples about this topic. He really inspired me using the technique in one of my projects where I had to suffer with many rows inside a report.<br /><b><br /></b><b>Blog posts (www.eberapp.com/ords/f?p=BLOG):</b><br /><a href="https://blog.eberapp.com/ords/f?p=BLOG:READ:::::ARTICLE:1695400346724960" target="_blank">Run Dynamic Action from JavaScript</a><br /><a href="https://blog.eberapp.com/ords/f?p=BLOG:READ:::::ARTICLE:1763700346995827" target="_blank">Execute Dynamic Action From Report Column Link</a><br /><a href="https://www.eberapp.com/ords/f?p=BLOG:READ:0::::ARTICLE:2116700346816536" target="_blank">Pass Multiple Values from Report to Dynamic Action</a><br /><br /><span style="font-size: large;"><b>I prefer this way:</b></span><br /><br /><b>1. Set up a "Dynamic Action":</b><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">Custom Event: setIemsFromReport</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">Selection Type: Javascript Expression</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">Javascript Expression: document</span><br /><br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-AB6apHwp3KM/WK4Tv__XPQI/AAAAAAAABqc/b-Rr5e1PTVorXiSISabgYw1z-QYAG0wRwCK4B/s1600/Page_Designer.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="316" src="https://3.bp.blogspot.com/-AB6apHwp3KM/WK4Tv__XPQI/AAAAAAAABqc/b-Rr5e1PTVorXiSISabgYw1z-QYAG0wRwCK4B/s400/Page_Designer.png" width="400" /></a></div><br /><b>1.1 Now add some action from type: "Execute Javascript Code"</b><br />In my example I set up three APEX items with data from my report row.<br /><br />Code:<br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">apex.item( "P1_DEVICE" ).setValue( this.data.device_name );<br />apex.item( "P1_IP" ).setValue( this.data.ip );<br />apex.item( "P1_KOST" ).setValue( this.data.kost );</span><br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-2Orgba4yvPU/WK4UkMzh1VI/AAAAAAAABqo/IXc2NjDs2cozxKMFftR_o_qYDqv3rOMdQCK4B/s1600/Page_Designer.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="375" src="https://2.bp.blogspot.com/-2Orgba4yvPU/WK4UkMzh1VI/AAAAAAAABqo/IXc2NjDs2cozxKMFftR_o_qYDqv3rOMdQCK4B/s400/Page_Designer.png" width="400" /></a></div>Info:<br />As you see the parameters are forwarded with specific variable names. The example came from Matt Nolan. I prefer it mostly because it is exact and it makes it easier to understand (maintainability).<br /><br /><b>1.2 To get the values into your APEX database session you add one more action from type: "Execute PL/SQL Code":</b><br /><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-CfVNvHvrkMA/WK4XtSdZmhI/AAAAAAAABrE/uxBP66vtExYsOmkOoVYRuRkHuliqn2hBgCK4B/s1600/Page_Designer.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="393" src="https://3.bp.blogspot.com/-CfVNvHvrkMA/WK4XtSdZmhI/AAAAAAAABrE/uxBP66vtExYsOmkOoVYRuRkHuliqn2hBgCK4B/s400/Page_Designer.png" width="400" /></a></div><br /><br /><br /><b>2. Report column</b><br />Inside my report I define a link column which looks like that:<br /><b><br /></b><b>Type:</b><br />Link<br /><br /><b>Target:</b><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">javascript:apex.event.trigger(document, 'setIemsFromReport', [{device_name:'#NAME#', ip:'#IP#', kost:'#KOST#'}]);void(0);</span><br /><br /><b>Info</b><br />apex.event.trigger executes the "Dynamic Action".<b>&nbsp;</b><br />[{...}] defines the variables to forward.<br />void(0) prevents the browser to do further actions.<br /><br /><b>Link Text:</b><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">&lt;span class="fa fa-edit"&gt;&lt;/span&gt;&nbsp;</span><br /><br />Link Attributes (not required):<br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace;">style="font-size:16px;color:#ICON_COLOR#;display:#ICON_DISPLAY#"</span><br /><br />Info:<br />By using some columns with case when clause I'm able to add some custom attributes like hide/show. Example:<br />&nbsp; case<br />&nbsp;&nbsp;&nbsp; when SUBSTR(DEVICE,1,1) = 'T' <br />&nbsp;&nbsp;&nbsp; then 'inline-block'<br />&nbsp;&nbsp;&nbsp; else 'none'&nbsp; <br />&nbsp; end as ICON_DISPLAY<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-qeIEe5e-9XE/WK4W1EboqPI/AAAAAAAABq4/AlRZTODL_1AxraVdoAV_gvLVYDm854g5gCK4B/s1600/Page_Designer.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://1.bp.blogspot.com/-qeIEe5e-9XE/WK4W1EboqPI/AAAAAAAABq4/AlRZTODL_1AxraVdoAV_gvLVYDm854g5gCK4B/s400/Page_Designer.png" width="355" /></a></div><br />That is all you need to hand over attributes from your report row towards one or more APEX items on your page.<br /><br /> Tobias Arnhold tag:blogger.com,1999:blog-6481483192141562388.post-1252663639581088642 Wed Feb 22 2017 18:18:00 GMT-0500 (EST) چرا بايد به نسخه 5.1 Oracle APEX ارتقا دهيم؟ http://oracleapex.blogfa.com/post/43 </p> <p> <img src="http://www.upload-photos.ir/images/71541953973184125411.png" alt="" width="307" height="164" /></p> oracleapex http://oracleapex.blogfa.com/post/43 Wed Feb 22 2017 08:29:00 GMT-0500 (EST) Run PL/SQL in background and display a progress bar https://blogs.oracle.com/apex/entry/run_pl_sql_in_background <img src="https://blogs.oracle.com/apex/resource/schedulerlogo.png" alt="Logo PL/SQL background job" align="left" hspace="5" vspace="5" /> <p><font size="2" face="tahoma, arial, helvetica, sans-serif">Running PL/SQL procedures within an Application Express application is daily developers work. All business logic within APEX is done with PL/SQL. Sometimes, PL/SQL procedures might take more time to complete - and since we are talking about web applications, that means that the end users will have to wait for their browsers to respond. This is OK up to a few seconds, but when execution times reach minutes, this quickly becomes unacceptable.</font></p> <p><font size="2" face="tahoma, arial, helvetica, sans-serif"><a href="https://apex.oracle.com/pls/apex/germancommunities/apexcommunity/tipp/2201/index-en.html" target="_blank" title="How to document: Run PL/SQL in the background and display a progress bar">In this how to document</a>, you will learn, how to run PL/SQL code in the background using the database package DBMS_SCHEDULER, how to query the jobs' status and how to display a nice progress bar in your application which informs end users about the status of their background operation.</font></p> Carsten Czarski-Oracle https://blogs.oracle.com/apex/entry/run_pl_sql_in_background Wed Feb 22 2017 04:53:35 GMT-0500 (EST) Run PL/SQL in background and display a progress bar https://blogs.oracle.com/apex/entry/run_pl_sql_in_background <img src="https://blogs.oracle.com/apex/resource/schedulerlogo.png" alt="Logo PL/SQL background job" align="left" hspace="5" vspace="5" /> <p><font size="2" face="tahoma, arial, helvetica, sans-serif">Running PL/SQL procedures within an Application Express application is daily developers work. All business logic within APEX is done with PL/SQL. Sometimes, PL/SQL procedures might take more time to complete - and since we are talking about web applications, that means that the end users will have to wait for their browsers to respond. This is OK up to a few seconds, but when execution times reach minutes, this quickly becomes unacceptable.</font></p> <p><font size="2" face="tahoma, arial, helvetica, sans-serif"><a href="https://apex.oracle.com/pls/apex/germancommunities/apexcommunity/tipp/2201/index-en.html" target="_blank" title="How to document: Run PL/SQL in the background and display a progress bar">In this how to document</a>, you will learn, how to run PL/SQL code in the background using the database package DBMS_SCHEDULER, how to query the jobs' status and how to display a nice progress bar in your application which informs end users about the status of their background operation.</font></p> Carsten Czarski-Oracle https://blogs.oracle.com/apex/entry/run_pl_sql_in_background Wed Feb 22 2017 04:53:35 GMT-0500 (EST) PL/SQL-Logik im Hintergrund mit Fortschrittsbalken https://blogs.oracle.com/apexcommunity_deutsch/entry/pl_sql_logik_im_hintergrund <p><img src="https://blogs.oracle.com/apexcommunity_deutsch/resource/schedulerlogo.png" alt="Logo für Scheduler Jobs im Hintergrund" align="left" hspace="5" vspace="5" /><font face="tahoma, arial, helvetica, sans-serif" size="2">PL/SQL Logik in APEX ist etwas völlig Normales und findet nahezu überall täglich statt. Gelegentlich kommt es aber vor, dass aus APEX heraus solche PL/SQL-Logik angestoßen werden soll, die länger laufen wird. Hinterlegt man diese ganz normal als PL/SQL-Prozess auf einer Anwendungsseite, so müsste der Anwender mit dem Browser warten, bis der Prozess durchgelaufen ist. Das kann für bis zu einer Minute gerade noch akzeptabel sein, dauert es aber länger, so muss der PL/SQL-Prozess in den Hintergrund gebracht werden.</font></p> <p><font face="tahoma, arial, helvetica, sans-serif" size="2"><a href="https://apex.oracle.com/pls/apex/germancommunities/apexcommunity/tipp/2201/index.html" target="_blank" title="Community Tipp &quot;PL/SQL-Logik im Hintergrund starten und Fortschrittsbalken anzeigen&quot;">In diesem Community-Tipp</a> erfahren Sie, wie Sie PL/SQL-Code mit dem Paket DBMS_SCHEDULER im Hintergrund ausführen, den Status Ihres Jobs abfragen und dem Endanwender als &quot;Fortschrittsbalken&quot; präsentieren können. </font></p> Carsten Czarski-Oracle https://blogs.oracle.com/apexcommunity_deutsch/entry/pl_sql_logik_im_hintergrund Wed Feb 22 2017 04:49:15 GMT-0500 (EST) APEX 5.1 New Features - neuer Termin http://deneskubicek.blogspot.com/2017/02/apex-51-new-features-neuer-termin.html APEX 5.1 ist endlich da. Oracle Application Express wird mit jedem Release besser und zieht immer mehr Entwickler weltweit in seinen Bann. Es ist einfach, einfache wie auch komplexe Applikationen auf Basis des Oracle Stacks zu entwickeln. Es macht sogar richtig Spaß ! <br/><br/>Mit APEX 5.1 sind als wichtiges neues Feature die Interactive Grids mit dazu gekommen. Wir haben sehr lange auf eine moderne Möglichkeit gewartet, Excel - ähnliche Funktionen auf einer Webseite mit APEX zu implementieren. Jetzt ist es endlich soweit :) . Sogar Master-Detail-Detail-Detail-... Beziehungen sind umsetzbar, unsere Anwender werden sich freuen. <br/><br/>Darüber hinaus gibt es auch in vielen anderen Bereichen wichtige Neuerungen, die uns das Leben erleichtern. Gleichzeitig sind aber auch einige wichtige Dinge zu beachten, damit wir ein reibungsloses Upgrade durchführen können. <br/><br/>In diesem Kurs lernen Sie die neuen Funktionalitäten von Oracle Application Express 5.1 kennen, insbesondere wie Sie diese erfolgreich in der Praxis einsetzen. <br/><br/>Lernen Sie von und diskutieren Sie mit den weltweit bekannten Oracle APEX Experten: <br/><br/> Denes Kubicek, langjährige Projekterfahrung in den Bereichen Oracle und APEX mit multisite Applikationen, Preisträger des "Oracle APEX Developer of the Year 2008" Awards des Oracle Magazines, ein Oracle ACE Director und sehr bekannt im Oracle APEX OTN Forum für seine Beispielapplikation und <br/><br/>Dietmar Aust, erfahrener Oracle Consultant mit Spezialisierung auf Oracle APEX, Oracle ACE und aktiv in den OTN Foren zu APEX und Oracle XE, mit regelmäßigen Präsentationen auf den einschlägigen Oracle Konferenzen (DOAG, ODTUG, Oracle Open World). <br/><br/><br/><br/><div class="separator" style="clear: both; text-align: center;"><a href="http://www.opal-consulting.de/apex/f?p=107:7:0:::7:P7_CLS_ID:1461" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-bg4IALW3MuE/WKvfFvD8MYI/AAAAAAAABOA/BPp3CwMve1MABwvdbGLVKnPbZFW6ALLiQCLcB/s320/2017-05-29-APEX-51-New-Features-Banner.png" width="320" height="82" /></a></div> Denes Kubicek tag:blogger.com,1999:blog-1561253375800464394.post-8780484616185055855 Tue Feb 21 2017 01:33:00 GMT-0500 (EST) HEUG Alliance 2017 http://www.talkapex.com/2017/02/heug-alliance-2017/ <p>I’ll be at <a href="http://www.alliance-conference.com" target="_blank" rel="external">HEUG Alliance 2017</a> in Las Vegas next week. I’ll be giving a presentation on APEX with fellow <a href="insum.ca">Insum</a> colleagues Christian Larocque and <a href="https://twitter.com/InsumSmartel" target="_blank" rel="external">Sylvain Martel</a> called <em>From student systems to admin systems, one tool : Oracle APEX.</em> The goal of this presentation is to highlight the advantages of using Oracle APEX for higher education institutions.</p> <p>This will be my first time attending Alliance and I found it difficult to plan my schedule using the existing site. I wasn’t able to easily search all the presentation information at once and on a per time slot basis. APEX to the rescue! We created a simple <a href="https://demo.insum.ca/ords/f?p=124" target="_blank" rel="external">APEX scheduling application</a> which allows attendees to easily see all the different session slots and search on all the presentations for each slot. For those that have never seen or used APEX before this application shows how easy and quick it is to get a very useful application up and running in a short period of time.</p> <p>For those attending Alliance 2017 and want to learn more about APEX we’re offering free “Ask the Expert” sessions. To book a time with one of our experts register <a href="http://info.insum.ca/meet-integration-expert-alliance17" target="_blank" rel="external">here</a>.</p> Martin Giffy D'Souza http://www.talkapex.com/2017/02/heug-alliance-2017/ Mon Feb 20 2017 09:19:02 GMT-0500 (EST) APEX 5.X Interactive Report One Click Wonder http://www.cloudnueva.com/blog/-apex-5x-interactive-report-one-click-wonder <h2 class="wsite-content-title">Introduction</h2> <span class='imgPusher' style='float:left;height:0px'></span><span style='display: table;width:308px;position:relative;float:left;max-width:100%;;clear:left;margin-top:0px;*margin-top:0px'><a><img src="http://www.cloudnueva.com/uploads/7/8/4/7/78474242/published/oneclickwonder-min.png?1487459236" style="margin-top: 5px; margin-bottom: 10px; margin-left: 0px; margin-right: 10px; border-width:1px;padding:3px; max-width:100%" alt="Picture" class="galleryImageBorder wsite-image" /></a><span style="display: table-caption; caption-side: bottom; font-size: 90%; margin-top: -10px; margin-bottom: 10px; text-align: center;" class="wsite-caption"></span></span> <div class="paragraph" style="display:block;">APEX 5 brought new functionality which allowed us to significantly improve our users workflow. Providing modal popup functionality out of the box is just one of many. Users can now take an action on a report via a popup and still maintain the context of the report in the underlying window. APEX 5.1 is taking this a step further with the interactive grid, which allows users to make updates directly in the report.<br />There comes a time, however, when you just want to perform a pre-destined action on a report row without having to open a modal, update a value or navigate to a detail page. You just want to click on the row and perform the action.</div> <hr style="width:100%;clear:both;visibility:hidden;"></hr> <h2 class="wsite-content-title">Use Case</h2> <div class="paragraph">I am currently working on a replacement dash boarding system which pulls data from Oracle e-Business Suite. My client has over 100 pages built on a Microsoft technology that I am replacing with an APEX 5 App. The system has hundreds of users and the client needs to be able to authorize and de-authorize users quickly and easily. Although users would be authenticated using Active Directory we still needed a customized Authorization scheme and the maintenance pages that come with it. As users come and go, the admin needs a way to quickly de-authorize. We will accomplish this by providing a trash icon on each row of a report. When the user clicks the trash icon, it should delete the row and refresh the table.<br /><span></span></div> <h2 class="wsite-content-title">Demonstration</h2> <div><div class="wsite-image wsite-image-border-none " style="padding-top:10px;padding-bottom:10px;margin-left:0px;margin-right:0px;text-align:center"> <a> <img src="http://www.cloudnueva.com/uploads/7/8/4/7/78474242/apex-action-blog_1_orig.gif" alt="Picture" style="width:731;max-width:100%" /> </a> <div style="display:block;font-size:90%"></div> </div></div> <h2 class="wsite-content-title">Implementation</h2> <div class="paragraph">The demo above is based on a read only interactive grid on the table XX_APXDB_SECURITY_AUTH. My approach is to capture the click on the trash icon, call a JavaScript function to update&nbsp;a page item with the record id, create a Dynamic Action on the page item which in turn performs the actual delete and a refresh of the report region. I know that sounds like a lot of steps, but it is simple to setup.<br /><br /><strong>Note</strong>: All the code except for a few items (which I will highlight) will also work in APEX 5.0.X<br /><br /><strong><font color="#c23b3b">Page Source</font></strong><br />We are going to start by adding some JS and CSS at the page level:</div> <div><div style="height:0px;overflow:hidden"></div> <div id='176510455329128966-slideshow'></div> <div style="height:0px;overflow:hidden"></div></div> <div id="633254575631781616"><div><style type="text/css"> #element-d67032f8-702a-4734-b299-224bf0e3d29e .code-editor--light { padding: 20px 0px;}#element-d67032f8-702a-4734-b299-224bf0e3d29e .code-editor--light .header { padding: 10px 20px; font-weight: bold; border-left: 1px solid #C9CDCF; border-right: 1px solid #C9CDCF; border-top: 1px solid #C9CDCF; background-color: #F8F8F8; color: #363B3E;}#element-d67032f8-702a-4734-b299-224bf0e3d29e .code-editor--light .header .paragraph { margin: 0;}#element-d67032f8-702a-4734-b299-224bf0e3d29e .code-editor--light .body-code { margin: 0; border: 1px solid #C9CDCF; background-color: #FFFFFF; color: #666C70;}#element-d67032f8-702a-4734-b299-224bf0e3d29e .code-editor--dark { padding: 20px 0px;}#element-d67032f8-702a-4734-b299-224bf0e3d29e .code-editor--dark .ace-tomorrow-night-eighties { background-color: #363B3E;}#element-d67032f8-702a-4734-b299-224bf0e3d29e .code-editor--dark .header { padding: 10px 20px; font-weight: bold; border-left: 1px solid #E0E1E2; border-right: 1px solid #E0E1E2; border-top: 1px solid #E0E1E2; background-color: #666C70; color: #FFFFFF;}#element-d67032f8-702a-4734-b299-224bf0e3d29e .code-editor--dark .header .paragraph { margin: 0;}#element-d67032f8-702a-4734-b299-224bf0e3d29e .code-editor--dark .body-code { margin: 0; border: 1px solid #E0E1E2; background-color: #363B3E; color: #F8F8F8;}</style><div id="element-d67032f8-702a-4734-b299-224bf0e3d29e" data-platform-element-id="270170748587580171-1.3.2" class="platform-element-contents"> <div class="code-editor--light"> <div class="header"> <div class="paragraph">JavaScript: Function and Global Variable Declaration</div> </div> <div class="body-code"> <pre class="editor"></pre> </div></div></div><div style="clear:both;"></div></div></div> <div id="478668601828655787"><div><style type="text/css"> #element-62004df6-f912-4bd4-bbdd-00778fd9cddd .code-editor--light { padding: 20px 0px;}#element-62004df6-f912-4bd4-bbdd-00778fd9cddd .code-editor--light .header { padding: 10px 20px; font-weight: bold; border-left: 1px solid #C9CDCF; border-right: 1px solid #C9CDCF; border-top: 1px solid #C9CDCF; background-color: #F8F8F8; color: #363B3E;}#element-62004df6-f912-4bd4-bbdd-00778fd9cddd .code-editor--light .header .paragraph { margin: 0;}#element-62004df6-f912-4bd4-bbdd-00778fd9cddd .code-editor--light .body-code { margin: 0; border: 1px solid #C9CDCF; background-color: #FFFFFF; color: #666C70;}#element-62004df6-f912-4bd4-bbdd-00778fd9cddd .code-editor--dark { padding: 20px 0px;}#element-62004df6-f912-4bd4-bbdd-00778fd9cddd .code-editor--dark .ace-tomorrow-night-eighties { background-color: #363B3E;}#element-62004df6-f912-4bd4-bbdd-00778fd9cddd .code-editor--dark .header { padding: 10px 20px; font-weight: bold; border-left: 1px solid #E0E1E2; border-right: 1px solid #E0E1E2; border-top: 1px solid #E0E1E2; background-color: #666C70; color: #FFFFFF;}#element-62004df6-f912-4bd4-bbdd-00778fd9cddd .code-editor--dark .header .paragraph { margin: 0;}#element-62004df6-f912-4bd4-bbdd-00778fd9cddd .code-editor--dark .body-code { margin: 0; border: 1px solid #E0E1E2; background-color: #363B3E; color: #F8F8F8;}</style><div id="element-62004df6-f912-4bd4-bbdd-00778fd9cddd" data-platform-element-id="270170748587580171-1.3.2" class="platform-element-contents"> <div class="code-editor--light"> <div class="header"> <div class="paragraph">CSS: Inline</div> </div> <div class="body-code"> <pre class="editor"></pre> </div></div></div><div style="clear:both;"></div></div></div> <div class="paragraph"><strong><font color="#c23b3b">Interactive Report SQL</font></strong></div> <div id="578740228409700570"><div><style type="text/css"> #element-945651b7-00de-4b20-bf02-a3e5ce9a5d44 .code-editor--light { padding: 20px 0px;}#element-945651b7-00de-4b20-bf02-a3e5ce9a5d44 .code-editor--light .header { padding: 10px 20px; font-weight: bold; border-left: 1px solid #C9CDCF; border-right: 1px solid #C9CDCF; border-top: 1px solid #C9CDCF; background-color: #F8F8F8; color: #363B3E;}#element-945651b7-00de-4b20-bf02-a3e5ce9a5d44 .code-editor--light .header .paragraph { margin: 0;}#element-945651b7-00de-4b20-bf02-a3e5ce9a5d44 .code-editor--light .body-code { margin: 0; border: 1px solid #C9CDCF; background-color: #FFFFFF; color: #666C70;}#element-945651b7-00de-4b20-bf02-a3e5ce9a5d44 .code-editor--dark { padding: 20px 0px;}#element-945651b7-00de-4b20-bf02-a3e5ce9a5d44 .code-editor--dark .ace-tomorrow-night-eighties { background-color: #363B3E;}#element-945651b7-00de-4b20-bf02-a3e5ce9a5d44 .code-editor--dark .header { padding: 10px 20px; font-weight: bold; border-left: 1px solid #E0E1E2; border-right: 1px solid #E0E1E2; border-top: 1px solid #E0E1E2; background-color: #666C70; color: #FFFFFF;}#element-945651b7-00de-4b20-bf02-a3e5ce9a5d44 .code-editor--dark .header .paragraph { margin: 0;}#element-945651b7-00de-4b20-bf02-a3e5ce9a5d44 .code-editor--dark .body-code { margin: 0; border: 1px solid #E0E1E2; background-color: #363B3E; color: #F8F8F8;}</style><div id="element-945651b7-00de-4b20-bf02-a3e5ce9a5d44" data-platform-element-id="270170748587580171-1.3.2" class="platform-element-contents"> <div class="code-editor--light"> <div class="header"> <div class="paragraph"></div> </div> <div class="body-code"> <pre class="editor"></pre> </div></div></div><div style="clear:both;"></div></div></div> <div class="paragraph"><strong><font color="#c23b3b">The DELETE_AUTH Column</font></strong></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:center"> <a> <img src="http://www.cloudnueva.com/uploads/7/8/4/7/78474242/delete-auth-min_orig.png" alt="Picture" style="width:604;max-width:100%" /> </a> <div style="display:block;font-size:90%"></div> </div></div> <div class="paragraph"><strong>Notes:</strong><ul><li>We are changing the column to be a Link</li><li>Using &lt;span class... to display a trash can in the column header and for each row</li><li>The link Target tells APEX to call a JavaScript function called 'xxDeleteAuth' passing the AUTH_ID of the current row. FYI, in APEX 5.0.4 using #AUTH_ID# worked but in 5.1 only &amp;AUTH_ID appears to work.</li></ul><br /><strong><font color="#c23b3b">New Page Item P</font></strong><span><strong><font color="#c23b3b">65_AUTH_ID_TO_DELETE</font></strong></span><br />The JavaScript function (at the Page Level) is going to populate this page item with the value of the AITH_ID clicked on by the user.</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:center"> <a> <img src="http://www.cloudnueva.com/uploads/7/8/4/7/78474242/p65-auth-id-to-delete-min_orig.png" alt="Picture" style="width:auto;max-width:100%" /> </a> <div style="display:block;font-size:90%"></div> </div></div> <div class="paragraph"><strong><font color="#c23b3b">Dynamic Action on&nbsp;<strong>P</strong>65_AUTH_ID_TO_DELETE</font></strong></div> <div><div style="height:0px;overflow:hidden"></div> <div id='865755567190641419-slideshow'></div> <div style="height:0px;overflow:hidden"></div></div> <div class="paragraph">Thanks to an update from Scott, to be on the safe side you should also add a step to the end of the Dynamic Action to clear the value of P65_AUTH_ID_DELETE. Just in case you are using it somewhere else.<br /><br />BTW, I really can't say enough how nice it is to have 'apex.message' functionality to show nice looking messages to my users without a page refresh!</div> <h2 class="wsite-content-title">Conclusion</h2> <div class="paragraph">As you can see, this is a powerful user interaction model. Using the approach, we can significantly improve the workflow of users who need to make a decision and perform a single action repetitively to many records.<br /><br />Some other examples where this technique could be used:<ul><li>User clicks on a Tick or X icon to Approve or Reject a series of records in their 'Inbox'</li><li>User marks a record a read</li><li>User closes&nbsp;out a service request record</li></ul></div> http://www.cloudnueva.com/blog/-apex-5x-interactive-report-one-click-wonder Mon Feb 20 2017 01:00:00 GMT-0500 (EST) Custom Calendar CSS in APEX http://www.talkapex.com/2017/02/custom-calendar-css-in-apex/ <p>The new (<em>not legacy calendar</em>) in APEX 5 comes with a set of default calendar CSS classes to style calendar events. The following screenshot is from the inline help for the calendar <code>CSS Class</code> attribute:</p> <img src="/2017/02/custom-calendar-css-in-apex/calendar-help.png" alt="calendar-help.png" title=""> <p>I couldn’t find how to create a custom class in the documents (as the help suggests). Using the pre-defined classes as an example I was able to create a custom class for a new color for my calendar. The following is an example of a custom APEX calendar class:</p> <figure class="highlight css"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div></pre></td><td class="code"><pre><div class="line"><span class="selector-class">.fc</span> <span class="selector-class">.fc-event</span><span class="selector-class">.apex-cal-demo</span> &#123;</div><div class="line"> <span class="attribute">background-color</span>: <span class="number">#F0F8FF</span>;</div><div class="line"> <span class="attribute">border-color</span>: <span class="number">#000000</span>;</div><div class="line"> <span class="attribute">color</span>: <span class="number">#FFFFFF</span>;</div><div class="line">&#125;</div></pre></td></tr></table></figure> <p>In the calendar query this class can now be referenced as <code>apex-cal-demo</code>.</p> Martin Giffy D'Souza http://www.talkapex.com/2017/02/custom-calendar-css-in-apex/ Sat Feb 18 2017 21:11:20 GMT-0500 (EST) Why you should upgrade to Oracle APEX 5.1 https://www.insum.ca/why-you-should-upgrade-to-oracle-apex-5-1/ <h1>Why you should upgrade to Oracle APEX 5.1</h1> <p>Last December, <a href="https://blogs.oracle.com/apex/entry/oracle_announces_oracle_application_express1">Oracle announced Oracle Application Express 5.1</a>. What a Christmas present? Many of us expected it would arrive sometime after the first of the year. Anyhow, we’ve had two months to play around and work with some of the new marquee features of the product. We&#8217;re impressed. Our CTO, Francis Mignault, highlights our excitement at Insum,</p> <blockquote><p><img class="alignright size-full wp-image-5609" src="https://www.insum.ca/wp-content/uploads/2016/04/francis-oracle-compressor.jpg" alt="Francis Mignault" width="255" height="260" />“We are very excited with the upcoming APEX 5.1 release. The new declarative Master-Detail-Detail capabilities, possible using the new Interactive Grid, will greatly assist many of our clients convert legacy applications to Oracle Application Express. I am not even mentioning the hundreds of new improvements that the APEX team delivers with each new release.”</p></blockquote> <p>&nbsp;</p> <p>APEX 5.1 has given our team and clients a huge boost in functionality and productivity. I asked a few of our top APEX minds to highlight their favorite new features and share why you should upgrade to APEX 5.1:</p> <p>&nbsp;</p> <h2>Theme Roller</h2> <p><strong>Jorge Rimblas</strong></p> <p>The Theme Roller is a great time saver enhancement that allows a developer to visualize different Template Options live. It will work the same way that we could already switch colors and see the results in the running application, but for Template Options.</p> <p>Did you ever scroll through properties over and over looking for that one option? Well, now you can search it!  For us developers, it’s often about the little things. From the builder, you can now search within an element&#8217;s properties.</p> <p><img class="alignnone size-full wp-image-7304" src="https://www.insum.ca/wp-content/uploads/2017/02/oracle-apex-5.1-theme-roller.png" alt="oracle apex 5.1 theme roller" width="409" height="416" srcset="https://www.insum.ca/wp-content/uploads/2017/02/oracle-apex-5.1-theme-roller.png 409w, https://www.insum.ca/wp-content/uploads/2017/02/oracle-apex-5.1-theme-roller-295x300.png 295w" sizes="(max-width: 409px) 100vw, 409px" /></p> <h2>Interactive Grid</h2> <p><strong>Adrian Png</strong></p> <p>My personal favourite is the Interactive Grid (IG). It is the Interactive Report and Tabular Forms combined plus more. IG features that stand out include user-friendly grid-based editing, Oracle Text support, scroll pagination and support for “Warn on Unsaved Changes”. Say goodbye spreadsheets!</p> <p><strong>Monty Latiolais</strong></p> <p>I, too, say it’s the Interactive Grid (IG), but for different reasons. I think the IG will make it compelling particularly for <a href="https://www.insum.ca/oracle-forms-conversion-to-oracle-apex-where-to-start/">Forms customers to migrate to Oracle Application Express (APEX).</a> Forms users have grown accustomed to a multi-record edit. For those individuals, the Interactive Grid is a home run.</p> <p>&nbsp;</p> <p><img class="alignnone size-full wp-image-7301" src="https://www.insum.ca/wp-content/uploads/2017/02/oracle-apex-5.1-interactive-grid.png" alt="oracle apex 5.1 interactive grid" width="1008" height="651" srcset="https://www.insum.ca/wp-content/uploads/2017/02/oracle-apex-5.1-interactive-grid.png 1008w, https://www.insum.ca/wp-content/uploads/2017/02/oracle-apex-5.1-interactive-grid-300x194.png 300w, https://www.insum.ca/wp-content/uploads/2017/02/oracle-apex-5.1-interactive-grid-768x496.png 768w, https://www.insum.ca/wp-content/uploads/2017/02/oracle-apex-5.1-interactive-grid-880x568.png 880w, https://www.insum.ca/wp-content/uploads/2017/02/oracle-apex-5.1-interactive-grid-450x291.png 450w" sizes="(max-width: 1008px) 100vw, 1008px" /></p> <p>&nbsp;</p> <h2>Developer Productivity</h2> <p><strong>Patrick Cimolini</strong></p> <p>I love the fact that we can now customize the position of the developer tabs by dragging and dropping the tabs without corrupting my browser with yet another extension. On a large monitor, this reduces the amount of mouse and eye movement during development. For me, this saves time and reduces eye strain.</p> <p>&nbsp;</p> <h2>REST services to retrieve Application Express statistics</h2> <p><strong>Francis Mignault</strong></p> <p>There are some new features that are not major, but that are very interesting and useful. In APEX 5.1, it is now possible to get statistics from your APEX environment using REST services. This can be particularly useful for cloud environments.</p> <p>To turn this option on, go to the <a href="http://docs.oracle.com/database/apex-5.1/AEAPI/Using-REST-Administration-Interface-API.htm#AEAPI-GUID-9C4E35A9-E312-4242-BC76-C3D38956BD10">REST Administration interface section</a> in the instance administration (internal) workspace.</p> <p>This will surely be used for other reports or functionality in future releases. And, it is secure using OAuth2 for the communication to the REST services.</p> <p><img class="alignnone size-full wp-image-7302" src="https://www.insum.ca/wp-content/uploads/2017/02/oracle-apex-5.1-rest-administration.png" alt="oracle apex 5.1 rest administration" width="1134" height="782" srcset="https://www.insum.ca/wp-content/uploads/2017/02/oracle-apex-5.1-rest-administration.png 1134w, https://www.insum.ca/wp-content/uploads/2017/02/oracle-apex-5.1-rest-administration-300x207.png 300w, https://www.insum.ca/wp-content/uploads/2017/02/oracle-apex-5.1-rest-administration-768x530.png 768w, https://www.insum.ca/wp-content/uploads/2017/02/oracle-apex-5.1-rest-administration-1024x706.png 1024w, https://www.insum.ca/wp-content/uploads/2017/02/oracle-apex-5.1-rest-administration-880x607.png 880w, https://www.insum.ca/wp-content/uploads/2017/02/oracle-apex-5.1-rest-administration-450x310.png 450w" sizes="(max-width: 1134px) 100vw, 1134px" /></p> <p>&nbsp;</p> <h2>Submitting Pages &amp; Page Validation</h2> <p><strong>Martin D&#8217;Souza</strong></p> <p>In the past, when users submitted a page and a validation failed the page would be reloaded and the error message was displayed. This is how most web applications work however it does have some negative side effects such as:</p> <ul> <li>Page has to reload and re-run reports</li> <li>If a password field or a file uploaded then their values would be reset and users would need to re-enter them along with fixing the validation</li> </ul> <p>Starting in APEX 5.1, the default behaviour for submitting pages has changed. Instead of reloading the page for failed validations, an AJAX request is made to first validate and then process the page. If any validations fail or errors occur as part of the page processes, then the error message(s) is returned and displayed to the user. During this entire process the page has not been reloaded so it reduces an unnecessary page load and preserves all field values for the user.</p> <p><iframe src="https://www.youtube.com/embed/NKowYEeTchs" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p> <p>If you’re upgrading an existing application, you’ll need to change the <em>Reload on Submit</em> page option to <em>Only for Success</em> to enable this feature.</p> <p><img class="alignnone size-full wp-image-7303" src="https://www.insum.ca/wp-content/uploads/2017/02/oracle-apex-5.1-submit-button.png" alt="oracle apex 5.1 submit button" width="898" height="440" srcset="https://www.insum.ca/wp-content/uploads/2017/02/oracle-apex-5.1-submit-button.png 898w, https://www.insum.ca/wp-content/uploads/2017/02/oracle-apex-5.1-submit-button-300x147.png 300w, https://www.insum.ca/wp-content/uploads/2017/02/oracle-apex-5.1-submit-button-768x376.png 768w, https://www.insum.ca/wp-content/uploads/2017/02/oracle-apex-5.1-submit-button-880x431.png 880w, https://www.insum.ca/wp-content/uploads/2017/02/oracle-apex-5.1-submit-button-450x220.png 450w" sizes="(max-width: 898px) 100vw, 898px" /></p> <p>&nbsp;</p> <h2>New APIs</h2> <p><strong>Vincent Morneau</strong></p> <p>I really like how Oracle extended the <a href="http://docs.oracle.com/cd/E71588_01/AEAPI/toc.htm">Application Express APIs</a> in APEX 5.1. We benefit from new features like the switch component (APEX_ITEM.SWITCH) and other packages like APEX_REGION, but my personal favorites are the enhancements to the JavaScript APIs. There are so much useful client-side utilities now, just have a look at the <em>apex.page</em> namespace where you can declaratively handle page validations, or <em>apex.region</em> that allows you to quickly refresh a region in a single line of code. And <em>apex.server</em> implementing JavaScript promises for the AJAX calls is so much win! And there is so much more too.</p> <p><img class="alignright wp-image-7310" src="https://www.insum.ca/wp-content/uploads/2017/02/joel-kallman-294x300.jpg" alt="joel kallman" width="225" height="229" srcset="https://www.insum.ca/wp-content/uploads/2017/02/joel-kallman-294x300.jpg 294w, https://www.insum.ca/wp-content/uploads/2017/02/joel-kallman-768x782.jpg 768w, https://www.insum.ca/wp-content/uploads/2017/02/joel-kallman-450x458.jpg 450w, https://www.insum.ca/wp-content/uploads/2017/02/joel-kallman.jpg 848w" sizes="(max-width: 225px) 100vw, 225px" /></p> <blockquote><p>Joel Kallman, Senior Director, Software Development at Oracle, says it best, “Oracle Application Express 5.1 is a great leap forward in end user productivity and introduces powerful new declarative features, enabling you to develop, design and deploy beautiful, responsive, database-driven desktop and mobile applications using only a browser.”</p></blockquote> <p>&nbsp;</p> <p>Consider upgrading to 5.1 to take advantage of these new updates. <a href="http://www.oracle.com/technetwork/developer-tools/apex/downloads/index.html">Download Oracle Application Express 5.1 here</a>.</p> <p>There you have it. For a supposed &#8220;minor&#8221; release, the APEX Dev Team has delivered in a major way. If this article has you thinking about moving to APEX 5.1, give us a call. We&#8217;d love to add you to our list of satisfied customers. Already on APEX 5.1? Share some of your favorite features by leaving a comment!</p> <p>The post <a rel="nofollow" href="https://www.insum.ca/why-you-should-upgrade-to-oracle-apex-5-1/">Why you should upgrade to Oracle APEX 5.1</a> appeared first on <a rel="nofollow" href="https://www.insum.ca">Insum</a>.</p> Monty Latiolais https://www.insum.ca/?p=7300 Fri Feb 17 2017 13:03:47 GMT-0500 (EST) Women In Technology Scholarship - Now Accepting Applications http://www.odtug.com/p/bl/et/blogaid=676&source=1 ODTUG is pleased to announce the third annual ODTUG Women in Technology Scholarship program. The scholarship recipient will be awarded a complimentary pass to ODTUG Kscope17 and will be expected to participate in a WIT event at the conference.We are looking for candidates to represent ODTUG and se ODTUG http://www.odtug.com/p/bl/et/blogaid=676&source=1 Fri Feb 17 2017 08:51:24 GMT-0500 (EST) ODTUG Kscope17 Deep Dives http://www.odtug.com/p/bl/et/blogaid=675&source=1 ODTUG Kscope17 Deep Dives AnnouncedJoin us for Thursday Deep Dives, where you can take the plunge and participate in expert panels or get an in-depth look at a concept or tool you've been waiting to explore.Check out the Deep Dives:APEXBIDatabaseEssbaseEPM InfrastructureFinancial ClosePlann ODTUG http://www.odtug.com/p/bl/et/blogaid=675&source=1 Fri Feb 17 2017 08:46:59 GMT-0500 (EST) How to Run Remote SQL Scripts in SQLcl http://www.talkapex.com/2017/02/how-to-run-remote-sql-scripts-in-sqlcl/ <p>Over the past few years of developing open source PL/SQL tools I’ve learned that one of the key things to make a project successful is have a frictionless install process. Node.js does this very well with their Node Package Manager (<code>npm</code>). Currently there is no largely adopted solution like <code>npm</code> for Oracle tools so one must usually provide a downloadable zip file containing the code along with installation instructions.</p> <p>Recently I found out that <a href="http://www.oracle.com/technetwork/developer-tools/sqlcl/overview/index.html" target="_blank" rel="external">SQLcl</a> (and I think <a href="http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html" target="_blank" rel="external">SQL*Plus 12.1</a>) support running remote SQL scripts. The following is an example of running a remote script from SQLcl:</p> <figure class="highlight"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">SQL&gt; @https://gist.githubusercontent.com/martindsouza/91742f28c39ed2d41d35d80b6c4cc4c1/raw/d0f28ab7e8af5f64629ad480bad570764cece543/test.sql</div><div class="line">hello from github</div><div class="line">SQL&gt;</div></pre></td></tr></table></figure> <p>The above script is a very simple one: <code>prompt hello from github</code> which can be adapted to contain a full install process.</p> <p>The nice thing about running remote SQL scripts is that no ACL settings are required on the server nor SSL certificates since the client (i.e. your machine) is making the web request. The bad thing about this is that it opens the door for a lot of vulnerability potentials. <strong>It’s recommended to always review the script before running it.</strong></p> Martin Giffy D'Souza http://www.talkapex.com/2017/02/how-to-run-remote-sql-scripts-in-sqlcl/ Thu Feb 16 2017 20:29:09 GMT-0500 (EST) In Real Estate it's Location, Location, Location - In Startups it's all about Sales, Sales, Sales http://feedproxy.google.com/~r/blogspot/fXPoB/~3/o42zSEFoy8s/in-real-estate-its-location-location.html <div style="text-align: justify;">Sure, you could argue that marketing is important or execution or support or product quality, but when it comes down to what you really need to focus on, it's all about sales. &nbsp;You have to have a high quality product to sell, you certainly need to be able to support it, and it has to be scaleable, but if you don't have customers, you won't have a business.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">I've built a number of software as a service (SaaS) businesses from the ground up. &nbsp;It's hard work! &nbsp;One of my favorite best practices, like in the lean startup is getting to your MVP (minimum viable product) as quickly as you can. &nbsp;It's great to hear prospects saying no to certain things and yes to others. &nbsp;Once you have an MVP and your initial customers, you know exactly where to improve your product, what requires your support and ultimately how to sell to more customers as well as how to sell more to your existing customer base.</div><div style="text-align: justify;"><a href="http://www.drumfiress.com/" target="_blank"><br /></a></div><div style="text-align: justify;"><a href="http://www.drumfiress.com/" target="_blank">Drumfire Sales Search</a> (www.drumfiress.com) &nbsp;solves the sales equation for you with process and people. &nbsp;In this blog post, I've outlined 6 businesses that we've worked with and the approach we took from start to finish. &nbsp;Generally speaking, the outline of our approach/process is here.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">This video walks through the process with a short explainer video:<br /><br /></div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/_2uYQrCmy2k/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/_2uYQrCmy2k?feature=player_embedded" width="320"></iframe></div><div class="separator" style="clear: both; text-align: center;"><br /></div><h2 style="text-align: justify;">GAME PLAN</h2><div style="text-align: justify;">Step 1 is always the assessment. &nbsp;It's important to build out the game plan, which often involves the following steps. &nbsp;Your business might know and understand your value proposition. &nbsp;You might know exactly who your ideal / target customer is too. &nbsp;This assessment is key to your sales success. &nbsp;Our typical steps to establish the game plan include:</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">1.<span class="Apple-tab-span" style="white-space: pre;"> </span>Value proposition</div><div style="text-align: justify;">2.<span class="Apple-tab-span" style="white-space: pre;"> </span>Ideal/Targeted customer</div><div style="text-align: justify;">3.<span class="Apple-tab-span" style="white-space: pre;"> </span>Identify decision makers and method</div><div style="text-align: justify;">4.<span class="Apple-tab-span" style="white-space: pre;"> </span>Prospecting strategy</div><div style="text-align: justify;">5.<span class="Apple-tab-span" style="white-space: pre;"> </span>Go to market plan</div><div style="text-align: justify;">6.<span class="Apple-tab-span" style="white-space: pre;"> </span>Establish pricing</div><h2 style="text-align: justify;">REQUIRED TOOLS</h2><div style="text-align: justify;">Tools are required to sell your product or service. &nbsp;Once you know who you're selling to, you need get your message down. &nbsp;As Mark Twain said, it takes a lot of time to write a short letter, just as it takes a lot of time to get your elevator pitch down. &nbsp;Summarizing what you do isn't easy. &nbsp;How quickly can you summarize what you do? &nbsp;In my days of owning an Oracle consulting (or professional services) firm, my early message was very complicated and confused my early prospects. &nbsp;As time went on, we shortened our elevator pitch. &nbsp;In the end, it was pretty simple - we were "Oracle Experts." &nbsp;I would often say to the CEO of a company, "if you hear someone in your company mention Oracle and a challenge they are having, please call me." &nbsp;That message worked. &nbsp;Having the proper materials is important as is having a CRM that allows you to track and monitor your sales activity. &nbsp;Some of the tools we help you develop include:</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">1.<span class="Apple-tab-span" style="white-space: pre;"> </span>Develop elevator speech</div><div style="text-align: justify;">2.<span class="Apple-tab-span" style="white-space: pre;"> </span>Marketing, messaging and presentations</div><div style="text-align: justify;">3.<span class="Apple-tab-span" style="white-space: pre;"> </span>Select and customize appropriate CRM</div><div style="text-align: justify;">4.<span class="Apple-tab-span" style="white-space: pre;"> </span>Identify individual sales tools</div><div style="text-align: justify;">5.<span class="Apple-tab-span" style="white-space: pre;"> </span>Sales training</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">At Drumfire, we have our own proprietary solution that will help seed your prospect base if your customers are businesses. &nbsp;It's called NorthStar and it's evolved over the last 20 years. &nbsp;Back in the early days of NorthStar, I used it to find companies who were running Oracle's web server. &nbsp;Today it's used to find businesses in any business category and then to read through all of the websites pulling key information about competitors, specific terms, email addresses and more. &nbsp;There will be more information on Northstar in the examples below.</div><h2 style="text-align: justify;">TEAM</h2><div style="text-align: justify;">Drumfire's origins revolve around the staffing industry. &nbsp;You will have short and long term requirements around sales in your business. &nbsp;You might need to establish regions, which we can help with. &nbsp;Maybe you're taking your first products to market and you need to find those first team members that can sell your MVP. &nbsp;Team makeups change over time. &nbsp;Here are some of the steps we help you with around your team:</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">1.<span class="Apple-tab-span" style="white-space: pre;"> </span>Determine long term hiring plan to include regions and levels</div><div style="text-align: justify;">2.<span class="Apple-tab-span" style="white-space: pre;"> </span>Identify candidate makeup</div><div style="text-align: justify;">3.<span class="Apple-tab-span" style="white-space: pre;"> </span>Job descriptions and comp plans&nbsp;</div><div style="text-align: justify;">4.<span class="Apple-tab-span" style="white-space: pre;"> </span>Have quotas in place for every level</div><div style="text-align: justify;">5.<span class="Apple-tab-span" style="white-space: pre;"> </span>Go to market recruitment plan</div><div style="text-align: justify;"><br /></div><h2 style="text-align: justify;">EXECUTION</h2><div style="text-align: justify;">Focus is your number one priority. &nbsp;Scalable execution is key to your success. &nbsp;Success can easily hide a lack of focus and execution. &nbsp;In my Oracle consulting business, when we didn't know and understand our pipeline (in our early days), we got caught with a lack of backlog. &nbsp;When the "cliff" hits your business, it can be a real surprise. &nbsp;We help you understand the importance of having strong visability to your pipeline. &nbsp;We also feed your pipeline with prospects so you constantly have new prospects to call on.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">1.<span class="Apple-tab-span" style="white-space: pre;"> </span>Create pipeline report</div><div style="text-align: justify;">2.<span class="Apple-tab-span" style="white-space: pre;"> </span>Integrate and align sales objectives with corporate objectives</div><div style="text-align: justify;">3.<span class="Apple-tab-span" style="white-space: pre;"> </span>Present to potential clients</div><div style="text-align: justify;">4.<span class="Apple-tab-span" style="white-space: pre;"> </span>Negotiate</div><div style="text-align: justify;">5.<span class="Apple-tab-span" style="white-space: pre;"> </span>Deliver</div><div style="text-align: justify;"><br /></div><h2 style="text-align: justify;">NorthStar</h2><div>As mentioned above, NorthStar is our software that finds businesses matching your target customer criteria.</div><div><br /></div><div>Here are a couple of videos that explain NorthStar in a bit more detail:</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/jQzX1TLPuSM/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/jQzX1TLPuSM?feature=player_embedded" width="320"></iframe></div><div class="separator" style="clear: both; text-align: center;"></div><div><br /></div><div style="text-align: justify;">Here's a specific example of NorthStar in action for a company with an irrigation solution like Nest:</div><div style="text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/Ib2c4b7ihwc/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/Ib2c4b7ihwc?feature=player_embedded" width="320"></iframe></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">And one last video, which explains it for an imaginary new pool product:</div><div style="text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/Iq21zW3YRLs/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/Iq21zW3YRLs?feature=player_embedded" width="320"></iframe></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Let me explain the approach we take to help you find your customers. &nbsp;I've provided examples for 6 different business segments:</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">1. Staffing Firms</div><div style="text-align: justify;">&nbsp; &nbsp; a. Healthcare</div><div style="text-align: justify;">&nbsp; &nbsp; b. Oil and Gas</div><div style="text-align: justify;">2. Real Estate Infomercial</div><div style="text-align: justify;">3. Cannabis Regulatory Compliance Business</div><div style="text-align: justify;">4. Nest for Irrigation<br />5. Virtual Yoga Business<br />6. Rehab Marketing Firm</div><div style="text-align: justify;"><div style="font-family: times; font-style: normal; font-weight: normal; letter-spacing: normal; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><div style="color: black; margin: 0px;"><br /></div></div></div><div style="text-align: justify;">Sure, we have databases full of companies and email addresses, but we typically search the web "right now" to find your prospects and then we read through every single website looking for keywords, competitors, and more. &nbsp;This takes time and resources. &nbsp;It can take as little as a couple of days and as much as a month. &nbsp;And...NorthStar continues to run regularly to find new prospects for you month after month. &nbsp;You'll get access to your NorthStar dashboard and the full platform as you'll see below.<br /><br /></div><h3 style="text-align: justify;"><span style="font-size: large;">Staffing Firms</span></h3><h3 style="text-align: justify;"><span style="font-size: small; font-weight: normal;">Let's say you own (or run sales/bus dev for) a staffing firm. &nbsp;You probably know exactly what types of companies you're calling on every day. &nbsp;How do you find/identify those companies? &nbsp;Do you care about the industry they are in? &nbsp;Revenue metrics? &nbsp;Number of employees? &nbsp;Most staffing firms specialize in a niche from IT to engineering to sales to you name it. &nbsp;Let's look at 2 examples of companies that we used NorthStar to find potential clients. &nbsp;These prospects get fed right into the CRM and MAS systems. &nbsp;What's most important to you? &nbsp;Do you need a phone number? &nbsp;An email address? &nbsp;The head of HR?</span><br /><div style="font-weight: normal;"><span style="font-size: large;"><br /></span></div><div style="font-size: medium;"><i><span style="font-size: large;">Healthcare Staffing</span></i></div><div style="font-size: medium;"><span style="font-size: small; font-weight: normal;">How many companies in the US are based around healthcare? &nbsp;What are the categories that they group themselves into?</span></div><div style="font-size: medium;"><span style="font-size: small; font-weight: normal;"><br /></span></div><div style="font-size: medium;"><span style="font-weight: normal;"><span style="font-size: small;"><span style="font-weight: normal;">We ran NorthStar looking for businesses in "healthcare." We find these businesses "now" (i.e. it's not a canned list of businesses - it changes every single day. &nbsp;We harvest them by zip code. &nbsp;Pulling the tip 10% of the zip codes (which is typically covers about 80% of the businesses) we found about 200,000 (195,670&nbsp;to be exact) businesses around the US that identify themselves as being in healthcare. &nbsp;They group themselves into a number of categories (many are grouped into multiple categories) as you see here:</span></span></span></div><div style="font-size: medium;"><span style="font-weight: normal;"><br /></span></div><div><span style="font-size: small;"><span style="font-weight: normal;"><table><tbody></tbody></table><table border="2"><tbody><tr><th>CATEGORY</th><th>PROSPECTS</th></tr><tr><td>Doctor &amp; Clinic</td><td>24575</td></tr><tr><td>Home Health Care Service &amp; Supply</td><td>13820</td></tr><tr><td>General Practice Medicine;Doctor &amp; Clinic;Neurology</td><td>9322</td></tr><tr><td>Doctor &amp; Clinic;Neurology</td><td>7311</td></tr><tr><td>Car Insurance;Insurance;Life Insurance;Home Insurance</td><td>5554</td></tr><tr><td>Home Health Care Service &amp; Supply;Doctor &amp; Clinic</td><td>4876</td></tr><tr><td>Long-Term &amp; Hospice Care</td><td>4826</td></tr><tr><td>Senior Service;Long-Term &amp; Hospice Care</td><td>2624</td></tr><tr><td>Home Health Care Service &amp; Supply;Long-Term &amp; Hospice Care</td><td>2619</td></tr><tr><td>Home Health Care Service &amp; Supply;Business Alarm Systems</td><td>2520</td></tr></tbody></table><br /></span></span><br /><div style="font-size: medium;"><div style="font-size: medium;"><span style="font-size: small;"><span style="font-weight: normal;"><span style="font-weight: normal;">It's interesting to see that the top group are Doctors and Clinics - they are just more than 10% of the companies we found. &nbsp;When you put this data onto a map, it's very interesting to see how your prospects are distributed across the US. &nbsp;You might have preconceived notions about where your prospects are. &nbsp;Are most of them in the states with the most people (NY, CA, IL) or are they not? &nbsp;Here's the distribution by state - notice how low NY is!</span></span></span></div><div style="font-size: medium;"><span style="font-size: small;"><span style="font-weight: normal;"><span style="font-weight: normal;"><br /></span></span></span></div><div style="font-size: medium;"><span style="font-size: small;"><span style="font-weight: normal;"><span style="font-weight: normal;"></span></span></span></div><table border="0" cellpadding="0" cellspacing="0" class="u-Report u-Report--stretch" style="background-color: white; border-collapse: collapse; border-spacing: 0px; box-sizing: border-box; color: black; empty-cells: show; font-family: &quot;helvetica neue&quot;, &quot;segoe ui&quot;, helvetica, arial, sans-serif; font-size: 13.3333px; table-layout: auto; width: 1643px;" summary=""><tbody style="box-sizing: border-box;"><tr style="box-sizing: border-box;"><th id="STATE" style="-webkit-font-smoothing: antialiased; background-color: #f4f4f4; border-left: 1px solid rgb(240, 240, 240); border-top: 1px solid rgb(240, 240, 240); box-sizing: border-box; color: #404040; padding: 12px; vertical-align: bottom;">STATE</th><th id="PROSPECTS" style="-webkit-font-smoothing: antialiased; background-color: #f4f4f4; border-left: 1px solid rgb(240, 240, 240); border-right: 1px solid rgb(240, 240, 240); border-top: 1px solid rgb(240, 240, 240); box-sizing: border-box; color: #404040; padding: 12px; vertical-align: bottom;">PROSPECTS</th></tr><tr style="box-sizing: border-box;"><td headers="STATE" style="background-color: #fafafa; border-left: 1px solid rgb(240, 240, 240); border-top: 1px solid rgb(240, 240, 240); box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">CA</td><td headers="PROSPECTS" style="background-color: #fafafa; border-left: 1px solid rgb(240, 240, 240); border-right: 1px solid rgb(240, 240, 240); border-top: 1px solid rgb(240, 240, 240); box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">19659</td></tr><tr style="box-sizing: border-box;"><td headers="STATE" style="border-left: 1px solid rgb(240, 240, 240); border-top: 1px solid rgb(240, 240, 240); box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">FL</td><td headers="PROSPECTS" style="border-left: 1px solid rgb(240, 240, 240); border-right: 1px solid rgb(240, 240, 240); border-top: 1px solid rgb(240, 240, 240); box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">15172</td></tr><tr style="box-sizing: border-box;"><td headers="STATE" style="background-color: #fafafa; border-left: 1px solid rgb(240, 240, 240); border-top: 1px solid rgb(240, 240, 240); box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">TX</td><td headers="PROSPECTS" style="background-color: #fafafa; border-left: 1px solid rgb(240, 240, 240); border-right: 1px solid rgb(240, 240, 240); border-top: 1px solid rgb(240, 240, 240); box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">15078</td></tr><tr style="box-sizing: border-box;"><td headers="STATE" style="border-left: 1px solid rgb(240, 240, 240); border-top: 1px solid rgb(240, 240, 240); box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">IL</td><td headers="PROSPECTS" style="border-left: 1px solid rgb(240, 240, 240); border-right: 1px solid rgb(240, 240, 240); border-top: 1px solid rgb(240, 240, 240); box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">9867</td></tr><tr style="box-sizing: border-box;"><td headers="STATE" style="background-color: #fafafa; border-left: 1px solid rgb(240, 240, 240); border-top: 1px solid rgb(240, 240, 240); box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">NC</td><td headers="PROSPECTS" style="background-color: #fafafa; border-left: 1px solid rgb(240, 240, 240); border-right: 1px solid rgb(240, 240, 240); border-top: 1px solid rgb(240, 240, 240); box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">9666</td></tr><tr style="box-sizing: border-box;"><td headers="STATE" style="border-left: 1px solid rgb(240, 240, 240); border-top: 1px solid rgb(240, 240, 240); box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">OH</td><td headers="PROSPECTS" style="border-left: 1px solid rgb(240, 240, 240); border-right: 1px solid rgb(240, 240, 240); border-top: 1px solid rgb(240, 240, 240); box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">9076</td></tr><tr style="box-sizing: border-box;"><td headers="STATE" style="background-color: #fafafa; border-left: 1px solid rgb(240, 240, 240); border-top: 1px solid rgb(240, 240, 240); box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">NY</td><td headers="PROSPECTS" style="background-color: #fafafa; border-left: 1px solid rgb(240, 240, 240); border-right: 1px solid rgb(240, 240, 240); border-top: 1px solid rgb(240, 240, 240); box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">8317</td></tr></tbody></table><div style="font-size: medium;"><span style="font-size: small;"><span style="font-weight: normal;"><span style="font-weight: normal;"><br /></span></span></span><span style="font-size: small;"><span style="font-weight: normal;"><span style="font-weight: normal;">Here's another look at the data on a map:</span></span></span><br /><span style="font-size: small;"><span style="font-size: x-small;"><span style="font-weight: normal;"><span style="font-weight: normal;"><br /></span></span></span></span><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-n4I2f6VLVvU/WKUgFjhezCI/AAAAAAAAGm4/CY5CRaRmQLsvJsAnI8tnPf7ihEk9qknOwCLcB/s1600/Screen%2BShot%2B2017-02-15%2Bat%2B8.43.41%2BPM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-size: small;"><img border="0" height="192" src="https://3.bp.blogspot.com/-n4I2f6VLVvU/WKUgFjhezCI/AAAAAAAAGm4/CY5CRaRmQLsvJsAnI8tnPf7ihEk9qknOwCLcB/s320/Screen%2BShot%2B2017-02-15%2Bat%2B8.43.41%2BPM.png" width="320" /></span></a></div><span style="font-size: small;"><span style="font-size: x-small;"><span style="font-weight: normal;"><span style="font-weight: normal;"><br /></span></span></span><span style="font-size: x-small;"><span style="font-weight: normal;"><span style="font-weight: normal;"><br /></span></span></span></span></div><div style="font-size: medium;"><span style="font-size: small;"><span style="font-weight: normal;"><span style="font-weight: normal;">We are able to pull a lot of important information about each of your prospects, which includes:</span></span></span></div><div style="font-size: medium;"></div><ul><li><span style="font-size: small;">Company Name</span></li><li><span style="font-size: small;">Full Address (Address, City, State, Zip)</span></li><li><span style="font-size: small;">Phone Number</span></li><li><span style="font-size: small;">Latitude and Longitude</span></li><li><span style="font-size: small;">Ratings and Reviews</span></li><li><span style="font-size: small;">Website</span></li></ul><span style="font-size: small;"><br /></span><br /><div style="font-size: medium;"><span style="font-size: small;"><span style="font-weight: normal;"><span style="font-weight: normal;">We use the website's URL to spider through their website to determine things such as:</span></span></span></div><span style="font-size: small;"><br /></span><br /><ul><li><span style="font-size: small;">Email Addresses on their website</span></li><li><span style="font-size: small;">Competitor Mentions</span></li><li><span style="font-size: small;">Specific Terms on their website</span></li><li><span style="font-size: small;">Social Media Platforms they are on (Facebook, Twitter, Pinterest, Google Plus, etc)</span></li><li><span style="font-size: small;">Is their website mobile enabled?</span></li><li><span style="font-size: small;">Do they have a "current" (HTML5) website?</span></li><li><span style="font-size: small;">Do they mention your company?</span></li></ul><div><span style="font-size: small;"><span style="font-weight: normal;"><br /></span></span><span style="font-size: small;"><span style="font-weight: normal;"><br /></span></span><span style="font-size: small;"><span style="font-weight: normal;">There is SO much information that we can glean&nbsp;from a company's website! &nbsp;Use your imagination and let NorthStar do the work! &nbsp;This client asked us to get them a list of companies specializing in revenue cycle management. &nbsp;That's an easy term to search for. &nbsp;We added "back office" into our search terms too since that's sometimes used. &nbsp;The category did provide us with just over 300 people in the billing category. &nbsp;These terms are even more effective at narrowing down your prospects!</span></span></div><div><span style="font-size: small;"><span style="font-weight: normal;"><br /></span></span></div><div><span style="font-size: small;"><span style="font-weight: normal;">Here's what their dashboard looks like:</span></span></div><div><span style="font-size: small;"><span style="font-weight: normal;"><br /></span></span></div><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-ztk7fwYUDjg/WKPOt2oQSDI/AAAAAAAAGmk/Ns6MA_yrrjUlYTBUwL2bCF794zm76vAJwCLcB/s1600/Screen%2BShot%2B2017-02-14%2Bat%2B8.44.09%2BPM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-size: small;"><img border="0" height="155" src="https://4.bp.blogspot.com/-ztk7fwYUDjg/WKPOt2oQSDI/AAAAAAAAGmk/Ns6MA_yrrjUlYTBUwL2bCF794zm76vAJwCLcB/s320/Screen%2BShot%2B2017-02-14%2Bat%2B8.44.09%2BPM.png" width="320" /></span></a></div><div><span style="font-size: small;"><span style="font-weight: normal;"><br /></span></span></div><div><span style="font-size: small;"><span style="font-weight: normal;">Our clients (hopefully you're one of them) can drill into information any way you can dream of. &nbsp;</span></span></div><div><span style="font-size: large;"><br /></span></div></div><span style="font-size: large;"><span style="font-size: x-small;"><span style="font-weight: normal;"></span></span></span><br /><div style="font-size: medium;"><span style="font-size: x-small;"><span style="font-size: large; font-weight: normal;"><i>Water, Oil and Gas Engineer Staffing</i></span></span><br /><div style="font-size: medium;"><span style="font-size: small;"><span style="font-weight: normal;"><i><br /></i></span></span></div></div><span style="font-size: small;"><span style="font-weight: normal;"></span></span><br /><div style="font-size: medium;"><div style="font-size: medium;"><span style="font-size: small;"><span style="font-weight: normal;">Another client asked us to find all of the power plants in the US that mention gas turbines on their website or they mention the M501J gas turbine. &nbsp;That's getting pretty specific isn't it! &nbsp;If you want to know exactly who you should be calling on based on talent you currently have available or based on a demand surge, how else could you find this type of information?</span></span></div><div style="font-size: medium; font-weight: normal;"><span style="font-size: small;"><span style="font-weight: normal;"><br /></span></span></div><div style="font-size: medium; font-weight: normal;"><span style="font-size: small;"><span style="font-weight: normal;">Here's a look at their dashboard that we provided them access to:</span></span></div><div class="separator" style="clear: both; font-size: medium; font-weight: normal; text-align: center;"><span style="font-size: small;"><span style="font-weight: normal;"><br /></span></span></div><div style="font-size: medium; font-weight: normal;"><span style="font-size: small;"><span style="font-weight: normal;"><br /></span></span></div><div class="separator" style="clear: both; font-size: medium; font-weight: normal; text-align: center;"><span style="font-size: small;"><span style="font-weight: normal;"><a href="https://1.bp.blogspot.com/-irHOGMRe2kk/WKUhUzzBbTI/AAAAAAAAGnE/stOTwRlj-z4fGGMaIsAGAUm4t2T-My2IACLcB/s1600/Screenshot%2B2017-02-15%2B20.49.12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="165" src="https://1.bp.blogspot.com/-irHOGMRe2kk/WKUhUzzBbTI/AAAAAAAAGnE/stOTwRlj-z4fGGMaIsAGAUm4t2T-My2IACLcB/s320/Screenshot%2B2017-02-15%2B20.49.12.png" width="320" /></a></span></span></div><div style="font-size: medium; font-weight: normal;"><span style="font-size: small;"><span style="font-weight: normal;"><br /></span></span></div><div style="font-size: medium;"><span style="font-size: small;"><span style="font-weight: normal;"><span style="font-weight: normal;">You can see that Texas has the most power plants (over 2,800) and Oklahoma is next with about 800 and then Colorado weighs in at 565. &nbsp;We loaded the 22,083 power plants into their database (with over 2,400 email addresses and over 13,000 websites of which over 2,600 of them were mobile or HTML5 websites and 1,700 had social media) and they were off to the races. &nbsp;We found about 50 power plants that mentioned gas turbines so they focused on those 50 first. &nbsp;We only found 1 power plant that mentioned the M501J, but 1 is better than none! &nbsp;Not every concept we come up with is going to pan out, but more pan out than not!</span></span></span></div></div><span style="font-size: small;"><span style="font-weight: normal;"></span></span><br /><h3><span style="font-size: x-small;"><span style="font-size: large; font-weight: normal;">Real Estate Infomercial</span></span></h3><span style="font-size: small;"><span style="font-weight: normal;"></span></span></div></h3><b><span style="font-size: small;"><span style="font-weight: normal;"></span></span></b><br /><h3 style="font-weight: normal; text-align: justify;"><span style="font-size: small;"><span style="font-weight: normal;"><span style="font-size: small; font-weight: normal;">The "Direct Response" (DR) world is an interesting world full of infomercials geared at getting to consumers, typically to buy their goods or services. &nbsp;The real estate world has had a number of people who focused on the DR space - many of them "bad" (i.e. they just wanted your money, not to really help you). &nbsp;A new entre into the DR space approached us about their business. &nbsp;One side is the B2C (business to consumer) side, which infomercials and other solutions like StarStar are excellent at helping. &nbsp;The other side of the business is that they plan to deliver their services through existing Realtors. &nbsp;In fact, the Realtors could be customers. &nbsp;Real estate agencies are registered businesses that we can identify with NorthStar.</span></span></span></h3><div><span style="font-size: small;"><span style="font-weight: normal;"><span style="font-size: small; font-weight: normal;"><br /></span></span></span></div><div>We ran a test to see how many agents we would find in the US. &nbsp;After processing about 25% of the zip codes (15,072 to be exact - out about 45k zips), we found 225,379&nbsp;companies. &nbsp;177,979 of them have "Real Estate Agent" in the category. &nbsp;Here are the top 10 categories:</div><div><br /></div><div><table border="0" cellpadding="0" cellspacing="0" class="u-Report u-Report--stretch" style="background-color: white; border-collapse: collapse; border-spacing: 0px; box-sizing: border-box; color: black; empty-cells: show; font-family: &quot;Helvetica Neue&quot;, &quot;Segoe UI&quot;, Helvetica, Arial, sans-serif; font-size: 13.3333px; table-layout: auto; width: 858px;" summary=""><tbody style="box-sizing: border-box;"><tr style="box-sizing: border-box;"><th id="CATEGORY" style="-webkit-font-smoothing: antialiased; background-color: #f4f4f4; border-color: rgb(240, 240, 240) rgb(232, 232, 232) rgb(232, 232, 232) rgb(240, 240, 240); border-image: initial; border-style: solid; border-width: 1px; box-sizing: border-box; color: #404040; padding: 12px; vertical-align: bottom;">CATEGORY</th><th id="COUNT(*)" style="-webkit-font-smoothing: antialiased; background-color: #f4f4f4; border-color: rgb(240, 240, 240) rgb(240, 240, 240) rgb(232, 232, 232); border-image: initial; border-style: solid; border-width: 1px; box-sizing: border-box; color: #404040; padding: 12px; vertical-align: bottom;">COUNT(*)</th></tr><tr style="box-sizing: border-box;"><td headers="CATEGORY" style="background-color: #fafafa; border-color: rgb(240, 240, 240) rgb(232, 232, 232) rgb(232, 232, 232) rgb(240, 240, 240); border-image: initial; border-style: solid; border-width: 1px; box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">Real Estate Agent</td><td headers="COUNT(*)" style="background-color: #fafafa; border-color: rgb(240, 240, 240) rgb(240, 240, 240) rgb(232, 232, 232); border-image: initial; border-style: solid; border-width: 1px; box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">71837</td></tr><tr style="box-sizing: border-box;"><td headers="CATEGORY" style="border-color: rgb(240, 240, 240) rgb(232, 232, 232) rgb(232, 232, 232) rgb(240, 240, 240); border-image: initial; border-style: solid; border-width: 1px; box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">Real Estate Agent;Commercial Property Management</td><td headers="COUNT(*)" style="border-color: rgb(240, 240, 240) rgb(240, 240, 240) rgb(232, 232, 232); border-image: initial; border-style: solid; border-width: 1px; box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">35252</td></tr><tr style="box-sizing: border-box;"><td headers="CATEGORY" style="background-color: #fafafa; border-color: rgb(240, 240, 240) rgb(232, 232, 232) rgb(232, 232, 232) rgb(240, 240, 240); border-image: initial; border-style: solid; border-width: 1px; box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">Real Estate Agent;Real Estate</td><td headers="COUNT(*)" style="background-color: #fafafa; border-color: rgb(240, 240, 240) rgb(240, 240, 240) rgb(232, 232, 232); border-image: initial; border-style: solid; border-width: 1px; box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">22403</td></tr><tr style="box-sizing: border-box;"><td headers="CATEGORY" style="border-color: rgb(240, 240, 240) rgb(232, 232, 232) rgb(232, 232, 232) rgb(240, 240, 240); border-image: initial; border-style: solid; border-width: 1px; box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">Real Estate</td><td headers="COUNT(*)" style="border-color: rgb(240, 240, 240) rgb(240, 240, 240) rgb(232, 232, 232); border-image: initial; border-style: solid; border-width: 1px; box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">6501</td></tr><tr style="box-sizing: border-box;"><td headers="CATEGORY" style="background-color: #fafafa; border-color: rgb(240, 240, 240) rgb(232, 232, 232) rgb(232, 232, 232) rgb(240, 240, 240); border-image: initial; border-style: solid; border-width: 1px; box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">Real Estate;Real Estate Agent</td><td headers="COUNT(*)" style="background-color: #fafafa; border-color: rgb(240, 240, 240) rgb(240, 240, 240) rgb(232, 232, 232); border-image: initial; border-style: solid; border-width: 1px; box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">4169</td></tr><tr style="box-sizing: border-box;"><td headers="CATEGORY" style="border-color: rgb(240, 240, 240) rgb(232, 232, 232) rgb(232, 232, 232) rgb(240, 240, 240); border-image: initial; border-style: solid; border-width: 1px; box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">Real Estate Agent;Property Management;Commercial Property Management</td><td headers="COUNT(*)" style="border-color: rgb(240, 240, 240) rgb(240, 240, 240) rgb(232, 232, 232); border-image: initial; border-style: solid; border-width: 1px; box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">3741</td></tr><tr style="box-sizing: border-box;"><td headers="CATEGORY" style="background-color: #fafafa; border-color: rgb(240, 240, 240) rgb(232, 232, 232) rgb(232, 232, 232) rgb(240, 240, 240); border-image: initial; border-style: solid; border-width: 1px; box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">Property Management;Commercial Property Management</td><td headers="COUNT(*)" style="background-color: #fafafa; border-color: rgb(240, 240, 240) rgb(240, 240, 240) rgb(232, 232, 232); border-image: initial; border-style: solid; border-width: 1px; box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">2255</td></tr><tr style="box-sizing: border-box;"><td headers="CATEGORY" style="border-color: rgb(240, 240, 240) rgb(232, 232, 232) rgb(232, 232, 232) rgb(240, 240, 240); border-image: initial; border-style: solid; border-width: 1px; box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">Real Estate Agent;Other Real Estate;Commercial Property Management</td><td headers="COUNT(*)" style="border-color: rgb(240, 240, 240) rgb(240, 240, 240) rgb(232, 232, 232); border-image: initial; border-style: solid; border-width: 1px; box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">2100</td></tr><tr style="box-sizing: border-box;"><td headers="CATEGORY" style="background-color: #fafafa; border-color: rgb(240, 240, 240) rgb(232, 232, 232) rgb(232, 232, 232) rgb(240, 240, 240); border-image: initial; border-style: solid; border-width: 1px; box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">Real Estate Agent;Property Management</td><td headers="COUNT(*)" style="background-color: #fafafa; border-color: rgb(240, 240, 240) rgb(240, 240, 240) rgb(232, 232, 232); border-image: initial; border-style: solid; border-width: 1px; box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">2096</td></tr><tr style="box-sizing: border-box;"><td headers="CATEGORY" style="border-color: rgb(240, 240, 240) rgb(232, 232, 232) rgb(232, 232, 232) rgb(240, 240, 240); border-image: initial; border-style: solid; border-width: 1px; box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">Real Estate Financing</td><td headers="COUNT(*)" style="border-color: rgb(240, 240, 240) rgb(240, 240, 240) rgb(232, 232, 232); border-image: initial; border-style: solid; border-width: 1px; box-sizing: border-box; color: #404040; padding: 8px 12px; transition: background-color 0.1s;">1976</td></tr></tbody></table></div><div style="font-weight: normal; text-align: justify;"><br /></div><div style="text-align: justify;">We figured that the Realtors that would move interest these guys are those who talk about REO, Fix and Flips, Short Sales, Investors, Buy Back, etc. on their website, so we searched for these terms. &nbsp;Sure enough, 4,295 of those businesses mention these terms. &nbsp;It's always important to be able to triage the businesses that you're going to call on first. &nbsp;If you say they have to mention one of these terms AND they need to promote their social media, the list is reduced to 2,362 agents of which only 1,925 have a mobile or current (HTML5) website. &nbsp;Multiply that number by 4 (since we've only processed about 25% of the country) and they will end up with about 8k agents to call on. &nbsp;That's nearly impossible without an autodialer like ConnectAndSell - after all, we have phone numbers for every single agent!<br /><br />Here's what the distribution looks like across the US:<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-eO1S7ea5W2w/WKY7QItPTII/AAAAAAAAGnk/e1v3Izstc-Ydb8kzuVlt6dMWwlr25caTQCLcB/s1600/Screenshot%2B2017-02-16%2B16.52.01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="195" src="https://2.bp.blogspot.com/-eO1S7ea5W2w/WKY7QItPTII/AAAAAAAAGnk/e1v3Izstc-Ydb8kzuVlt6dMWwlr25caTQCLcB/s320/Screenshot%2B2017-02-16%2B16.52.01.png" width="320" /></a></div><br /></div><span style="font-size: small;"><span style="font-weight: normal;"></span></span><br /><h3 style="font-weight: normal;"><span style="font-size: large;">Cannabis Regulatory Compliance Business</span></h3><h3 style="text-align: justify;"><span style="font-size: small;"><span style="font-weight: normal;">One of my good friends is in this business. &nbsp;They help the medical and recreational cannabis businesses keep current with their paperwork. &nbsp;We searched 3 different categories (cannabis, alternative clinics, and m</span><span style="font-size: xx-small;"><span style="font-weight: normal;">arijuana to find these businesses. &nbsp;We then searched each site for terms such as&nbsp;cannabis and&nbsp;marijuana. &nbsp;The most important piece of data for them at this point is an email address. &nbsp;They also wanted to know how many shops we could find in the US, but they wanted to start in Colorado. &nbsp;Overall we found&nbsp;6,447 email addresses. &nbsp;Limiting it down to Colorado, we came up with only 274 records. &nbsp;They said that calling doesn't work (the workers are too stoned), so an email is critical for them.</span></span></span></h3><div>Here's a breakdown of shops around the US:</div><div><span style="font-size: small;"><span style="font-weight: normal;"><br /></span></span></div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-Xda7iMeukyM/WKY_xqJWPuI/AAAAAAAAGns/DmMcJGePMFwHZuF0EDhHl9vH9TUvTJHaQCLcB/s1600/Screenshot%2B2017-02-16%2B17.11.33.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="207" src="https://1.bp.blogspot.com/-Xda7iMeukyM/WKY_xqJWPuI/AAAAAAAAGns/DmMcJGePMFwHZuF0EDhHl9vH9TUvTJHaQCLcB/s320/Screenshot%2B2017-02-16%2B17.11.33.png" width="320" /></a></div><div><span style="font-size: small;"><span style="font-weight: normal;"><br /></span></span></div><h3 style="font-weight: normal;"><span style="font-size: large;">Nest for Irrigation</span></h3><h3 style="font-size: medium; font-weight: normal; text-align: justify;"><span style="font-size: small; font-weight: normal;">One of the first clients to use NorthStar was a Denver-based company that has an irrigation (sprinkler system) timer like Nest (for the home thermostat). &nbsp;They had a theory that California, Colorado, Arizona, and Illinois would have the most irrigation specialists (sprinkler guys). &nbsp;Here's how it actually panned out:</span></h3><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-ih1DNBXe3So/WKZBWqbh37I/AAAAAAAAGn4/wYw5G61_nkIzd_2XwAGMig_thSIRtZGLgCLcB/s1600/Screenshot%2B2017-02-16%2B17.18.18.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://1.bp.blogspot.com/-ih1DNBXe3So/WKZBWqbh37I/AAAAAAAAGn4/wYw5G61_nkIzd_2XwAGMig_thSIRtZGLgCLcB/s320/Screenshot%2B2017-02-16%2B17.18.18.png" width="249" /></a></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">So California, Florida and Texas are the biggest states. &nbsp;Colorado, Arizona, Illinois, not so much. &nbsp;Setting up sales people across the country would likely require at least one person in each of these states.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">We also established a NorthStar scoring system from 1-16. &nbsp;Points were established for their social media presence, mentioning their competitors, mentioning them, if they talk about "low voltage" and more. &nbsp;Their dashboard allows them to move the dials to view the irrigation distribution across the country based on their NorthStar score.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Here's what the US looks like when we search out irrigation companies that have a NorthStar score of 8 or more that also mention "low voltage." &nbsp;It looks like we just removed most of the west coast doesn't it!</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-ZLTlRS0Wt_E/WKZCp9w5nzI/AAAAAAAAGoA/ifN-lViqCUog3FGSiMNdvyLel5tdqKSPACLcB/s1600/Screenshot%2B2017-02-16%2B17.23.52.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="168" src="https://2.bp.blogspot.com/-ZLTlRS0Wt_E/WKZCp9w5nzI/AAAAAAAAGoA/ifN-lViqCUog3FGSiMNdvyLel5tdqKSPACLcB/s320/Screenshot%2B2017-02-16%2B17.23.52.png" width="320" /></a></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">If we reduce the minimum score to 1 and remove the low voltage requirement, the US is very well covered:</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-_yIWFy5aqYc/WKZDW6iBmmI/AAAAAAAAGoE/6jLlPVQmlJYf844jADX71x76JN5ncHXkQCLcB/s1600/Screenshot%2B2017-02-16%2B17.26.27.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="166" src="https://4.bp.blogspot.com/-_yIWFy5aqYc/WKZDW6iBmmI/AAAAAAAAGoE/6jLlPVQmlJYf844jADX71x76JN5ncHXkQCLcB/s320/Screenshot%2B2017-02-16%2B17.26.27.png" width="320" /></a></div><div class="separator" style="clear: both; text-align: left;"><br /></div><h3><span style="font-size: x-small;"><span style="font-size: large; font-weight: normal;">Virtual Yoga Business</span></span></h3><span style="font-size: small;"><span style="font-weight: normal;"><b></b></span></span><br /><h3 style="font-weight: normal; text-align: justify;"><span style="font-size: small;"><span style="font-weight: normal;"><span style="font-size: small; font-weight: normal;">As many of you know, prior to this venture, I was in the subscription and transactional video on demand business. &nbsp;We had a number of clients in the fitness business. &nbsp;Subscription businesses are recurring revenue businesses that keep on giving (i.e. generating revenue) once you get customers signed up. &nbsp;In fact, if you have a $10/mo product and you add 10 new customers a day for a year, your ARR will be over $400k with a low churn rate. &nbsp;That's powerful!</span></span></span></h3><h3 style="font-weight: normal; text-align: justify;"><span style="font-size: small;"><span style="font-weight: normal;">Yoga businesses are typically recurring revenue businesses - people pay month after month. &nbsp;So why not create a subscription Yoga business that you can attend right from home? &nbsp;Why build your own Yoga studio to this? &nbsp;Why not just put cameras in existing Yoga studios and allow them to post their live video sessions for anyone in the world (who has a subscription) to attend the class?</span></span></h3><div style="font-weight: normal; text-align: justify;">Again, using NorthStar to find existing Yoga studios is easy enough! &nbsp;Maybe they want to see if the studio already has a video or DVD for sale. &nbsp;What else might they want to look for? &nbsp;Hopefully you're getting the picture here. &nbsp;NorthStar can help you triage your calling list to determine who to call and in what order.&nbsp;</div><span style="font-size: x-small;"><span style="font-weight: normal;"></span></span><br /><h3><span style="font-size: x-small;"><span style="font-weight: normal;"><span style="font-size: x-small;"><span style="font-size: large; font-weight: normal;">Rehab Marketing Firm</span></span></span></span></h3><span style="font-size: x-small;"><span style="font-weight: normal;"></span></span><br /><h3 style="font-weight: normal;"><span style="font-size: x-small;"><span style="font-weight: normal;"><div style="font-size: medium; text-align: justify;"></div><div style="font-size: 18.72px; text-align: justify;"><span style="font-size: small;"><span style="font-weight: normal;"></span></span><span style="font-size: small;"><span style="font-weight: normal;"></span></span></div></span></span></h3><span style="font-size: x-small;"><span style="font-weight: normal;"></span></span><br /><div style="font-weight: normal; text-align: justify;"><span style="font-size: x-small;"><span style="font-weight: normal;"><span style="font-size: small;"><span style="font-weight: normal;"><span style="font-family: Arial, Helvetica, sans-serif; font-size: small; font-weight: normal;">A marketing firm specializing in providing referrals for rehab centers, asked us to find the "good guys" in this business. &nbsp;Many "bad guys" enter this business and scam people for money. &nbsp;It's always difficult to imagine that families are tricked in their worst hours of darkness. &nbsp;It's easy enough to identify rehab centers around the US. &nbsp;However, they decided that they know the top 10 firms in the country that they are going to focus on first and then they will come back to us. &nbsp;We appreciate a focused sales approach.&nbsp;</span></span></span></span></span></div><span style="font-size: x-small;"><span style="font-weight: normal;"></span></span><br /><div style="font-weight: normal;"><h2><span style="font-size: xx-small;"><span style="font-size: x-large; font-weight: normal;">Summary</span></span></h2><div style="font-size: medium;"><span style="font-size: xx-small;"><span style="font-family: Arial, Helvetica, sans-serif; font-weight: normal;">As I stated in the title, it's all about sales in the end. &nbsp;The more sales you have, the more revenue you have and ultimately the more success you'll have. &nbsp;In the services business, each person that's billable is additional revenue. &nbsp;In the product business, each new sale is additional revenue. &nbsp;Let's go get some business together! &nbsp;Give us a call at&nbsp;303.223.4304 or visit us on the <a href="http://drumfiress.com/" target="_blank">web</a>. &nbsp;Or send us a note (through the website). &nbsp;We would LOVE to work with you and be successful together!</span></span><br /><div style="font-size: medium;"><span style="font-size: xx-small;"><span style="font-weight: normal;"><br /></span></span></div><div style="font-size: medium;"><span style="font-size: xx-small;"><span style="font-weight: normal;"><br /></span></span></div></div></div><span style="font-size: x-small;"><span style="font-weight: normal;"></span></span><img src="http://feeds.feedburner.com/~r/blogspot/fXPoB/~4/o42zSEFoy8s" height="1" width="1" alt=""/> Bradley D. Brown tag:blogger.com,1999:blog-5678424368747750223.post-4632692968502740121 Thu Feb 16 2017 19:32:00 GMT-0500 (EST) Cómo crear una Instancia de la Base de Datos Oracle en Amazon RDS - Parte 2 http://feedproxy.google.com/~r/DescubriendoElMundoDeOracle/~3/wqdNNW4xswI/como-crear-una-instancia-de-la-base-de_16.html En la primera parte de este artículo hemos visto cómo crear una cuenta en Amazon AWS para poder tener acceso al servicio RDS además de haber creado el usuario IAM. <br />Para ingresar a la consola de administrador de AWS, accedemos a la URL personalizada mediante el usuario IAM que hemos creado:<br /><ul><li>Cuenta: (nuestro alias)</li><li>Nombre de Usuario: (el usuario que creamos como administrador en el IAM)</li><li>Contraseña: ingresamos la contraseña del usuario IAM</li></ul><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-6YG-Vx6_Im0/WKYu5Kpi96I/AAAAAAAAB0A/x_ZSYxYro3AuyKn0_jKyPIaRhvB2HKa_gCLcB/s1600/img01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="148" src="https://2.bp.blogspot.com/-6YG-Vx6_Im0/WKYu5Kpi96I/AAAAAAAAB0A/x_ZSYxYro3AuyKn0_jKyPIaRhvB2HKa_gCLcB/s320/img01.jpg" width="320" /></a></div>Seguir leyendo <a href="http://www.toadworld.com/platforms/oracle/b/weblog/archive/2017/02/15/c-mo-crear-una-instancia-de-la-base-de-datos-oracle-en-amazon-rds-parte-2" target="_blank">AQUI</a><br /><br /><img src="http://feeds.feedburner.com/~r/DescubriendoElMundoDeOracle/~4/wqdNNW4xswI" height="1" width="1" alt=""/> Clarisa J. Maman Orfali tag:blogger.com,1999:blog-1315583943401206186.post-3818907800263534411 Thu Feb 16 2017 18:00:00 GMT-0500 (EST) Cómo crear una instancia de la Base de Datos Oracle en Amazon RDS - Parte 1 http://feedproxy.google.com/~r/DescubriendoElMundoDeOracle/~3/EcVf13RBylw/como-crear-una-instancia-de-la-base-de.html En los tiempos en que vivimos, conocer los avances de la tecnología y cómo todo está orientado a la nube, me hizo pensar que es momento de empezar a incursionar en este tema y por ello he tenido la oportunidad de aprender un poco sobre estos servicios que ofrece Amazon AWS, en particular sobre el servicio RDS. En este artículo quiero compartir el paso a paso para disponer de una Instancia de prueba y estudio de la Base de Datos Oracle en Amazon RDS.<br /><br />Como primer punto necesitamos conocer lo que es Amazon RDS (Relational Database Service). Amazon RDS es un servicio web con el cual podemos en forma muy sencilla &nbsp;configurar, utilizar y escalar una base de datos relacional en la nube. Nos proporciona capacidad rentable y podemos escalar el tamaño según necesitemos y al mismo tiempo, administra las tediosas tareas de administración de la base de datos, lo que nos permite centrarnos en nuestras aplicaciones y en nuestro negocio. Podemos tener en Amazon RDS seis motores de bases de datos populares para elegir, incluido Amazon Aurora, PostgreSQL, MySQL, MariaDB, Oracle y Microsoft SQL Server.<br /><br />Una pregunta muy importante a hacerse a la hora de incursionar en la nube, es: Por qué queremos un servicio de base de datos administrado?<br /><br /><ul><li>En primera instancia se encarga de las tareas tediosas de la gestión de la base de datos relacional.</li><li>Cuando compramos un Servidor, lo que obtenemos es un CPU, memoria, almacenamiento, IOPS (Input/Output operations per second), es decir, todos los componentes juntos. En cambio, adquiriendo el servicio de Amazon RDS, estos se dividen para que se pueda escalar de forma independiente. Por ejemplo, si necesitamos más CPU, menos IOPS o más almacenamiento, podemos asignarlos fácilmente.</li></ul>&nbsp;Seguir Leyendo<a href="http://www.toadworld.com/platforms/oracle/b/weblog/archive/2017/02/15/c-mo-crear-una-instancia-de-la-base-de-datos-oracle-en-amazon-rds-parte-1" target="_blank"> AQUI</a><img src="http://feeds.feedburner.com/~r/DescubriendoElMundoDeOracle/~4/EcVf13RBylw" height="1" width="1" alt=""/> Clarisa J. Maman Orfali tag:blogger.com,1999:blog-1315583943401206186.post-6359650699024085443 Thu Feb 16 2017 17:58:00 GMT-0500 (EST) Comma separated search and search with checkboxes in Oracle APEX http://dgielis.blogspot.com/2017/02/comma-separated-search-and-search-with.html <p>When you have a classic report in Oracle Application Express (APEX) and want to make it searchable you typically add a Text Item in the region, enable Submit on Enter and add a WHERE clause to your SQL statement.</p><p>Here’s an example:</p><p><img src="https://s3.amazonaws.com/apexRnD/blog/0003_classic_report_text.png" alt="Classic Report with Search (text item)"></p><p>Your SQL statement probably looks like this:</p><pre><code>select CUSTOMER_ID,<br /> CUST_FIRST_NAME,<br /> CUST_LAST_NAME,<br /> CUST_STREET_ADDRESS1,<br /> CUST_CITY,<br /> CUST_STATE,<br /> CUST_POSTAL_CODE,<br /> CUST_EMAIL,<br /> CREDIT_LIMIT<br /> from DEMO_CUSTOMERS<br /> where CUSTOMER_ID = :P4_SEARCH<br /></code></pre><p><strong>When you want to search for multiple customers separated by a comma, how do you do that?</strong><br>So in my search field I add for example: 1,2,3 and expect to see 3 customers.</p><p>There’re a couple of options you have, I’ll list three below:</p><ol><li><p>INSTR</p><pre><code>where INSTR(','||:P4_SEARCH||',', ',' || CUSTOMER_ID || ',') &gt; 0<br /></code></pre></li><li><p>REGEXP_LIKE</p><pre><code>where REGEXP_LIKE(CUSTOMER_ID, '^('|| REPLACE(:P4_SEARCH,',','|') ||')$')<br /></code></pre></li><li><p>REGEXP_SUBSTR</p><pre><code>where customer_id in to_number((<br /> select regexp_substr(:P4_SEARCH,'[^,]+', 1, level) <br /> from dual<br /> connect by regexp_substr(:P4_SEARCH, '[^,]+', 1, level) is not null <br />))<br /></code></pre></li><li><p>APEX_STRING</p><pre><code> where customer_id in (select * from table(apex_string.split(:P4_SEARCH,',')))<br /></code></pre></li></ol><p><strong>Which one to choose?</strong> It depends what you need… if you need readability, maybe you find APEX_STRING or INSTR easier to understand. If you need performance, maybe the last option is the better choice… so as always it depends. If you want to measure the performance you can look at the Explain Plan (just copy the SQL in SQL Workshop and hit the Explain tab).</p><p>The Explain Plan for the first SQL looks like this:</p><p><img src="https://s3.amazonaws.com/apexRnD/blog/0003_explain_plan_instr.png" alt="Explain Plan INSTR"></p><p>The Explain Plan for the last SQL looks like this:</p><p><img src="https://s3.amazonaws.com/apexRnD/blog/0003_explain_plan_regexp.png" alt="Explain Plan REGEXP_SUBSTR"></p><p>The above technique is also useful when you use want checkboxes above your report, so people can make a selection. For example we select the customers we want to see:</p><p><img src="https://s3.amazonaws.com/apexRnD/blog/0003_classic_report_checkbox.png" alt="Classic Report with checkbox selection"></p><p>The where clause would be identical, but instead of a comma (,) you would use a colon (:), so the first statement would be:</p><pre><code>where INSTR(':'||:P4_SEARCH||':', ':' || CUSTOMER_ID || ':') &gt; 0<br /></code></pre><p>Happy searching your Classic Report :)</p><p><strong><em>Update 23-FEB after feedback from Martin and FaTechs.:</em></strong><br>There are many other alternatives, but I do want to highlight one more if you’re using APEX 5.1 there’s a nice package called <strong>apex_string</strong> which can help too.</p><pre><code>where customer_id in (select * from table(apex_string.split(:P4_SEARCH,',')))<br /></code></pre><p>You can see more examples of apex_string in the <a href="https://docs.oracle.com/database/apex-5.1/AEAPI/APEX_STRING.htm#AEAPI-GUID-CAFD987C-7382-4F0F-8CB9-1D3BD05F054A">documentation</a> or on <a href="https://sql-plsql-de.blogspot.be/2017/01/string-operationen-leicht-gemacht-mit.html?en">Carsten’s blog</a>.</p> Dimitri Gielis tag:blogger.com,1999:blog-21122514.post-277854948633829867 Thu Feb 16 2017 17:30:00 GMT-0500 (EST) EECS - Oracle Exadate Express Cloud Service, Step 3 http://roelhartman.blogspot.com/2017/02/eecs-oracle-exadate-express-cloud.html Once you have defined your users for your Express Cloud Service, all users with the role of Database Developer or higher can access the database Service Console. From here all database related actions can be started.<span class="fullpost"></span><br /><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-ZjySXKXcEbM/WKW8jGaFG0I/AAAAAAAAAV4/OgYOgAwYYFARU8IHE460O6sL-gYbXVZpwCK4B/s1600/Screen%2BShot%2B2017-02-16%2Bat%2B15.49.48%2B.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="461" src="https://1.bp.blogspot.com/-ZjySXKXcEbM/WKW8jGaFG0I/AAAAAAAAAV4/OgYOgAwYYFARU8IHE460O6sL-gYbXVZpwCK4B/s640/Screen%2BShot%2B2017-02-16%2Bat%2B15.49.48%2B.png" width="640" /></a></div><div>The upper category, Web Access, brings you to the specified part of the APEX builder - more on that in the next post. In the lower category you can create database schema's. For our goal within smart4apex, I created a schema for every developer.</div><div><a href="http://4.bp.blogspot.com/-eWUU3-b2Ibw/WKW91KuMr3I/AAAAAAAAAWA/flZ9Dws1rEkmpyI_iP9fajvU2DqI6qlTQCK4B/s1600/Screen%2BShot%2B2017-02-16%2Bat%2B15.57.02%2B.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="290" src="https://4.bp.blogspot.com/-eWUU3-b2Ibw/WKW91KuMr3I/AAAAAAAAAWA/flZ9Dws1rEkmpyI_iP9fajvU2DqI6qlTQCK4B/s400/Screen%2BShot%2B2017-02-16%2Bat%2B15.57.02%2B.png" width="400" /></a>You can define whether the schema should be accessible from within APEX and creating an separate tablespace is optional.</div><div>I haven't played around with the Document Store yet, so I have to skip that part. You can also set the password of the administrator of your PDB - the most privileged user within your PDB you have access to. Franck Pachot did an excellent <a href="https://blog.dbi-services.com/exadata-express-cloud-service-pdb_admin-privileges/" target="_blank">writeup</a> about the privileges of that user. I hoped the "Manage Application Express" would bring me to the "APEX Admin" environment - a.k.a. the "INTERNAL" workspace. But in fact it's a very downsized form of that.&nbsp;</div><div><a href="http://1.bp.blogspot.com/-YahBqcnGBOM/WKXA8Psls8I/AAAAAAAAAWY/dV9hljj_ZjoMDw3ezSIllMBK4MMvlKhKQCK4B/s1600/Screen%2BShot%2B2017-02-16%2Bat%2B16.10.18%2B.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="160" src="https://1.bp.blogspot.com/-YahBqcnGBOM/WKXA8Psls8I/AAAAAAAAAWY/dV9hljj_ZjoMDw3ezSIllMBK4MMvlKhKQCK4B/s400/Screen%2BShot%2B2017-02-16%2Bat%2B16.10.18%2B.png" width="400" /></a>You can enable Application Archiving (using the Application Archive packaged app), enable or disable workspace-to-schema associations and manage a very small number of workspace preferences.</div><div>What I had expected and missing the most here is the option to create multiple workspaces! <b><u>So one EECS instance means one and only one APEX Workspace</u></b>! I still haven't found the document that lists that limitation. That was a real surprise for me.</div><div><br /></div><div>The middle part of the Service Console is the most interesting one for this post. As we would like to access our EECS database like a local one! Assuming you have your favorite tool (SQL Developer, SQL Plus or sqlcl already installed), you have to download the "Client Credentials". On downloading you have to enter a password. You'll need that again to set up the connection using SQL Developer. So fire up a a recent version - I used 4.2 - of SQL Developer and define the connection, using "Cloud PDB" as the Connection Type, point the Configuration File to the downloaded zip file and enter the previous defined password. Make the connection and voila, you are running SQL Developer connecting to a 12.2.0.0.3 database in the cloud!&nbsp;</div><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-xXMml6uN0vQ/WKX1Wx5StrI/AAAAAAAAAW8/bNZXDuh5gxwDKkOpLCTZRHXylLEfyu0eQCK4B/s1600/Screen%2BShot%2B2017-02-16%2Bat%2B19.52.44%2B.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="424" src="https://1.bp.blogspot.com/-xXMml6uN0vQ/WKX1Wx5StrI/AAAAAAAAAW8/bNZXDuh5gxwDKkOpLCTZRHXylLEfyu0eQCK4B/s640/Screen%2BShot%2B2017-02-16%2Bat%2B19.52.44%2B.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">And while you can do most of the regular database development stuff, there is quite a list of restrictions, limitations and issues, all listed in <a href="https://docs.oracle.com/en/cloud/paas/exadata-express-cloud/csdbk/feature-restrictions-and-limitations.html" target="_blank">this document</a>. So no multimedia, spatial, RAS, to name a few.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Connecting with sqlcl is just as simple. Drop the zip-file in a location easy to find by sqlcl (as you can see in the screenshot above, I dropped it in the sqlcl/bin directory). Fire it up with "sqlcl /nolog" and define the cloud configuration using the zip file:</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">set cloudconfig /Applications/oracle/sqlcl/bin/client_credentials.zip</span></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">As you don't want to type that line each and every time, it's convenient to put that in a login.sql file in the sqlcl directory.&nbsp;</div><div class="separator" style="clear: both; text-align: left;">The zipfile is unzipped in a new directory on your file system - it seems to create a new directory each and every time you issue that command. I hope it gets cleaned up somewhere somehow eventually ...</div><div class="separator" style="clear: both; text-align: left;"><a href="http://1.bp.blogspot.com/-04CL1bJX0eY/WKX60pfX-7I/AAAAAAAAAXM/IXW8UBB3y8gd4q7drXHJLJjVEg7muKk-wCK4B/s1600/Screen%2BShot%2B2017-02-16%2Bat%2B20.16.08%2B.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="112" src="https://1.bp.blogspot.com/-04CL1bJX0eY/WKX60pfX-7I/AAAAAAAAAXM/IXW8UBB3y8gd4q7drXHJLJjVEg7muKk-wCK4B/s640/Screen%2BShot%2B2017-02-16%2Bat%2B20.16.08%2B.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">And is it fast? It feels pretty fast - hey it is an Exadata machine &nbsp;- , but now and then I noticed some latency in the connection. Not too bad and expected as the server is in the US. I'm sure that will be a lot better once there will be a real European roll-out. In the Service Console there is a little diagnostics tool hidden in the menu in the upper right corner where you can measure your latency. I measured it three times and the latency was around 180ms on average. So that's not super, but not really annoying in a sqlcl / SQL Developer environment. But what would happen if I start clicking around in the APEX Builder?</div> Roel Hartman tag:blogger.com,1999:blog-20567072.post-818742003756203789 Thu Feb 16 2017 14:28:00 GMT-0500 (EST) EECS - Oracle Exadata Express Cloud Service, Step 2 http://roelhartman.blogspot.com/2017/02/eecs-oracle-exadata-express-cloud.html Once you get your services up and running, you can log into your domain - in this screenhot "smart4apex" - on the Oracle Cloud.<span class="fullpost"></span><br /><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-AIatoFMgS9A/WKWX4U1vAbI/AAAAAAAAAUo/fHOcrCoRQiw6mLHli5ERwgD3H0hW4a6qwCK4B/s1600/Screen%2BShot%2B2017-02-16%2Bat%2B13.12.48%2B.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="424" src="https://4.bp.blogspot.com/-AIatoFMgS9A/WKWX4U1vAbI/AAAAAAAAAUo/fHOcrCoRQiw6mLHli5ERwgD3H0hW4a6qwCK4B/s640/Screen%2BShot%2B2017-02-16%2Bat%2B13.12.48%2B.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: left;">Then you'll end up in the "My Services" dashboard. As I have only one, my dashboard looks quite clean, showing just this widget:</div><div class="separator" style="clear: both; text-align: left;"><a href="http://3.bp.blogspot.com/-5F9XJnoVf1w/WKWY1kVJaaI/AAAAAAAAAU0/WqSrGfHEzAUqXk_lR6ojlwwQ_ImWoIraQCK4B/s1600/Screen%2BShot%2B2017-02-16%2Bat%2B13.19.05%2B.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="346" src="https://3.bp.blogspot.com/-5F9XJnoVf1w/WKWY1kVJaaI/AAAAAAAAAU0/WqSrGfHEzAUqXk_lR6ojlwwQ_ImWoIraQCK4B/s400/Screen%2BShot%2B2017-02-16%2Bat%2B13.19.05%2B.png" width="400" /></a>Just a few remarks for the designers of this: I am very curious why there is an extra "<i>(Number of ..."</i>&nbsp;in the chart title. The same superflous text is also on another location on that page.<br />And, more intriguing, what would <i>"0.0323 database instances"</i> mean? 1/0.0323 = 31. So something like days? But February has 28 days...<br />It would make way more sense to just show here how many instances I had on those day (so, "1" al over the place...).</div><div class="separator" style="clear: both; text-align: left;">From this widget you can drill into the "Service Details", where you can set rules and alerts and see the (historical) status of your instance. Funny thing is, I noticed this:</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><a href="http://3.bp.blogspot.com/-E3LzTSveX9Y/WKWbPhA51nI/AAAAAAAAAVE/xfoBPDXfWzkyc5ax8waeXkzSEYRUDaxAgCK4B/s1600/Screen%2BShot%2B2017-02-16%2Bat%2B13.28.30%2B.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="178" src="https://3.bp.blogspot.com/-E3LzTSveX9Y/WKWbPhA51nI/AAAAAAAAAVE/xfoBPDXfWzkyc5ax8waeXkzSEYRUDaxAgCK4B/s400/Screen%2BShot%2B2017-02-16%2Bat%2B13.28.30%2B.png" width="400" /></a>These figures indicate, I have a storage limit of 23Gb. But my service is based on 20Gb. So I get 3Gb "for free"!<br />Probably that's (more or less) used by Oracle itself (SYS, APEX etc.). So if you buy 20Gb, you really get 20Gb to store your own data!</div><div class="separator" style="clear: both; text-align: left;">Now it is time to add some users to this instance. As we - as smart4apex - would like to use it as a development environment, I added all colleagues as a user.&nbsp;</div><div class="separator" style="clear: both; text-align: left;"><a href="http://2.bp.blogspot.com/-WPICCf2Wrm8/WKWfZwSPWvI/AAAAAAAAAVU/0CsHDgi2Ycc89CraIAcLIim0xhMLWLlXQCK4B/s1600/Screen%2BShot%2B2017-02-16%2Bat%2B13.45.25%2B.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="250" src="https://2.bp.blogspot.com/-WPICCf2Wrm8/WKWfZwSPWvI/AAAAAAAAAVU/0CsHDgi2Ycc89CraIAcLIim0xhMLWLlXQCK4B/s400/Screen%2BShot%2B2017-02-16%2Bat%2B13.45.25%2B.png" width="400" /></a>And i can assign Roles to every user. There is a standard list of roles defined. From the <a href="http://docs.oracle.com/en/cloud/get-started/subscriptions-cloud/mmocs/managing-user-roles.html#GUID-7E6B287F-E296-4B9B-A50A-575D66D3FA7B" target="_blank">documentation</a> I figured out that the first two are entitled to add or modify other users, but what the privileges and restrictions of the other three are, I still have to discover. What I do know is, if you just assign the "Database User" role to a user, you can log in to the My Services page, but if you try to use the Exadata Express service, you get an "Acces Denied" message. You need at least Database Developer or Database Administrator to access the APEX builder (more about that in a later post).</div><div class="separator" style="clear: both; text-align: left;">A nice feature is, you can upload a csv file to create multiple users and assign roles in batch. Saves you a lot of clicks....</div><div class="separator" style="clear: both; text-align: left;">And every user you create receives a nice welcome email with a temporary password and a login link. Once you use that link, and login you end up on a (rather outdated - ADF faces built) page of Oracle Identity Self Service to change your password and register three (!) challenge questions. That is a challenge in itself ;-)</div><div class="separator" style="clear: both; text-align: left;">Apart from the standard Roles, you can define "Custom Roles" and assign those to users. But any information about how to use these roles in an APEX application is welcome, as I couldn't find any documentation on this subject.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">In the next post, I'll go into the database (in)side of the service and in the subsequent one, the APEX development environment of the Exadata Express Cloud Service (EECS).</div><div><br /></div> Roel Hartman tag:blogger.com,1999:blog-20567072.post-8130457185876847228 Thu Feb 16 2017 08:29:00 GMT-0500 (EST) Floating Scrollbar http://apex-plugin.com/oracle-apex-plugins/dynamic-action-plugin/floating-scrollbar_516.html This plugin enables to stick horizontal scrollbar of a region to the bottom of a page. In other words, whenever region is visible it&#39;s horizontal scrollbar is visible as well. Plugin is based on Ben Alman&#39;s jQuery Floating Scrollbar. http://apex-plugin.com/oracle-apex-plugins/dynamic-action-plugin/floating-scrollbar_516.html Wed Feb 15 2017 21:29:22 GMT-0500 (EST) APEX: Meet the rest of the web http://www.explorer-development.uk.com/apex-meet-rest-web/ <p>APEX: Meet the rest of the web In December last year I spoke at the UKOUG TECH 16 conference in Birmingham about integrating APEX with modern web technologies. The presentation was interesting for me to build because I was able to spend some time pushing APEX beyond what is possible using only the declarative application</p> <p>The post <a rel="nofollow" href="http://www.explorer-development.uk.com/apex-meet-rest-web/">APEX: Meet the rest of the web</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> factory-admin http://www.explorer-development.uk.com/?p=4057 Tue Feb 14 2017 06:32:16 GMT-0500 (EST) Where do you specify the Date Format Mask http://dgielis.blogspot.com/2017/02/0001specifydateformatmaskmd-copy.html <p>When reviewing <a href="https://apex.oracle.com">Oracle APEX</a> applications I often see hardcoded date or timestamp formats.<br>You can define your date formats in multiple places in your application. In your item or column attributes, as part of your code e.g.TO_CHAR(sysdate, ‘DD-MON-YYYY HH24:MI’) or if you want to make it more reusable you might create a substitution string. That will all work, but you can make your life easier and for the ones looking or needing to maintain your code…</p><p>APEX itself provides in the Globalization attributes (Shared Components) a place where you can define your default date and format masks for your entire applications. I consider this a best practice to use those fields, as it’s defined in one logical place, so when you need to change your format, you do it once and you’re done. In your custom SQL and PL/SQL code you can also reference those format masks by predefined substitution strings:</p><ul><li>APP_NLS_DATE_FORMAT</li><li>APP_DATE_TIME_FORMAT</li><li>APP_NLS_TIMESTAMP_FORMAT</li><li>APP_NLS_TIMESTAMP_TZ_FORMAT</li></ul><p>e.g. TO_CHAR(sysdate, :APP_NLS_DATE_FORMAT)</p><p>Here’s a screenshot which shows which substitution string corresponds with which field:</p><p><img src="https://s3.amazonaws.com/apexRnD/blog/0001_specify_date_format_mask.png" alt="Application Attributes - Globalization"></p><p>You can define the format mask you want, or you can click the arrow to see most used format masks represented with an example. To make it a bit easier, I put the format mask (in red) next to it, so you see the underlying format mask more easily:</p><p><img src="https://s3.amazonaws.com/apexRnD/blog/0001_possible_date_format_masks.png" alt="Possible date format masks defined in the pop-up"></p><p>If you need to make the format mask dynamic, for example using different format masks for different language, APEX doesn’t allow you to translate that substitution string through Text Messages, but you can work around it by using your own substitution string and have that dynamically filled. In the Globalization Attributes you would add instead of a hardcoded format mask your own substitution string e.g. &amp;MY_TRANSLATED_DATE.FORMAT.</p> Dimitri Gielis tag:blogger.com,1999:blog-21122514.post-2765623095788897973 Mon Feb 13 2017 11:32:00 GMT-0500 (EST) Intermittent ORA-06502 error when running APEX 5 on 12c http://roelhartman.blogspot.com/2017/02/intermittent-ora-06502-error-when.html We upgraded our environment from 11.2 to 12c last week. This week we noticed an error in one of our APEX pages, a rather simple form for entering data. Nothing fancy, nothing spectacular - only a spectacular error when you tried to edit a record.&nbsp;<span class="fullpost"></span><br /><div>Running the page in debug mode (even on LEVEL9) wasn't very helpful as you can see below (10 points who immediately spots the error!).</div><div><a href="http://1.bp.blogspot.com/-ggm6wJCBrrw/WKGp32KeOTI/AAAAAAAAAUU/nlQO6VAB0QsUAs2cHvdskJv7X_2f17TKwCK4B/s1600/image001.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="350" src="https://1.bp.blogspot.com/-ggm6wJCBrrw/WKGp32KeOTI/AAAAAAAAAUU/nlQO6VAB0QsUAs2cHvdskJv7X_2f17TKwCK4B/s640/image001.png" width="640" /></a></div><div>The error didn't occur for all records. It seems that a long(er) Code and Description field on the page resulted in an error more frequently. Also fiddling with a couple of the checkbox fields on the page had an effect.</div><div>So I asked Twitter for help. And within a few minutes I got all kinds of tips and advice. But especially one, from <a href="https://twitter.com/PeterRaganitsch" target="_blank">Peter Raganitsch</a>&nbsp;was spot on. He suggested, looking at the debug output above, to take a look at the #CLOSE# position in the template. .</div><div>My buttons are positioned in that #CLOSE# position, so I took a closer look at those. There were three that passed the Id, Code and Description to other pages as a parameter. So ... the longer the description ... the longer the generated URL would be. And as one of the checkboxes would toggle the availability of one of the buttons, that would also have an effect on the total length of the URL's in that region position.&nbsp;</div><div>So I changed a little code, to pass only the Id's to the other pages (and add a select statement there to (re)fetch the Code and Description. And since then ... it runs as a breeze.<br /><br /></div><div><b><u>Very weird though this was not on issue on 11.2, but is on 12c....</u></b><br /><b><u><br /></u></b>So what causes this issue, what is the difference?<br />The answer is: the <b><u>checksum</u></b>!<br /><br />If I create a Report and a Form on DEMO_CUSTOMERS, using the CUSTOMER_ID as the Primary Key, the URL has this checksum on 11.2 : " &amp;cs=3Fqn7QOYkP-TDSLkssvzU7i7QL1E "<br />On 12c however, the checksum is :" &amp;cs=36Drf3ULxGXswIlT5btBujofcmgwdjJsr-luSfpLjSMpXP71DILliWBz31qkpRJHyPj2RS8iLce5qNkXSSeGbvQ "<br />And that was probably enough extra length to pass a certain varchar2(&lt;some number here&gt;) in the APEX code that generates the page output....<br /><br /><br /></div> Roel Hartman tag:blogger.com,1999:blog-20567072.post-651751007601015724 Mon Feb 13 2017 07:55:00 GMT-0500 (EST) Oracle PL/SQL AWS S3 https://storm-petrel.com/orablog/2017/02/11/oracle-plsql-aws-s3/ <h1>Oracle PL/SQL AWS S3</h1> <p>Amazon Web Services (AWS) Simple Storage Solution (S3) has upgraded its application programming interface (API) to support HTTPS. This upgrade involved a redesign of the authentication process at AWS. The authentication process now involves authenticating the user and verifying the canonical request made to AWS S3.</p> <p>Morten Braten and Jason Straub have published and supported tools related to AWS S3 and Oracle PL/SQL. These tools, located within the <a href="https://github.com/mortenbra/alexandria-plsql-utils">Alexandria Library</a>, do not support the new AWS4 signature and do not support HTTPS.</p> <p>During the recent months, I have researched the AWS interface and written an updated package. I have hosted these tools at my <a href="https://github.com/cmoore-sp/plsql-aws-s3/blob/master/docs/aws_docs.md">github </a>.  I think with solid collaboration and greater testing from our Oracle and APEX community we can get this package solid enough to be included in the library.</p> <h2>Why?</h2> <h3>Answer #1</h3> <p>At Storm Petrel, we use AWS S3 to augment the database for the storage of documents in our various document management tools. We keep an original in a BLOB and a modified copy at S3. We have wanted to make sure that ALL communication between the users and our infrastructure is 100% encrypted. With the link to AWS S3 travelling via HTTPS, we can stand behind this statement.</p> <h3>Answer #2</h3> <p>Initially, AWS S3 was all hosted from the Northern Virginia region. S3 is now hosted in 15 regions. Some of these regions require HTTPS and some require the AWS4 signature. It seems that AWS will want to depreciate the HTTP interface in time. Best to stay ahead of the demand!</p> <h3>Answer #3</h3> <p>This was well out of my comfort zone. In 2015, we wrote an interface to MailChimp. In 2016, interfaces to FEMA and to Nexmo for SMS and multifactor authentication. The AWS S3 stuff was tough!!!!</p> <h2>What is next?</h2> <p>I focused on getting the feature we use in place. AWS S3 has a huge number of features. This package does not even have all of the features that Morten put in to the original effort. So, testing and continued development is what is next.</p> <p>I can&#8217;t do it alone. The foundation is here. The authentication stuff and HTTPS stuff works. Now to add the other bits that S3 has to offer, or that we need.</p> <h2>GitHub!</h2> <p>Please direct yourself to the <a href="https://github.com/cmoore-sp/plsql-aws-s3">Github site</a> for more information about the package, and to get the packages. At that site you will find:</p> <ul> <li>Documentation</li> <li>The package (specification and body)<img class="aligncenter size-full wp-image-430" src="https://storm-petrel.com/orablog/files/2017/02/AWS4_signature.jpg" alt="Oracle PLSQL AWS S3" width="713" height="774" srcset="https://storm-petrel.com/orablog/files/2017/02/AWS4_signature.jpg 713w, https://storm-petrel.com/orablog/files/2017/02/AWS4_signature-276x300.jpg 276w" sizes="(max-width: 713px) 100vw, 713px" /></li> </ul> <p>&lt;/qed&gt;</p> <p>&nbsp;</p> <p>The post <a rel="nofollow" href="https://storm-petrel.com/orablog/2017/02/11/oracle-plsql-aws-s3/">Oracle PL/SQL AWS S3</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=429 Sat Feb 11 2017 15:18:49 GMT-0500 (EST) Oracle ACE Director and VMware vExpert http://www.dbaexpert.com/blog/oracle-ace-director-and-vmware-vexpert/ <p>I have been proud for the past 4 years to be the only person in the world who held the highest designation from both Oracle and VMware as the Oracle ACE Director and VMware vExpert at the same time. &nbsp;This week, I am proud to announce that Nitin Vengurlekar (@dbcloudshifu) joins me in this designation. &nbsp;We are known in both industries for our technical aptitude, authoring books, blogging and speaking at national/international conferences. &nbsp;</p> <p>I am also excited to announce that I was accepted into the VMware vExpert program for the 5th consecutive year for the 2017 calendar year. &nbsp;This year will be Nitin&#8217;s first year as a VMware vExpert. &nbsp;We, at Viscosity North America, are very excited and honored to be the only company in the world who house 2 individuals that hold titles of Oracle ACE Directors and VMware vExperts.</p> <p>Posted by Charles Kim, Oracle ACE Director and VMware vExpert</p> <p>Twitter: @racdba</p> <p>&nbsp;</p> <p>&nbsp;</p> <div id="bpp_credits" style="clear: both; float: right; width: 200px; height: 70px; text-align:right;"><a href="http://www.blogpadpro.com" target="_blank" style="text-decoration : none;"><span style="vertical-align: middle; font-size: 8pt; color:#999;">Edited with BlogPad Pro</span><img style="vertical-align: middle; padding-left: 5px;" src="http://files.blogpadpro.com/images/speech-bubble.png" width="25" height="25" /></a></div> admin http://www.dbaexpert.com/blog/?p=1168 Fri Feb 10 2017 14:55:06 GMT-0500 (EST) First steps using the Oracle Exadata Express Cloud Service http://roelhartman.blogspot.com/2017/02/first-steps-using-oracle-exadata.html The <a href="https://docs.oracle.com/en/cloud/paas/exadata-express-cloud/index.html" target="_blank">Oracle Exadata Express Cloud Service</a> was announced at Oracle Open World 2016. This service looks like an excellent use case for Oracle Database development purposes as well as setting up a test environment. And even for small to medium sized production situations it looks very promising as you can see in the table below. Especially the cheapest option offers a lot of bang for your bucks.<span class="fullpost"></span><br /><div><a href="http://4.bp.blogspot.com/-3VkJJ11V3EE/WJx2zRqAJ5I/AAAAAAAAATQ/tqXkm2cFSbwtm_DJzY36iR9ER9YwARfOgCK4B/s1600/Screen%2BShot%2B2017-02-02%2Bat%2B15.58.01%2B.png" imageanchor="1"><img border="0" height="300" src="https://4.bp.blogspot.com/-3VkJJ11V3EE/WJx2zRqAJ5I/AAAAAAAAATQ/tqXkm2cFSbwtm_DJzY36iR9ER9YwARfOgCK4B/s640/Screen%2BShot%2B2017-02-02%2Bat%2B15.58.01%2B.png" width="640" /></a></div><div>But alas, this service was not as widely available as I expected. The first months it was US-only and you could only figure out by ordering the service and then you would find out on the last page that you should "contact your Oracle sales rep". I sincerely doubt whether he or she could provide you with that service, so I just waited until it would be more generally available.</div><div>And since a few weeks the Oracle Exadata Express Cloud Service is also available in Europe - I don't know about other parts of the world. A missed chance though that Oracle didn't announce that properly. You can only find out by trial-and-error. And to be clear, your data will still reside on US soil...</div><div><a href="http://1.bp.blogspot.com/-FWJE1waNzaI/WJx43lbQUnI/AAAAAAAAATg/3a21V7rM4OcJKLLHSKsdY1PfGw3s76MhQCK4B/s1600/Screen%2BShot%2B2017-02-02%2Bat%2B15.59.31%2B.png" imageanchor="1"><img border="0" height="296" src="https://1.bp.blogspot.com/-FWJE1waNzaI/WJx43lbQUnI/AAAAAAAAATg/3a21V7rM4OcJKLLHSKsdY1PfGw3s76MhQCK4B/s640/Screen%2BShot%2B2017-02-02%2Bat%2B15.59.31%2B.png" width="640" /></a></div><div><br /></div><div>After entering my credit card number I made my purchase irreversible and I immediately received an order confirmation. As I expected these cloud things go very fast I started waiting for the mail that would say that my service was ready. Not on that same day. Not on the next day. But two days later, I finally received my "<i>Welcome to Oracle Cloud</i>" email. If any webshop that ships physical items would move that slow, they would be out of business pretty soon.&nbsp;</div><div>But now I was ready to go! First I had to create my "service instance". No clue what Oracle did the last two days, but effectively I only had access to a console where I could create such an instance. Why doesn't Oracle create that instance immediately? Because in the end what I ordered was a service instance - not the option to create one...</div><div><br /></div><div>Nevertheless, with a few clicks I had requested my instance as seen in the screen below (notice the little missing icons / images on the upper left and right buttons...).</div><div><a href="http://1.bp.blogspot.com/-0Cbn1UTESdo/WJx8Fqs8RiI/AAAAAAAAATs/Q-76DcqzwMEVQwPCq2Gs1vyaZwT1bNmJQCK4B/s1600/Screen%2BShot%2B2017-02-04%2Bat%2B11.14.52%2B.png" imageanchor="1"><img border="0" height="302" src="https://1.bp.blogspot.com/-0Cbn1UTESdo/WJx8Fqs8RiI/AAAAAAAAATs/Q-76DcqzwMEVQwPCq2Gs1vyaZwT1bNmJQCK4B/s640/Screen%2BShot%2B2017-02-04%2Bat%2B11.14.52%2B.png" width="640" /></a></div><div>The only thing that had to be done was firing up a 20Gb Pluggable Database (PDB). On my VM that would take a few minutes. So on an Exadata beast ... a minute or maybe two?</div><div><br /></div><div>Alas, no. For some reason it took 4 (four!) full days. All those days I logged in to see whether there was any progress and all I saw was:</div><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-OcIW1kC6HsA/WJx80AN5feI/AAAAAAAAAT4/qY70JN6qPD8bJ19v76A3ZHMxEnLBVZtaACK4B/s1600/Screen%2BShot%2B2017-02-06%2Bat%2B16.14.51%2B.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="144" src="https://4.bp.blogspot.com/-OcIW1kC6HsA/WJx80AN5feI/AAAAAAAAAT4/qY70JN6qPD8bJ19v76A3ZHMxEnLBVZtaACK4B/s320/Screen%2BShot%2B2017-02-06%2Bat%2B16.14.51%2B.png" width="320" /></a></div><div>After the Oracle internal issues were solved - the PDB was created super fast, but the registration process failed somewhere - I was finally up and running.&nbsp;</div><div><br /></div><div>It took a while, but I hope it was worth waiting for ....</div> Roel Hartman tag:blogger.com,1999:blog-20567072.post-4312849066020051064 Thu Feb 09 2017 09:44:00 GMT-0500 (EST) New Look & Feel for Radio Group in Oracle Application Express 5.1 http://b-apex.blogspot.com/2017/02/new-look-feel-for-radio-group-in-oracle.html With Oracle Application Express version 5.1 we are getting lots of new features. Among most notable or exposed are for sure Interactive Grids, JET Charts and Live Template Options. But we can also find some smaller (and really nice) enhancements. One of this is new look and feel of <b>Radio Group</b> item. We can spot this for example when we use Create New Page wizard in Page Designer:<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-qMze_-3h4BE/WJuKvWmTZTI/AAAAAAAARlw/1DUcYQ7luwsbhbms3nLU_rhOdS9RTJDxQCLcB/s1600/radio_group_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="346" src="https://4.bp.blogspot.com/-qMze_-3h4BE/WJuKvWmTZTI/AAAAAAAARlw/1DUcYQ7luwsbhbms3nLU_rhOdS9RTJDxQCLcB/s640/radio_group_1.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"></div><br />So what do we need to do, if we want to have this look and feel in our applications. Just adding combo box item to our page is not enough, it will have the same effect as in version 5.0. It will look like this :<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-GGtGMqhsp-M/WJuKvB0n_xI/AAAAAAAARls/pAkxw1RpKQYiMUCg4lkgPuD5woI0kwD1wCEw/s1600/radio_group_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="282" src="https://1.bp.blogspot.com/-GGtGMqhsp-M/WJuKvB0n_xI/AAAAAAAARls/pAkxw1RpKQYiMUCg4lkgPuD5woI0kwD1wCEw/s640/radio_group_2.png" width="640" /></a></div><br />Basically we need to change three things.<br /><br /><br /><ul><li>Number of Columns: should match number of elements in group or you can also set it to some bigger value (for example 100)</li></ul><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-2O8k02_pOwc/WJuNQm2HGUI/AAAAAAAARl4/U9u19bFweucvlxJrQ1CgKIF6OWZF2fyFQCLcB/s1600/radio_group_3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="144" src="https://4.bp.blogspot.com/-2O8k02_pOwc/WJuNQm2HGUI/AAAAAAAARl4/U9u19bFweucvlxJrQ1CgKIF6OWZF2fyFQCLcB/s640/radio_group_3.png" width="640" /></a></div><ul><li>Display Null Value: NO&nbsp;</li></ul><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-6Y2_xnn4sto/WJuOrN6FVoI/AAAAAAAARmA/-P9Oi1zfF4AD0QNkFb5wTZzkUSA5Esy-ACLcB/s1600/radio_group_4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="258" src="https://4.bp.blogspot.com/-6Y2_xnn4sto/WJuOrN6FVoI/AAAAAAAARmA/-P9Oi1zfF4AD0QNkFb5wTZzkUSA5Esy-ACLcB/s640/radio_group_4.png" width="640" /></a></div><div><br /></div><ul><li>Template Option -&gt; Region Group Display: Display as Pill Button</li></ul><br /><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-khzXHaFrbv0/WJuPtzo5hjI/AAAAAAAARmI/mbT6x7BzWE0nz0ihF5X9hTO-cjM30gy8wCLcB/s1600/radio_group_5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://4.bp.blogspot.com/-khzXHaFrbv0/WJuPtzo5hjI/AAAAAAAARmI/mbT6x7BzWE0nz0ihF5X9hTO-cjM30gy8wCLcB/s400/radio_group_5.png" width="400" /></a></div><br />After this three small changes we now have new look and feel for our radio group:<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-GRsYzNlP2-8/WJuQuEa3UoI/AAAAAAAARmQ/zpqIocLjRYEJ9t1C3k_0BRbge1CQXhqzwCLcB/s1600/radio_group_6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="282" src="https://4.bp.blogspot.com/-GRsYzNlP2-8/WJuQuEa3UoI/AAAAAAAARmQ/zpqIocLjRYEJ9t1C3k_0BRbge1CQXhqzwCLcB/s640/radio_group_6.png" width="640" /></a></div><br />For me personally the same page looks much nicer now. And if you want, you can also try all the other template options (do it with Live Template Options, so that you see the effect on the fly) for radio group item and tweak the look and feel even further.<br /><br />Aljaz Aljaž Mali tag:blogger.com,1999:blog-6273129051310972036.post-647501836563574954 Wed Feb 08 2017 16:59:00 GMT-0500 (EST) Apex 5.1 session cloning https://svenweller.wordpress.com/2017/02/08/apex-5-1-session-cloning/ <h2>Introduction</h2> <p>With Apex 5.1 we got a nifty new feature. It is now possible to clone an apex session, so that we can have two (or more) independent APEX sessions running in the same browser.</p> <p>It only took me 2h to implement this from scratch. So it is really easy to do.</p> <p>Joel Kallmann describes how to do it in this blog post <a href="http://joelkallman.blogspot.de/2016/07/apex-session-isolation-across-multiple.html" rel="nofollow">http://joelkallman.blogspot.de/2016/07/apex-session-isolation-across-multiple.html</a></p> <p>There are a few additional tweaks I would like to mention here.</p> <h2>Step 1) Enable session cloning on instance level</h2> <p>logon as sys (or any user with apex_administrator_role).</p> <p>I first granted my normal DBA account the apex_administrator_role</p> <pre>grant apex_administrator_role to myDBA;</pre> <p>and then as DBA:</p> <pre class="brush: sql; title: ; notranslate">begin apex_instance_admin.set_parameter( p_parameter =&gt; 'CLONE_SESSION_ENABLED', p_value     =&gt; 'Y'); end; /</pre> <p>&nbsp;</p> <p>If you are in a CDB/PDB environment, with Apex installed in the PDB (recommended) then  make sure to run this on the matching PDB (especially when working with sys).</p> <p>e.g.</p> <pre>alter session set container = PDBAPEX</pre> <p>Joels article also explains how to enable this for a single workspace. But I got an error message when trying to do so.</p> <pre>"ORA-20987: APEX - Instance parameter not found - Contact your application administrator."</pre> <h2>Step 2) Add a new navigation bar entry</h2> <p>Of cause you are free to add this functionality everywhere you want. But you will need a link, that the user has to click on to get a new session. My preference was the navigation bar.</p> <p>The url for the link is simple. Just add APEX_CLONE_SESSION as the request parameter.</p> <p><code class="sql plain">f?p=&amp;APP_ID.:&amp;APP_PAGE_ID.:&amp;APP_SESSION.:APEX_CLONE_SESSION</code></p> <p>create a navigation bar list entry with this link</p> <ul> <li>Go to &#8220;Shared Components/Navigation Bar Lists/navigation bar&#8221; (the name of my list).</li> <li>Choose any icon (fa-clone) and label text (&#8220;Session klonen&#8221;) that you want.</li> <li>The target page needs to be &#8220;&amp;APP_PAGE_ID.&#8221;. This will use the current page and add it into the link.</li> <li>And most importantly the request needs to be APEX_CLONE_SESSION.</li> </ul> <p><img data-attachment-id="4673" data-permalink="https://svenweller.wordpress.com/2017/02/08/apex-5-1-session-cloning/apex51_clone_session_navbar_entry/" data-orig-file="https://svenweller.files.wordpress.com/2017/02/apex51_clone_session_navbar_entry.png?w=809" data-orig-size="576,531" 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="apex51_clone_session_navbar_entry" data-image-description="" data-medium-file="https://svenweller.files.wordpress.com/2017/02/apex51_clone_session_navbar_entry.png?w=809?w=300" data-large-file="https://svenweller.files.wordpress.com/2017/02/apex51_clone_session_navbar_entry.png?w=809?w=576" class="alignnone size-full wp-image-4673" src="https://svenweller.files.wordpress.com/2017/02/apex51_clone_session_navbar_entry.png?w=809" alt="apex51_clone_session_navbar_entry" srcset="https://svenweller.files.wordpress.com/2017/02/apex51_clone_session_navbar_entry.png 576w, https://svenweller.files.wordpress.com/2017/02/apex51_clone_session_navbar_entry.png?w=150 150w, https://svenweller.files.wordpress.com/2017/02/apex51_clone_session_navbar_entry.png?w=300 300w" sizes="(max-width: 576px) 100vw, 576px" /></p> <p>The entry is now ready and working. However it will replace the session in the current browser tab. But rightclick and &#8220;open in new tab&#8221; gives us two tabs with a different apex session.</p> <p>If that is not enough then this next step is wanted too.</p> <h2>Step 3) Open the link in a new page</h2> <p>The goal is to add a TARGET attribute to our link, so that a new tab is always opened when we clone the session. Unfortunatly the navbar template has no option to include link atributes. We could do a kind of injection trick with the url, but I prefere a cleaner way.</p> <p>To do so we need to modify three small parts.</p> <h3>First copy the navigation bar template as a new template &#8220;Navbar with Attributes&#8221;</h3> <p>And there we add the user defined property <strong>#A03#</strong> to our link. This needs to be done in all areas where we find an &lt;a..&gt; tag.At least for the &#8220;list template current&#8221; and &#8220;list template non-current&#8221;. I also added it for the sub list entries, even if my navbar doesn&#8217;t use sub lists.</p> <p><img data-attachment-id="4731" data-permalink="https://svenweller.wordpress.com/2017/02/08/apex-5-1-session-cloning/apex51_clonesession_template/" data-orig-file="https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_template.png?w=809" data-orig-size="1100,206" 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="apex51_clonesession_template" data-image-description="" data-medium-file="https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_template.png?w=809?w=300" data-large-file="https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_template.png?w=809?w=809" class="alignnone size-full wp-image-4731" src="https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_template.png?w=809" alt="apex51_clonesession_template" srcset="https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_template.png?w=809 809w, https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_template.png?w=150 150w, https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_template.png?w=300 300w, https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_template.png?w=768 768w, https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_template.png?w=1024 1024w, https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_template.png 1100w" sizes="(max-width: 809px) 100vw, 809px" /></p> <p>Don&#8217;t forget to add a description &#8220;Link Attributes&#8221; for the newly added attribute value in the &#8220;attribute description&#8221; section (scroll down a bit to see it).</p> <h3>Then enhance our existing navbar entry with <em>target=&#8221;_blank&#8221;</em></h3> <p><img data-attachment-id="4674" data-permalink="https://svenweller.wordpress.com/2017/02/08/apex-5-1-session-cloning/apex51_clonesession_linkattributes/" data-orig-file="https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_linkattributes.png?w=809" data-orig-size="1197,469" 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="apex51_clonesession_linkattributes" data-image-description="" data-medium-file="https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_linkattributes.png?w=809?w=300" data-large-file="https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_linkattributes.png?w=809?w=809" class="alignnone size-full wp-image-4674" src="https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_linkattributes.png?w=809" alt="apex51_clonesession_linkattributes" srcset="https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_linkattributes.png?w=809 809w, https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_linkattributes.png?w=150 150w, https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_linkattributes.png?w=300 300w, https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_linkattributes.png?w=768 768w, https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_linkattributes.png?w=1024 1024w, https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_linkattributes.png 1197w" sizes="(max-width: 809px) 100vw, 809px" /></p> <p>There is a tiny difference between using target=&#8221;_blank&#8221; or target=<em>someothername</em>.</p> <p>target=&#8221;_blank&#8221; will always create a new tab.</p> <p>target=&#8221;_<em>someothername</em>&#8221; will open a new tab on the first click. Consecutive clicks however will always reuse this same tab. This can be useful if you want to prevent your users to constantly cloning session after session after session.</p> <p>&nbsp;</p> <h3>And finally make sure that our application uses the new template for showing the navbar list</h3> <p>Shared Components/User Interface Attributes/Desktop/Navigation bar/List Template</p> <p><img data-attachment-id="4676" data-permalink="https://svenweller.wordpress.com/2017/02/08/apex-5-1-session-cloning/apex51_clonesession_userinterface/" data-orig-file="https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_userinterface.png?w=809" data-orig-size="699,448" 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="apex51_clonesession_userinterface" data-image-description="" data-medium-file="https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_userinterface.png?w=809?w=300" data-large-file="https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_userinterface.png?w=809?w=699" class="alignnone size-full wp-image-4676" src="https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_userinterface.png?w=809" alt="apex51_clonesession_userinterface" srcset="https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_userinterface.png 699w, https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_userinterface.png?w=150 150w, https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_userinterface.png?w=300 300w" sizes="(max-width: 699px) 100vw, 699px" /></p> <p>&nbsp;</p> <h2>Result</h2> <p>The navigation bar then could look similar to this here:</p> <p><img data-attachment-id="4675" data-permalink="https://svenweller.wordpress.com/2017/02/08/apex-5-1-session-cloning/apex51_clonesession_navbar_de/" data-orig-file="https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_navbar_de.png?w=809" data-orig-size="700,72" 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="apex51_clonesession_navbar_de" data-image-description="" data-medium-file="https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_navbar_de.png?w=809?w=300" data-large-file="https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_navbar_de.png?w=809?w=700" class="alignnone size-full wp-image-4675" src="https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_navbar_de.png?w=809" alt="apex51_clonesession_navbar_de" srcset="https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_navbar_de.png 700w, https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_navbar_de.png?w=150 150w, https://svenweller.files.wordpress.com/2017/02/apex51_clonesession_navbar_de.png?w=300 300w" sizes="(max-width: 700px) 100vw, 700px" /></p> <p>Clicking on the &#8220;clone session&#8221; link will open a new tab in the same browser. In the url we will see that a different session id was created.</p> <p>The new session will have all the same item values (page items, application items, etc.) as the privious session had. But from this point on, the two sessions will start to differ.</p> <p>Both sessions will use the same browser cookie. For that reason if one session logs out, then the other session will be logged out too.</p> <p>&nbsp;</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/svenweller.wordpress.com/4611/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/svenweller.wordpress.com/4611/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=svenweller.wordpress.com&#038;blog=24902459&#038;post=4611&#038;subd=svenweller&#038;ref=&#038;feed=1" width="1" height="1" /> svenweller http://svenweller.wordpress.com/?p=4611 Wed Feb 08 2017 14:31:11 GMT-0500 (EST) Changing the label of an item in Oracle APEX dynamically http://dgielis.blogspot.com/2017/02/changing-label-of-item-in-oracle-apex.html <p>Today I got the question how to change the label of an item in Oracle Application Express (APEX) based on some condition. I actually had this requirement myself a couple of times, so maybe other people too.</p><p>Here’s an example; whenever we change the Source item, we want the Affected Item to change it’s label:</p><p><img src="https://s3.amazonaws.com/apexRnD/blog/0002_changing_label_1.png" alt="The use case: after change of the source item, the label of the affected item changes"></p><p>The first thing that comes to mind (if you already know a little bit of APEX); lets use a Dynamic Action: on change of the Source item we will fire (in this example we will only fire when the value is A):</p><p><img src="https://s3.amazonaws.com/apexRnD/blog/0002_changing_label_2.png" alt="Dynamic Action in APEX"></p><p>Now which action should we use when the dynamic action fires?</p><p><img src="https://s3.amazonaws.com/apexRnD/blog/0002_changing_label_3.png" alt="Default possibility of actions"></p><p>Set Value will typically set the value of an Item, but what about the Label?<br>If I don’t find the option, I typically look for a plugin or write some code myself. In this case I wrote a bit of JavaScript, for example:</p><pre><code>var newLabel = 'My new label for ' + $v('P2_SOURCE_ITEM');<br />$('#'+$(this.affectedElements).attr('id')+'_LABEL').html(newLabel);<br /></code></pre><p>This will set the label to "My new label for " and then the value of the item, at least if you select in the Affected Elements the item that needs the label change.</p><p>Whenever I think about writing custom code, my mind says “you should create a plugin for that”.<br>So I actually started to write an Oracle APEX Plug-in called “Set Label” (<a href="https://github.com/dgielis/orclapex-plugin-set-label">https://github.com/dgielis/orclapex-plugin-set-label</a>)</p><p>While I was trying the plugin and writing up the things I needed to do, I guess something happend in my mind. I missed the obvious, it suddenly came to my mind there’s a much simpler solution to this…</p><p>You can actually use the Set Value action… just add after your item _LABEL, that’s it.</p><p><img src="https://s3.amazonaws.com/apexRnD/blog/0002_changing_label_4.png" alt="Use the Set Value dynamic action but add _LABEL to change the label of the item"></p><p>Here’s the result:</p><p><img src="https://s3.amazonaws.com/apexRnD/blog/0002_changing_label_5.gif" alt="Result"></p><p>Sometimes developing is much more simple than initially thought, you just have to see it :)</p><p><strong><em>Update 16-FEB:</em></strong> if you want to make your label dynamic, in the Set Values Dynamic Action, you can specify SQL / PL/SQL:</p><p><img src="https://s3.amazonaws.com/apexRnD/blog/0002_changing_label_6.png" alt="PL/SQL Expression"></p><p>or Javascript :</p><p><img src="https://s3.amazonaws.com/apexRnD/blog/0002_changing_label_7.png" alt="JavaScript"></p> Dimitri Gielis tag:blogger.com,1999:blog-21122514.post-8451308466213364806 Tue Feb 07 2017 17:37:00 GMT-0500 (EST) Road to Alliance – Higher Ed Oracle APEX Success Stories: Valdosta State https://www.insum.ca/alliance-oracle-apex-success-stories-valdosta-state/ <h1>Road to Alliance &#8211; Higher Ed Oracle APEX Success Stories: Valdosta State</h1> <p>As we gear up for the <a href="http://alliance-conference.com/">Alliance Conference</a>, the largest meeting of Higher Education &amp; Public Sector users of Oracle Applications in the world, we wanted to highlight some stellar use-cases of <a href="https://insum.caabout-apex/">Oracle Application Express (APEX)</a> within Higher Education institutions.  If you missed part one, you can read about <a href="https://insum.ca/alliance-higher-education-oracle-apex-uc-berkeley/">UC Berkeley&#8217;s Oracle APEX projects here</a>.</p> <p>Here’s our second story: Valdosta State using Oracle APEX for stand-alone applications as well as enterprise-level applications with thousands of daily users.</p> <p><strong>Name</strong>: Arthur Rinberger<br /> <strong>Title</strong>: Programmer Analyst Coordinator<br /> <img class="alignnone size-medium wp-image-7252" src="https://insum.ca/wp-content/uploads/2017/02/Art-Rinberger-300x200.jpg" alt="Art Rinberger Alliance" width="300" height="200" srcset="https://www.insum.ca/wp-content/uploads/2017/02/Art-Rinberger-300x200.jpg 300w, https://www.insum.ca/wp-content/uploads/2017/02/Art-Rinberger-768x512.jpg 768w, https://www.insum.ca/wp-content/uploads/2017/02/Art-Rinberger-1024x683.jpg 1024w, https://www.insum.ca/wp-content/uploads/2017/02/Art-Rinberger-880x587.jpg 880w, https://www.insum.ca/wp-content/uploads/2017/02/Art-Rinberger-450x300.jpg 450w, https://www.insum.ca/wp-content/uploads/2017/02/Art-Rinberger.jpg 1200w" sizes="(max-width: 300px) 100vw, 300px" /></p> <h2>Briefly describe how you are using Oracle APEX</h2> <p>We have developed countless stand-alone applications, some very small and easy that only a handful of people use, but also others that are large enterprise-level applications with literal thousands of daily users depending on the functionality that APEX provides. It has become the preferred development tool on this campus and we have received numerous awards and international recognition for some of the applications we developed with it.</p> <h2>How did Oracle APEX come to be used at Valdosta State University?</h2> <p>One of our developers heard about HTML-DB (now renamed APEX) and suggested we give it a try. We stood up a couple of old servers and used it to develop an application we had been asked for. The developers that worked on the project raved about how easy the tool was to work with; the users were very happy with their application and how quickly they were able to get it; and, best of all, nothing had to be installed on the client machines! After that, all the developers wanted to try APEX and thus a revolution was born.</p> <p><img class="alignnone wp-image-7254" src="https://insum.ca/wp-content/uploads/2017/02/VSU_Success_Portal_1-450x340.png" alt="Valdosta State Oracle APEX" width="500" height="466" srcset="https://www.insum.ca/wp-content/uploads/2017/02/VSU_Success_Portal_1-300x280.png 300w, https://www.insum.ca/wp-content/uploads/2017/02/VSU_Success_Portal_1-768x716.png 768w, https://www.insum.ca/wp-content/uploads/2017/02/VSU_Success_Portal_1-1024x955.png 1024w, https://www.insum.ca/wp-content/uploads/2017/02/VSU_Success_Portal_1-880x821.png 880w, https://www.insum.ca/wp-content/uploads/2017/02/VSU_Success_Portal_1-450x420.png 450w, https://www.insum.ca/wp-content/uploads/2017/02/VSU_Success_Portal_1.png 1041w" sizes="(max-width: 500px) 100vw, 500px" /></p> <h2>What problems did it solve for Valdosta State University?</h2> <p>APEX brought modern-looking application development to our campus with extremely easy deployment to the users. It shortened development time, improved the functionality of our applications, and allowed us to take on projects that would have otherwise been either prohibitively complicated or &#8220;too small to bother with&#8221;.</p> <h2>What technology did it replace?</h2> <p>It was a mixed bag of PL/SQL (without APEX), .NET, and C.</p> <h2>Was there an &#8220;Aha!&#8221; moment at some point with the staff and user base?</h2> <p>Basically, the first time they saw and used it. Before that first APEX application, most of our in-house developed applications looked very basic because we were &#8220;too busy&#8221; to learn some of the skills we would need to polish them up. You can, of course, enhance your APEX applications with CSS and Javascript, but APEX took away the necessity of doing so to enable the development of attractive applications that would be easy to use. When we suddenly started sending out applications that looked like commercial products, it was an instant hit.</p> <h2>If you could add a feature to the next Oracle APEX release, what would that be?</h2> <p>We can already use Oracle Text in APEX, but perhaps some wizard-driven support of it could help more developers take advantage of this powerful tool, possibly as an enhancement to the Interactive Grid region.</p> <h2>What role do you see Oracle APEX playing in the future at Valdosta State University?</h2> <p>The role of APEX will be, as it has been, to enable data collection; to enhance users&#8217; ability to interact with all of the data available to us where it applies to them, whether collected via an APEX application or not; and to better enable the faculty, staff, and administration to educate and support the students&#8217; journey to success.<br /> <img class="alignnone size-vntd-portfolio-auto wp-image-7255" src="https://insum.ca/wp-content/uploads/2017/02/VSU_Success_Portal_2-450x413.png" alt="valdosta state alliance oracle apex" width="450" height="413" srcset="https://www.insum.ca/wp-content/uploads/2017/02/VSU_Success_Portal_2-450x413.png 450w, https://www.insum.ca/wp-content/uploads/2017/02/VSU_Success_Portal_2-300x275.png 300w, https://www.insum.ca/wp-content/uploads/2017/02/VSU_Success_Portal_2-768x704.png 768w, https://www.insum.ca/wp-content/uploads/2017/02/VSU_Success_Portal_2-1024x939.png 1024w, https://www.insum.ca/wp-content/uploads/2017/02/VSU_Success_Portal_2-880x807.png 880w, https://www.insum.ca/wp-content/uploads/2017/02/VSU_Success_Portal_2.png 1059w" sizes="(max-width: 450px) 100vw, 450px" /></p> <h2>For a college or university considering Oracle APEX, what single piece of advice would you give?</h2> <p>There are many technology stacks available to you, any one of which will work for your projects. The key, however, is to pick one of them and stick to it because supporting one stack is much easier than supporting four. If a large percentage of your team is experienced with a given tool and that tool can meet your needs, you may want to stick with it. On the other hand, especially if there isn&#8217;t one specific tool you are already using for everything or your current team is relatively inexperienced with that current tool or it cannot easily meet the needs of some of your projects, you should give serious consideration to APEX. It&#8217;s easy for Oracle DBAs/Developers to learn because the basic language of it is PL/SQL; the default styling and actions give APEX applications a very modern look and feel, including responsive design patterns to help you develop for screens of varying sizes; aside from that, though, it&#8217;s also easy for knowledgeable web developers to override/enhance those defaults because it provides many points where additional CSS or Javascript can be included; it&#8217;s easy to deploy a finished application to users because all they need is a current browser and the address to their application; the pages generated in an APEX application automatically include tags needed for support of the Web Content Accessibility Guidelines; and it&#8217;s extremely well supported by the APEX community, its development team, and Oracle as a whole.</p> <h2>Where do you go when you have APEX questions?</h2> <p>I generally start with Google and wherever it&#8217;s results may lead me. If I can&#8217;t find an answer that way, I&#8217;ll try searching the <a href="https://community.oracle.com/community/database/developer-tools/application_express">Oracle Application Express Oracle Technology Network (APEX OTN) </a>forum in particular to narrow down and improve my results. Then, if all of that fails to give me the answer I need, I will post my question to the forum and see what the community experts can tell me. This covers 99.9% of all questions I have ever had concerning APEX. On very rare occasion, I have tried to generate additional responses to my question by advertising it on <a href="http://apex.world/">apex.world</a> or Twitter, but I always post the question and look for responses to it at the forum.</p> <p>The post <a rel="nofollow" href="https://www.insum.ca/alliance-oracle-apex-success-stories-valdosta-state/">Road to Alliance &#8211; Higher Ed Oracle APEX Success Stories: Valdosta State</a> appeared first on <a rel="nofollow" href="https://www.insum.ca">Insum</a>.</p> Monty Latiolais https://insum.ca/?p=7251 Tue Feb 07 2017 16:17:15 GMT-0500 (EST) 2016 Blog Review http://www.grassroots-oracle.com/2017/02/2016-blog-review.html It's February, so it must be time to do this. I explore what thoughts arise from looking back, and forward to the future. It helps me to remember stuff, decide what to do, and apparently&nbsp;some people find it interesting.<br /><br /><h3>Tools</h3>So many tools. And I arguably don't use enough of them.<br /><br /><h4>APEX 5.1</h4>It's out and I'm excited. Unfortunately, scheduling is super tight, so I'll be waiting at my current site until hopefully around June, but I've certainly been enjoying the play on apex.oracle.com. I look forward in particular to the OracleJET built-in charts, we've got some great dashboarding ideas to explore.<br /><br />I've seen plenty of questions come through the forums on the Interactive Grid, but I'm by-passing most of those until I get the chance to use it. I sure know where it belongs, and I look forward to understanding how it ticks, and the implications it brings.<br /><br /><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://2.bp.blogspot.com/-Hi1nYyGt4uY/WJnQliljgEI/AAAAAAAAQoE/tJMmEZ-D1eoK9S8rVdpSmBFjjNXcNvSgwCLcB/s1600/jet_attempt.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="224" src="https://2.bp.blogspot.com/-Hi1nYyGt4uY/WJnQliljgEI/AAAAAAAAQoE/tJMmEZ-D1eoK9S8rVdpSmBFjjNXcNvSgwCLcB/s320/jet_attempt.png" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">JET plug-in - work in progress</td></tr></tbody></table><h4>OracleJET Visualisations</h4>After an interesting overview in the depths of OracleJET from Chris Muir, I assigned myself homework that's seen me quietly working away on some plugins, bringing OracleJET visualisation (charts) for use in 5.0. I'm not sure how successful the cultivation will become, but I am documenting my journey. Expect a decent series of articles on my process, but be patient. I've had a hiccup with JSON and I'm giving it a rest for a little bit.<br /><br /><h4>12c</h4>We have&nbsp;<a href="http://www.grassroots-oracle.com/search/label/12c" target="_blank">12c</a>&nbsp;at our main client site and I appreciate some of the features it brings, so much so I look forward to&nbsp;<a href="https://amitzil.wordpress.com/2016/09/22/oracle-12-2-cool-new-features/" target="_blank">12.2</a>, particularly <a href="http://www.grassroots-oracle.com/2017/01/truncating-listagg-prior-to-122.html" target="_blank">LISTAGG</a>.<br /><br />I particularly like&nbsp;<a href="http://www.grassroots-oracle.com/2016/10/decommissioning-triggers-in-12c.html" target="_blank">Identity columns</a>;&nbsp;the&nbsp;<a href="https://oracle-base.com/articles/12c/row-limiting-clause-for-top-n-queries-12cr1" target="_blank">row limiting clause</a>, though I probably abuse it sometimes; and I reckon I must spike page hits for Tim's post about&nbsp;<a href="https://oracle-base.com/articles/12c/lateral-inline-views-cross-apply-and-outer-apply-joins-12cr1" target="_blank">lateral &amp; outer apply</a>&nbsp;joins.<br /><br />I'm starting to explore performance benefits of PL/SQL in WITH clause, and the UDF pragma, among other features.<br /><br /><h4>JSON</h4>My colleague has done some interesting stuff with parsing incoming JSON using 12.1 SQL, and I'm slowly exploring with my plugin generation using APEX_JSON and LISTAGG. With made another step deeper into 12c by upping MAX_STRING_SIZE to allow for processing of larger JSON.<br /><br />I'm quite glad it's no longer XML.<br /><br />It seems 12.2 will be bringing the remainder of tools required to really get going with this. There's quite a lot of polish I've seen in this release that makes it an attractive upgrade.<br /><br /><h4>Atom</h4>After many, many years using <a href="https://www.textpad.com/" target="_blank">Textpad</a>, I'm giving other editors a go. <a href="https://atom.io/" target="_blank">Atom</a> has shown good promise, but I'm still yet to get it compiling my packages on a Windows box, though I haven't persisted.<br />There are some other minor niggles, but it does bring great benefits. I might give <a href="https://www.sublimetext.com/" target="_blank">Sublime</a> a fair go this year, however. There's beer in it for anyone who can get me compiling from a text editor that pleases me. Sorry, I only use <a href="http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads" target="_blank">SQL Developer</a> for ad-hoc queries, compiling from scripts, and <strike>some</strike> not enough built-in reports.<br /><br />I am casually interested in how Atom <a href="http://electron.atom.io/" target="_blank">was built</a>. I see Android Instant apps as being something to keep an eye on with this amazing JavaScript tech.<br /><br /><h4>JavaScript and node.js</h4>I really haven't given node.js a fair go, and if there was anything other than OracleJET visualisations that I want to learn this year, it's node.js. Maybe my QNAP will help me learn after all.<br /><br /><h4>Ubuntu</h4>As much as I see the benefits of running a linux based operating system, I think I just need to accept my fate as Windows proficient, using <a href="http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html" target="_blank">Virtualbox</a> when I can. Too many hurdles to transition operating systems when there is a world of user interface development to keep up with.<br /><br /><h4>ORDS</h4>I can't add much to this from this year, except we've had a steady keel for 12 months. I'd like to move to nearly whatever the current version is when we up to 5.1.<br />I did notice spikes in the connection pool that endangered other users when a page was opened containing an image gallery, particularly for a 'job' with a large number of associated images. We added pagination to that page to cap these spikes and keep them below our connection pool thresholds.<br /><br /><h3>Community</h3>Thanks to all those who answer <i>and</i> ask questions online (and at conferences, of course).<br /><br /><h4>ACE</h4>Plenty of <a href="https://oracle-base.com/blog/2016/11/15/the-oracle-ace-program-some-opinions/" target="_blank">hub</a>-<a href="http://debrasoracle.blogspot.com.au/2016/11/oracle-ace-program-victim-of-its-own.html" target="_blank">hub</a>&nbsp;this year about the Oracle ACE program, and the potential for a number of Ace Alumni to appear. It's going through a maturation phase. Let's wait for it to evolve and continue to recognise and potentially aid those people helping the community thrive and develop. Kudos to all those diligent experts out there who remain unrecognised within this particular program, but support their teams and community with their humble expertise.<br /><br />I'll continue to output stuff that helps me remember stuff and benefits other people, regardless of which side of the line I'll fall. Whatever helps my abstracts get submitted when I occasionally venture out in this giant planet ;p<br /><br /><h4>Blogging</h4>No real exciting stats to report this year. Growth minimal, but quite the regular heartbeat of visitors. Many of them me, looking up certain references. This is the very reason that tipped me over the edge when starting this blog, seeing this byline:<br /><blockquote class="tr_bq">"Oracle Things I Got to Remember Not to Forget" - <a href="http://nuijten.blogspot.com.au/" target="_blank">Alex</a></blockquote><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://1.bp.blogspot.com/-A2QZtzW6_1M/WJnS8BiA7WI/AAAAAAAAQoY/Vd1qSzgbSCog6CJ0Q0kJBmQB1kc3DaW3ACLcB/s1600/2016_blog_visits.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="250" src="https://1.bp.blogspot.com/-A2QZtzW6_1M/WJnS8BiA7WI/AAAAAAAAQoY/Vd1qSzgbSCog6CJ0Q0kJBmQB1kc3DaW3ACLcB/s400/2016_blog_visits.png" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">2016 Blog visitors - Lift your game, Greenland</td></tr></tbody></table><br />For some reason, my reference to Carsten's <a href="http://www.grassroots-oracle.com/2015/03/listagg-to-clob-avoid-4000-chr-limit.html" target="_blank">LISTAGG</a> function was the most popular this year. Perhaps because more people like us who are using this to generate larger JSON sets prior to 12.2?<br /><br />Also up there for hits was about one of my favourite APEX <a href="http://www.grassroots-oracle.com/2015/12/tutorial-include-action-button-in-report.html" target="_blank">development patterns</a>.<br /><br />It took until #22 in the most visits by page for a 2016 post, an important one on improving <a href="http://www.grassroots-oracle.com/2016/04/improving-plsql-performance-in-apex.html" target="_blank">PL/SQL performance</a> in APEX. Some of my favourites from this year include&nbsp;<a href="http://www.grassroots-oracle.com/2016/10/decommissioning-triggers-in-12c.html" target="_blank">decommissioning triggers</a>, and a <a href="http://www.grassroots-oracle.com/2016/08/how-to-debug-stuff-in-oracle-apex.html" target="_blank">debugging how-to</a> that may be a useful reference&nbsp;in the forums (#40).<br /><br />Spiking briefly was this Patterson-Gimlin style glance at <a href="http://www.grassroots-oracle.com/2016/12/apex-52-early-outlook.html" target="_blank">APEX 5.2</a><br /><br /><h4>APEX Sample Applications</h4>If you haven't heard, Dick&nbsp;Dral&nbsp;possibly leads the pack at the moment in regard to&nbsp;<a href="http://www.speech2form.com/ords/f?p=141:9020:::NO:9020::" target="_blank">sample applications</a>, I need to have more of a play in there. He's been a busy boy!<br /><br />While reviewing blog page hits I noticed activity&nbsp;<a href="http://www.grassroots-oracle.com/2015/02/apex-community-sample-applications.html" target="_blank">this page</a>&nbsp;where I started to catalogue my bookmarked list of community sample applications. Maybe I can finish modernising my sample app and make these more prominent, or find a better home elsewhere.<br /><div><br /></div><h4>Book</h4>For anyone who purchased a copy of my jQuery in APEX book, thank you, and I would recommend you re-source <a href="http://www.grassroots-oracle.com/2015/12/calling-plsql-from-javascript-in-apex.html" target="_blank">chapter 9</a> electronically. Somehow an early draft made it in but it has since been replaced, using what seems like a logistically amazing process in the world of publishing.<br /><br />If you like video format, I did this <a href="https://www.packtpub.com/application-development/oracle-apex-techniques-video" target="_blank">video series</a> for 4.x, but many principles still apply.<br /><br />While I've got a back-log to read, this <a href="https://www.mhprofessional.com/9781259640971-usa-real-world-sql-and-plsql-advice-from-the-experts-group" target="_blank">Real World SQL and PL/SQL</a>&nbsp;is hard to go past. Well done, gang.<br /><br /><h4>AI</h4><div>Because I like science and technology.<br /><br />Among other things, I predict forms of intelligent systems / AI will be a science we'll see more of in the world, solving problems that wouldn't immediately spring to mind. I also wonder if it will help clients become event&nbsp;thinner,&nbsp;so I can stop complaining about not having enough space for apps on my phone, even as a moderate user of apps.</div><div><br /></div><h4>Astronomy</h4>Because I've liked this since I was single digits.<br /><br />This year will mark the end of an amazing mission that I've been following for quite some time. Cassini has been exploring more than just Saturn as shown in this <a href="https://saturn.jpl.nasa.gov/the-journey/timeline/#revealing-titan" target="_blank">amazing timeline</a>. It's already committed on its fateful descent into Saturn in September.<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://2.bp.blogspot.com/-WVEnXBcDFjY/WJnRZWabfvI/AAAAAAAAQoM/LJrnpzu2-rY_jRqPvnTjKC4hKDlVCCqjwCLcB/s1600/saturn1.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://2.bp.blogspot.com/-WVEnXBcDFjY/WJnRZWabfvI/AAAAAAAAQoM/LJrnpzu2-rY_jRqPvnTjKC4hKDlVCCqjwCLcB/s320/saturn1.jpg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Saturn moon Iapetus</td></tr></tbody></table><br />I know in next year's review I'll be talking about the amazing&nbsp;<a href="https://en.wikipedia.org/wiki/James_Webb_Space_Telescope#/media/File:JWSTDeploymentSequence_v02122013.jpg" target="_blank">James Webb Space Telescope</a>, scheduled for launch around a year after Cassini farewells. This thing is going to be the biggest thing for astronomy since Hubble. Literally. The few weeks between launch and confirmation of a functioning telescope will be the most thrilling moment that represents years of work for thousands of engineers. There's no second chance like <a href="http://www.space.com/23640-hubble-space-telescope-repair-anniversary.html">Hubble had</a>, nor any service missions, not while still humanity struggles to exceed low earth orbit.<br /><br />Science, in general, is actually quite a big part of the current news cycles, but for all the wrong reasons. I wonder how this will change if China's&nbsp;<a href="https://en.wikipedia.org/wiki/Chang%27e_5">Chang'e&nbsp;5</a>&nbsp;makes it to the moon and back this year, making it the third country to achieve this amazing&nbsp;feat and the first in 40+ years. I wonder how POTUS will respond?<br /><div><br /></div><div>There is at least one reason to be in the land of the free this year, for on August 21 a&nbsp;<a href="https://www.wired.com/2016/12/biggest-space-news-look-forward-2017/">total solar eclipse</a>&nbsp;travels across the entire country, a rare event hopefully inspiring many budding young scientists.<br /><br /></div>Happy science, <a href="https://twitter.com/hashtag/actuallivingscientist?src=hash">everyone</a>. Scott Wesley tag:blogger.com,1999:blog-4818542164384221282.post-6903244934667932695 Tue Feb 07 2017 09:07:00 GMT-0500 (EST) APEX 5.1: Translate HTML5 Client-Side Validation Messages http://apexbyg.blogspot.com/2017/02/apex-51-translate-html5-client-side.html <div dir="ltr" style="text-align: left;" trbidi="on"><div class="separator" style="clear: both; text-align: justify;">You may know that in APEX 5.1 there&nbsp;are some new functionalities regarding client-side messaging - for example, the capability to <a href="http://anthonyrayner.blogspot.hr/2016/12/apex-51-client-side-messaging-and-apps.html" target="_blank">display success or error messages without a full page reload</a> or new <a href="http://apexbyg.blogspot.hr/2016/12/handling-client-side-messages-in-apex-51.html" target="_blank">JS API for handling client-side messages</a>. There are also enabled <a href="https://www.sitepoint.com/html5-form-validation/" target="_blank">HTML5 Form Validations</a>, so you may saw something like this in your apps:</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-mh_PqwzyQ54/WJmaL4qEIhI/AAAAAAAAEak/Gll4A5HjdD0zYKgIsSyOoopGR_ofbqgxgCLcB/s1600/Screen%2BShot%2B2017-02-07%2Bat%2B10.57.52.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="131" src="https://3.bp.blogspot.com/-mh_PqwzyQ54/WJmaL4qEIhI/AAAAAAAAEak/Gll4A5HjdD0zYKgIsSyOoopGR_ofbqgxgCLcB/s320/Screen%2BShot%2B2017-02-07%2Bat%2B10.57.52.png" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">The problem that I had is that the user wanted to translate those messages to the other language (in my case Croatian). I thought - no problem. I'll find those messages in the APEX messages dictionary and translate them to the Croatian. After some exploring I found out that those messages are actually browser depended and you can't translate them (the only option is to install browser in different language).</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Fortunately, the APEX development team has thought about this and you can override those messages by defining custom attribute named&nbsp;<span style="font-style: italic;">data-valid-message </span>under the item's Custom Attributes property:</div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: white; color: #222222; font-style: italic;"><br /></span></div><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-XUPmGtQEYVc/WJmrGfHYb3I/AAAAAAAAEa4/MFKQ2ojoipo2WQMSgyhO0RGvFcEX-lY3wCLcB/s1600/Screen%2BShot%2B2017-02-07%2Bat%2B12.09.56.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-XUPmGtQEYVc/WJmrGfHYb3I/AAAAAAAAEa4/MFKQ2ojoipo2WQMSgyhO0RGvFcEX-lY3wCLcB/s1600/Screen%2BShot%2B2017-02-07%2Bat%2B12.09.56.png" /></a></div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: white; color: #222222; font-style: italic;"><br /></span></div><div class="separator" style="clear: both; text-align: center;"><br /></div>And now the form should look like this:<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-Y8t-j0Scn88/WJmrmJMaUOI/AAAAAAAAEa8/DRCz7nNgibE58l0dPyNCrK44yL6rkytzACLcB/s1600/Screen%2BShot%2B2017-02-07%2Bat%2B12.12.07.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-Y8t-j0Scn88/WJmrmJMaUOI/AAAAAAAAEa8/DRCz7nNgibE58l0dPyNCrK44yL6rkytzACLcB/s1600/Screen%2BShot%2B2017-02-07%2Bat%2B12.12.07.png" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">If you don't want to do this for each and every item in your app you can create On Load Dynamic Action on Global Page (page 0) that looks like this:</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-Z17k6vP7FOc/WJmsPF0C4VI/AAAAAAAAEbI/OSq4hYXD8zEVJxzMNrtc5LfLjMHMsHpQgCLcB/s1600/Screen%2BShot%2B2017-02-07%2Bat%2B12.14.51.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-Z17k6vP7FOc/WJmsPF0C4VI/AAAAAAAAEbI/OSq4hYXD8zEVJxzMNrtc5LfLjMHMsHpQgCLcB/s1600/Screen%2BShot%2B2017-02-07%2Bat%2B12.14.51.png" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">which will add this attribute to all required fields.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">You can read more about the<i>&nbsp;data-valid-message</i> attribute in <a href="https://docs.oracle.com/database/apex-5.1/AEAPI/apex-item.htm#AEAPI-GUID-F818ECE0-A697-4EA7-B1BB-BFB25D62CC04" target="_blank">apex.item documentation</a>.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Enjoy!</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><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.0.00.45</i></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><br /></div><br /></div> Marko Gorički tag:blogger.com,1999:blog-1003209687173038896.post-3122156592005827665 Tue Feb 07 2017 06:25:00 GMT-0500 (EST) Netflix Genres http://feedproxy.google.com/~r/blogspot/fXPoB/~3/mRFS9aWasAc/netflix-genres.html Today Netflix posted a "secret" list of "easy to access" genres...easy for the technical person anyway. &nbsp;So I created this list to help you find them anytime you want. &nbsp;Save this post and just go directly to any genre.<br /><br />Action &amp; Adventure:&nbsp;<a href="http://www.netflix.com/browse/genre/1365">Go</a><br />Action Comedies:&nbsp;<a href="http://www.netflix.com/browse/genre/43040">Go</a><br />Action Sci-Fi &amp; Fantasy:&nbsp;<a href="http://www.netflix.com/browse/genre/1568">Go</a><br />Action Thrillers:&nbsp;<a href="http://www.netflix.com/browse/genre/43048">Go</a><br />Adult Animation:&nbsp;<a href="http://www.netflix.com/browse/genre/11881">Go</a><br />Adventures:&nbsp;<a href="http://www.netflix.com/browse/genre/7442">Go</a><br />African Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/3761">Go</a><br />Alien Sci-Fi:&nbsp;<a href="http://www.netflix.com/browse/genre/3327">Go</a><br />Animal Tales:&nbsp;<a href="http://www.netflix.com/browse/genre/5507">Go</a><br />Anime:&nbsp;<a href="http://www.netflix.com/browse/genre/7424">Go</a><br />Anime Action:&nbsp;<a href="http://www.netflix.com/browse/genre/2653">Go</a><br />Anime Comedies:&nbsp;<a href="http://www.netflix.com/browse/genre/9302">Go</a><br />Anime Dramas:&nbsp;<a href="http://www.netflix.com/browse/genre/452">Go</a><br />Anime Fantasy:&nbsp;<a href="http://www.netflix.com/browse/genre/11146">Go</a><br />Anime Features:&nbsp;<a href="http://www.netflix.com/browse/genre/3063">Go</a><br />Anime Horror:&nbsp;<a href="http://www.netflix.com/browse/genre/10695">Go</a><br />Anime Sci-Fi:&nbsp;<a href="http://www.netflix.com/browse/genre/2729">Go</a><br />Anime Series:&nbsp;<a href="http://www.netflix.com/browse/genre/6721">Go</a><br />Art House Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/29764">Go</a><br />Asian Action Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/77232">Go</a><br />Australian Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/5230">Go</a><br />B-Horror Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/8195">Go</a><br />Baseball Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/12339">Go</a><br />Basketball Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/12762">Go</a><br />Belgian Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/262">Go</a><br />Biographical Docs:&nbsp;<a href="http://www.netflix.com/browse/genre/3652">Go</a><br />Biographical Dramas:&nbsp;<a href="http://www.netflix.com/browse/genre/3179">Go</a><br />Boxing Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/12443">Go</a><br />British Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/10757">Go</a><br />British TV Shows:&nbsp;<a href="http://www.netflix.com/browse/genre/52117">Go</a><br />Campy Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/1252">Go</a><br />Children &amp; Family Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/783">Go</a><br />Chinese Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/3960">Go</a><br />Classic Action &amp; Adventure:&nbsp;<a href="http://www.netflix.com/browse/genre/46576">Go</a><br />Classic Comedies:&nbsp;<a href="http://www.netflix.com/browse/genre/31694">Go</a><br />Classic Dramas:&nbsp;<a href="http://www.netflix.com/browse/genre/29809">Go</a><br />Classic Foreign Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/32473">Go</a><br />Classic Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/31574">Go</a><br />Classic Musicals:&nbsp;<a href="http://www.netflix.com/browse/genre/32392">Go</a><br />Classic Romantic Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/31273">Go</a><br />Classic Sci-Fi &amp; Fantasy:&nbsp;<a href="http://www.netflix.com/browse/genre/47147">Go</a><br />Classic Thrillers:&nbsp;<a href="http://www.netflix.com/browse/genre/46588">Go</a><br />Classic TV Shows:&nbsp;<a href="http://www.netflix.com/browse/genre/46553">Go</a><br />Classic War Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/48744">Go</a><br />Classic Westerns:&nbsp;<a href="http://www.netflix.com/browse/genre/47465">Go</a><br />Comedies:&nbsp;<a href="http://www.netflix.com/browse/genre/6548">Go</a><br />Comic Book and Superhero:&nbsp;<a href="http://www.netflix.com/browse/genre/10118">Go</a><br />Country &amp; Western/Folk:&nbsp;<a href="http://www.netflix.com/browse/genre/1105">Go</a><br />Courtroom Dramas:&nbsp;<a href="http://www.netflix.com/browse/genre/2748">Go</a><br />Creature Features:&nbsp;<a href="http://www.netflix.com/browse/genre/6895">Go</a><br />Crime Action &amp; Adventure:&nbsp;<a href="http://www.netflix.com/browse/genre/9584">Go</a><br />Crime Documentaries:&nbsp;<a href="http://www.netflix.com/browse/genre/9875">Go</a><br />Crime Dramas:&nbsp;<a href="http://www.netflix.com/browse/genre/6889">Go</a><br />Crime Thrillers:&nbsp;<a href="http://www.netflix.com/browse/genre/10499">Go</a><br />Crime TV Shows:&nbsp;<a href="http://www.netflix.com/browse/genre/26146">Go</a><br />Cult Comedies:&nbsp;<a href="http://www.netflix.com/browse/genre/9434">Go</a><br />Cult Horror Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/10944">Go</a><br />Cult Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/7627">Go</a><br />Cult Sci-Fi &amp; Fantasy:&nbsp;<a href="http://www.netflix.com/browse/genre/4734">Go</a><br />Cult TV Shows:&nbsp;<a href="http://www.netflix.com/browse/genre/74652">Go</a><br />Dark Comedies:&nbsp;<a href="http://www.netflix.com/browse/genre/869">Go</a><br />Deep Sea Horror Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/45028">Go</a><br />Disney:&nbsp;<a href="http://www.netflix.com/browse/genre/67673">Go</a><br />Disney Musicals:&nbsp;<a href="http://www.netflix.com/browse/genre/59433">Go</a><br />Documentaries:&nbsp;<a href="http://www.netflix.com/browse/genre/6839">Go</a><br />Dramas:&nbsp;<a href="http://www.netflix.com/browse/genre/5763">Go</a><br />Dramas based on Books:&nbsp;<a href="http://www.netflix.com/browse/genre/4961">Go</a><br />Dramas based on real life:&nbsp;<a href="http://www.netflix.com/browse/genre/3653">Go</a><br />Dutch Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/10606">Go</a><br />Eastern European Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/5254">Go</a><br />Education for Kids:&nbsp;<a href="http://www.netflix.com/browse/genre/10659">Go</a><br />Epics:&nbsp;<a href="http://www.netflix.com/browse/genre/52858">Go</a><br />Experimental Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/11079">Go</a><br />Faith &amp; Spirituality:&nbsp;<a href="http://www.netflix.com/browse/genre/26835">Go</a><br />Faith &amp; Spirituality Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/52804">Go</a><br />Family Features:&nbsp;<a href="http://www.netflix.com/browse/genre/51056">Go</a><br />Fantasy Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/9744">Go</a><br />Film Noir:&nbsp;<a href="http://www.netflix.com/browse/genre/7687">Go</a><br />Food &amp; Travel TV:&nbsp;<a href="http://www.netflix.com/browse/genre/72436">Go</a><br />Football Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/12803">Go</a><br />Foreign Action &amp; Adventure:&nbsp;<a href="http://www.netflix.com/browse/genre/11828">Go</a><br />Foreign Comedies:&nbsp;<a href="http://www.netflix.com/browse/genre/4426">Go</a><br />Foreign Documentaries:&nbsp;<a href="http://www.netflix.com/browse/genre/5161">Go</a><br />Foreign Dramas:&nbsp;<a href="http://www.netflix.com/browse/genre/2150">Go</a><br />Foreign Gay &amp; Lesbian Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/8243">Go</a><br />Foreign Horror Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/8654">Go</a><br />Foreign Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/7462">Go</a><br />Foreign Sci-Fi &amp; Fantasy:&nbsp;<a href="http://www.netflix.com/browse/genre/6485">Go</a><br />Foreign Thrillers:&nbsp;<a href="http://www.netflix.com/browse/genre/10306">Go</a><br />French Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/58807">Go</a><br />Gangster Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/31851">Go</a><br />Gay &amp; Lesbian Dramas:&nbsp;<a href="http://www.netflix.com/browse/genre/500">Go</a><br />German Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/58886">Go</a><br />Greek Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/61115">Go</a><br />Historical Documentaries:&nbsp;<a href="http://www.netflix.com/browse/genre/5349">Go</a><br />Horror Comedy:&nbsp;<a href="http://www.netflix.com/browse/genre/89585">Go</a><br />Horror Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/8711">Go</a><br />Independent Action &amp; Adventure:&nbsp;<a href="http://www.netflix.com/browse/genre/11804">Go</a><br />Independent Comedies:&nbsp;<a href="http://www.netflix.com/browse/genre/4195">Go</a><br />Independent Dramas:&nbsp;<a href="http://www.netflix.com/browse/genre/384">Go</a><br />Independent Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/7077">Go</a><br />Independent Thrillers:&nbsp;<a href="http://www.netflix.com/browse/genre/3269">Go</a><br />Indian Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/10463">Go</a><br />Irish Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/58750">Go</a><br />Italian Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/8221">Go</a><br />Japanese Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/10398">Go</a><br />Jazz &amp; Easy Listening:&nbsp;<a href="http://www.netflix.com/browse/genre/10271">Go</a><br />Kids Faith &amp; Spirituality:&nbsp;<a href="http://www.netflix.com/browse/genre/751423">Go</a><br />Kids Music:&nbsp;<a href="http://www.netflix.com/browse/genre/52843">Go</a><br />Kids' TV:&nbsp;<a href="http://www.netflix.com/browse/genre/27346">Go</a><br />Korean Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/5685">Go</a><br />Korean TV Shows:&nbsp;<a href="http://www.netflix.com/browse/genre/67879">Go</a><br />Late Night Comedies:&nbsp;<a href="http://www.netflix.com/browse/genre/1402">Go</a><br />Latin American Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/1613">Go</a><br />Latin Music:&nbsp;<a href="http://www.netflix.com/browse/genre/10741">Go</a><br />Martial Arts Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/8985">Go</a><br />Martial Arts, Boxing &amp; Wrestling:&nbsp;<a href="http://www.netflix.com/browse/genre/6695">Go</a><br />Middle Eastern Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/5875">Go</a><br />Military Action &amp; Adventure:&nbsp;<a href="http://www.netflix.com/browse/genre/2125">Go</a><br />Military Documentaries:&nbsp;<a href="http://www.netflix.com/browse/genre/4006">Go</a><br />Military Dramas:&nbsp;<a href="http://www.netflix.com/browse/genre/11">Go</a><br />Military TV Shows:&nbsp;<a href="http://www.netflix.com/browse/genre/25804">Go</a><br />Miniseries:&nbsp;<a href="http://www.netflix.com/browse/genre/4814">Go</a><br />Mockumentaries:&nbsp;<a href="http://www.netflix.com/browse/genre/26">Go</a><br />Monster Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/947">Go</a><br />Movies based on children's books:&nbsp;<a href="http://www.netflix.com/browse/genre/10056">Go</a><br />Movies for ages 0 to 2:&nbsp;<a href="http://www.netflix.com/browse/genre/6796">Go</a><br />Movies for ages 2 to 4:&nbsp;<a href="http://www.netflix.com/browse/genre/6218">Go</a><br />Movies for ages 5 to 7:&nbsp;<a href="http://www.netflix.com/browse/genre/5455">Go</a><br />Movies for ages 8 to 10:&nbsp;<a href="http://www.netflix.com/browse/genre/561">Go</a><br />Movies for ages 11 to 12:&nbsp;<a href="http://www.netflix.com/browse/genre/6962">Go</a><br />Music &amp; Concert Documentaries:&nbsp;<a href="http://www.netflix.com/browse/genre/90361">Go</a><br />Music:&nbsp;<a href="http://www.netflix.com/browse/genre/1701">Go</a><br />Musicals:&nbsp;<a href="http://www.netflix.com/browse/genre/13335">Go</a><br />Mysteries:&nbsp;<a href="http://www.netflix.com/browse/genre/9994">Go</a><br />New Zealand Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/63782">Go</a><br />Period Pieces:&nbsp;<a href="http://www.netflix.com/browse/genre/12123">Go</a><br />Political Comedies:&nbsp;<a href="http://www.netflix.com/browse/genre/2700">Go</a><br />Political Documentaries:&nbsp;<a href="http://www.netflix.com/browse/genre/7018">Go</a><br />Political Dramas:&nbsp;<a href="http://www.netflix.com/browse/genre/6616">Go</a><br />Political Thrillers:&nbsp;<a href="http://www.netflix.com/browse/genre/10504">Go</a><br />Psychological Thrillers:&nbsp;<a href="http://www.netflix.com/browse/genre/5505">Go</a><br />Quirky Romance:&nbsp;<a href="http://www.netflix.com/browse/genre/36103">Go</a><br />Reality TV:&nbsp;<a href="http://www.netflix.com/browse/genre/9833">Go</a><br />Religious Documentaries:&nbsp;<a href="http://www.netflix.com/browse/genre/10005">Go</a><br />Rock &amp; Pop Concerts:&nbsp;<a href="http://www.netflix.com/browse/genre/3278">Go</a><br />Romantic Comedies:&nbsp;<a href="http://www.netflix.com/browse/genre/5475">Go</a><br />Romantic Dramas:&nbsp;<a href="http://www.netflix.com/browse/genre/1255">Go</a><br />Romantic Favorites:&nbsp;<a href="http://www.netflix.com/browse/genre/502675">Go</a><br />Romantic Foreign Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/7153">Go</a><br />Romantic Independent Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/9916">Go</a><br />Romantic Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/8883">Go</a><br />Russian:&nbsp;<a href="http://www.netflix.com/browse/genre/11567">Go</a><br />Satanic Stories:&nbsp;<a href="http://www.netflix.com/browse/genre/6998">Go</a><br />Satires:&nbsp;<a href="http://www.netflix.com/browse/genre/4922">Go</a><br />Scandinavian Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/9292">Go</a><br />Sci-Fi &amp; Fantasy:&nbsp;<a href="http://www.netflix.com/browse/genre/1492">Go</a><br />Sci-Fi Adventure:&nbsp;<a href="http://www.netflix.com/browse/genre/6926">Go</a><br />Sci-Fi Dramas:&nbsp;<a href="http://www.netflix.com/browse/genre/3916">Go</a><br />Sci-Fi Horror Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/1694">Go</a><br />Sci-Fi Thrillers:&nbsp;<a href="http://www.netflix.com/browse/genre/11014">Go</a><br />Science &amp; Nature Documentaries:&nbsp;<a href="http://www.netflix.com/browse/genre/2595">Go</a><br />Science &amp; Nature TV:&nbsp;<a href="http://www.netflix.com/browse/genre/52780">Go</a><br />Screwball Comedies:&nbsp;<a href="http://www.netflix.com/browse/genre/9702">Go</a><br />Showbiz Dramas:&nbsp;<a href="http://www.netflix.com/browse/genre/5012">Go</a><br />Showbiz Musicals:&nbsp;<a href="http://www.netflix.com/browse/genre/13573">Go</a><br />Silent Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/53310">Go</a><br />Slapstick Comedies:&nbsp;<a href="http://www.netflix.com/browse/genre/10256">Go</a><br />Slasher and Serial Killer Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/8646">Go</a><br />Soccer Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/12549">Go</a><br />Social &amp; Cultural Documentaries:&nbsp;<a href="http://www.netflix.com/browse/genre/3675">Go</a><br />Social Issue Dramas:&nbsp;<a href="http://www.netflix.com/browse/genre/3947">Go</a><br />Southeast Asian Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/9196">Go</a><br />Spanish Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/58741">Go</a><br />Spiritual Documentaries:&nbsp;<a href="http://www.netflix.com/browse/genre/2760">Go</a><br />Sports &amp; Fitness:&nbsp;<a href="http://www.netflix.com/browse/genre/9327">Go</a><br />Sports Comedies:&nbsp;<a href="http://www.netflix.com/browse/genre/5286">Go</a><br />Sports Documentaries:&nbsp;<a href="http://www.netflix.com/browse/genre/180">Go</a><br />Sports Dramas:&nbsp;<a href="http://www.netflix.com/browse/genre/7243">Go</a><br />Sports Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/4370">Go</a><br />Spy Action &amp; Adventure:&nbsp;<a href="http://www.netflix.com/browse/genre/10702">Go</a><br />Spy Thrillers:&nbsp;<a href="http://www.netflix.com/browse/genre/9147">Go</a><br />Stage Musicals:&nbsp;<a href="http://www.netflix.com/browse/genre/55774">Go</a><br />Stand-up Comedy:&nbsp;<a href="http://www.netflix.com/browse/genre/11559">Go</a><br />Steamy Romantic Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/35800">Go</a><br />Steamy Thrillers:&nbsp;<a href="http://www.netflix.com/browse/genre/972">Go</a><br />Supernatural Horror Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/42023">Go</a><br />Supernatural Thrillers:&nbsp;<a href="http://www.netflix.com/browse/genre/11140">Go</a><br />Tearjerkers:&nbsp;<a href="http://www.netflix.com/browse/genre/6384">Go</a><br />Teen Comedies:&nbsp;<a href="http://www.netflix.com/browse/genre/3519">Go</a><br />Teen Dramas:&nbsp;<a href="http://www.netflix.com/browse/genre/9299">Go</a><br />Teen Screams:&nbsp;<a href="http://www.netflix.com/browse/genre/52147">Go</a><br />Teen TV Shows:&nbsp;<a href="http://www.netflix.com/browse/genre/60951">Go</a><br />Thrillers:&nbsp;<a href="http://www.netflix.com/browse/genre/8933">Go</a><br />Travel &amp; Adventure Documentaries:&nbsp;<a href="http://www.netflix.com/browse/genre/1159">Go</a><br />TV Action &amp; Adventure:&nbsp;<a href="http://www.netflix.com/browse/genre/10673">Go</a><br />TV Cartoons:&nbsp;<a href="http://www.netflix.com/browse/genre/11177">Go</a><br />TV Comedies:&nbsp;<a href="http://www.netflix.com/browse/genre/10375">Go</a><br />TV Documentaries:&nbsp;<a href="http://www.netflix.com/browse/genre/10105">Go</a><br />TV Dramas:&nbsp;<a href="http://www.netflix.com/browse/genre/11714">Go</a><br />TV Horror:&nbsp;<a href="http://www.netflix.com/browse/genre/83059">Go</a><br />TV Mysteries:&nbsp;<a href="http://www.netflix.com/browse/genre/4366">Go</a><br />TV Sci-Fi &amp; Fantasy:&nbsp;<a href="http://www.netflix.com/browse/genre/1372">Go</a><br />TV Shows:&nbsp;<a href="http://www.netflix.com/browse/genre/83">Go</a><br />Urban &amp; Dance Concerts:&nbsp;<a href="http://www.netflix.com/browse/genre/9472">Go</a><br />Vampire Horror Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/75804">Go</a><br />Werewolf Horror Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/75930">Go</a><br />Westerns:&nbsp;<a href="http://www.netflix.com/browse/genre/7700">Go</a><br />World Music Concerts:&nbsp;<a href="http://www.netflix.com/browse/genre/2856">Go</a><br />Zombie Horror Movies:&nbsp;<a href="http://www.netflix.com/browse/genre/75405">Go</a><img src="http://feeds.feedburner.com/~r/blogspot/fXPoB/~4/mRFS9aWasAc" height="1" width="1" alt=""/> Bradley D. Brown tag:blogger.com,1999:blog-5678424368747750223.post-3706783816933384661 Mon Feb 06 2017 12:10:00 GMT-0500 (EST) Adding Font Awesome to a Yeoman Generated JET Project https://jsao.io/2017/02/adding-font-awesome-to-a-yeoman-generated-jet-project/ <p>Oracle JET, Oracle&#8217;s JavaScript toolkit for single page apps, includes <a href="http://www.oracle.com/webfolder/technetwork/jet/jetCookbook.html">over 80 components</a> to help build enterprise JavaScript applications. But one thing JET doesn&#8217;t include is a set of icons &#8211; the argument being that different apps and teams will likely choose different icons. Luckily, it&#8217;s not too difficult to add <a href="http://fontawesome.io/">Font Awesome</a> to a JET app. If you&#8217;re using one of <a href="http://www.oracle.com/webfolder/technetwork/jet/globalExamples.html">the starter apps</a> without the Yeoman generator, have a look at <a href="https://blogs.oracle.com/emeapartnerweblogic/entry/adding_fontawesome_to_oracle_jet">Paul Thaden&#8217;s post</a> on adding Font Awesome. In this post, I&#8217;ll show you how to add Font Awesome to a project created via the <a href="http://www.oracle.com/webfolder/technetwork/jet/globalGetStarted.html">Yeoman generator</a>.<br /> <span id="more-1792"></span><br /> For those who haven&#8217;t used it, Yeoman is a scaffolding tool designed to help kickstart new projects by running scripts called generators. Generators are often used to create opinionated starter apps with best practices and build scripts built in. The JET generator installs a sample app and includes a Grunt-based build system that can be customized as needed.</p> <h3>Creating a New Project</h3> <p>Let&#8217;s start by creating a new JET project. Skip to the <a href="#adding-font-awesome">next part</a> if you&#8217;d like to add Font Awesome to an existing app created via the generator. Assuming you already have Node.js installed (I&#8217;m using v6.9.5), let&#8217;s install some dependencies the JET generator requires as well as the generator itself.</p> <pre class="crayon-plain-tag">npm -g install yo bower grunt-cli npm -g install generator-oraclejet</pre> <p>When those installs complete, you can verify the installation of the JET generator by showing its help. This is also a good way to get the template names if you forget them.</p><pre class="crayon-plain-tag">yo oraclejet --help</pre><p> If everything is working correctly, you should see output like the following:</p> <p><a href="https://jsao.io/wp-content/uploads/2017/02/yo-oraclejet-help.png" rel="prettyPhoto[gallery-JgAd]"><img src="https://jsao.io/wp-content/uploads/2017/02/yo-oraclejet-help.png" alt="" width="802" height="162" class="alignnone size-full wp-image-1814" srcset="https://jsao.io/wp-content/uploads/2017/02/yo-oraclejet-help.png 802w, https://jsao.io/wp-content/uploads/2017/02/yo-oraclejet-help-300x61.png 300w, https://jsao.io/wp-content/uploads/2017/02/yo-oraclejet-help-768x155.png 768w" sizes="(max-width: 802px) 100vw, 802px" /></a><br /> With the JET generator and its dependencies installed, we can now create a new JET project. I&#8217;ll use the web (default) version of the navdrawer template.</p><pre class="crayon-plain-tag">yo oraclejet my-jet-project --template=navdrawer</pre><p> When that completes, we can <span class="inline-code">cd</span> into our new project directory and run a Grunt task named <span class="inline-code">serve</span> (which will run the <span class="inline-code">build</span> task too with default options). The <span class="inline-code">build</span> task will copy files to staging, compile SASS files, etc. &#8211; basically get the app into a state in which we can run it. The <span class="inline-code">build</span> task can be called independently with additional options, such as the target platform and theme.</p> <p>The <span class="inline-code">serve</span> task will start a basic web server to serve the app&#8217;s files and then open the app in your default browser. Additionally, <span class="inline-code">serve</span> will setup file watchers on the source files and use LiveReload to refresh the browser when the source files are changed.</p><pre class="crayon-plain-tag">cd my-jet-project grunt serve</pre><p> When the build script finishes you should see application open in a browser:</p> <p><a href="https://jsao.io/wp-content/uploads/2017/02/navdrawer-app.png" rel="prettyPhoto[gallery-JgAd]"><img src="https://jsao.io/wp-content/uploads/2017/02/navdrawer-app.png" alt="" width="802" height="258" class="alignnone size-full wp-image-1819" srcset="https://jsao.io/wp-content/uploads/2017/02/navdrawer-app.png 802w, https://jsao.io/wp-content/uploads/2017/02/navdrawer-app-300x97.png 300w, https://jsao.io/wp-content/uploads/2017/02/navdrawer-app-768x247.png 768w" sizes="(max-width: 802px) 100vw, 802px" /></a></p> <p>Return to the terminal and press <span class="inline-code">ctrl + c</span> to stop the Grunt <span class="inline-code">serve</span> task. With the new app in place, we are ready to add Font Awesome!</p> <h3 id="adding-font-awesome">Adding Font Awesome</h3> <p>JET uses Bower as its front-end dependency manager so that&#8217;s how we&#8217;ll download Font Awesome.</p><pre class="crayon-plain-tag">bower install font-awesome --save</pre><p> When that completes, you should see a new <span class="inline-code">font-awesome</span> directory under <span class="inline-code">my-jet-app/bower_components</span>.</p> <p>The next step is to update the <span class="inline-code">bowercopy.js</span> file under <span class="inline-code">my-jet-app/scripts/grunt/config</span> so that the required Font Awesome files are coppied when the <span class="inline-code">bowercopy</span> task is run (more on that next).</p> <p>Exactly how <span class="inline-code">bowercopy.js</span> is modified can vary depending on your needs. I wanted the Font Awesome files to be with my project&#8217;s CSS files so I added a new entry for 3rd party CSS. Note the leading comma, which separates the <span class="inline-code">thirdParty</span> entry at the bottom of the file from the <span class="inline-code">thirdPartyCss</span> entry being added.</p> <pre class="crayon-plain-tag">, thirdPartyCss: { options: { destPrefix: &quot;src/css/libs&quot; }, files: { &quot;font-awesome/css/font-awesome.css&quot;: &quot;font-awesome/css/font-awesome.css&quot;, &quot;font-awesome/css/font-awesome.css.map&quot;: &quot;font-awesome/css/font-awesome.css.map&quot;, &quot;font-awesome/css/font-awesome.min.css&quot;: &quot;font-awesome/css/font-awesome.min.css&quot;, &quot;font-awesome/fonts/fontawesome-webfont.woff2&quot;: &quot;font-awesome/fonts/fontawesome-webfont.woff2&quot;, &quot;font-awesome/fonts/fontawesome-webfont.woff&quot;: &quot;font-awesome/fonts/fontawesome-webfont.woff&quot;, &quot;font-awesome/fonts/fontawesome-webfont.ttf&quot;: &quot;font-awesome/fonts/fontawesome-webfont.ttf&quot; } }</pre> <p>After updating <span class="inline-code">bowercopy.js</span>, we need to run the <span class="inline-code">bowercopy</span> task. This task copies files from <span class="inline-code">bower_components</span> to the destinations defined in <span class="inline-code">bowercopy.js</span>. As such, <span class="inline-code">bowercopy</span> only needs to be run when we add, change, or remove Bower components or make a change to <span class="inline-code">bowercopy.js</span>.</p> <pre class="crayon-plain-tag">grunt bowercopy</pre> <p>Now that the Font Awesome files have been copied to our source code, we need to include the Font Awesome CSS file in our application. Open the <span class="inline-code">index.html</span> file found under <span class="inline-code">my-jet-project/src</span> in a text editor and add the following line in the head section under the comments related to &#8220;app specific styling&#8221;. </p> <pre class="crayon-plain-tag">&lt;link rel=&quot;stylesheet&quot; href=&quot;css/libs/font-awesome/css/font-awesome.min.css&quot; type=&quot;text/css&quot;/&gt;</pre> <p>With the CSS included, we can now use Font Awesome icons! As a demonstration, I&#8217;ll replace the icons used in the navigation menu with Font Awesome icons. This can be done by replacing the <span class="inline-code">navData</span> in the <span class="inline-code">appController.js</span> file found under <span class="inline-code">my-jet-project/src/js</span> with the following code (notice the fa-* classes).</p> <pre class="crayon-plain-tag">// Navigation setup var navData = [ {name: 'Dashboard', id: 'dashboard', iconClass: 'oj-navigationlist-item-icon fa fa-tachometer fa-2x'}, {name: 'Incidents', id: 'incidents', iconClass: 'oj-navigationlist-item-icon fa fa-fire fa-2x'}, {name: 'Customers', id: 'customers', iconClass: 'oj-navigationlist-item-icon fa fa-users fa-2x'}, {name: 'About', id: 'about', iconClass: 'oj-navigationlist-item-icon fa fa-info-circle fa-2x'} ];</pre> <p>Once the changes are saved, you should be able to run another <span class="inline-code">grunt serve</span> and when the application opens, it should look a little different (compare to the previous image from above).</p> <p><a href="https://jsao.io/wp-content/uploads/2017/02/navdrawer-app-with-fa.png" rel="prettyPhoto[gallery-JgAd]"><img src="https://jsao.io/wp-content/uploads/2017/02/navdrawer-app-with-fa.png" alt="" width="802" height="265" class="alignnone size-full wp-image-1844" srcset="https://jsao.io/wp-content/uploads/2017/02/navdrawer-app-with-fa.png 802w, https://jsao.io/wp-content/uploads/2017/02/navdrawer-app-with-fa-300x99.png 300w, https://jsao.io/wp-content/uploads/2017/02/navdrawer-app-with-fa-768x254.png 768w" sizes="(max-width: 802px) 100vw, 802px" /></a><br /> In this particular case, I actually like the original icons a little more than the Font Awesome equivilents. But at least now we have hundreds of icons we can put to use&#8230; Happy coding!</p> danmcghan https://jsao.io/?p=1792 Mon Feb 06 2017 10:21:44 GMT-0500 (EST) Generate log statements in seconds http://warp11.nl/2017/02/generate-log-statements-in-seconds/ <div> <div class="post-body entry-content" id="post-body-3124299527277674627"> One of the things that cost me a lot of time is the writing of log statements.<br /> I do it a lot when I am working on complex PL/SQL or JavaScript routines. Just to understand what&#8217;s happening. Mostly these log statements have the form:</p> <p> <span>logger.log(&#8216;varname1=&#8217;||varname1||&#8217;, varname2=&#8217;||varname2, etc&#8230; );</span><br /><span><br /></span><br /> <span>and most of the time the variable names are even longer :-(. </span><br /><span>So it is a lot of typing, especially for something that is deleted after a few hours. As I am into automating my job I decided to automate it. Here you can see it in action: </span><br /><span><br /></span><br /> </p> <div class="separator"> <a href="https://3.bp.blogspot.com/-0Kc4fLaFugM/WJZTvqpXaoI/AAAAAAAAAeQ/mZa8TEjVKyITN_laRoTVZXatS_ZR3-1ZACLcB/s1600/988de98530f42b042e52770c7e41538d.gif"><img border="0" height="370" src="http://warp11.nl/wp-content/uploads/2017/02/988de98530f42b042e52770c7e41538d.gif" width="640" /></a></div> <p><span><br /></span><br /> <span>The selection and generation is all written in JavaScript. You can see how fast it works ( it is recorded in real time ). The code is pasted in the textarea, variables are selected by clicking and then the log statement(s) can be generated. </span><br /><span><br /></span><br /> <span>You can find the page here:</span><br /><span><br /></span><br /> <a href="http://www.speech2form.com/ords/f?p=OPFG:GEN_LOG_STMT" target="_blank"><span>http://www.speech2form.com/ords/f?p=OPFG:GEN_LOG_STMT</span></a><br /><span><br /></span><br /> <span>The page supports PL/SQL and JavaScript. For PL/SQL the identifier naming rules are quite strict, so these are implemented. At the moment the same rules are also applied to JavaScript. </span><br /><span><i>NB As JavaScript rules are very free, some variables might not be recognized, for example when they contain diacritics.</i></span><br /><span><br /></span><br /> <span>For PL/SQL you can select logger or apex_debug, for JavaScript console.log statements are generated. </span><br /><span>There is an option to generate mulitple calls or combine all variables in one call. </span><br /><span><br /></span><br /> <span>I have tested this with PL/SQL and JavaScript and I could run the generated code as is, no changes were needed. </span><br /><span><br /></span><br /> <span>Happy Apexing and JavasScripting</span></p> </div> </div> <p>Source Article from <a href="http://dickdral.blogspot.com/2017/02/generate-log-statements-in-seconds.html">http://dickdral.blogspot.com/2017/02/generate-log-statements-in-seconds.html</a></p> Dick Dral http://warp11.nl/2017/02/generate-log-statements-in-seconds/ Mon Feb 06 2017 09:05:44 GMT-0500 (EST) Generate log statements in seconds http://dickdral.blogspot.com/2017/02/generate-log-statements-in-seconds.html One of the things that cost me a lot of time is the writing of log statements.<br />I do it a lot when I am working on complex PL/SQL or JavaScript routines. Just to understand what's happening. Mostly these log statements have the form:<br /><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">logger.log('varname1='||varname1||', varname2='||varname2, etc... );</span><br /><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;"><br /></span><span style="font-family: &quot;times&quot; , &quot;times new roman&quot; , serif;">and most of the time the variable names are even longer :-(.&nbsp;</span><br /><span style="font-family: &quot;times&quot; , &quot;times new roman&quot; , serif;">So it is a lot of typing, especially for something that is deleted after a few hours. As I am into automating my job I decided to automate it. Here you can see it in action:&nbsp;</span><br /><span style="font-family: &quot;times&quot; , &quot;times new roman&quot; , serif;"><br /></span><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-0Kc4fLaFugM/WJZTvqpXaoI/AAAAAAAAAeQ/mZa8TEjVKyITN_laRoTVZXatS_ZR3-1ZACLcB/s1600/988de98530f42b042e52770c7e41538d.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="370" src="https://3.bp.blogspot.com/-0Kc4fLaFugM/WJZTvqpXaoI/AAAAAAAAAeQ/mZa8TEjVKyITN_laRoTVZXatS_ZR3-1ZACLcB/s640/988de98530f42b042e52770c7e41538d.gif" width="640" /></a></div><span style="font-family: &quot;times&quot; , &quot;times new roman&quot; , serif;"><br /></span><span style="font-family: &quot;times&quot; , &quot;times new roman&quot; , serif;">The selection and generation is all written in JavaScript. You can see how fast it works ( it is recorded in real time ). The code is pasted in the textarea, variables are selected by clicking and then the log statement(s) can be generated.&nbsp;</span><br /><span style="font-family: &quot;times&quot; , &quot;times new roman&quot; , serif;"><br /></span><span style="font-family: &quot;times&quot; , &quot;times new roman&quot; , serif;">You can find the page here:</span><br /><span style="font-family: &quot;times&quot; , &quot;times new roman&quot; , serif;"><br /></span><a href="http://www.speech2form.com/ords/f?p=OPFG:GEN_LOG_STMT" target="_blank"><span style="font-family: &quot;courier new&quot; , &quot;courier&quot; , monospace; font-size: x-small;">http://www.speech2form.com/ords/f?p=OPFG:GEN_LOG_STMT</span></a><br /><span style="font-family: &quot;times&quot; , &quot;times new roman&quot; , serif;"><br /></span><span style="font-family: &quot;times&quot; , &quot;times new roman&quot; , serif;">The page supports PL/SQL and JavaScript. For PL/SQL the identifier naming rules are quite strict, so these are implemented. At the moment the same rules are also applied to JavaScript.&nbsp;</span><br /><span style="font-family: &quot;times&quot; , &quot;times new roman&quot; , serif;"><i>NB As JavaScript rules are very free, some variables might not be recognized, for example when they contain diacritics.</i></span><br /><span style="font-family: &quot;times&quot; , &quot;times new roman&quot; , serif;"><br /></span><span style="font-family: &quot;times&quot; , &quot;times new roman&quot; , serif;">For PL/SQL you can select logger or apex_debug, for JavaScript console.log statements are generated.&nbsp;</span><br /><span style="font-family: &quot;times&quot; , &quot;times new roman&quot; , serif;">There is an option to generate mulitple calls or combine all variables in one call.&nbsp;</span><br /><span style="font-family: &quot;times&quot; , &quot;times new roman&quot; , serif;"><br /></span><span style="font-family: &quot;times&quot; , &quot;times new roman&quot; , serif;">I have tested this with PL/SQL and JavaScript and I could run the generated code as is, no changes were needed.&nbsp;</span><br /><span style="font-family: &quot;times&quot; , &quot;times new roman&quot; , serif;"><br /></span><span style="font-family: &quot;times&quot; , &quot;times new roman&quot; , serif;">Happy Apexing and JavasScripting</span> Dick Dral tag:blogger.com,1999:blog-4312362131290962824.post-3124299527277674627 Mon Feb 06 2017 09:05:00 GMT-0500 (EST) JET Charts in Application Express 5.1 https://blogs.oracle.com/apex/entry/jet_charts_in_application_express <div> <p><font face="tahoma, arial, helvetica, sans-serif" size="2"><img src="https://blogs.oracle.com/apex/resource/logo-apx51jet.png" width="120" alt="APEX Charts Logo" align="right" hspace="10" vspace="5" />One of the most-mentioned new features in Application Express 5.1 are the new <b>Charts based on</b> <b>Oracle JET</b>. JET&nbsp;is targeted at intermediate to advanced JavaScript developers working on client-side applications. It's a collection of open source JavaScript libraries along with a set of Oracle contributed JavaScript libraries that make it as simple and efficient as possible to build applications that consume and interact with Oracle products and services, especially Oracle Cloud services.&nbsp;</font></p> </div> <div> <div><font face="tahoma, arial, helvetica, sans-serif" size="2">Oracle JET contains a lot of components for <i>data visualization</i> - and these are the foundation for the new HTML5 based chart types in Application Express 5.1. Our <a href="https://apex.oracle.com/pls/apex/germancommunities/apexcommunity/tipp/5841/index-en.html" target="_blank" title="Blog Posting on Oracle JET Charts in Application Express 5.1">latest blog posting</a> introduces these modern, responsive and accessible charts, describes their features and how to upgrade applications from a previous Application Express release.</font></div> </div> Carsten Czarski-Oracle https://blogs.oracle.com/apex/entry/jet_charts_in_application_express Mon Feb 06 2017 08:00:00 GMT-0500 (EST) JET Charts in Application Express 5.1 https://blogs.oracle.com/apex/entry/jet_charts_in_application_express <div> <p><font face="tahoma, arial, helvetica, sans-serif" size="2"><img src="https://blogs.oracle.com/apex/resource/logo-apx51jet.png" width="120" alt="APEX Charts Logo" align="right" hspace="10" vspace="5" />One of the most-mentioned new features in Application Express 5.1 are the new <b>Charts based on</b> <b>Oracle JET</b>. JET&nbsp;is targeted at intermediate to advanced JavaScript developers working on client-side applications. It's a collection of open source JavaScript libraries along with a set of Oracle contributed JavaScript libraries that make it as simple and efficient as possible to build applications that consume and interact with Oracle products and services, especially Oracle Cloud services.&nbsp;</font></p> </div> <div> <div><font face="tahoma, arial, helvetica, sans-serif" size="2">Oracle JET contains a lot of components for <i>data visualization</i> - and these are the foundation for the new HTML5 based chart types in Application Express 5.1. Our <a href="https://apex.oracle.com/pls/apex/germancommunities/apexcommunity/tipp/5841/index-en.html" target="_blank" title="Blog Posting on Oracle JET Charts in Application Express 5.1">latest blog posting</a> introduces these modern, responsive and accessible charts, describes their features and how to upgrade applications from a previous Application Express release.</font></div> </div> Carsten Czarski-Oracle https://blogs.oracle.com/apex/entry/jet_charts_in_application_express Mon Feb 06 2017 08:00:00 GMT-0500 (EST) JET Charts in Application Express 5.1: Erste Schritte, Tipps & Tricks https://blogs.oracle.com/apexcommunity_deutsch/entry/jet_charts_in_application_express <div> <p><img src="https://blogs.oracle.com/apexcommunity_deutsch/resource/logo-apx51jet.png" width="120" alt="Logo APEX Diagramme" align="right" hspace="10" vspace="5" /><font face="tahoma, arial, helvetica, sans-serif" size="2">Eines der neuen Features im neuen Application Express Release 5.1 sind die <b>neuen Charts auf Basis von Oracle JET</b>. JET steht für <b>J</b>avascript <b>E</b>xtension <b>T</b>oolkit und ist eine Bibliotheks- und Utility-Sammlung für Javascript-Entwickler. Diese finden in Oracle JET alles, was sie brauchen, um damit reine Javascript-Anwendungen zu erstellen.</font> </p> </div> <div><font face="tahoma, arial, helvetica, sans-serif" size="2">Oracle JET enthält auch eine Reihe von Komponenten zur <i>Visualisierung von Daten</i> - und genau diese wurden als Grundlage für die neuen Application Express Diagramme verwendet. Unser <a href="https://apex.oracle.com/pls/apex/germancommunities/apexcommunity/tipp/5841/index.html" target="_blank" title="Community-Tipp &quot;APEX Charts auf Basis von Oracle JET&quot;">aktueller Community-Tipp</a> stellt diese neuen, auf HTML5 basierenden Diagrammtypen vor, zeigt auf, was neu ist und geht auch auf Themen wie Upgrade von Diagrammen aus älteren APEX-Versionen oder die Möglichkeiten der Konfiguration mit Javascript ein.</font></div> <div> </div> Carsten Czarski-Oracle https://blogs.oracle.com/apexcommunity_deutsch/entry/jet_charts_in_application_express Mon Feb 06 2017 02:00:00 GMT-0500 (EST) Announcing the ODTUG Kscope17 Special Event! http://www.odtug.com/p/bl/et/blogaid=673&source=1 On Wednesday, June 28, ODTUG Kscope attendees can celebrate in style at the historic Sunset Station in San Antonio, Texas. ODTUGers will gather at Sunset Station for the ODTUG Kscope17 Special Event. The entire night is about saying, “Happy 20th Birthday, ODTUG!”. ODTUG http://www.odtug.com/p/bl/et/blogaid=673&source=1 Fri Feb 03 2017 16:04:16 GMT-0500 (EST) Announcing the ODTUG Kscope17 Special Event! http://www.odtug.com/p/bl/et/blogaid=673&source=1 On Wednesday, June 28, ODTUG Kscope attendees can celebrate in style at the historic Sunset Station in San Antonio, Texas. ODTUGers will gather at Sunset Station for the ODTUG Kscope17 Special Event. The entire night is about saying, “Happy 20th Birthday, ODTUG!”. ODTUG http://www.odtug.com/p/bl/et/blogaid=673&source=1 Fri Feb 03 2017 16:04:16 GMT-0500 (EST) Convert Common Oracle Application Express in a CDB to Local APEX in PDBs http://jastraub.blogspot.com/2017/02/convert-common-oracle-application.html <h2>Introduction </h2>When Oracle Multitenant was released with Oracle Database 12.1.0.1.0 in June 2013,&nbsp; Oracle Application Express was installed by default common in the CDB in CDB$ROOT, PDB$SEED, and all PDBs. In fact, that was the architecture that we recommended at that time. As we have gained experience with multitenant in our internal deployments, we realized that our initial recommendation was wrong. Having APEX installed common locks you in to one version for your entire CDB, and when you need to upgrade APEX, you have to upgrade every PDB, even if that PDB is not using APEX. This would cause unnecessary added time to APEX upgrades.<br /><br />Applying the lessons we have learned in our internal deployments, we have been <a href="http://docs.oracle.com/cd/E59726_01/install.50/e39144/db_pluggable.htm#HTMIG29435" target="_blank">recommending</a> that customers remove Oracle Application Express from their CDBs and install APEX locally in PDBs since version 5.0.<br /><br />What do you do if you have been using the common APEX from 12.1.0.1.0 or 12.1.0.2.0, and now you want to follow our new recommendation of having APEX installed locally in a PDB? We have been asked that question many times by both internal and external customers. Unfortunately there is no simple answer, no magic SQL script you can run to do the conversion, so we have never really had a good answer.<br /><br />Then my manager, <a href="https://twitter.com/joelkallman" target="_blank">Joel Kallman</a>, had a novel idea. He reminded me of the work I did for the Oracle Database Cloud Schema Service, to effectively export almost every single artifact of a workspace, using the command line utility APEXExport, so that a schema service tenant could be moved from one APEX instance to another. This involved greatly expanding our workspace export code, modifying APEXExport to allow for more export options, and then scripting the calls to APEXExport, including creating an installer script to invoke all the exports, and finally zipping the scripts produced. Joel's idea was to reuse this method in a process to convert a CDB where APEX is installed common, to a CDB where APEX is installed locally in PDBs.<br /><h2>The Big Idea</h2>The high level steps to convert common APEX in a CDB to local APEX in PDBs are:<br /><br /><ol><li>Identify all PDBs in your CDB that have APEX instances</li><li>In each PDB, identify all workspaces</li><li>Run a script to export all artifacts of all workspaces identified in step 1 into zip files with installers</li><li>Completely back up your CDB</li><li>Run the APEX removal script to remove APEX from the CDB and all PDBs</li><li>Install APEX locally in each PDB identified in step 1. (This may be a good opportunity to upgrade to the latest version!)</li><li>Unzip each of your files from setp 3, and run the installer script from each, connected to the appropriate PDB</li></ol><h2>The Setup </h2>I have a 12.1.0.2.0 CDB with two PDBs running APEX. One PDB has multiple workspaces, the other PDB has only one workspace. The CDB is the default APEX 4.2.5.0.00.08 that shipped with 12.1.0.2.0. The workspaces may have SQL scripts uploaded to SQL Workshop, SQL History and Saved SQL that we want to preserve. There are sample and packaged applications that we want to preserve. There are also custom built applications on objects in the schema associated with the workspaces. There are workspace images, and static files that we also want to preserve. I have already completely backed up my CDB.<br /><h4>HR Workspace in APEX1 figures</h4><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://1.bp.blogspot.com/-hps_w61yc-4/WJTZEpszvOI/AAAAAAAAAGA/vsCvTtx_hEAc4gFQuo5-f9SEooUuIe6DACLcB/s1600/Screen%2BShot%2B2017-02-03%2Bat%2B1.47.03%2BPM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="232" src="https://1.bp.blogspot.com/-hps_w61yc-4/WJTZEpszvOI/AAAAAAAAAGA/vsCvTtx_hEAc4gFQuo5-f9SEooUuIe6DACLcB/s640/Screen%2BShot%2B2017-02-03%2Bat%2B1.47.03%2BPM.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Applications in HR</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="https://4.bp.blogspot.com/-HIpYgnMBRws/WJTZElJ_oHI/AAAAAAAAAGE/eE3_NYKJRZA3SZ8Gz76mct9DtjyFeOMTwCLcB/s1600/Screen%2BShot%2B2017-02-03%2Bat%2B1.47.40%2BPM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="206" src="https://4.bp.blogspot.com/-HIpYgnMBRws/WJTZElJ_oHI/AAAAAAAAAGE/eE3_NYKJRZA3SZ8Gz76mct9DtjyFeOMTwCLcB/s640/Screen%2BShot%2B2017-02-03%2Bat%2B1.47.40%2BPM.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">SQL Script in SQL Workshop</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-kwrbV-K-vCg/WJTZEnjPqII/AAAAAAAAAGI/Ha8Cf5_ZRHEJOOFzGNEOYVuFrq-m2bGYgCLcB/s1600/Screen%2BShot%2B2017-02-03%2Bat%2B1.48.31%2BPM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="410" src="https://3.bp.blogspot.com/-kwrbV-K-vCg/WJTZEnjPqII/AAAAAAAAAGI/Ha8Cf5_ZRHEJOOFzGNEOYVuFrq-m2bGYgCLcB/s640/Screen%2BShot%2B2017-02-03%2Bat%2B1.48.31%2BPM.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">SQL History in HR</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="https://4.bp.blogspot.com/-MKrkmccXeE8/WJTZE-RKv9I/AAAAAAAAAGM/b5UsdCXAQNEQD90Yv6ga64Wgq05fmEKTQCLcB/s1600/Screen%2BShot%2B2017-02-03%2Bat%2B1.55.21%2BPM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="164" src="https://4.bp.blogspot.com/-MKrkmccXeE8/WJTZE-RKv9I/AAAAAAAAAGM/b5UsdCXAQNEQD90Yv6ga64Wgq05fmEKTQCLcB/s640/Screen%2BShot%2B2017-02-03%2Bat%2B1.55.21%2BPM.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Workspace image in HR</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-OvTXNEWRG-U/WJTZE47N1tI/AAAAAAAAAGQ/XmYMnd9ONpExLl0SPQ8H1du-kpQed1iIgCLcB/s1600/Screen%2BShot%2B2017-02-03%2Bat%2B1.55.56%2BPM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="210" src="https://3.bp.blogspot.com/-OvTXNEWRG-U/WJTZE47N1tI/AAAAAAAAAGQ/XmYMnd9ONpExLl0SPQ8H1du-kpQed1iIgCLcB/s640/Screen%2BShot%2B2017-02-03%2Bat%2B1.55.56%2BPM.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Static file in HR</td></tr></tbody></table><h4>FINANCE Workspace in APEX1 figures</h4><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/-YlK85fHNhnY/WJTcxygplpI/AAAAAAAAAGg/ZCHpGEa7SJc3jwLbOZU1Piit4vm4ff_XwCLcB/s1600/Screen%2BShot%2B2017-02-03%2Bat%2B1.53.42%2BPM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="238" src="https://3.bp.blogspot.com/-YlK85fHNhnY/WJTcxygplpI/AAAAAAAAAGg/ZCHpGEa7SJc3jwLbOZU1Piit4vm4ff_XwCLcB/s640/Screen%2BShot%2B2017-02-03%2Bat%2B1.53.42%2BPM.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Applications in FINANCE workspace</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="https://4.bp.blogspot.com/-eysQZWNmFUw/WJTcx3QSEYI/AAAAAAAAAGc/MiyZrCNp_yco6ORmENNVP8nKn6_gJRDhgCLcB/s1600/Screen%2BShot%2B2017-02-03%2Bat%2B1.54.43%2BPM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="378" src="https://4.bp.blogspot.com/-eysQZWNmFUw/WJTcx3QSEYI/AAAAAAAAAGc/MiyZrCNp_yco6ORmENNVP8nKn6_gJRDhgCLcB/s640/Screen%2BShot%2B2017-02-03%2Bat%2B1.54.43%2BPM.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Saved SQL in SQL Workshop</td></tr></tbody></table><br /><h4>MARKETING Workspace in APEX2 figures</h4><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://4.bp.blogspot.com/-s4OaHf54GY4/WJTdczZJ2MI/AAAAAAAAAGw/fbtnY7mQ53okmb6zk40LWwgTxXOx8u3UQCLcB/s1600/Screen%2BShot%2B2017-02-03%2Bat%2B1.57.03%2BPM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="332" src="https://4.bp.blogspot.com/-s4OaHf54GY4/WJTdczZJ2MI/AAAAAAAAAGw/fbtnY7mQ53okmb6zk40LWwgTxXOx8u3UQCLcB/s640/Screen%2BShot%2B2017-02-03%2Bat%2B1.57.03%2BPM.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Applications in MARKETING workspace</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-0hUlKHSFLOs/WJTdc8DKBoI/AAAAAAAAAG0/25tgIdHYFDodkEEsRsTA8TkVrbtFe0TlQCLcB/s1600/Screen%2BShot%2B2017-02-03%2Bat%2B1.57.36%2BPM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="212" src="https://1.bp.blogspot.com/-0hUlKHSFLOs/WJTdc8DKBoI/AAAAAAAAAG0/25tgIdHYFDodkEEsRsTA8TkVrbtFe0TlQCLcB/s640/Screen%2BShot%2B2017-02-03%2Bat%2B1.57.36%2BPM.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Workspace Images in MARKETING workspace</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-RWnDQ8byUTg/WJTdc9xXHsI/AAAAAAAAAGs/egjwiFwd8z0FqFtFNy5FQfYiMMJhcKqDQCLcB/s1600/Screen%2BShot%2B2017-02-03%2Bat%2B1.58.31%2BPM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="380" src="https://1.bp.blogspot.com/-RWnDQ8byUTg/WJTdc9xXHsI/AAAAAAAAAGs/egjwiFwd8z0FqFtFNy5FQfYiMMJhcKqDQCLcB/s640/Screen%2BShot%2B2017-02-03%2Bat%2B1.58.31%2BPM.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Saved SQL in SQL Workshop</td></tr></tbody></table><h2>The Hook</h2><h4>Identify all PDBs that have APEX instances</h4><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">SQL&gt; select p.pdb_name, r.version, r.status from sys.dba_pdbs p, sys.cdb_registry r where p.pdb_id = r.con_id and r.comp_id = 'APEX' order by 1;<br /><br />PDB_NAME&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VERSION&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; STATUS<br />------------------------------ ------------------------------ -----------<br />APEX1&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.2.5.00.08&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VALID<br />APEX2&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.2.5.00.08&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VALID</span><br /><br /><h4>Identify all workspaces</h4><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">SQL&gt; set num 40&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />SQL&gt; alter session set container=APEX1;<br /><br />Session altered.<br /><br />SQL&gt; select workspace_id from apex_workspaces where workspace_id &gt; 100;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; WORKSPACE_ID<br />----------------------------------------<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 2222525459993115<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 2336806112004961<br /><br />SQL&gt; alter session set container=APEX2;<br /><br />Session altered.<br /><br />SQL&gt; select workspace_id from apex_workspaces where workspace_id &gt; 100;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; WORKSPACE_ID<br />----------------------------------------<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 2224405822867543</span><br /><h4>Run a script to export all artifacts</h4>The original script that I wrote was in C shell and did the job, but my colleague <a href="https://twitter.com/vuvarovs" target="_blank">Vlad Uvarov</a> rewrote it in bash (apparently anyone under 40 no longer uses C shell) and vastly improved it. A slightly revised version of the script is listed below.<br /><br /><pre class="sql" name="code">#!/bin/bash -e<br /><br />THIS_SCRIPT=$(basename "$0" )<br />THIS_DIR=$(cd "$(dirname "$0" )" && pwd )<br />CURRENT_DIR=$(pwd )<br /><br /># ===================================================================================<br /># Function that displays script usage instructions and terminates the script<br />#<br />f_usage () {<br /> cat &lt;&lt;EOF<br />Usage: $THIS_SCRIPT &lt;JDBC connection string&gt; &lt;user&gt; &lt;password&gt; &lt;workspace ID&gt;<br /><br />Parameters:<br /> JDBC connection string Database connection URL in JDBC format<br /> user Database username<br /> password Password of the database user<br /> workspace ID ID of the workspace to be exported<br /><br />Example:<br /> ./$THIS_SCRIPT //apex.example.com:1521/orcl apex_040200 secret 1234567890<br />EOF<br /> exit 1<br />}<br /><br /># ===================================================================================<br /># First, check environment variables and input parameters<br />#<br />[ -z "$ORACLE_HOME" ] && echo "Error: ORACLE_HOME environment variable is not set." && exit 1<br /><br />JAVA_EXE=$ORACLE_HOME/jdk/bin/java<br />[ ! -x "$JAVA_EXE" ] && echo "Error: Java executable not found ($JAVA_EXE)." && exit 1<br /><br />OJDBC_JAR=$ORACLE_HOME/jdbc/lib/ojdbc6.jar<br />[ ! -f "$OJDBC_JAR" ] && echo "Error: Oracle JDBC library not found ($OJDBC_JAR)." && exit 1<br /><br />APEXEXPORT=$ORACLE_HOME/apex/utilities/oracle/apex/APEXExport.class<br />[ ! -f "$THIS_DIR/$APEXEXPORT" -a ! -f "$APEXEXPORT" ] && echo "Error: Missing APEXExport utility ($APEXEXPORT)." && exit 1<br /><br />(( $# &lt; 4 )) && echo "Error: This script requires 4 parameters." && echo && f_usage<br /><br /># ===================================================================================<br /># Step 1: Export APEX workspace, including applications and files<br />#<br />EXP_DIR=$(mktemp -d ${TMPDIR:-/tmp}/$(basename "$THIS_SCRIPT" .sh ).XXXXXX )<br />cd "$EXP_DIR"<br /><br />cat &lt;&lt;EOF<br />Oracle Application Express workspace export<br /><br />Using ORACLE_HOME=$ORACLE_HOME<br />EOF<br />$JAVA_EXE -version<br />echo<br /><br />CP=$OJDBC_JAR:$THIS_DIR:$ORACLE_HOME/apex/utilities<br />if [ "$THIS_DIR" != "$CURRENT_DIR" ]; then<br /> CP=$CP:$CURRENT_DIR<br />fi<br /><br />$JAVA_EXE -cp $CP oracle.apex.APEXExport -db "$1" -user "$2" -password "$3" -workspaceid "$4" -expWorkspace -expTeamdevdata<br />$JAVA_EXE -cp $CP oracle.apex.APEXExport -db "$1" -user "$2" -password "$3" -workspaceid "$4" -expFiles<br />$JAVA_EXE -cp $CP oracle.apex.APEXExport -db "$1" -user "$2" -password "$3" -workspaceid "$4" -expLocked -expSavedReports<br /><br /># ===================================================================================<br /># Step 2: Create ZIP archive with a generated installation script and all export files<br />#<br />INSTALL_SCRIPT=install_${4}.sql<br />cat &gt; "$INSTALL_SCRIPT" &lt;&lt;EOF<br />prompt<br />spool install_${4}.log<br /><br />prompt Oracle Application Express workspace export<br />prompt Workspace ID $4 exported on $(date )<br /><br />alter session set current_schema = APEX_050100;<br /><br />@@w${4}.sql<br />EOF<br /><br />for f in *.sql; do<br /> if [ "$f" != "w${4}.sql" -a "$f" != "$INSTALL_SCRIPT" ]; then<br /> echo "@@$f" &gt;&gt; "$INSTALL_SCRIPT"<br /> fi<br />done<br /><br />cat &gt;&gt; "$INSTALL_SCRIPT" &lt;&lt;EOF<br /><br />spool off<br />prompt<br />exit<br />EOF<br /><br />echo<br />ZIP_FILE="$CURRENT_DIR/install_${4}_$(date +%Y%m%d ).zip"<br />rm -f "$ZIP_FILE"<br />zip -9 "$ZIP_FILE" *.sql<br /><br />echo<br />echo "Generated $ZIP_FILE"<br />echo<br /><br /># ===================================================================================<br /># Step 3: Clean up<br />#<br />cd "$CURRENT_DIR"<br />rm -rf "$EXP_DIR"<br /></pre>workspace_export.sh<br /><br />One thing to note in the script above is that the install script being generated assumes that APEX 5.1 is installed in your target APEX instance. If that is not your plan, change the line "alter session set current_schema = APEX_050100" to match the APEX schema of the version you plan to install locally in your PDBs.<br /><br />Also, for convenience, I am going to temporarily unlock APEX_040200 in my CDB and set a known password, and pass those necessary credentials to the workspace_export.sh script. You could really use any database user that has been granted the APEX_ADMINISTRATOR_ROLE.<br /><br /><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">SQL&gt; alter user apex_040200 account unlock identified by oracle container=all;<br /><br />User altered.</span><br /><br />I saved the script above in a directory where I want all my zip files to end up. Now I will call the script passing each of the workspace IDs I identified in the previous step.<br /><br /><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">[jstraub@slc02otv cdbconvertapex]$ ./workspace_export.sh //localhost:1521/APEX1 APEX_040200 oracle 2222525459993115<br />Oracle Application Express workspace export<br /><br />Using ORACLE_HOME=/scratch/jstraub/app/product/12.1.0/dbhome_1<br />java version "1.6.0_75"<br />Java(TM) SE Runtime Environment (build 1.6.0_75-b13)<br />Java HotSpot(TM) 64-Bit Server VM (build 20.75-b01, mixed mode)<br /><br />Exporting Workspace 2222525459993115:'HR' <br />&nbsp; Completed at Fri Feb 03 08:29:07 PST 2017<br />Exporting Application 100:'Sample Database Application' <br />&nbsp; Completed at Fri Feb 03 08:29:16 PST 2017<br />Exporting Application 102:'Checklist Manager' <br />&nbsp; Completed at Fri Feb 03 08:29:17 PST 2017<br />Exporting Application 103:'EMPLOYEES' <br />&nbsp; Completed at Fri Feb 03 08:29:18 PST 2017<br />Exporting Application 104:'Sample Websheet Application - Big Cats' <br />&nbsp; Completed at Fri Feb 03 08:29:18 PST 2017<br /><br />&nbsp; adding: f100.sql (deflated 88%)<br />&nbsp; adding: f102.sql (deflated 89%)<br />&nbsp; adding: f103.sql (deflated 93%)<br />&nbsp; adding: files_2222525459993115.sql (deflated 55%)<br />&nbsp; adding: install_2222525459993115.sql (deflated 39%)<br />&nbsp; adding: w2222525459993115.sql (deflated 87%)<br />&nbsp; adding: ws104.sql (deflated 64%)<br /><br />Generated /scratch/jstraub/cdbconvertapex/install_2222525459993115_20170203.zip</span><br /><span style="font-family: &quot;Courier New&quot;,Courier,monospace;"><br /></span><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">[jstraub@slc02otv cdbconvertapex]$ ./workspace_export.sh //localhost:1521/APEX1 APEX_040200 oracle 2336806112004961<br />Oracle Application Express workspace export<br /><br />Using ORACLE_HOME=/scratch/jstraub/app/product/12.1.0/dbhome_1<br />java version "1.6.0_75"<br />Java(TM) SE Runtime Environment (build 1.6.0_75-b13)<br />Java HotSpot(TM) 64-Bit Server VM (build 20.75-b01, mixed mode)<br /><br />Exporting Workspace 2336806112004961:'FINANCE' <br />&nbsp; Completed at Fri Feb 03 10:17:59 PST 2017<br />Exporting Application 101:'Sample Database Application' <br />&nbsp; Completed at Fri Feb 03 10:18:13 PST 2017<br />Exporting Application 105:'Group Calendar' <br />&nbsp; Completed at Fri Feb 03 10:18:14 PST 2017<br />Exporting Application 106:'QUOTES' <br />&nbsp; Completed at Fri Feb 03 10:18:14 PST 2017<br /><br />&nbsp; adding: f101.sql (deflated 88%)<br />&nbsp; adding: f105.sql (deflated 89%)<br />&nbsp; adding: f106.sql (deflated 93%)<br />&nbsp; adding: files_2336806112004961.sql (deflated 64%)<br />&nbsp; adding: install_2336806112004961.sql (deflated 39%)<br />&nbsp; adding: w2336806112004961.sql (deflated 82%)<br /><br />Generated /scratch/jstraub/cdbconvertapex/install_2336806112004961_20170203.zip</span><br /><br />And then for the other PDB, APEX2, we pass a different connect string:<br /><br /><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">[jstraub@slc02otv cdbconvertapex]$ ./workspace_export.sh //localhost:1521/APEX2 APEX_040200 oracle 2224405822867543<br />Oracle Application Express workspace export<br /><br />Using ORACLE_HOME=/scratch/jstraub/app/product/12.1.0/dbhome_1<br />java version "1.6.0_75"<br />Java(TM) SE Runtime Environment (build 1.6.0_75-b13)<br />Java HotSpot(TM) 64-Bit Server VM (build 20.75-b01, mixed mode)<br /><br />Exporting Workspace 2224405822867543:'MARKETING' <br />&nbsp; Completed at Fri Feb 03 10:20:04 PST 2017<br />Exporting Application 100:'Sample Database Application' <br />&nbsp; Completed at Fri Feb 03 10:20:13 PST 2017<br />Exporting Application 101:'Sample Websheet Application - AnyCo IT Department' <br />&nbsp; Completed at Fri Feb 03 10:20:13 PST 2017<br />Exporting Application 102:'PROJECT_TASKS' <br />&nbsp; Completed at Fri Feb 03 10:20:14 PST 2017<br />Exporting Application 103:'Decision Manager' <br />&nbsp; Completed at Fri Feb 03 10:20:14 PST 2017<br />Exporting Application 104:'P-Track' <br />&nbsp; Completed at Fri Feb 03 10:20:17 PST 2017<br /><br />&nbsp; adding: f100.sql (deflated 88%)<br />&nbsp; adding: f102.sql (deflated 93%)<br />&nbsp; adding: f103.sql (deflated 89%)<br />&nbsp; adding: f104.sql (deflated 89%)<br />&nbsp; adding: files_2224405822867543.sql (deflated 54%)<br />&nbsp; adding: install_2224405822867543.sql (deflated 40%)<br />&nbsp; adding: w2224405822867543.sql (deflated 82%)<br />&nbsp; adding: ws101.sql (deflated 58%)<br /><br />Generated /scratch/jstraub/cdbconvertapex/install_2224405822867543_20170203.zip</span><br /><h2>The long game</h2>I have a complete backup of my database, and I have all the zip files that will reconstruct my workspaces. It is time to do the actual conversion.<br /><h4>Remove APEX from the CDB and all PDBs</h4><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">Connected to:<br />Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production<br />With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options<br /><br />SQL&gt; @apxremov_con.sql<br /><br />PL/SQL procedure successfully completed.<br /><br />Performing installation in multitenant container database in the background.<br />The installation progress is spooled into apxremov*_con*.log files.<br /><br />Please wait...<br /><br />catcon: ALL catcon-related output will be written to apxremov1_con_catcon_9311.lst<br />catcon: See apxremov1_con*.log files for output generated by scripts<br />catcon: See apxremov1_con_*.lst files for spool files, if any<br />catcon.pl: completed successfully<br /><br />catcon: ALL catcon-related output will be written to apxremov2_con_catcon_9723.lst<br />catcon: See apxremov2_con*.log files for output generated by scripts<br />catcon: See apxremov2_con_*.lst files for spool files, if any<br />catcon.pl: completed successfully<br /><br /><br />Installation completed. Log files for each container can be found in:<br /><br />apxremov*_con*.log<br /><br />You can quickly scan for ORA errors or compilation errors by using a utility<br />like grep:<br /><br />grep ORA- *.log<br />grep PLS- *.log</span> <br /><h4>Install APEX 5.1 locally in the PDBs</h4><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">SQL&gt; alter session set container=APEX1;<br /><br />Session altered.<br /><br />SQL&gt; @apexins.sql SYSAUX SYSAUX TEMP /i/</span><br /><br /><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">SQL&gt; @apex_rest_config.sql</span><br /><br /><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">SQL&gt; @apxchpwd.sql</span><br /><br /><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">SQL&gt; @apex_epg_config.sql /scratch/jstraub/apx51 -- only if you are using EPG, very doubtful</span><br /><br /><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">SQL&gt; alter session set container=APEX2;<br /><br />Session altered.<br /><br />SQL&gt; @apexins.sql SYSAUX SYSAUX TEMP /i/</span><br /><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">&nbsp;</span><br /><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">SQL&gt; @apex_rest_config.sql</span><br /><br /><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">SQL&gt; @apxchpwd.sql</span><br /><br /><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">SQL&gt; @apex_epg_config.sql /scratch/jstraub/apx51 -- only if you are using EPG, very doubtful</span><br /><h4>Recreate the workspaces using the generated zip files</h4>First, I am again going to temporarily unlock and change the password for the APEX database user, in this case APEX_050100. Since now APEX_050100 is a local user to the PDB, I have to do it in both APEX1 and APEX2 PDBs.<br /><br /><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">SQL&gt; alter session set container=APEX1;<br /><br />Session altered.</span><br /><span style="font-family: &quot;Courier New&quot;,Courier,monospace;"><br /></span><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">SQL&gt; alter user APEX_050100 account unlock identified by oracle;<br /><br />User altered.</span><br /><span style="font-family: &quot;Courier New&quot;,Courier,monospace;"><br /></span><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">SQL&gt; alter session set container=APEX2;<br /><br />Session altered.<br /><br />SQL&gt; alter user APEX_050100 account unlock identified by oracle;<br /><br />User altered.</span><br /><br />Then I unzip each complete workspace export and run the corresponding install script.<br /><br /><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">[jstraub@slc02otv cdbconvertapex]$ mkdir hr</span><br /><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">[jstraub@slc02otv cdbconvertapex]$ unzip install_2222525459993115_20170203.zip -d hr</span><br /><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">[jstraub@slc02otv cdbconvertapex]$ cd hr </span><br /><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">[jstraub@slc02otv hr]$ sqlplus apex_050100/oracle@localhost/APEX1<br /><br />SQL*Plus: Release 12.1.0.2.0 Production on Fri Feb 3 12:05:24 2017<br /><br />Copyright (c) 1982, 2014, Oracle.&nbsp; All rights reserved.<br /><br /><br />Connected to:<br />Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production<br />With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options<br /><br />SQL&gt; @install_2222525459993115.sql&nbsp;&nbsp;</span><br /><span style="font-family: &quot;Courier New&quot;,Courier,monospace;"><br /></span><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">[jstraub@slc02otv cdbconvertapex]$ mkdir finance</span><br /><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">[jstraub@slc02otv cdbconvertapex]$ unzip install_2336806112004961_20170203.zip -d finance</span><br /><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">[jstraub@slc02otv cdbconvertapex]$ cd finance</span><br /><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">[jstraub@slc02otv finance]$ sqlplus apex_050100/oracle@localhost/APEX1<br /><br />SQL*Plus: Release 12.1.0.2.0 Production on Fri Feb 3 12:14:21 2017<br /><br />Copyright (c) 1982, 2014, Oracle.&nbsp; All rights reserved.<br /><br />Last Successful login time: Fri Feb 03 2017 12:05:24 -08:00<br /><br />Connected to:<br />Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production<br />With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options<br /><br />SQL&gt; @install_2336806112004961.sql&nbsp;</span><br /><span style="font-family: &quot;Courier New&quot;,Courier,monospace;"><br /></span><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">[jstraub@slc02otv cdbconvertapex]$ mkdir marketing</span><br /><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">[jstraub@slc02otv cdbconvertapex]$ unzip install_2224405822867543_20170203.zip -d marketing</span><br /><span style="font-family: &quot;Courier New&quot;,Courier,monospace;">[jstraub@slc02otv marketing]$ sqlplus apex_050100/oracle@localhost/APEX2<br /><br />SQL*Plus: Release 12.1.0.2.0 Production on Fri Feb 3 12:16:11 2017<br /><br />Copyright (c) 1982, 2014, Oracle.&nbsp; All rights reserved.<br /><br /><br />Connected to:<br />Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production<br />With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options<br /><br />SQL&gt; @install_2224405822867543.sql</span><br /><br />Now we login to each workspace and check that all the artifacts from the workspace migrated over.<br /><h4>HR workspace in APEX1 figures - APEX 5.1</h4><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/-w5JQJAL8h9U/WJTpRnLJLqI/AAAAAAAAAHM/grD88DlKDhA8ly6-yuRoKS_07f_GwlR0wCLcB/s1600/Screen%2BShot%2B2017-02-03%2Bat%2B3.22.22%2BPM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="242" src="https://3.bp.blogspot.com/-w5JQJAL8h9U/WJTpRnLJLqI/AAAAAAAAAHM/grD88DlKDhA8ly6-yuRoKS_07f_GwlR0wCLcB/s640/Screen%2BShot%2B2017-02-03%2Bat%2B3.22.22%2BPM.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Applications in HR Workspace</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-b8SD02f9df0/WJTpRljV7yI/AAAAAAAAAHE/ovHq9UQA8H8839WWoRCmuGLO6fePobOogCLcB/s1600/Screen%2BShot%2B2017-02-03%2Bat%2B3.26.26%2BPM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="172" src="https://3.bp.blogspot.com/-b8SD02f9df0/WJTpRljV7yI/AAAAAAAAAHE/ovHq9UQA8H8839WWoRCmuGLO6fePobOogCLcB/s640/Screen%2BShot%2B2017-02-03%2Bat%2B3.26.26%2BPM.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Static Files and Images in HR Workspace</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-zNmo9USMzI8/WJTpRjHC0rI/AAAAAAAAAHI/d5hE_u6RGogBewPzgcTct9cS-3ee20DXQCLcB/s1600/Screen%2BShot%2B2017-02-03%2Bat%2B3.27.00%2BPM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="150" src="https://1.bp.blogspot.com/-zNmo9USMzI8/WJTpRjHC0rI/AAAAAAAAAHI/d5hE_u6RGogBewPzgcTct9cS-3ee20DXQCLcB/s640/Screen%2BShot%2B2017-02-03%2Bat%2B3.27.00%2BPM.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">SQL Script in SQL Workshop</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="https://2.bp.blogspot.com/-tuw84Gp70Eo/WJTpR7bXgiI/AAAAAAAAAHU/HpalG78N50cnlQutduSCWAxjNtAWlMYegCLcB/s1600/Screen%2BShot%2B2017-02-03%2Bat%2B3.27.39%2BPM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="140" src="https://2.bp.blogspot.com/-tuw84Gp70Eo/WJTpR7bXgiI/AAAAAAAAAHU/HpalG78N50cnlQutduSCWAxjNtAWlMYegCLcB/s640/Screen%2BShot%2B2017-02-03%2Bat%2B3.27.39%2BPM.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">SQL History in SQL Workshop</td></tr></tbody></table><h4>FINANCE workspace in APEX1 figures - APEX 5.1</h4><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://4.bp.blogspot.com/-ntUxxQy9YL4/WJTpR7-6PyI/AAAAAAAAAHQ/hy51SU68N9AxX2OM7QdTsuphme-ec_e3ACEw/s1600/Screen%2BShot%2B2017-02-03%2Bat%2B3.29.17%2BPM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="238" src="https://4.bp.blogspot.com/-ntUxxQy9YL4/WJTpR7-6PyI/AAAAAAAAAHQ/hy51SU68N9AxX2OM7QdTsuphme-ec_e3ACEw/s640/Screen%2BShot%2B2017-02-03%2Bat%2B3.29.17%2BPM.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Applications in FINANCE Workspace</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-QtkJZE4iqck/WJTp_4EXevI/AAAAAAAAAHc/GlriBcTKwQg3E0JDasa-fS-vikWMTttmQCLcB/s1600/Screen%2BShot%2B2017-02-03%2Bat%2B3.30.03%2BPM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="122" src="https://3.bp.blogspot.com/-QtkJZE4iqck/WJTp_4EXevI/AAAAAAAAAHc/GlriBcTKwQg3E0JDasa-fS-vikWMTttmQCLcB/s640/Screen%2BShot%2B2017-02-03%2Bat%2B3.30.03%2BPM.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Saved SQL in SQL Workshop</td></tr></tbody></table><h4>MARKETING workspace in APEX2 figures - APEX 5.1</h4><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://1.bp.blogspot.com/-wSpb7RtzSPc/WJTqb4H8DTI/AAAAAAAAAHg/JPiPg95P-VEQ1LSlgR3N1ByWQv9JKAIoQCLcB/s1600/Screen%2BShot%2B2017-02-03%2Bat%2B3.31.20%2BPM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="284" src="https://1.bp.blogspot.com/-wSpb7RtzSPc/WJTqb4H8DTI/AAAAAAAAAHg/JPiPg95P-VEQ1LSlgR3N1ByWQv9JKAIoQCLcB/s640/Screen%2BShot%2B2017-02-03%2Bat%2B3.31.20%2BPM.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Applications in MARKETING Workspace</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="https://2.bp.blogspot.com/-1RHsOIXow5Y/WJTqb8c4_UI/AAAAAAAAAHo/6hN1nqtsC5wpxNclyw4Nf5Ok6VHaSEMDQCLcB/s1600/Screen%2BShot%2B2017-02-03%2Bat%2B3.32.02%2BPM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="170" src="https://2.bp.blogspot.com/-1RHsOIXow5Y/WJTqb8c4_UI/AAAAAAAAAHo/6hN1nqtsC5wpxNclyw4Nf5Ok6VHaSEMDQCLcB/s640/Screen%2BShot%2B2017-02-03%2Bat%2B3.32.02%2BPM.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Static Workspace Files in MARKETING</td></tr></tbody></table><br /><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody><tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-1FjQ9BS1Wvk/WJTqbxyKvkI/AAAAAAAAAHk/uUhklc21aYk1HmYk8u9yZML5-CpC9GzvgCLcB/s1600/Screen%2BShot%2B2017-02-03%2Bat%2B3.32.39%2BPM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="120" src="https://1.bp.blogspot.com/-1FjQ9BS1Wvk/WJTqbxyKvkI/AAAAAAAAAHk/uUhklc21aYk1HmYk8u9yZML5-CpC9GzvgCLcB/s640/Screen%2BShot%2B2017-02-03%2Bat%2B3.32.39%2BPM.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Saved SQL in SQL Workshop</td></tr></tbody></table><h2>One more thing</h2>Actually, two more things. First, this process will not bring over "Template Applications" and "Public Themes." These features are not well known and rarely used, but you can easily determine if you have them by logging into internal administration, click on Manage Instance, and then click the Public Themes and Template Applications links. If there are applications in either area, simply export them, and them import them into internal administration after you recreate your workspaces.<br /><br />Second, you may want to create another PDB, call it APEX51SEED, and install APEX into it. Put the PDB in read only mode, and then when you create a new PDB, you can create it from APEX51SEED and it will already have APEX 5.1 installed locally. In our case, we could not use this method to install APEX only once, because we needed the schemas that were in our APEX1 and APEX2 PDBs.<br /><h2>Conclusion</h2>Having APEX installed locally in PDBs provides greater flexibility in your CDB, reduces upgrade time, and as well simplifies unplug/plug operations of your PDBs between CDBs. If you have a CDB where APEX is installed common, and you are using APEX in some or all of those PDBs, it is possible to do an in-place conversion using the method described above. Unfortunately, there is no magic SQL or script that can simplify this process. I hope you are successful if you go down this path, but be sure you have a complete backup of your CDB before trying. You can also use parts of this method to simply move a workspace from one APEX instance to another. That would require you to also move the schema, using datapump or another utility. Jason Straub tag:blogger.com,1999:blog-6139250371277978964.post-6766164737966803176 Fri Feb 03 2017 15:55:00 GMT-0500 (EST) Using Font Apex in Apex 5.0 http://max-tremblay.blogspot.com/2017/02/using-font-apex-in-apex-50.html <div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-2DYv9N50stY/WJQB3VuzkrI/AAAAAAAAAXY/-BZopVLn6QMu7SmiLl95x2pGGa9VUbd6ACLcB/s1600/FontApex.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-2DYv9N50stY/WJQB3VuzkrI/AAAAAAAAAXY/-BZopVLn6QMu7SmiLl95x2pGGa9VUbd6ACLcB/s1600/FontApex.png" /></a></div><br />Apex 5.1 introduced Font Apex, a new icon library designed to complement Universal Theme and to replace Font Awesome. The same "fa" prefix for the icons was kept so that it's easier to move from Font Awesome to this entirely new icon library.<br /><br />Font APEX comes with a number of customizations built-in, enabling us to easily control the size, animation, rotation, and even add modifiers on top of icons. You can try customizing your icons using the Icon Builder in the <a href="https://apex.oracle.com/fontapex" target="_blank">Universal Theme sample application</a>.<br /><br />What if you are still on Apex 5.0 and would like to use it?<br /><br />Don't worry you are able to do so.<br />Here's how you can do it.<br /><br />First let's get the Font Apex library files.<br />You can get them from the <a href="http://www.oracle.com/technetwork/developer-tools/apex/downloads/index.html" target="_blank">Apex 5.1 installation</a>&nbsp;file under the "images\libraries\font-apex" folder (or from <a href="https://drive.google.com/uc?export=download&amp;id=0BzJsLftbKSZSbkwzNGtzak1KaDQ" target="_blank">here</a>)<br />Then you will need to import these files in your application (let's do it using the Static Application Files for the sake of simplicity, but you could also import them in the Static Workspace Files or copy them on your web server).<br /><br />Note: zipping the font-apex folder will enable us to upload only that zipped file instead of every single file from the folder using the zip file will also keep the folder structure.<br /><br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-6GZWKu3Znfw/WJQGBbuWkSI/AAAAAAAAAYQ/DpIzvqS4M-kCPQovg3TfV_uj2SAEYPnPgCLcB/s1600/upload_files.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" class="noBorder noBackground" height="300" src="https://1.bp.blogspot.com/-6GZWKu3Znfw/WJQGBbuWkSI/AAAAAAAAAYQ/DpIzvqS4M-kCPQovg3TfV_uj2SAEYPnPgCLcB/s400/upload_files.png" width="550" /></a></div><br /><br />You will end up with the following files:<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-MVtE8mYswE4/WJP7JKlL1wI/AAAAAAAAAW8/m1gZf-5OFbErROBYPMtQ-O-6a65FaOAZACLcB/s1600/upload_files_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" class="noBorder noBackground" height="88" src="https://2.bp.blogspot.com/-MVtE8mYswE4/WJP7JKlL1wI/AAAAAAAAAW8/m1gZf-5OFbErROBYPMtQ-O-6a65FaOAZACLcB/s400/upload_files_2.png" width="550" /></a></div><br /><br />Then, let's remove the Font Awesome and include the Font Apex.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-o6c371Fb1fQ/WJkvh7cD58I/AAAAAAAAAY8/FdAhORRY_j0OkQUVV0mjmrWj7sIVCKm1ACLcB/s1600/include_files.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" class="noBorder noBackground" height="640" src="https://1.bp.blogspot.com/-o6c371Fb1fQ/WJkvh7cD58I/AAAAAAAAAY8/FdAhORRY_j0OkQUVV0mjmrWj7sIVCKm1ACLcB/s640/include_files.png" width="550" /></a></div><div class="separator" style="clear: both; text-align: center;"></div><br /><br /><blockquote class="tr_bq" style="background-color: rgba(0 , 0 , 0 , 0.2); border-radius: 30px; padding: 30px;">Notes: <br />Step 4 removes the Font Awesome reference.<br />Step 5 uses the Font Apex CSS file reference from above step. Notice that the .min was replaced by #MIN#<br /><blockquote class="tr_bq"><u>From help text:</u><br /><i>If you provide a minified version of your file you can use the substitution string #MIN# to include .min or #MIN_DIRECTORY# to include minified/ in your file URL for a regular page view and an empty string if the page is viewed in debug mode.&nbsp;</i></blockquote></blockquote><br />At this point, if you try to run your application, you should be able to see most of the Font Apex icons.<br /><br />There are some tweaks we still need to do so that everything is displayed nicely.<br />First, there is still a class that uses the "font-family: font-awesome;", which is used by the expand/collapse navigation menu button.<br /><br />The other thing we need to change is the height of the icons.<br />Font Awesome uses 14x14 icons whereas Font Apex uses 16x16 icons. Some icons might not be displayed correctly. The expand/collapse navigation menu button is also one of those.<br /><br />Here's the CSS that is required to fix these.<br /><br /><pre class="line-numbers"><code class="language-css">.t-Icon[class*=' fa-'],.t-Icon[class^=fa-]{<br /> font-family: font-apex!important;<br /> font-size: initial;<br />}<br /><br />.t-TreeNav .a-TreeView-node--topLevel&gt;.a-TreeView-content .fa{<br /> font-size: initial;<br />}<br /></code></pre><br />Enjoy Font Apex in your Apex 5.0 applications! <br /><br />Edit 1: The Custom Prefix Class attribute needs to be set to "fa" Maxime Tremblay tag:blogger.com,1999:blog-267713902572011003.post-3714939132023991923 Fri Feb 03 2017 07:50:00 GMT-0500 (EST)