136

Apex 5 plugins for everyone version 2018

Embed Size (px)

Citation preview

Page 1: Apex 5 plugins for everyone   version 2018
Page 2: Apex 5 plugins for everyone   version 2018

@alanarentsenalanarentsen.blogspot.com

Page 3: Apex 5 plugins for everyone   version 2018
Page 4: Apex 5 plugins for everyone   version 2018
Page 5: Apex 5 plugins for everyone   version 2018
Page 6: Apex 5 plugins for everyone   version 2018
Page 7: Apex 5 plugins for everyone   version 2018
Page 8: Apex 5 plugins for everyone   version 2018
Page 9: Apex 5 plugins for everyone   version 2018
Page 10: Apex 5 plugins for everyone   version 2018

Authentication Scheme Type

Authorization Scheme Type

Dynamic Action

Item

Process

Region

Page 11: Apex 5 plugins for everyone   version 2018

Plug-in Repository

Create from scratch

Copy of existing Plug-in

Page 12: Apex 5 plugins for everyone   version 2018

Plug-in Repository

Page 13: Apex 5 plugins for everyone   version 2018
Page 14: Apex 5 plugins for everyone   version 2018
Page 15: Apex 5 plugins for everyone   version 2018
Page 16: Apex 5 plugins for everyone   version 2018
Page 17: Apex 5 plugins for everyone   version 2018
Page 18: Apex 5 plugins for everyone   version 2018
Page 19: Apex 5 plugins for everyone   version 2018
Page 20: Apex 5 plugins for everyone   version 2018
Page 21: Apex 5 plugins for everyone   version 2018
Page 22: Apex 5 plugins for everyone   version 2018
Page 23: Apex 5 plugins for everyone   version 2018
Page 24: Apex 5 plugins for everyone   version 2018
Page 25: Apex 5 plugins for everyone   version 2018
Page 26: Apex 5 plugins for everyone   version 2018
Page 27: Apex 5 plugins for everyone   version 2018

DEM

Page 28: Apex 5 plugins for everyone   version 2018

Plug-in Repository

Create from scratch

Copy of existing Plug-in

Page 29: Apex 5 plugins for everyone   version 2018

Create from scratch

Page 30: Apex 5 plugins for everyone   version 2018

apex.item("P1_STANDARD_CHECK").getValue()

'On'

Page 31: Apex 5 plugins for everyone   version 2018

apex.item("P1_STANDARD_CHECK").getValue()

null

Page 32: Apex 5 plugins for everyone   version 2018

apex.item("P1_STANDARD_CHECK").getValue()

null

Page 33: Apex 5 plugins for everyone   version 2018

apex.item("P1_STANDARD_CHECK").getValue()

'Off'

Page 34: Apex 5 plugins for everyone   version 2018

<input type="checkbox"

id="P1_PLUGIN_CHECK"

class="custom_checkbox"

value="" />

<input type="hidden"

id="P1_PLUGIN_CHECK_HIDDEN"

name="p_t01"

value="Off" />

<label for="P1_PLUGIN_CHECK">Does this work?</label>

Page 35: Apex 5 plugins for everyone   version 2018

<input type="checkbox"

id="P1_PLUGIN_CHECK"

class="custom_checkbox"

value="" />

<input type="hidden"

id="P1_PLUGIN_CHECK_HIDDEN"

name="p_t01"

value="Off" />

<label for="P1_PLUGIN_CHECK">Does this work?</label>

Page 36: Apex 5 plugins for everyone   version 2018

<input type="checkbox"

id="P1_PLUGIN_CHECK"

class="custom_checkbox"

value="" />

<input type="hidden"

id="P1_PLUGIN_CHECK_HIDDEN"

name="p_t01"

value="Off" />

<label for="P1_PLUGIN_CHECK">Does this work?</label>

Page 37: Apex 5 plugins for everyone   version 2018

function custom_checkbox (pPageItemName, pOptions)

{

var g$Checkbox = $('#' + pPageItemName),

g$Hidden = $('#' + pPageItemName + '_HIDDEN');

function syncHiddenField() {

g$Hidden.val((g$Checkbox.is(':checked') === true) ?

pOptions.checked :

pOptions.unchecked);

};

...

};

Page 38: Apex 5 plugins for everyone   version 2018

function custom_checkbox (pPageItemName, pOptions)

{

var g$Checkbox = $('#' + pPageItemName),

g$Hidden = $('#' + pPageItemName + '_HIDDEN');

function syncHiddenField() {

g$Hidden.val((g$Checkbox.is(':checked') === true) ?

pOptions.checked :

pOptions.unchecked);

};

...

};

Page 39: Apex 5 plugins for everyone   version 2018

function custom_checkbox (pPageItemName, pOptions)

{

var g$Checkbox = $('#' + pPageItemName),

g$Hidden = $('#' + pPageItemName + '_HIDDEN');

function syncHiddenField() {

g$Hidden.val((g$Checkbox.is(':checked') === true) ?

pOptions.checked :

pOptions.unchecked);

};

...

};

Page 40: Apex 5 plugins for everyone   version 2018

function custom_checkbox (pPageItemName, pOptions)

{

var g$Checkbox = $('#' + pPageItemName),

g$Hidden = $('#' + pPageItemName + '_HIDDEN');

function syncHiddenField() {

g$Hidden.val((g$Checkbox.is(':checked') === true) ?

pOptions.checked :

pOptions.unchecked);

};

...

};

Page 41: Apex 5 plugins for everyone   version 2018

function custom_checkbox (pPageItemName, pOptions)

{

...

g$Checkbox.change(syncHiddenField);

...

};

Page 42: Apex 5 plugins for everyone   version 2018

function custom_checkbox (pPageItemName, pOptions)

{

...

apex.widget.initPageItem(pPageItemName, {

setValue: function(pValue) {

g$Checkbox.attr('checked'

,(pValue === pOptions.checked));

syncHiddenField();

},

getValue:function() {

return g$Hidden.val();

}

});

};

Page 43: Apex 5 plugins for everyone   version 2018

function custom_checkbox (pPageItemName, pOptions)

{

...

apex.widget.initPageItem(pPageItemName, {

setValue: function(pValue) {

g$Checkbox.attr('checked'

,(pValue === pOptions.checked));

syncHiddenField();

},

getValue:function() {

return g$Hidden.val();

}

});

};

Page 44: Apex 5 plugins for everyone   version 2018

function custom_checkbox (pPageItemName, pOptions)

{

...

apex.widget.initPageItem(pPageItemName, {

setValue: function(pValue) {

g$Checkbox.attr('checked'

,(pValue === pOptions.checked));

syncHiddenField();

},

getValue:function() {

return g$Hidden.val();

}

});

};

Page 45: Apex 5 plugins for everyone   version 2018
Page 46: Apex 5 plugins for everyone   version 2018
Page 47: Apex 5 plugins for everyone   version 2018
Page 48: Apex 5 plugins for everyone   version 2018
Page 49: Apex 5 plugins for everyone   version 2018
Page 50: Apex 5 plugins for everyone   version 2018
Page 51: Apex 5 plugins for everyone   version 2018
Page 52: Apex 5 plugins for everyone   version 2018
Page 53: Apex 5 plugins for everyone   version 2018
Page 54: Apex 5 plugins for everyone   version 2018
Page 55: Apex 5 plugins for everyone   version 2018
Page 56: Apex 5 plugins for everyone   version 2018
Page 57: Apex 5 plugins for everyone   version 2018
Page 58: Apex 5 plugins for everyone   version 2018

procedure <name of function> (

p_item in apex_plugin.t_item,

p_plugin in apex_plugin.t_plugin,

p_param in apex_plugin.t_item_render_param,

p_result in out nocopy apex_plugin.t_page_item_render_result

)

Page 59: Apex 5 plugins for everyone   version 2018

procedure <name of function> (

p_item in apex_plugin.t_item,

p_plugin in apex_plugin.t_plugin,

p_param in apex_plugin.t_item_render_param,

p_result in out nocopy apex_plugin.t_page_item_render_result

)

Page 60: Apex 5 plugins for everyone   version 2018

procedure <name of function> (

p_item in apex_plugin.t_item,

p_plugin in apex_plugin.t_plugin,

p_param in apex_plugin.t_item_render_param,

p_result in out nocopy apex_plugin.t_page_item_render_result

)

Page 61: Apex 5 plugins for everyone   version 2018

procedure <name of function> (

p_item in apex_plugin.t_item,

p_plugin in apex_plugin.t_plugin,

p_param in apex_plugin.t_item_render_param,

p_result in out nocopy apex_plugin.t_page_item_render_result

)

Page 62: Apex 5 plugins for everyone   version 2018

procedure <name of function> (

p_item in apex_plugin.t_item,

p_plugin in apex_plugin.t_plugin,

p_param in apex_plugin.t_item_render_param,

p_result in out nocopy apex_plugin.t_page_item_render_result

)

Page 63: Apex 5 plugins for everyone   version 2018

procedure render (

p_item in apex_plugin.t_item,

p_plugin in apex_plugin.t_plugin,

p_param in apex_plugin.t_item_render_param,

p_result in out nocopy apex_plugin.t_page_item_render_result

) is

begin

...

end render;

Page 64: Apex 5 plugins for everyone   version 2018

procedure render (

p_item in apex_plugin.t_item,

p_plugin in apex_plugin.t_plugin,

p_param in apex_plugin.t_item_render_param,

p_result in out nocopy apex_plugin.t_page_item_render_result

) is

--Use named variables

--instead of the generic attribute variables

l_checked_value varchar2(255) := nvl(p_item.attribute_01

,'On');

l_unchecked_value varchar2(255) := p_item.attribute_02;

l_checked_label varchar2(4000) := p_item.attribute_03;

begin

...

end render;

Page 65: Apex 5 plugins for everyone   version 2018

procedure render (

p_item in apex_plugin.t_item,

p_plugin in apex_plugin.t_plugin,

p_param in apex_plugin.t_item_render_param,

p_result in out nocopy apex_plugin.t_page_item_render_result

) is

--Use named variables

--instead of the generic attribute variables

l_checked_value varchar2(255) := nvl(p_item.attribute_01

,'On');

l_unchecked_value varchar2(255) := p_item.attribute_02;

l_checked_label varchar2(4000) := p_item.attribute_03;

begin

...

end render;

Page 66: Apex 5 plugins for everyone   version 2018
Page 67: Apex 5 plugins for everyone   version 2018
Page 68: Apex 5 plugins for everyone   version 2018

custom_checkbox.js

Page 69: Apex 5 plugins for everyone   version 2018
Page 70: Apex 5 plugins for everyone   version 2018
Page 71: Apex 5 plugins for everyone   version 2018
Page 72: Apex 5 plugins for everyone   version 2018
Page 73: Apex 5 plugins for everyone   version 2018
Page 74: Apex 5 plugins for everyone   version 2018

begin

...

-- Add the JavaScript library

apex_javascript.add_library(

p_name => 'custom_checkbox'

,p_directory => p_plugin.file_prefix ||

'javascript/'

,p_version => null

);

...

end render;

Page 75: Apex 5 plugins for everyone   version 2018

-- Add the JavaScript library

apex_javascript.add_library(

p_name => 'custom_checkbox'

,p_directory => p_plugin.file_prefix ||

'javascript/'

,p_version => null

);

Page 76: Apex 5 plugins for everyone   version 2018

custom_checkbox ('P1_PLUGIN_CHECK'

,{'unchecked':'Off','checked':'On'});

function custom_checkbox (pPageItemName, pOptions){...};

Page 77: Apex 5 plugins for everyone   version 2018

pPageItemName

apex_javascript.add_value(p_item.name)

'P1_PLUGIN_CHECK',

Page 78: Apex 5 plugins for everyone   version 2018

pOptions

apex_javascript.add_attribute('unchecked'

,l_unchecked_value

,false)

'unchecked':'Off',

Page 79: Apex 5 plugins for everyone   version 2018

begin

...

-- Add the call to initialize the widget

l_code := 'custom_checkbox(' ||

apex_javascript.add_value(p_item.name) || '{' ||

apex_javascript.add_attribute('unchecked'

,l_unchecked_value

,false) ||

apex_javascript.add_attribute('checked'

,l_checked_value

,false

,false) || '});';

apex_javascript.add_onload_code(p_code => l_code);

...

end render;

Page 80: Apex 5 plugins for everyone   version 2018

begin

...

-- Add the call to initialize the widget

l_code := 'custom_checkbox(' ||

apex_javascript.add_value(p_item.name) || '{' ||

apex_javascript.add_attribute('unchecked'

,l_unchecked_value

,false) ||

apex_javascript.add_attribute('checked'

,l_checked_value

,false

,false) || '});';

apex_javascript.add_onload_code(p_code => l_code);

...

end render;

Page 81: Apex 5 plugins for everyone   version 2018

begin

...

-- Add the call to initialize the widget

l_code := 'custom_checkbox(' ||

apex_javascript.add_value(p_item.name) || '{' ||

apex_javascript.add_attribute('unchecked'

,l_unchecked_value

,false) ||

apex_javascript.add_attribute('checked'

,l_checked_value

,false

,false) || '});';

apex_javascript.add_onload_code(p_code => l_code);

...

end render;

Page 82: Apex 5 plugins for everyone   version 2018

begin

...

-- Add the call to initialize the widget

l_code := 'custom_checkbox(' ||

apex_javascript.add_value(p_item.name) || '{' ||

apex_javascript.add_attribute('unchecked'

,l_unchecked_value

,false) ||

apex_javascript.add_attribute('checked'

,l_checked_value

,false

,false) || '});';

apex_javascript.add_onload_code(p_code => l_code);

...

end render;

Page 83: Apex 5 plugins for everyone   version 2018

begin

...

-- Add the call to initialize the widget

l_code := 'custom_checkbox(' ||

apex_javascript.add_value(p_item.name) || '{' ||

apex_javascript.add_attribute('unchecked'

,l_unchecked_value

,false) ||

apex_javascript.add_attribute('checked'

,l_checked_value

,false

,false) || '});';

apex_javascript.add_onload_code(p_code => l_code);

...

end render;

Page 84: Apex 5 plugins for everyone   version 2018

begin

...

-- Add the call to initialize the widget

l_code := 'custom_checkbox(' ||

apex_javascript.add_value(p_item.name) || '{' ||

apex_javascript.add_attribute('unchecked'

,l_unchecked_value

,false) ||

apex_javascript.add_attribute('checked'

,l_checked_value

,false

,false) || '});';

apex_javascript.add_onload_code(p_code => l_code);

...

end render;

Page 85: Apex 5 plugins for everyone   version 2018
Page 86: Apex 5 plugins for everyone   version 2018

<input type="hidden"

id="P1_PLUGIN_CHECK_HIDDEN"

name="p_t01"

value="Off" />

<input type="checkbox"

id="P1_PLUGIN_CHECK"

class="custom_checkbox"

value="" />

<label for="P1_PLUGIN_CHECK">Does this work?</label>

Page 87: Apex 5 plugins for everyone   version 2018

sys.htp.prn()

<input type="hidden"

id="P1_PLUGIN_CHECK_HIDDEN"

name="p_t01"

value="Off" />

Page 88: Apex 5 plugins for everyone   version 2018

begin

...

-- Get the name of the page item

l_name := apex_plugin.get_input_name_for_page_item(false);

-- Render the hidden field

-- which actually stores the checkbox value

sys.htp.prn('<input type="hidden" ' ||

'id="' || p_item.name || '_HIDDEN" ' ||

'name="' || l_name || '" ' ||

'value="' || p_value || '" />');

...

end render;

Page 89: Apex 5 plugins for everyone   version 2018

begin

...

-- Get the name of the page item

l_name := apex_plugin.get_input_name_for_page_item(false);

-- Render the hidden field

-- which actually stores the checkbox value

sys.htp.prn('<input type="hidden" ' ||

'id="' || p_item.name || '_HIDDEN" ' ||

'name="' || l_name || '" ' ||

'value="' || p_value || '" />');

...

end render;

Page 90: Apex 5 plugins for everyone   version 2018

begin

...

-- Get the name of the page item

l_name := apex_plugin.get_input_name_for_page_item(false);

-- Render the hidden field

-- which actually stores the checkbox value

sys.htp.prn('<input type="hidden" ' ||

'id="' || p_item.name || '_HIDDEN" ' ||

'name="' || l_name || '" ' ||

'value="' || p_value || '" />');

...

end render;

Page 91: Apex 5 plugins for everyone   version 2018

begin

...

-- Get the name of the page item

l_name := apex_plugin.get_input_name_for_page_item(false);

-- Render the hidden field

-- which actually stores the checkbox value

sys.htp.prn('<input type="hidden" ' ||

'id="' || p_item.name || '_HIDDEN" ' ||

'name="' || l_name || '" ' ||

'value="' || p_value || '" />');

...

end render;

Page 92: Apex 5 plugins for everyone   version 2018

begin

...

-- Get the name of the page item

l_name := apex_plugin.get_input_name_for_page_item(false);

-- Render the hidden field

-- which actually stores the checkbox value

sys.htp.prn('<input type="hidden" ' ||

'id="' || p_item.name || '_HIDDEN" ' ||

'name="' || l_name || '" ' ||

'value="' || p_value || '" />');

...

end render;

Page 93: Apex 5 plugins for everyone   version 2018

sys.htp.prn()

<input type="checkbox"

id="P1_PLUGIN_CHECK"

class="custom_checkbox"

value="" />

Page 94: Apex 5 plugins for everyone   version 2018

begin

...

-- render the checkbox widget

sys.htp.prn('<input type="checkbox" ' ||

'id="' || p_item.name || '" ' ||

'value="' || p_value || '" ' ||

case

when p_value = l_checked_value

then 'checked="checked" '

end ||

coalesce(p_item.element_attributes

,'class="simple_checkbox"') || ' />');

...

end render;

Page 95: Apex 5 plugins for everyone   version 2018

begin

...

-- render the checkbox widget

sys.htp.prn('<input type="checkbox" ' ||

'id="' || p_item.name || '" ' ||

'value="' || p_value || '" ' ||

case

when p_value = l_checked_value

then 'checked="checked" '

end ||

coalesce(p_item.element_attributes

,'class="simple_checkbox"') || ' />');

...

end render;

Page 96: Apex 5 plugins for everyone   version 2018

begin

...

-- render the checkbox widget

sys.htp.prn('<input type="checkbox" ' ||

'id="' || p_item.name || '" ' ||

'value="' || p_value || '" ' ||

case

when p_value = l_checked_value

then 'checked="checked" '

end ||

coalesce(p_item.element_attributes

,'class="simple_checkbox"') || ' />');

...

end render;

Page 97: Apex 5 plugins for everyone   version 2018

begin

...

-- render the checkbox widget

sys.htp.prn('<input type="checkbox" ' ||

'id="' || p_item.name || '" ' ||

'value="' || p_value || '" ' ||

case

when p_value = l_checked_value

then 'checked="checked" '

end ||

coalesce(p_item.element_attributes

,'class="simple_checkbox"') || ' />');

...

end render;

Page 98: Apex 5 plugins for everyone   version 2018

begin

...

-- render the checkbox widget

sys.htp.prn('<input type="checkbox" ' ||

'id="' || p_item.name || '" ' ||

'value="' || p_value || '" ' ||

case

when p_value = l_checked_value

then 'checked="checked" '

end ||

coalesce(p_item.element_attributes

,'class="simple_checkbox"') || ' />');

...

end render;

Page 99: Apex 5 plugins for everyone   version 2018

sys.htp.prn()

<label for="P1_PLUGIN_CHECK">Does this work?</label>

Page 100: Apex 5 plugins for everyone   version 2018

begin

...

-- print label after checkbox

if l_checked_label is not null

then

sys.htp.prn('<label for="' || p_item.name || '">' ||

l_checked_label || '</label>');

end if;

...

end render;

Page 101: Apex 5 plugins for everyone   version 2018

begin

...

-- print label after checkbox

if l_checked_label is not null

then

sys.htp.prn('<label for="' || p_item.name || '">' ||

l_checked_label || '</label>');

end if;

...

end render;

Page 102: Apex 5 plugins for everyone   version 2018

begin

...

-- print label after checkbox

if l_checked_label is not null

then

sys.htp.prn('<label for="' || p_item.name || '">' ||

l_checked_label || '</label>');

end if;

...

end render;

Page 103: Apex 5 plugins for everyone   version 2018

DEM

Page 104: Apex 5 plugins for everyone   version 2018

Plug-in Repository

Create from scratch

Copy of existing Plug-in

Page 105: Apex 5 plugins for everyone   version 2018

Copy of existing Plug-in

Page 106: Apex 5 plugins for everyone   version 2018

on off

Page 107: Apex 5 plugins for everyone   version 2018

on off

Page 108: Apex 5 plugins for everyone   version 2018

.fancy_checkbox {width: 80px;height: 26px;background: #333;margin: 20px auto;position: relative;border-radius: 50px;box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.5), 0px 1px 0px rgba(255, 255, 255, 0.2);

}

Page 109: Apex 5 plugins for everyone   version 2018

.fancy_checkbox:after {content: 'OFF';color: #000;position: absolute;right: 10px;z-index: 0;font: 12px/26px Arial, sans-serif;font-weight: bold;text-shadow: 1px 1px 0px rgba(255, 255, 255, 0.15);

}

Page 110: Apex 5 plugins for everyone   version 2018

.fancy_checkbox:before {content: 'ON';color: #27ae60;position: absolute;left: 10px;z-index: 0;font: 12px/26px Arial, sans-serif;font-weight: bold;

}

Page 111: Apex 5 plugins for everyone   version 2018

.fancy_checkbox label {display: block;width: 34px;height: 20px;cursor: pointer;position: absolute;top: 3px;left: 3px;z-index: 1;background: #fcfff4;background: -webkit-linear-gradient(top, #fcfff4 0%, #dfe5d7 40%, #b3bead 100%);background: linear-gradient(top, #fcfff4 0%, #dfe5d7 40%, #b3bead 100%);border-radius: 50px;-webkit-transition: all 0.4s ease;transition: all 0.4s ease;box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.3);

}

Page 112: Apex 5 plugins for everyone   version 2018

.fancy_checkbox input[type=checkbox] {visibility: hidden;

}

.fancy_checkbox input[type=checkbox]:checked + label {left: 43px;

}

Page 113: Apex 5 plugins for everyone   version 2018

<input type="checkbox"

id="P1_PLUGIN_CHECK"

class="custom_checkbox"

value="" />

<label for="P1_PLUGIN_CHECK">Does this work?</label>

Page 114: Apex 5 plugins for everyone   version 2018

<div class="fancy_checkbox">

<input type="checkbox"

id="P1_PLUGIN_CHECK"

class="custom_checkbox"

value="" />

<label for="P1_PLUGIN_CHECK">Does this work?</label>

</div>

Page 115: Apex 5 plugins for everyone   version 2018
Page 116: Apex 5 plugins for everyone   version 2018
Page 117: Apex 5 plugins for everyone   version 2018
Page 118: Apex 5 plugins for everyone   version 2018
Page 119: Apex 5 plugins for everyone   version 2018

begin

...

-- render the checkbox widget

sys.htp.prn('<div class="fancy_checkbox"> ' ||

'<input type="checkbox" ' ||

'id="' || p_item.name || '" ' ||

'value="' || p_value || '" ' ||

case

when p_value = l_checked_value

then 'checked="checked" '

end ||

coalesce(p_item.element_attributes

,'class="simple_checkbox"') || ' />');

...

end render;

Page 120: Apex 5 plugins for everyone   version 2018

begin

...

-- print label after checkbox

sys.htp.prn('<label for="' || p_item.name || '">' ||

l_checked_label || '</label>');

sys.htp.prn('</div>');

...

end render;

Page 121: Apex 5 plugins for everyone   version 2018
Page 122: Apex 5 plugins for everyone   version 2018

fancy_checkbox.css

Page 123: Apex 5 plugins for everyone   version 2018
Page 124: Apex 5 plugins for everyone   version 2018
Page 125: Apex 5 plugins for everyone   version 2018

begin

...

-- Add the css file

apex_css.add_file(

p_name => 'fancy_checkbox'

,p_directory => p_plugin.file_prefix ||

'css/'

);

...

end render;

Page 126: Apex 5 plugins for everyone   version 2018

-- Add the css file

apex_css.add_file(

p_name => 'fancy_checkbox'

,p_directory => p_plugin.file_prefix ||

'css/'

);

Page 127: Apex 5 plugins for everyone   version 2018
Page 128: Apex 5 plugins for everyone   version 2018

DEM

Page 129: Apex 5 plugins for everyone   version 2018

Plug-in Repository

Create from scratch

Copy of existing Plug-in

Page 130: Apex 5 plugins for everyone   version 2018
Page 131: Apex 5 plugins for everyone   version 2018
Page 132: Apex 5 plugins for everyone   version 2018
Page 133: Apex 5 plugins for everyone   version 2018

https://apex.world

http://apex-plugin.com

Page 134: Apex 5 plugins for everyone   version 2018

https://docs.oracle.com/

cd/E59726_01/index.htm

http://www.oracle.com/technetwork/

developer-tools/apex/application-

express/apex-plug-ins-182042.html

Page 135: Apex 5 plugins for everyone   version 2018

www.database-consultancy.nl

Page 136: Apex 5 plugins for everyone   version 2018

Alan [email protected]

alanarentsen.blogspot.com

www.database-consultancy.nl