<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[apexvarsity]]></title><description><![CDATA[I'm an Oracle developer with 10+ years in developing ERP solutions using Oracle Database, Oracle APEX, and PL/SQL. This blog is primarily for self-reference.]]></description><link>https://apexvarsity.com</link><generator>RSS for Node</generator><lastBuildDate>Tue, 09 Jun 2026 00:07:55 GMT</lastBuildDate><atom:link href="https://apexvarsity.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[How to Change the Default ORDS Landing Page in Oracle APEX?]]></title><description><![CDATA[Ever hit your domain and land on the default ORDS page instead of your APEX app? Here's a simple hack to fix that without touching your load balancer or proxy configs.
https://www.linkedin.com/posts/arunkakkattil_oracleapex-ords-oracle-activity-73764...]]></description><link>https://apexvarsity.com/how-to-change-the-default-ords-landing-page-in-oracle-apex</link><guid isPermaLink="true">https://apexvarsity.com/how-to-change-the-default-ords-landing-page-in-oracle-apex</guid><category><![CDATA[orclapex]]></category><category><![CDATA[#oracle-apex]]></category><category><![CDATA[oracleapex]]></category><category><![CDATA[ords]]></category><category><![CDATA[Oracle]]></category><dc:creator><![CDATA[Arun Mohan]]></dc:creator><pubDate>Tue, 23 Sep 2025 17:48:52 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1758649604969/e83b3e9d-bab2-4af7-8a07-f32d0ca3c129.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Ever hit your domain and land on the default ORDS page instead of your APEX app? Here's a simple hack to fix that without touching your load balancer or proxy configs.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.linkedin.com/posts/arunkakkattil_oracleapex-ords-oracle-activity-7376435218003632128-OCd2?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAASpc-QBpfnr2_c0nYC7yhNIw_drHuJnJZo">https://www.linkedin.com/posts/arunkakkattil_oracleapex-ords-oracle-activity-7376435218003632128-OCd2?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAASpc-QBpfnr2_c0nYC7yhNIw_drHuJnJZo</a></div>
<p> </p>
<h2 id="heading-before">Before</h2>
<p><strong>misdemo.maathradev.com</strong> redirects to <strong>misdemo.maathradev.com/ords/_/landing</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758647754561/b205304f-53ef-486a-8528-0de0b3bd6c05.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-after">After</h2>
<p><strong>misdemo.maathradev.com</strong> redirects to <strong>misdemo.maathradev.com/ords/r/mtc/demo/login</strong> (APEX app landing page)</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1758647818747/9c977c07-edfc-4b5f-bfba-8b4f14ad1210.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-assumptions">Assumptions</h2>
<ul>
<li><p>ORDS is installed as a service on Oracle Linux (You can run in standalone mode also)</p>
</li>
<li><p>ORDS is already configured and running</p>
</li>
<li><p>Oracle APEX application is available and accessible</p>
</li>
<li><p>You are using customer managed ORDS</p>
</li>
</ul>
<h2 id="heading-the-one-liner-solution">The One-Liner Solution</h2>
<pre><code class="lang-bash">ords config <span class="hljs-built_in">set</span> misc.defaultPage r/mtc/demo/login
</code></pre>
<p>That's it. Restart ORDS and you're done.</p>
<h2 id="heading-breaking-down-the-path">Breaking Down the Path</h2>
<p>The format is: <code>r/{workspace}/{app_alias}/{page_alias}</code></p>
<ul>
<li><p><strong>mtc</strong> = your workspace name</p>
</li>
<li><p><strong>demo</strong> = your application alias</p>
</li>
<li><p><strong>login</strong> = your landing page alias</p>
</li>
</ul>
<h2 id="heading-example">Example</h2>
<p>Let's say you want users to land directly on your sales dashboard:</p>
<pre><code class="lang-bash">sudo systemctl stop ords
sudo -iu oracle
ords config <span class="hljs-built_in">set</span> misc.defaultPage r/sales/crm/dashboard
<span class="hljs-built_in">exit</span>
sudo systemctl start ords
</code></pre>
<p>Now when someone visits <code>yourdomain.com</code>, they go straight to your dashboard instead of the default ORDS page.</p>
<h2 id="heading-why-this-works">Why This Works</h2>
<p>ORDS has a built-in configuration parameter <code>misc.defaultPage</code> that most people don't know about. Instead of setting up redirect rules elsewhere, you're just telling ORDS where to send users by default.</p>
<h2 id="heading-quick-tips">Quick Tips</h2>
<ul>
<li><p>Make sure your page alias exists and is published</p>
</li>
<li><p>Test in dev first</p>
</li>
<li><p>You need to restart ORDS for changes to take effect</p>
</li>
</ul>
<p>That's the hack. Simple, clean, and no infrastructure changes needed.</p>
<h2 id="heading-references">References</h2>
<ul>
<li><a target="_blank" href="https://docs.oracle.com/en/database/oracle/oracle-rest-data-services/25.2/ordig/about-REST-configuration-files.html#GUID-006F916B-8594-4A78-B500-BB85F35C12A0">https://docs.oracle.com/en/database/oracle/oracle-rest-data-services/25.2/ordig/about-REST-configuration-files.html#GUID-006F916B-8594-4A78-B500-BB85F35C12A0</a></li>
</ul>
]]></content:encoded></item><item><title><![CDATA[How to Handle Large Data in APEX AJAX Calls (Bypassing the 32K Limit)?]]></title><description><![CDATA[Introduction
In APEX applications, you might need to send large amounts of data through AJAX calls - like Base64 images, large JSON payloads, or document content. However, APEX has a 32K character limit for individual parameters, which can cause erro...]]></description><link>https://apexvarsity.com/how-to-handle-large-data-in-apex-ajax-calls-bypassing-the-32k-limit</link><guid isPermaLink="true">https://apexvarsity.com/how-to-handle-large-data-in-apex-ajax-calls-bypassing-the-32k-limit</guid><category><![CDATA[orclapex]]></category><category><![CDATA[oracleapex]]></category><category><![CDATA[Low Code]]></category><category><![CDATA[maathra]]></category><category><![CDATA[Oracle]]></category><dc:creator><![CDATA[Arun Mohan]]></dc:creator><pubDate>Sun, 24 Aug 2025 17:41:27 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1756057203099/1dd7de88-a441-4484-9b7b-bfb506e6828b.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-introduction">Introduction</h2>
<p>In APEX applications, you might need to send large amounts of data through AJAX calls - like Base64 images, large JSON payloads, or document content. However, APEX has a 32K character limit for individual parameters, which can cause errors when dealing with large data.</p>
<h2 id="heading-problem">Problem</h2>
<p>APEX limits individual parameters to 32,767 characters in AJAX calls. When you exceed this limit, you'll get errors like <code>ORA-06502: PL/SQL: numeric or value error</code> or data gets truncated silently.</p>
<h2 id="heading-solution">Solution</h2>
<p>There are two approaches to handle large data in APEX AJAX calls:</p>
<h3 id="heading-method-1-using-pclob01-recent-versions">Method 1: Using p_clob_01 (Recent Versions)</h3>
<p>For newer APEX versions, you can use the <code>p_clob_01</code> parameter which handles large data automatically:</p>
<p>Javascript</p>
<pre><code class="lang-javascript"><span class="hljs-comment">// Generate a random string over 32K characters</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">generateRandomString</span>(<span class="hljs-params">length</span>) </span>{
    <span class="hljs-keyword">var</span> chars = <span class="hljs-string">'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'</span>;
    <span class="hljs-keyword">var</span> result = <span class="hljs-string">''</span>;
    <span class="hljs-keyword">for</span> (<span class="hljs-keyword">var</span> i = <span class="hljs-number">0</span>; i &lt; length; i++) {
        result += chars.charAt(<span class="hljs-built_in">Math</span>.floor(<span class="hljs-built_in">Math</span>.random() * chars.length));
    }
    <span class="hljs-keyword">return</span> result;
}

<span class="hljs-comment">// Generate an array with large random data</span>
<span class="hljs-keyword">var</span> myArrayOfObjects = [];
<span class="hljs-keyword">for</span> (<span class="hljs-keyword">var</span> i = <span class="hljs-number">0</span>; i &lt; <span class="hljs-number">100</span>; i++) {
    myArrayOfObjects.push({
        <span class="hljs-attr">id</span>: i,
        <span class="hljs-attr">data</span>: generateRandomString(<span class="hljs-number">500</span>), <span class="hljs-comment">// 500 chars per object</span>
        <span class="hljs-attr">timestamp</span>: <span class="hljs-keyword">new</span> <span class="hljs-built_in">Date</span>().toISOString()
    });
}

<span class="hljs-comment">// This will create a JSON string well over 32K characters</span>
<span class="hljs-keyword">var</span> myLargeJsonData = <span class="hljs-built_in">JSON</span>.stringify(myArrayOfObjects);
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'Generated JSON size:'</span>, myLargeJsonData.length, <span class="hljs-string">'characters'</span>);

apex.server.process(
    <span class="hljs-string">'SAVE_LARGE_DATA'</span>,
    {
        <span class="hljs-attr">p_clob_01</span>: myLargeJsonData,
        <span class="hljs-attr">x01</span>: <span class="hljs-string">'text'</span>
    },
    {
        <span class="hljs-attr">success</span>: <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params">pData</span>) </span>{
            <span class="hljs-built_in">console</span>.log(<span class="hljs-string">'Success! Data sent successfully:'</span>, pData);

            apex.message.showPageSuccess(<span class="hljs-string">'Large data processed successfully'</span>);
        },
        <span class="hljs-attr">error</span>: <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params">jqXHR, textStatus, errorThrown</span>) </span>{
            <span class="hljs-built_in">console</span>.error(<span class="hljs-string">'Error sending large data:'</span>);
            <span class="hljs-built_in">console</span>.error(<span class="hljs-string">'Status:'</span>, textStatus);
            <span class="hljs-built_in">console</span>.error(<span class="hljs-string">'Error:'</span>, errorThrown);
            <span class="hljs-built_in">console</span>.error(<span class="hljs-string">'Response Text:'</span>, jqXHR.responseText);
            <span class="hljs-built_in">console</span>.error(<span class="hljs-string">'Status Code:'</span>, jqXHR.status);

            apex.message.showErrors([
                {
                    <span class="hljs-attr">type</span>: <span class="hljs-string">"error"</span>,
                    <span class="hljs-attr">location</span>: <span class="hljs-string">"page"</span>,
                    <span class="hljs-attr">message</span>: <span class="hljs-string">"Failed to process large data"</span> + textStatus,
                    <span class="hljs-attr">unsafe</span>: <span class="hljs-literal">false</span>
                }
            ]);
        },
        <span class="hljs-attr">dataType</span>: <span class="hljs-string">"text"</span>
    }
);
</code></pre>
<p>AJAX Callback</p>
<pre><code class="lang-sql">    <span class="hljs-keyword">DECLARE</span>
        l_clob_data <span class="hljs-keyword">CLOB</span> := APEX_APPLICATION.G_CLOB_01;
    <span class="hljs-keyword">BEGIN</span>
        htp.p(<span class="hljs-string">'{ "charCount" : '</span>||<span class="hljs-keyword">length</span>(l_clob_data)||<span class="hljs-string">'}'</span>);
    <span class="hljs-keyword">END</span>;
</code></pre>
<h3 id="heading-method-2-data-chunking-all-apex-versions">Method 2: Data Chunking (All APEX Versions)</h3>
<p>Break large data into smaller chunks and send via array parameters:</p>
<p>Javascript</p>
<pre><code class="lang-javascript"><span class="hljs-comment">// Generate a random string over 32K characters</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">generateRandomString</span>(<span class="hljs-params">length</span>) </span>{
    <span class="hljs-keyword">var</span> chars = <span class="hljs-string">'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'</span>;
    <span class="hljs-keyword">var</span> result = <span class="hljs-string">''</span>;
    <span class="hljs-keyword">for</span> (<span class="hljs-keyword">var</span> i = <span class="hljs-number">0</span>; i &lt; length; i++) {
        result += chars.charAt(<span class="hljs-built_in">Math</span>.floor(<span class="hljs-built_in">Math</span>.random() * chars.length));
    }
    <span class="hljs-keyword">return</span> result;
}

<span class="hljs-comment">// Generate an array with large random data</span>
<span class="hljs-keyword">var</span> myArrayOfObjects = [];
<span class="hljs-keyword">for</span> (<span class="hljs-keyword">var</span> i = <span class="hljs-number">0</span>; i &lt; <span class="hljs-number">100</span>; i++) {
    myArrayOfObjects.push({
        <span class="hljs-attr">id</span>: i,
        <span class="hljs-attr">data</span>: generateRandomString(<span class="hljs-number">500</span>), <span class="hljs-comment">// 500 chars per object</span>
        <span class="hljs-attr">timestamp</span>: <span class="hljs-keyword">new</span> <span class="hljs-built_in">Date</span>().toISOString()
    });
}

<span class="hljs-comment">// This will create a JSON string well over 32K characters</span>
<span class="hljs-keyword">var</span> myLargeJsonData = <span class="hljs-built_in">JSON</span>.stringify(myArrayOfObjects);
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'Generated JSON size:'</span>, myLargeJsonData.length, <span class="hljs-string">'characters'</span>);

<span class="hljs-keyword">const</span> chunkSize = <span class="hljs-number">8000</span>; <span class="hljs-comment">// A safe size for APEX g_f01 arrays</span>
<span class="hljs-keyword">const</span> chunks = [];

<span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> i = <span class="hljs-number">0</span>; i &lt; myLargeJsonData.length; i += chunkSize) {
    chunks.push(myLargeJsonData.substring(i, i + chunkSize));
}

<span class="hljs-comment">// Now make the AJAX call, sending the 'chunks' array via f01</span>
apex.server.process(
    <span class="hljs-string">'SAVE_CHUNKED_DATA'</span>, <span class="hljs-comment">// The name of your AJAX server process</span>
    {
        <span class="hljs-attr">f01</span>: chunks, <span class="hljs-comment">// The key part: send the array of chunks</span>
        <span class="hljs-attr">x01</span>: <span class="hljs-string">'additional_data'</span>
    },
    {
        <span class="hljs-attr">dataType</span>: <span class="hljs-string">'json'</span>,
        <span class="hljs-attr">success</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">pData</span>) </span>{
            <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Success! Data reassembled on the server."</span>, pData);
            apex.message.showPageSuccess(<span class="hljs-string">'Large data processed successfully'</span>);
        },
        <span class="hljs-attr">error</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">jqXHR, textStatus, errorThrown</span>) </span>{
            <span class="hljs-built_in">console</span>.error(<span class="hljs-string">"AJAX call failed."</span>);
            apex.message.showErrors([
                {
                    <span class="hljs-attr">type</span>: <span class="hljs-string">"error"</span>,
                    <span class="hljs-attr">location</span>: <span class="hljs-string">"page"</span>,
                    <span class="hljs-attr">message</span>: <span class="hljs-string">"Failed to process large data"</span> + textStatus,
                    <span class="hljs-attr">unsafe</span>: <span class="hljs-literal">false</span>
                }
            ]);
        }
    }
);
</code></pre>
<p>AJAX Callback</p>
<pre><code class="lang-sql"><span class="hljs-comment">-- PL/SQL Code for the "SAVE_CHUNKED_DATA" AJAX process</span>
<span class="hljs-keyword">DECLARE</span>
    l_base64_chunks apex_application_global.vc_arr2 := apex_application.g_f01; <span class="hljs-comment">-- Get the array of chunks</span>
    l_full_base64   CLOB;
    l_result        VARCHAR2(255);
<span class="hljs-keyword">BEGIN</span>
    <span class="hljs-comment">-- Reassemble the full Base64 string from chunks</span>
    l_full_base64 := <span class="hljs-string">''</span>;
    FOR i IN 1 .. l_base64_chunks.COUNT LOOP
        l_full_base64 := l_full_base64 || l_base64_chunks(i);
    <span class="hljs-keyword">END</span> <span class="hljs-keyword">LOOP</span>;

    <span class="hljs-comment">-- Now, l_full_base64 contains the complete string</span>
    <span class="hljs-comment">-- You can proceed with decoding or any other processing.</span>
    <span class="hljs-comment">-- For example, to decode into a BLOB:</span>
    <span class="hljs-comment">-- l_blob := apex_web_service.clobbase642blob(l_full_base64);</span>

    <span class="hljs-comment">-- Return a success JSON response to the client</span>
   htp.p('{ "charCount" : '||length(l_full_base64)||'}'); 

EXCEPTION
    WHEN OTHERS THEN
        htp.p('{"error": true, "message": "' || sqlerrm || '"}');
<span class="hljs-keyword">END</span>;
</code></pre>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Both methods solve the 32K limit issue. Use <code>p_clob_01</code> for newer APEX versions or chunking for older versions and maximum compatibility.</p>
]]></content:encoded></item><item><title><![CDATA[Integrating Oracle APEX with Microsoft Teams for Announcements]]></title><description><![CDATA[Have you ever missed celebrating a colleague's birthday? In a busy work environment, it can happen to the best of us. Recently, we had a similar situation, and it got me thinking about how we could leverage the power of Oracle APEX to automate these ...]]></description><link>https://apexvarsity.com/integrating-oracle-apex-with-microsoft-teams-for-announcements</link><guid isPermaLink="true">https://apexvarsity.com/integrating-oracle-apex-with-microsoft-teams-for-announcements</guid><category><![CDATA[#oracle-apex]]></category><category><![CDATA[orclapex]]></category><category><![CDATA[Low Code]]></category><category><![CDATA[Microsoft]]></category><dc:creator><![CDATA[Arun Mohan]]></dc:creator><pubDate>Sat, 17 May 2025 12:20:27 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1747484181721/56d16718-ceea-4aad-bee7-5a75a9bce4b4.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Have you ever missed celebrating a colleague's birthday? In a busy work environment, it can happen to the best of us. Recently, we had a similar situation, and it got me thinking about how we could leverage the power of Oracle APEX to automate these important reminders.</p>
<p>That's how this new integration idea was born: <strong>automatically posting birthday announcements to a Microsoft Teams channel directly from our Oracle APEX application.</strong></p>
<p>In this post, I'll walk you through how we built an automation that runs daily and pushes a message to a Microsoft Teams chat whenever an employee has a birthday that day. We'll be using <strong>Microsoft Teams Workflows</strong> and Oracle APEX web services.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747484304495/06ec92b8-a212-48de-b3cd-6a57f2183a01.png" alt class="image--center mx-auto" /></p>
<p>Let's dive in!</p>
<h2 id="heading-the-goal-automated-birthday-announcements-in-microsoft-teams">The Goal: Automated Birthday Announcements in Microsoft Teams</h2>
<p><strong>Our objective is simple:</strong></p>
<ol>
<li><p>Every morning at 8:30 AM IST, an Oracle APEX process will run.</p>
</li>
<li><p>This process will query our employee database for anyone whose birthday falls on the current date.</p>
</li>
<li><p>For each employee celebrating their birthday, a message will be automatically posted to a designated Microsoft Teams channel/chat.</p>
</li>
</ol>
<h3 id="heading-prerequisites">Prerequisites</h3>
<p>Before we begin, ensure you have the following:</p>
<ul>
<li><p>An Oracle APEX application.</p>
</li>
<li><p>A table in your database containing employee information, including their name and date of birth.</p>
</li>
<li><p>Access to a Microsoft Teams workspace and the ability to create or configure webhooks (which the Microsoft Teams Workflows component will utilize behind the scenes).</p>
</li>
</ul>
<h2 id="heading-step-by-step-implementation">Step-by-Step Implementation</h2>
<p>Let's break down the implementation into manageable steps:</p>
<h3 id="heading-microsoft-teams-configuration-setting-up-an-incoming-webhook">Microsoft Teams Configuration: Setting up an Incoming Webhook</h3>
<ol>
<li><p>Select <strong>More options</strong> ​​​​​​​​​​​​​​next to the chat you want to add to the workflow. Then, select <strong>Workflows</strong>.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747397535826/fd2c590e-4037-44aa-ac7c-49584313a1cd.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>In the <strong>Workflows</strong> dialog box, search and select “<strong>Post to a chat when a webhook request is received</strong>”</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747397048832/3acb1826-e72f-4bb3-9545-a024b60ca0cf.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Enter a descriptive name for the workflow.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747397166399/ab9c0546-b09c-4912-9aa5-d2ff60397381.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Select the Group Chat where you want to post the wishes and click Add Workflow.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747397235989/69cda0a0-51c1-4984-9679-6286e0717e48.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Copy the POST URL from next step.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747397589399/a5df924e-4b7a-4199-9fb3-9733d12cbcca.png" alt class="image--center mx-auto" /></p>
</li>
</ol>
<h2 id="heading-creating-the-apex-automation">Creating the APEX Automation</h2>
<p>Here's how to set up the Oracle APEX automation:</p>
<ol>
<li><p><strong>Navigate to Oracle APEX Automation:</strong></p>
<ul>
<li><p>Go to App Builder.</p>
</li>
<li><p>Select your Application.</p>
</li>
<li><p>Go to Shared Components.</p>
</li>
</ul>
</li>
<li><p><strong>Create Automation:</strong></p>
<ul>
<li>Click "Create".</li>
</ul>
</li>
<li><p><strong>Fill in Automation Details:</strong></p>
<ul>
<li><p>In the pop-up wizard, enter the following:</p>
<ul>
<li><p><strong>Name:</strong> A descriptive name (e.g., "Daily Birthday Wishes to Teams Chat").</p>
</li>
<li><p><strong>Type:</strong> Scheduled.</p>
</li>
<li><p><strong>Action initiated:</strong> Always.</p>
</li>
<li><p><strong>Execution Schedule:</strong> Select Custom.</p>
</li>
<li><p><strong>Frequency:</strong> Daily.</p>
</li>
<li><p><strong>Interval:</strong> 1.</p>
</li>
<li><p><strong>Execution Time:</strong> 3 AM UTC (8:30 AM IST).</p>
</li>
</ul>
</li>
<li><p>Click "Create".</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747482038805/70462967-183c-4085-a5e3-cee00a6c74e5.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
</li>
<li><p><strong>Add Action and Enable Automation:</strong></p>
<ul>
<li><p>The automation is added in "Disabled" status. You need to add an action and then enable the automation.</p>
</li>
<li><p>Edit the default action that was added.</p>
<ul>
<li><p><strong>Name:</strong> Send Birthday Wishes.</p>
</li>
<li><p><strong>Type:</strong> Execute Code.</p>
</li>
<li><p><strong>Code:</strong> Paste the PL/SQL code (provided below) into the "Code" section.</p>
</li>
<li><p>Click "Apply Changes".</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747482162647/2420890a-f101-45be-a9f7-ab7c94f8f81f.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747482215684/cacfb0cd-04eb-405a-83f4-471c15c7a22b.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
</li>
<li><p>Change the automation schedule status to "Active".</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747482688978/06ac07f4-9f45-4a7f-919f-2b057ecc3492.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Save Changes.</p>
</li>
</ul>
</li>
<li><p><strong>Run Automation (Optional):</strong></p>
<ul>
<li><p>You can now see that the automation is scheduled to run.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747482712256/0da56f88-fb07-4f98-9b3d-14f50354dc72.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>If you want to run the automation immediately, click "Run".</p>
</li>
</ul>
</li>
</ol>
<h3 id="heading-plsql-code-for-apex-automation">PL/SQL Code for APEX Automation</h3>
<p>The PL/SQL code provided is for reference only. Readers should refine it with appropriate error logging and use the correct table and column names from their specific database schema.</p>
<pre><code class="lang-sql"><span class="hljs-keyword">DECLARE</span>
   l_employee_name <span class="hljs-built_in">VARCHAR2</span>(<span class="hljs-number">100</span>); 
   l_webhook_url   VARCHAR2(1000) := 'https://prod-xx.centralindia.logic.azure.com:443/workflows/26cba624c75xxxxxxxxxxxxxxx/triggers/manual/paths/invoke?api-version=2016-06-01&amp;sp=%2Ftriggers%2Fmanual%2Frun&amp;sv=1.0&amp;sig=DJXu9tU6yiwU8qCwxxxxTdx0yAko_RDAsDf-Og';
   l_json_template CLOB;
   l_json_payload  CLOB;
   l_clob_response CLOB;
<span class="hljs-keyword">BEGIN</span>
   <span class="hljs-keyword">FOR</span> i <span class="hljs-keyword">IN</span> (
      <span class="hljs-keyword">SELECT</span>
         emp.first_name
         || <span class="hljs-string">' '</span>
         || emp.last_name full_name
      <span class="hljs-keyword">FROM</span>
         employees emp
      <span class="hljs-keyword">WHERE</span>
            emp.employee_status = <span class="hljs-string">'ACTIVE'</span>
         <span class="hljs-keyword">AND</span> to_char(
            emp.date_of_birth
          , <span class="hljs-string">'MM-DD'</span>
         ) = to_char(
            <span class="hljs-keyword">sysdate</span>
          , <span class="hljs-string">'MM-DD'</span>
         )
   ) <span class="hljs-keyword">LOOP</span>
      l_employee_name := i.full_name;
    <span class="hljs-comment">-- Define the JSON template using Q-quoting</span>
      l_json_template := q'[{
      "type": "message",
      "attachments": [
        {
          "contentType": "application/vnd.microsoft.card.adaptive",
          "contentUrl": null,
          "content": {
            "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
            "type": "AdaptiveCard",
            "version": "1.5",
            "msteams": {
                "width": "Full"
            },
            "body": [
              {
                "type": "TextBlock",
                "text": "🎉 Happy Birthday! 🎂",
                "weight": "Bolder",
                "size": "Large",
                "wrap": true,
                "horizontalAlignment": "Center"
              },
              {
                "type": "TextBlock",
                "text": "Please join us in wishing **<span class="hljs-comment">##EMPLOYEE_NAME##** a very happy birthday today!",</span>
                "wrap": true,
                "spacing": "Medium"
              },
              {
                "type": "TextBlock",
                "text": "May your day be filled <span class="hljs-keyword">with</span> joy, laughter, <span class="hljs-keyword">and</span> <span class="hljs-keyword">all</span> the things that make you smile. 🥳<span class="hljs-string">",
                "</span>wrap<span class="hljs-string">": true,
                "</span>spacing<span class="hljs-string">": "</span>Small<span class="hljs-string">"
              },
              {
                "</span><span class="hljs-keyword">type</span><span class="hljs-string">": "</span>TextBlock<span class="hljs-string">",
                "</span><span class="hljs-built_in">text</span><span class="hljs-string">": "</span><span class="hljs-keyword">From</span> <span class="hljs-keyword">all</span> <span class="hljs-keyword">of</span> us <span class="hljs-keyword">at</span> **Maathra**, have a fantastic <span class="hljs-keyword">year</span> ahead! 🌟<span class="hljs-string">",
                "</span>wrap<span class="hljs-string">": true,
                "</span>spacing<span class="hljs-string">": "</span><span class="hljs-keyword">Medium</span><span class="hljs-string">"
              }
            ]
          }
        }
      ]
    }]';

    -- Replace the placeholder with the actual employee name defined above
      l_json_payload  := replace(
         l_json_template
       , '##EMPLOYEE_NAME##'
       , l_employee_name
      );

    -- Set the necessary HTTP header using SET_REQUEST_HEADERS (plural)
    -- Since p_reset defaults to TRUE, this call clears any previous headers
    -- and sets only the specified ones.
      apex_web_service.set_request_headers(
         p_name_01  =&gt; 'Content-Type'
       , p_value_01 =&gt; 'application/json'
        -- No need to specify p_reset =&gt; TRUE, as it's the default behavior
      );

    -- Make the RESTful web service call (POST request)
      l_clob_response := apex_web_service.make_rest_request(
         p_url         =&gt; l_webhook_url
       , p_http_method =&gt; 'POST'
       , p_body        =&gt; l_json_payload
        -- p_wallet_path =&gt; 'file:/path/to/your/wallet', -- Specify if needed
        -- p_wallet_pwd  =&gt; 'wallet_password'          -- Specify if needed
      );

    -- Check the response status code
      IF apex_web_service.g_status_code = 200
      OR apex_web_service.g_status_code = 202 THEN
         dbms_output.put_line('Successfully sent notification for ' || l_employee_name);
        -- Optional: DBMS_OUTPUT.PUT_LINE('Response: ' || l_clob_response);
      ELSE
         dbms_output.put_line('Error sending notification for ' || l_employee_name);
         dbms_output.put_line('Status Code: ' || apex_web_service.g_status_code);
        -- Optional: Log the response body which might contain error details
        -- DBMS_OUTPUT.PUT_LINE('Error Response: ' || l_clob_response);
      END IF;

   END LOOP;
EXCEPTION
   WHEN OTHERS THEN
        -- Catch any other unexpected errors
      dbms_output.put_line('Unexpected error sending notification for '
                           || l_employee_name
                           || ': '
                           || sqlerrm);
        -- Re-raise the exception if necessary, or log to a table
      RAISE;
END;</span>
</code></pre>
<h2 id="heading-outcome-automated-birthday-wishes-in-microsoft-teams">Outcome: Automated Birthday Wishes in Microsoft Teams</h2>
<p>Here's an example of how the automated birthday wishes appear in a Microsoft Teams chat:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747483450880/a06e6f8a-e1c0-4727-b739-c39b6f531abc.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-alternative-maathra-cloudapps-automation"><strong>Alternative: Maathra CloudApps Automation</strong></h2>
<p>In our specific application, we used the Automation feature available as part of our CloudApps application, instead of the APEX automation. Both approaches function similarly, as the CloudApps automation is an abstraction layer over <code>dbms_scheduler</code>. Here are the configuration steps within our CloudApps system.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747483674229/32fef60d-e406-4622-b1d9-5cd9bb70e339.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747483706553/a1b88548-649d-4fa5-8671-b166fbd69bce.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747483726425/1f0a6b4a-0204-44df-a77c-940867c7b650.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-references">References</h2>
<ul>
<li><p>Microsoft Teams Workflow: <a target="_blank" href="https://support.microsoft.com/en-us/office/creating-a-workflow-from-a-chat-in-teams-e3b51c4f-49de-40aa-a6e7-bcff96b99edc">https://support.microsoft.com/en-us/office/creating-a-workflow-from-a-chat-in-teams-e3b51c4f-49de-40aa-a6e7-bcff96b99edc</a></p>
</li>
<li><p>Oracle APEX Automations: <a target="_blank" href="https://docs.oracle.com/en/database/oracle/apex/24.2/htmdb/about-automations.html">https://docs.oracle.com/en/database/oracle/apex/24.2/htmdb/about-automations.html</a></p>
</li>
<li><p>Oracle <code>dbms_scheduler</code>: <a target="_blank" href="https://docs.oracle.com/en/database/oracle/oracle-database/21/arpls/DBMS_SCHEDULER.html">https://docs.oracle.com/en/database/oracle/oracle-database/21/arpls/DBMS_SCHEDULER.html</a></p>
</li>
<li><p>Adaptive Cards: <a target="_blank" href="https://adaptivecards.io/">https://adaptivecards.io/</a></p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Building Smarter Event Solutions]]></title><description><![CDATA[Introduction
This blog post is a continuation of my session at the JAPAC Oracle APEX Office Hours held on December 19, 2024.
https://apexadb.oracle.com/ords/r/tech/catalog/session-landing-page?p2_event_id=45765721044361121760365597768138001502&p2_sou...]]></description><link>https://apexvarsity.com/building-smarter-event-solutions-oracle-apex</link><guid isPermaLink="true">https://apexvarsity.com/building-smarter-event-solutions-oracle-apex</guid><category><![CDATA[orclapex]]></category><category><![CDATA[#oracle-apex]]></category><category><![CDATA[Low Code]]></category><dc:creator><![CDATA[Arun Mohan]]></dc:creator><pubDate>Fri, 20 Dec 2024 16:07:04 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1734584605784/c26303fd-49d5-4f83-8424-189f8c7d086a.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-introduction">Introduction</h2>
<p>This blog post is a continuation of my session at the JAPAC Oracle APEX Office Hours held on December 19, 2024.</p>
<p><a target="_blank" href="https://apexadb.oracle.com/ords/r/tech/catalog/session-landing-page?p2_event_id=45765721044361121760365597768138001502&amp;p2_source_log=QR">https://apexadb.oracle.com/ords/r/tech/catalog/session-landing-page?p2_event_id=45765721044361121760365597768138001502&amp;p2_source_log=QR</a></p>
<p>In today’s fast-paced event environment, collaboration and engagement are essential to delivering impactful experiences. With this vision, we built the AI enabled <strong>Oracle APEX Q&amp;A App</strong>, a modern and dynamic solution designed to bridge the gap between participants, speakers, and experts at the <strong>Oracle APEX Utsav 2024</strong>. Here's how this app was created to enhance event interactions and the innovative features that make it a standout solution.</p>
<p><a target="_blank" href="https://www.canva.com/design/DAGZG1MLznQ/XwGjN28cHL-0CmvWKKTLPw/view?utm_content=DAGZG1MLznQ&amp;utm_campaign=designshare&amp;utm_medium=link2&amp;utm_source=uniquelinks&amp;utlId=h3fa4ecc1c4">https://www.canva.com/design/DAGZG1MLznQ/XwGjN28cHL-0CmvWKKTLPw/view?utm_content=DAGZG1MLznQ&amp;utm_campaign=designshare&amp;utm_medium=link2&amp;utm_source=uniquelinks&amp;utlId=h3fa4ecc1c4</a></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.canva.com/design/DAGZG1MLznQ/XwGjN28cHL-0CmvWKKTLPw/view?utm_content=DAGZG1MLznQ&amp;utm_campaign=designshare&amp;utm_medium=link2&amp;utm_source=uniquelinks&amp;utlId=h3fa4ecc1c4">https://www.canva.com/design/DAGZG1MLznQ/XwGjN28cHL-0CmvWKKTLPw/view?utm_content=DAGZG1MLznQ&amp;utm_campaign=designshare&amp;utm_medium=link2&amp;utm_source=uniquelinks&amp;utlId=h3fa4ecc1c4</a></div>
<p> </p>
<h2 id="heading-why-we-built-this-app">Why We Built This App</h2>
<p>The primary goal of the Oracle APEX Q&amp;A App was to enable seamless collaboration and communication during the event. It was designed to:</p>
<ul>
<li><p>Foster <strong>real-time engagement</strong> between attendees, speakers, and Oracle APEX experts.</p>
</li>
<li><p>Provide a platform for participants to ask meaningful questions and get expert answers.</p>
</li>
<li><p>Leverage <strong>AI-driven assistance</strong> for instant responses, ensuring that every query gets attention.</p>
</li>
</ul>
<p>By addressing these needs, the app aimed to create a more inclusive and interactive environment for all event stakeholders.</p>
<h2 id="heading-key-features-of-the-qampa-app">Key Features of the Q&amp;A App</h2>
<p>The Oracle APEX Q&amp;A App is packed with features that showcase the agility and innovation of Oracle APEX:</p>
<ol>
<li><p><strong>QR Code Integration</strong></p>
<ul>
<li><p>Each participant’s ID card featured a unique QR code.</p>
</li>
<li><p>Scanning the QR code granted users instant access to the app.</p>
</li>
</ul>
</li>
<li><p><strong>Smart Question Management</strong></p>
<ul>
<li><p>Users could post questions and select specific <strong>topics</strong> or <strong>speakers</strong> to address them.</p>
</li>
<li><p>Questions could also be left open for the entire community of experts to answer.</p>
</li>
</ul>
</li>
<li><p><strong>AI Integration</strong></p>
<ul>
<li><p>A built-in AI agent provided instant, intelligent answers to user queries.</p>
</li>
<li><p>This ensured every question received attention, even in real-time scenarios.</p>
</li>
</ul>
</li>
<li><p><strong>Real-Time Notifications</strong></p>
<ul>
<li>Participants received push notifications when their questions were answered, ensuring they never missed an update.</li>
</ul>
</li>
<li><p><strong>PWA Support</strong></p>
<ul>
<li><p>The app functioned as a <strong>Progressive Web App</strong>, offering a seamless experience across devices.</p>
</li>
<li><p>Participants could access the app offline, ensuring uninterrupted usability.</p>
</li>
</ul>
</li>
</ol>
<h2 id="heading-how-it-works">How It Works</h2>
<p>The app’s workflow is simple yet effective:</p>
<ol>
<li><p><strong>Access via QR Code:</strong></p>
<ul>
<li>Participants scan the unique QR code on their ID to log in.</li>
</ul>
</li>
<li><p><strong>Post Questions:</strong></p>
<ul>
<li>Users post questions, selecting a specific topic or speaker, or leave it open for experts.</li>
</ul>
</li>
<li><p><strong>Review and Respond:</strong></p>
<ul>
<li>Speakers and Oracle APEX experts review questions and provide detailed answers.</li>
</ul>
</li>
<li><p><strong>AI Assistance:</strong></p>
<ul>
<li>Participants can interact with the AI agent for immediate responses to general queries.</li>
</ul>
</li>
<li><p><strong>Stay Updated:</strong></p>
<ul>
<li>Push notifications alert users when their question receives a response, keeping them engaged.</li>
</ul>
</li>
</ol>
<h2 id="heading-sample-application">Sample Application</h2>
<ul>
<li><a target="_blank" href="https://github.com/arun-maathra/apex-apps/tree/271b18a0ad91e9538556296564b0d493949f3d26/QnA%20App">https://github.com/arun-maathra/apex-apps/tree/271b18a0ad91e9538556296564b0d493949f3d26/QnA%20App</a></li>
</ul>
<h2 id="heading-credits">Credits</h2>
<ul>
<li><p><a target="_blank" href="https://github.com/mebjas/html5-qrcode">https://github.com/mebjas/html5-qrcode</a></p>
</li>
<li><p><a target="_blank" href="https://inoaug.org/">https://inoaug.org/</a></p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[How to Secure Oracle APEX Development Environment with Free SSL from Let's Encrypt?]]></title><description><![CDATA[Introduction
In our previous tutorial, we discussed setting up a reverse proxy using Microsoft IIS, enhancing the security and accessibility of our Oracle APEX applications. Continuing from there, this tutorial delves into another crucial aspect of a...]]></description><link>https://apexvarsity.com/how-to-secure-oracle-apex-development-environment-with-free-ssl-from-lets-encrypt</link><guid isPermaLink="true">https://apexvarsity.com/how-to-secure-oracle-apex-development-environment-with-free-ssl-from-lets-encrypt</guid><category><![CDATA[orclapex]]></category><category><![CDATA[SSL Certificate]]></category><category><![CDATA[Free SSL Certificate]]></category><category><![CDATA[ords]]></category><category><![CDATA[oraclapex]]></category><dc:creator><![CDATA[Arun Mohan]]></dc:creator><pubDate>Fri, 29 Mar 2024 08:52:15 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1711700115140/9cbfefc1-ddc8-44d1-8954-b7696a7eca02.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-introduction"><strong>Introduction</strong></h1>
<p>In our previous tutorial, we discussed setting up a reverse proxy using Microsoft IIS, enhancing the security and accessibility of our Oracle APEX applications. Continuing from there, this tutorial delves into another crucial aspect of application security: installing free SSL from Let's Encrypt in Microsoft IIS.</p>
<h1 id="heading-disclaimer"><strong>Disclaimer</strong></h1>
<p>Before we proceed, it's essential to emphasize that the methods demonstrated in this tutorial are intended solely for educational purposes. While suitable for development environments, these approaches may not provide the level of security required for production environments. Always consult with your organization's IT policies and security guidelines before implementing any changes.</p>
<h1 id="heading-use-case"><strong>Use Case</strong></h1>
<p>In a development environment, securing our applications becomes paramount, especially when integrating with other services reliant on SSL and testing advanced functionalities such as push notifications. By installing SSL certificates, we ensure secure communication between our application and external services, enhancing overall security and trustworthiness.</p>
<h1 id="heading-video-tutorial">Video Tutorial</h1>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/cRE_kxjz_zw?si=4qlb6bM_Ck7-v7un">https://youtu.be/cRE_kxjz_zw?si=4qlb6bM_Ck7-v7un</a></div>
<p> </p>
<h1 id="heading-implementation"><strong>Implementation</strong></h1>
<p>To implement free SSL from Let's Encrypt in Microsoft IIS, we'll leverage a third-party tool called win-acme. Follow these simple steps to secure your development environment:</p>
<ol>
<li><p><strong>Download win-acme:</strong> Begin by acquiring win-acme, a user-friendly tool designed to simplify the SSL certificate acquisition process. URL: <a target="_blank" href="https://www.win-acme.com/">https://www.win-acme.com/</a></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1711701247738/91315fc7-02a7-4bd8-8405-897cf659e1b0.png" alt class="image--center mx-auto" /></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1711701287756/7e6f3ee6-79f1-4f19-9ab2-b4c4e2b928c4.png" alt class="image--center mx-auto" /></p>
</li>
<li><p><strong>Configure Site Bindings in IIS:</strong> Next, navigate to Internet Information Services (IIS) and configure site bindings to establish seamless communication between your server and the SSL certificate.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1711701306659/c6c2affa-182d-49f1-a5a4-daf43fe2c769.png" alt class="image--center mx-auto" /></p>
</li>
<li><p><strong>Request SSL using win-acme:</strong> With win-acme command line interface, initiate the SSL certificate request process, allowing for a secure connection to your development environment.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1711701449906/fb586020-15fe-4d37-969c-88a9865d0068.png" alt class="image--center mx-auto" /></p>
</li>
</ol>
<h1 id="heading-trusted-origin-configuration"><strong>Trusted Origin Configuration</strong></h1>
<p>After enabling SSL and reverse proxy, it's common to encounter issues when logging into Oracle APEX workspace due to untrusted origins. To overcome this, we need to configure trusted origins in the ORDS configuration file. Here's how:</p>
<ol>
<li><p>Open the ORDS configuration folder and locate the 'settings.xml' file.</p>
</li>
<li><p>Add an entry for your domain to the 'settings.xml' file to designate it as a trusted origin.</p>
<pre><code class="lang-xml"> <span class="hljs-tag">&lt;<span class="hljs-name">entry</span> <span class="hljs-attr">key</span>=<span class="hljs-string">"security.externalSessionTrustedOrigins"</span>&gt;</span>http://example.com,https://example.com:443<span class="hljs-tag">&lt;/<span class="hljs-name">entry</span>&gt;</span>
 <span class="hljs-tag">&lt;<span class="hljs-name">entry</span> <span class="hljs-attr">key</span>=<span class="hljs-string">"security.forceHTTPS"</span>&gt;</span>true<span class="hljs-tag">&lt;/<span class="hljs-name">entry</span>&gt;</span>
</code></pre>
</li>
<li><p>Save the changes and restart the server to apply the configuration.</p>
</li>
</ol>
<p>By following the steps outlined in this tutorial and configuring trusted origins, we can establish a secure foundation for testing and integrating advanced functionalities into our Oracle APEX applications. Stay tuned for more insightful tutorials in our "How-to in Oracle APEX" series!</p>
<h1 id="heading-references">References</h1>
<ul>
<li><p>win-acme download URL: <a target="_blank" href="https://www.win-acme.com/">https://www.win-acme.com/</a></p>
</li>
<li><p>Let's Encrypt: <a target="_blank" href="https://letsencrypt.org/">https://letsencrypt.org/</a></p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[How to Set Up Reverse Proxy with Windows IIS for Oracle APEX?]]></title><description><![CDATA[Introduction
In this tutorial, we will discuss the steps to set up a reverse proxy for Oracle APEX using Microsoft IIS (Internet Information Service).
Please note that this guide is intended for educational purposes only. In a production environment,...]]></description><link>https://apexvarsity.com/how-to-set-up-reverse-proxy-with-windows-iis-for-oracle-apex</link><guid isPermaLink="true">https://apexvarsity.com/how-to-set-up-reverse-proxy-with-windows-iis-for-oracle-apex</guid><category><![CDATA[orclapex]]></category><category><![CDATA[Reverse Proxy]]></category><category><![CDATA[ords]]></category><dc:creator><![CDATA[Arun Mohan]]></dc:creator><pubDate>Mon, 18 Mar 2024 17:09:07 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1710779166993/cce5109b-e786-475d-b2ad-f31963e8b08f.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-introduction">Introduction</h1>
<p>In this tutorial, we will discuss the steps to set up a reverse proxy for Oracle APEX using Microsoft IIS (Internet Information Service).</p>
<p>Please note that this guide is intended for educational purposes only. In a production environment, additional steps may be necessary to adequately secure the applications.</p>
<h1 id="heading-use-case">Use Case</h1>
<p>Your organization hosts an APEX application, and you aim to enhance its security by implementing SSL encryption and obscuring the actual port numbers on which the application runs.</p>
<h1 id="heading-assumptions">Assumptions</h1>
<ul>
<li><p>ORDS is running either in standalone mode or deployed in Apache Tomcat.</p>
</li>
<li><p>ORDS is accessible on port 8080.</p>
</li>
<li><p>The DNS record for your domain has already been added and is pointed to the reverse proxy server.</p>
</li>
</ul>
<h1 id="heading-video-tutorial">Video Tutorial</h1>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/sHsEj_Xf_2Q?si=Hf1WMqWqVaMvNigg">https://youtu.be/sHsEj_Xf_2Q?si=Hf1WMqWqVaMvNigg</a></div>
<p> </p>
<h1 id="heading-steps">Steps</h1>
<p>Setting up a reverse proxy with IIS involves five steps, as listed below.</p>
<ol>
<li><p>Install IIS</p>
</li>
<li><p>Install Microsoft Application Request Routing Module</p>
</li>
<li><p>Install Microsoft URL Rewrite Module</p>
</li>
<li><p>Enable Reverse Proxy</p>
</li>
<li><p>Configure Trusted Origins</p>
</li>
</ol>
<p>Watch the video tutorial and follow the steps to set up a reverse proxy.</p>
<ol>
<li><h2 id="heading-install-iis">Install IIS</h2>
</li>
</ol>
<ul>
<li><p>Open Server Manager</p>
</li>
<li><p>Select "Add roles and features"</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1710779672518/e6394a5b-b5b5-474d-953c-cfd2436b2a47.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Click Next and select "Role-based or feature-based installation" and click Next.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1710779771141/9ddce666-9b49-427a-a879-757abb1f9d19.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Select "Web Server (IIS)" from Server Roles</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1710779827371/716aee44-3ad6-4ada-bf3a-61673413f22d.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Click Next and Click "Add Features"</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1710779871720/5391f293-65c9-4299-a348-7e8f57625912.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Click 'Next' until you reach the last step of the wizard, and the installation will commence.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1710779978045/b8a2fb5d-e268-4052-8642-17f8a96c6b51.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
<p>Once the installation is complete, check the server status by opening '<a target="_blank" href="http://localhost">localhost</a>' in a browser.</p>
<ol start="2">
<li><h2 id="heading-install-microsoft-application-request-routing-module">Install Microsoft Application Request Routing Module</h2>
</li>
</ol>
<ul>
<li><p>Download Microsoft Application Request Routing from <a target="_blank" href="https://www.iis.net/downloads/microsoft/application-request-routing">https://www.iis.net/downloads/microsoft/application-request-routing</a></p>
</li>
<li><p>Install the module.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1710780402380/650c4907-eff4-4e65-8065-2ce4df3d6d0a.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
<p>Verify the installation by opening the IIS Manager</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1710780460178/7c5ffaed-2f09-4388-b762-7511b1b5d048.png" alt class="image--center mx-auto" /></p>
<ol start="3">
<li><h2 id="heading-install-microsoft-url-rewrite-module">Install Microsoft URL Rewrite Module</h2>
</li>
</ol>
<ul>
<li><p>Download the URL Rewrite module and install it. <a target="_blank" href="https://www.iis.net/downloads/microsoft/url-rewrite">https://www.iis.net/downloads/microsoft/url-rewrite</a></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1710780599605/f39ea7d8-f024-4b4d-a375-0bde93ecc8d7.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Verify the installation from the IIS Manager.</p>
</li>
</ul>
<ol start="4">
<li><h2 id="heading-enable-reverse-proxy">Enable Reverse Proxy</h2>
</li>
</ol>
<ul>
<li><p>Open IIS Manager</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1710780981569/bf688a0c-0230-4c44-ae41-d6a1d7d4c261.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Open your site</p>
</li>
<li><p>Open URL Rewrite module</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1710781012637/712458e4-782e-4229-8d2f-5ba55d22c331.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Click "Add Rules" under actions.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1710781016587/e9e935bc-c752-4f65-98d9-f6a0700a194e.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Select "Reverse Proxy" and click OK.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1710781031485/b0164fbe-10e6-48e0-877b-e9cd62d4a206.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Set the rules as shown in the screenshot.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1710781070897/91d66842-947e-42a4-84b2-38123eb653d8.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>You have enabled Reverse Proxy. Let's verify by typing the domain in the browser. You will see that the APEX application is loading without the need to specify the port number.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1710781076389/b5faed71-c0b0-4cbf-aa51-30c62ed07554.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
<ol start="5">
<li><h2 id="heading-configure-trusted-origins">Configure Trusted Origins</h2>
</li>
</ol>
<ul>
<li><p>If you attempt to log in to Oracle APEX, you may encounter the following error. To resolve this, add your domain to the trusted origins in the ORDS configuration file.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1710781329359/9943a27a-5407-4e59-8850-c7da1c23caa8.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Open the ORDS configuration file from {ORDS Config Directory}/global/settings.xml</p>
</li>
<li><p>Add your domain to the trusted origins list and save the file.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1710781437760/36a29a80-d337-4ddb-b57b-2d7f285b6048.png" alt class="image--center mx-auto" /></p>
<pre><code class="lang-xml">  <span class="hljs-tag">&lt;<span class="hljs-name">entry</span> <span class="hljs-attr">key</span>=<span class="hljs-string">"security.externalSessionTrustedOrigins"</span>&gt;</span>http://example.com,https://example.com:443<span class="hljs-tag">&lt;/<span class="hljs-name">entry</span>&gt;</span>
</code></pre>
</li>
<li><p>Restart ORDS and verify the setup by logging into Oracle APEX Workspace.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1710781544975/69fbcf9c-e478-42bb-b13c-51bfa2b33bfd.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1710781560408/3d0b73dc-af04-4cf4-992a-f7ff6127da0f.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
<h1 id="heading-references">References</h1>
<ul>
<li><p><a target="_blank" href="https://learn.microsoft.com/en-us/iis/get-started/introduction-to-iis/iis-web-server-overview">https://learn.microsoft.com/en-us/iis/get-started/introduction-to-iis/iis-web-server-overview</a></p>
</li>
<li><p>Application Request Routing: <a target="_blank" href="https://www.iis.net/downloads/microsoft/application-request-routing">https://www.iis.net/downloads/microsoft/application-request-routing</a></p>
</li>
<li><p>URL Rewrite: <a target="_blank" href="https://www.iis.net/downloads/microsoft/url-rewrite">https://www.iis.net/downloads/microsoft/url-rewrite</a></p>
</li>
<li><p>ORDS Configuration File: <a target="_blank" href="https://docs.oracle.com/en/database/oracle/oracle-rest-data-services/23.4/ordig/about-REST-configuration-files.html#GUID-006F916B-8594-4A78-B500-BB85F35C12A0">https://docs.oracle.com/en/database/oracle/oracle-rest-data-services/23.4/ordig/about-REST-configuration-files.html#GUID-006F916B-8594-4A78-B500-BB85F35C12A0</a></p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Course objective and course content]]></title><description><![CDATA[Welcome to our SQL and PL/SQL Essentials for APEX Beginners Course!
Course Objective
The primary objective of this course is to equip you with a fair understanding of SQL and PL/SQL specifically tailored for Oracle APEX. We understand that as beginne...]]></description><link>https://apexvarsity.com/sql-plsql-course-objective-and-course-content</link><guid isPermaLink="true">https://apexvarsity.com/sql-plsql-course-objective-and-course-content</guid><category><![CDATA[SQL]]></category><category><![CDATA[PL/SQL]]></category><category><![CDATA[oracle pl/sql]]></category><dc:creator><![CDATA[Arun Mohan]]></dc:creator><pubDate>Thu, 19 Oct 2023 13:41:20 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1697722698670/4a2c43a6-50fd-4d00-9151-699c01b3bdb4.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to our SQL and PL/SQL Essentials for APEX Beginners Course!</p>
<h2 id="heading-course-objective">Course Objective</h2>
<p>The primary objective of this course is to equip you with a fair understanding of SQL and PL/SQL specifically tailored for Oracle APEX. We understand that as beginners, you might be taking your first steps in the world of database development. That's why we're focusing on the basics to ensure a solid foundation for your APEX journey. We won't delve into advanced SQL or complex PL/SQL in this series. Instead, we'll focus on the essentials that you need to start your Oracle APEX journey. We understand that building a solid foundation is key, and we'll make sure that you get there.</p>
<h2 id="heading-who-should-join">Who Should Join</h2>
<p>This course is intended for beginners in Oracle APEX. If you're just getting started with APEX or have some experience but want to strengthen your SQL and PL/SQL skills, this course is perfect for you. We want to emphasize that this series is geared towards those who are new to these topics, so there's no need to worry if you haven't worked with SQL or PL/SQL before.</p>
<h2 id="heading-the-approach">The Approach</h2>
<h3 id="heading-hands-on-learning"><strong>Hands-On Learning</strong></h3>
<p>One of the core principles of this course is hands-on learning. We believe that the best way to grasp these fundamental concepts is by putting them into practice. Throughout the course, we'll use a sample database provided by Oracle, and we'll work within the Oracle APEX Workspace to practice SQL commands. This approach will give you real-world experience and prepare you for practical APEX development.</p>
<h3 id="heading-course-structure"><strong>Course Structure</strong></h3>
<p>The series will be structured in a logical order, starting with the basics and gradually building your skills. Each topic will be accompanied by practical examples, and we encourage you to follow along and practice on your own.</p>
<h3 id="heading-what-to-expect"><strong>What to Expect</strong></h3>
<p>In the upcoming posts, you can expect to see a combination of clear explanations, code snippets, and practical exercises. We'll ensure that the content is approachable, easy to follow, and above all, valuable for your journey into Oracle APEX.</p>
<h2 id="heading-index">Index</h2>
<ol>
<li><p>Credits</p>
</li>
<li><p>Introduction to SQL</p>
<ol>
<li><p>Learning environment setup</p>
</li>
<li><p>What is SQL?</p>
</li>
<li><p>Understanding relational databases</p>
</li>
<li><p>Basic SQL queries (SELECT, FROM, WHERE)</p>
</li>
<li><p>Sorting and filtering data</p>
</li>
</ol>
</li>
<li><p>Retrieving Data with SQL</p>
</li>
<li><p>Modifying Data with SQL</p>
</li>
</ol>
<h2 id="heading-disclaimer"><strong>Disclaimer</strong></h2>
<p>I am excited to share my knowledge with the community through this tutorial series. While I strive to provide accurate information, please let me know if you notice any discrepancies. Please note that this series is a work in progress and may be incomplete or subject to change. I will update this page as new content is added in the coming months.</p>
]]></content:encoded></item><item><title><![CDATA[Oracle APEX styling using Theme Roller]]></title><description><![CDATA[Introduction
Welcome to the tutorial on styling your Oracle APEX application using Theme Roller. When it comes to creating a great user experience, the appearance of your web application plays a vital role. With Theme Roller, you have the ability to ...]]></description><link>https://apexvarsity.com/oracle-apex-styling-using-theme-roller</link><guid isPermaLink="true">https://apexvarsity.com/oracle-apex-styling-using-theme-roller</guid><category><![CDATA[orclapex]]></category><category><![CDATA[#oracle-apex]]></category><category><![CDATA[Low Code]]></category><dc:creator><![CDATA[Arun Mohan]]></dc:creator><pubDate>Mon, 26 Jun 2023 18:05:41 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1687802608111/fac5e384-f116-4485-ac1b-b26cd8b6848c.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-introduction">Introduction</h2>
<p>Welcome to the tutorial on styling your Oracle APEX application using Theme Roller. When it comes to creating a great user experience, the appearance of your web application plays a vital role. With Theme Roller, you have the ability to customize the look and feel of your Oracle APEX application, turning it from a basic design into a visually appealing and cohesive interface. In this tutorial, we will explore the world of Theme Roller and learn how it can enhance the aesthetics of your application.</p>
<h2 id="heading-video-tutorial">Video Tutorial</h2>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/kPGl30hbLdc">https://youtu.be/kPGl30hbLdc</a></div>
<p> </p>
<h2 id="heading-steps-to-create-theme-style">Steps to Create Theme Style</h2>
<ul>
<li><p>Log in to Oracle APEX Workspace and run the application</p>
</li>
<li><p>Select "Customize" from the developer toolbar and then select "Theme Roller"</p>
</li>
<li><p>Select a base theme style and change the options.</p>
</li>
<li><p>Try different options and to save the changes click "Save"</p>
</li>
<li><p>Provide a name for the new theme style and click save.</p>
</li>
</ul>
<h2 id="heading-changing-theme-style-from-app-builder">Changing Theme Style from App Builder</h2>
<ul>
<li><p>Log in to Oracle APEX workspace and open the application.</p>
</li>
<li><p>Navigate to Shared Component --&gt; User Interface --&gt; User Interface Attributes</p>
</li>
<li><p>Under the "Attributes" set the theme style</p>
</li>
<li><p>Click Apply Changes and run the application.</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Creating an Oracle APEX Application]]></title><description><![CDATA[Introduction
In this tutorial, you will discover how to create your very first Oracle APEX application from scratch. We will walk you through the step-by-step process of building a web app effortlessly, enabling you to dive into the world of Oracle A...]]></description><link>https://apexvarsity.com/creating-an-oracle-apex-application</link><guid isPermaLink="true">https://apexvarsity.com/creating-an-oracle-apex-application</guid><category><![CDATA[#oracle-apex]]></category><category><![CDATA[Oracle]]></category><category><![CDATA[#apexvarsity]]></category><category><![CDATA[Low Code]]></category><dc:creator><![CDATA[Arun Mohan]]></dc:creator><pubDate>Sat, 20 May 2023 18:23:19 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1684606014927/7fbb0bf2-556d-4766-9793-ff8fe09603d6.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-introduction">Introduction</h2>
<p>In this tutorial, you will discover how to create your very first Oracle APEX application from scratch. We will walk you through the step-by-step process of building a web app effortlessly, enabling you to dive into the world of Oracle APEX development with confidence.</p>
<h2 id="heading-video-tutorial">Video Tutorial</h2>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=RmeucsxosA0&amp;t=4s">https://www.youtube.com/watch?v=RmeucsxosA0&amp;t=4s</a></div>
<p> </p>
<h2 id="heading-steps-to-create-apex-application">Steps to Create APEX Application</h2>
<ul>
<li><p>Log in to Oracle APEX</p>
</li>
<li><p>Click on App Builder</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1684606597024/96604e3a-eb7d-4a3d-8005-a79e6b5e0f86.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Click Create</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1684606624597/7121bde0-ad61-4024-b235-d06ea48a954f.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Click New Application in the Create An Application wizard</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1684606659880/279b1e61-2754-445f-9c49-43299f0d7859.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Provide a name for your application. E.g., MyHR</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1684606683540/8bc71e54-586e-4c2e-a766-04468481940c.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Optionally change the icon and color scheme by selecting the icon next to the application name</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1684606739261/3395b567-582c-4dbe-8272-ccf4bd79b22e.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Click Save Icon</p>
</li>
<li><p>Under features click "Check All"</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1684606758699/7dd08a27-1757-492a-a13c-940e441bc266.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Click Create Application.</p>
</li>
<li><p>This process may take a few seconds to complete.</p>
</li>
<li><p>To run the application click the play button.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1684606775605/acb79248-04da-46d1-a8e7-b483fada258f.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Sign in with your workspace username and password.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1684606803113/13e94dda-8bad-4410-88ab-6d73271d6743.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>You have successfully created your first APEX application without writing a single line of code. The application automatically handled the authentication.</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Installing Sample Dataset in Oracle APEX]]></title><description><![CDATA[Introduction
In this tutorial, we will learn how to install the sample data set provided by Oracle in Oracle APEX. By utilizing this pre-defined data, you can quickly jumpstart your application development and explore the capabilities of Oracle APEX ...]]></description><link>https://apexvarsity.com/installing-sample-dataset-in-oracle-apex</link><guid isPermaLink="true">https://apexvarsity.com/installing-sample-dataset-in-oracle-apex</guid><category><![CDATA[orclapex]]></category><category><![CDATA[#oracle-apex]]></category><category><![CDATA[Low Code]]></category><category><![CDATA[ords]]></category><category><![CDATA[#apexvarsity]]></category><dc:creator><![CDATA[Arun Mohan]]></dc:creator><pubDate>Sat, 20 May 2023 12:35:29 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1684586001849/92024983-fcdd-48c8-92ec-12b7464f3f57.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-introduction">Introduction</h2>
<p>In this tutorial, we will learn how to install the sample data set provided by Oracle in Oracle APEX. By utilizing this pre-defined data, you can quickly jumpstart your application development and explore the capabilities of Oracle APEX with realistic data scenarios.</p>
<h2 id="heading-steps">Steps</h2>
<ul>
<li><p>Log in to the Oracle APEX workspace</p>
</li>
<li><p>Click on SQL Workshop</p>
</li>
<li><p>Click Utilities from the landing page</p>
</li>
<li><p>Click Sample Datasets</p>
</li>
<li><p>Click the Install button towards the left of "HR Data"</p>
</li>
<li><p>Click Next</p>
</li>
<li><p>Click Install Dataset</p>
</li>
<li><p>The process may take a few seconds to complete. Once completed click exit and use the object browser to review the database objects.</p>
</li>
</ul>
<h2 id="heading-video-tutorial">Video Tutorial</h2>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=MRrIp7YpX1Y">https://www.youtube.com/watch?v=MRrIp7YpX1Y</a></div>
]]></content:encoded></item><item><title><![CDATA[Exploring Oracle APEX Development Tools]]></title><description><![CDATA[Introduction
Welcome to this tutorial on Oracle APEX Development Tools. This tutorial will explore two essential tools: App Builder and SQL Workshop. By familiarizing yourself with these tools, you will gain the confidence to create robust applicatio...]]></description><link>https://apexvarsity.com/exploring-oracle-apex-development-tools</link><guid isPermaLink="true">https://apexvarsity.com/exploring-oracle-apex-development-tools</guid><category><![CDATA[orclapex]]></category><category><![CDATA[#oracle-apex]]></category><category><![CDATA[Low Code]]></category><dc:creator><![CDATA[Arun Mohan]]></dc:creator><pubDate>Sat, 20 May 2023 06:52:26 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1684565388430/98e947a3-f7b2-4928-aedc-c65cf8739e69.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-introduction">Introduction</h2>
<p>Welcome to this tutorial on Oracle APEX Development Tools. This tutorial will explore two essential tools: App Builder and SQL Workshop. By familiarizing yourself with these tools, you will gain the confidence to create robust applications using Oracle APEX. Let's dive in and discover how these tools can empower you in your APEX development journey.</p>
<h2 id="heading-app-builder">App Builder</h2>
<p>App builder provides a visual development environment for creating stunning web applications without complex coding.</p>
<p>It has four large icons Create, Import, Dashboard, and Workspace utilities.</p>
<p><strong>Create</strong>. Launches the Create Application Wizard. Use the Create Application Wizard to build a complete application containing multiple pages.</p>
<p><strong>Import</strong>. Launches the Import Wizard. Use this wizard to import export files from the export repository.</p>
<p><strong>Dashboard</strong>. Links to the App Builder Dashboard display metrics about applications in the current workspace.</p>
<p><strong>Workspace Utilities</strong>. Use the Workspace Utilities page to access REST Enabled SQL Services, Remote Servers, Application Groups, Web Credentials, Workspace Themes, Export, Oracle APEX Views, Manage Backups, and REST Source Catalog.</p>
<h2 id="heading-sql-workshop">SQL Workshop</h2>
<p>SQL Workshop offers a comprehensive set of SQL development and administration tools.</p>
<p>SQL Workshop home page features</p>
<ul>
<li><p>Object Browser</p>
</li>
<li><p>SQL Commands</p>
</li>
<li><p>SQL Scripts</p>
</li>
<li><p>Utilities</p>
</li>
<li><p>RESTful Services</p>
</li>
</ul>
<p>In this tutorial, we will be covering Object and SQL Commands only.</p>
<h2 id="heading-video-tutorial">Video Tutorial</h2>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=1fuhQCFAYc4&amp;t=5s">https://www.youtube.com/watch?v=1fuhQCFAYc4&amp;t=5s</a></div>
<p> </p>
<h2 id="heading-references">References</h2>
<p>App Builder User's Guide: <a target="_blank" href="https://docs.oracle.com/en/database/oracle/apex/23.1/htmdb/index.html">https://docs.oracle.com/en/database/oracle/apex/23.1/htmdb/index.html</a></p>
<p>SQL Workshop Guide:</p>
<p><a target="_blank" href="https://docs.oracle.com/en/database/oracle/apex/23.1/aeutl/index.html">https://docs.oracle.com/en/database/oracle/apex/23.1/aeutl/index.html</a></p>
]]></content:encoded></item><item><title><![CDATA[Getting Started with Oracle APEX: Requesting a Free Workspace on apex.oracle.com]]></title><description><![CDATA[Introduction
Oracle Application Express (APEX) is a low-code development platform that enables developers to create web-based applications quickly and easily. The best part is that you can start learning and building APEX applications without any cos...]]></description><link>https://apexvarsity.com/getting-started-with-oracle-apex-requesting-a-free-workspace-on-apexoraclecom</link><guid isPermaLink="true">https://apexvarsity.com/getting-started-with-oracle-apex-requesting-a-free-workspace-on-apexoraclecom</guid><category><![CDATA[orclapex]]></category><category><![CDATA[#oracle-apex]]></category><category><![CDATA[Low Code]]></category><category><![CDATA[#apexvarsity]]></category><dc:creator><![CDATA[Arun Mohan]]></dc:creator><pubDate>Mon, 10 Apr 2023 18:22:35 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1681150678530/c6e9bbec-f0bf-4cbd-8054-ab7f127e4a80.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-introduction">Introduction</h2>
<p>Oracle Application Express (APEX) is a low-code development platform that enables developers to create web-based applications quickly and easily. The best part is that you can start learning and building APEX applications without any cost. In this blog post, we will cover how to request a free workspace on <a target="_blank" href="http://apex.oracle.com">apex.oracle.com</a>, where you can create and host your APEX applications. This step-by-step guide will help beginners get started with APEX, and enable them to build their own applications without worrying about hosting costs.</p>
<h2 id="heading-steps-to-request-free-workspace">Steps to Request Free Workspace</h2>
<p>Here are the steps to request a free workspace on <a target="_blank" href="http://apex.oracle.com">apex.oracle.com</a>:</p>
<ol>
<li><p>Open a web browser and go to <a target="_blank" href="http://apex.oracle.com">apex.oracle.com</a>.</p>
</li>
<li><p>Click on "Start for free today" on the home page.</p>
</li>
<li><p>Scroll down to "Request a free workspace" and click on it.</p>
</li>
<li><p>Fill in the required information, including your first and last names, a valid email address, workspace name, and location. Complete the survey before submitting your request.</p>
</li>
<li><p>Wait for the approval email to arrive in your inbox. This may take a few seconds.</p>
</li>
<li><p>Open the email from <a target="_blank" href="http://apex.oracle.com">apex.oracle.com</a> and click "Create Workspace".</p>
</li>
<li><p>Provide a new password and confirm it when prompted.</p>
</li>
<li><p>Check the APEX version by clicking on "app builder" and looking at the bottom right corner. The current version is 22.2.4.</p>
</li>
<li><p>In the next chapter, you will learn more about various tools available within the APEX workspace, such as app builder and SQL Workshop.</p>
</li>
</ol>
<p>By following these steps, you will be able to request a free workspace on <a target="_blank" href="http://apex.oracle.com">apex.oracle.com</a> and start your journey to developing powerful Oracle APEX applications.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/fChrL1lnytE">https://youtu.be/fChrL1lnytE</a></div>
]]></content:encoded></item><item><title><![CDATA[Course objective and course content]]></title><description><![CDATA[Course Objective
To provide a comprehensive understanding of Oracle APEX to beginners and enable them to develop web applications using Oracle APEX. The course will cover essential concepts and techniques required for building a robust and scalable a...]]></description><link>https://apexvarsity.com/course-objective-and-course-content</link><guid isPermaLink="true">https://apexvarsity.com/course-objective-and-course-content</guid><category><![CDATA[orclapex]]></category><category><![CDATA[#oracle-apex]]></category><category><![CDATA[Low Code]]></category><dc:creator><![CDATA[Arun Mohan]]></dc:creator><pubDate>Mon, 10 Apr 2023 18:07:26 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1681149935831/bd29c5bb-6221-4bb5-9cf8-ba3969a3f7f6.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-course-objective">Course Objective</h2>
<p>To provide a comprehensive understanding of Oracle APEX to beginners and enable them to develop web applications using Oracle APEX. The course will cover essential concepts and techniques required for building a robust and scalable application. By the end of the course, you will have the necessary skills to create custom applications and the confidence to explore more advanced features of Oracle APEX.</p>
<h2 id="heading-the-approach">The Approach</h2>
<p>The approach for the "Hero to Superhero - Oracle APEX" tutorial series is a hands-on, project-based learning experience. Rather than just learning concepts and theory, participants will be applying what they learn to develop a real-world application. Each section will build upon the previous one, providing a step-by-step guide to building the application. This approach will enable learners to not only understand the concepts but also be able to apply them in a practical setting. By the end of the series, participants will have developed a fully functional employee record management system, demonstrating their newfound skills and knowledge.</p>
<h2 id="heading-index">Index</h2>
<ol>
<li><p>Introduction</p>
<ol>
<li><p>Introduction to Oracle APEX</p>
</li>
<li><p>Sample HRMS application walkthrough</p>
</li>
</ol>
</li>
<li><p>Getting started with Oracle APEX</p>
<ol>
<li><p><a target="_blank" href="https://apexvarsity.com/getting-started-with-oracle-apex-requesting-a-free-workspace-on-apexoraclecom">Oracle APEX workspace - Requesting a free workspace on apex.oracle.com.</a></p>
</li>
<li><p><a target="_blank" href="https://apexvarsity.com/exploring-oracle-apex-development-tools-app-builder-and-sql-workshop">Development tools in Oracle APEX - App Builder, SQL Workshop</a></p>
</li>
<li><p><a target="_blank" href="https://apexvarsity.com/installing-sample-dataset-in-oracle-apex-kickstart-your-development-with-pre-defined-data">Installing sample HR/EMP dataset</a></p>
</li>
<li><p><a target="_blank" href="https://apexvarsity.com/creating-an-oracle-apex-application">Creating an APEX application</a></p>
</li>
<li><p><a target="_blank" href="https://apexvarsity.com/oracle-apex-styling-using-theme-roller">Oracle APEX styling using theme roller</a></p>
</li>
</ol>
</li>
<li><p>Building the HRMS application</p>
</li>
<li><p>Oracle APEX security</p>
</li>
<li><p>Oracle APEX workflow using unified task lists</p>
</li>
<li><p>Packaging and deploying</p>
</li>
</ol>
<h2 id="heading-disclaimer">Disclaimer</h2>
<p>I am excited to share my knowledge with the community through this tutorial series. While I strive to provide accurate information, please let me know if you notice any discrepancies. Please note that this series is a work in progress and may be incomplete or subject to change. I will update this page as new content is added in the coming months.</p>
]]></content:encoded></item><item><title><![CDATA[How to Zip and download files in Oracle APEX?]]></title><description><![CDATA[Introduction
In this tutorial, we will be focusing on how to use the apex_zip utility package to zip files and enable them to be downloaded with just a single button click from within an Oracle APEX page.
Background
In the employee self-service porta...]]></description><link>https://apexvarsity.com/how-to-zip-and-download-files-in-oracle-apex</link><guid isPermaLink="true">https://apexvarsity.com/how-to-zip-and-download-files-in-oracle-apex</guid><category><![CDATA[orclapex]]></category><category><![CDATA[#oracle-apex]]></category><category><![CDATA[Oracle]]></category><dc:creator><![CDATA[Arun Mohan]]></dc:creator><pubDate>Sun, 09 Apr 2023 13:27:35 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1681046718804/c244ab50-9965-4447-af49-2c23a2316805.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-introduction">Introduction</h2>
<p>In this tutorial, we will be focusing on how to use the apex_zip utility package to zip files and enable them to be downloaded with just a single button click from within an Oracle APEX page.</p>
<h2 id="heading-background">Background</h2>
<p>In the employee self-service portal, employees frequently request reimbursements for various expenses such as travel allowances, shift allowances, phone reimbursements, and more. To process these requests, employees are required to upload digital copies of their supporting documents to the portal. At the end of each month, the HR admin is responsible for downloading these requests and submitting them to the accounts team. However, this process can be quite time-consuming, especially when it comes to downloading multiple attachments. To simplify this process, we've created a solution that allows users to download all attachments for all requests submitted by employees during a specific period as a single zip file. To learn more about how this solution works, please watch the video provided below.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/sJkwweDD9kU">https://youtu.be/sJkwweDD9kU</a></div>
<p> </p>
<h2 id="heading-steps">Steps</h2>
<p>To create a functionality to download attachments as a zip file, follow these steps:</p>
<ol>
<li><p>Create an application process named DOWNLOAD_ATTACHMENTS in the Shared Components or at the page level in the Ajax Callback section.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1681044982946/88f0f3e7-93cc-48e4-8060-abc7f2a4eff4.png" alt class="image--center mx-auto" /></p>
<pre><code class="lang-sql"> <span class="hljs-keyword">DECLARE</span>
    l_download_file_name  <span class="hljs-built_in">VARCHAR2</span>(<span class="hljs-number">64</span>) := <span class="hljs-string">'reimbursement-attachments.zip'</span>;
    l_zip_file        BLOB;
    l_disposition     VARCHAR2(30) := 'attachment';
 <span class="hljs-keyword">BEGIN</span>
    <span class="hljs-keyword">FOR</span> i <span class="hljs-keyword">IN</span> (
       <span class="hljs-keyword">SELECT</span> file_name,
              file_content
       <span class="hljs-keyword">FROM</span> my_files
    ) <span class="hljs-keyword">LOOP</span>
      <span class="hljs-comment">-- Add files to the zip </span>
     apex_zip.add_file(
                        p_zipped_blob =&gt; l_zip_file
                      , p_file_name =&gt; i.file_name
                      , p_content =&gt; i.file_content
       );
    <span class="hljs-keyword">END</span> <span class="hljs-keyword">LOOP</span>;

    <span class="hljs-comment">-- Finish zipping</span>
    apex_zip.finish(p_zipped_blob =&gt; l_zip_file);
    <span class="hljs-comment">-- Download zip file</span>
    sys.htp.init;
    sys.owa_util.mime_header(
                            'application/zip'
                          , false
    );
    sys.htp.p('Content-length: '
              || sys.dbms_lob.getlength(l_zip_file));

    sys.htp.p('Content-Disposition: attachment; filename="'
              || l_download_file_name
              || '"');
    sys.owa_util.http_header_close;
    sys.wpg_docload.download_file(l_zip_file);
    apex_application.stop_apex_engine;
 <span class="hljs-keyword">END</span>;
</code></pre>
</li>
<li><p>Create a button and set the behavior to "Submit Page".</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1681045028512/98c26503-53c7-4ebe-9c10-49dfadeea670.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Under the processing tab, create a branch after the submit (or after processing) and set the behavior to:</p>
<ul>
<li><p>Type: Page or URL (Redirect)</p>
</li>
<li><p>Target: Same page</p>
</li>
<li><p>Advanced → Request: APPLICATION_PROCESS=DOWNLOAD_ATTACHMENTS</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1681045060054/9d5239ef-48c2-4e20-86ec-5e475b23a9a6.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
</li>
<li><p>Save and run the application.</p>
</li>
</ol>
<h2 id="heading-references">References</h2>
<p><a target="_blank" href="https://docs.oracle.com/en/database/oracle/apex/22.2/aeapi/APEX_ZIP.html#GUID-270BFF3A-5FB1-4089-894E-978608F9BD87">https://docs.oracle.com/en/database/oracle/apex/22.2/aeapi/APEX_ZIP.html#GUID-270BFF3A-5FB1-4089-894E-978608F9BD87</a></p>
]]></content:encoded></item><item><title><![CDATA[How to hide the Oracle APEX success message using JavaScript]]></title><description><![CDATA[Introduction
When building applications in Oracle APEX, it's common to display success messages to the user after specific actions, such as submitting a form or updating data. However, in some cases, it may be desirable to hide these success messages...]]></description><link>https://apexvarsity.com/how-to-hide-the-oracle-apex-success-message-using-javascript</link><guid isPermaLink="true">https://apexvarsity.com/how-to-hide-the-oracle-apex-success-message-using-javascript</guid><category><![CDATA[#oracle-apex]]></category><dc:creator><![CDATA[Arun Mohan]]></dc:creator><pubDate>Sun, 29 Jan 2023 19:02:44 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1675019125289/6b51a6fb-9aca-4c0f-bf85-92f997e296e4.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-introduction">Introduction</h2>
<p>When building applications in Oracle APEX, it's common to display success messages to the user after specific actions, such as submitting a form or updating data. However, in some cases, it may be desirable to hide these success messages after a few seconds. This tutorial will help you implement a solution to this using JavaScript.</p>
<h2 id="heading-video-tutorial">Video Tutorial</h2>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=3SPoGEM3lAU">https://www.youtube.com/watch?v=3SPoGEM3lAU</a></div>
<p> </p>
<h2 id="heading-steps">Steps</h2>
<ul>
<li>Visit <a target="_blank" href="https://apex.oracle.com/pls/apex/r/apex_pm/ut/javascript-apis">https://apex.oracle.com/pls/apex/r/apex_pm/ut/javascript-apis</a> or copy the below-given code snippet.</li>
</ul>
<pre><code class="lang-javascript">apex.jQuery(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>) </span>{
  apex.theme42.util.configAPEXMsgs({
    <span class="hljs-attr">autoDismiss</span>: <span class="hljs-literal">true</span>,
    <span class="hljs-attr">duration</span>: <span class="hljs-number">3000</span>  <span class="hljs-comment">// duration is optional (Default is 3000 milliseconds)</span>
  });
});
</code></pre>
<ul>
<li><p>Go to the Global Page( Page30)</p>
</li>
<li><p>Click on Dynamic Actions</p>
</li>
<li><p>Create a Dynamic Action of type "Execute JavaScript Code" on the page load</p>
</li>
<li><p>Paste the copied code snippet. Adjust the duration and click OK, then Save the page.</p>
</li>
</ul>
<h2 id="heading-outcome">Outcome</h2>
<p>The message will be hidden after the duration specified in the code. Thus the user need not close the success message manually.</p>
]]></content:encoded></item><item><title><![CDATA[How to set a background image for the APEX login page?]]></title><description><![CDATA[Introduction
This tutorial helps you change the background image of the login page in Oracle APEX.
APEX Version: 22.1
Expected Output

Default Login Page

Steps

Upload image in Shared Components --> Files and Reports --> Static Application Files -->...]]></description><link>https://apexvarsity.com/how-to-set-a-background-image-for-the-apex-login-page</link><guid isPermaLink="true">https://apexvarsity.com/how-to-set-a-background-image-for-the-apex-login-page</guid><category><![CDATA[#oracle-apex]]></category><dc:creator><![CDATA[Arun Mohan]]></dc:creator><pubDate>Thu, 15 Dec 2022 01:57:55 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1671069121106/7GhxoqPIM.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-introduction">Introduction</h2>
<p>This tutorial helps you change the background image of the login page in Oracle APEX.</p>
<p>APEX Version: 22.1</p>
<h2 id="heading-expected-output">Expected Output</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1671068945134/YYB5ggaff.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-default-login-page">Default Login Page</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1671067023225/LAwDT4lZA.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-steps">Steps</h2>
<ul>
<li><p>Upload image in Shared Components --&gt; Files and Reports --&gt; Static Application Files --&gt; Create File</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1671067237753/dNj9nmiHl.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Note down the "Reference". In this example, the Reference is #APP_FILES#app-bg.jpg</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1671067376229/MfsyEZLuh.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Edit the Login Page and add the below-given CSS in the inline CSS field under the CSS section.</p>
</li>
</ul>
<pre><code class="lang-css"><span class="hljs-selector-tag">body</span>{
  <span class="hljs-attribute">background-image</span>: <span class="hljs-built_in">url</span>(<span class="hljs-string">'#APP_FILES#app-bg.jpg'</span>) <span class="hljs-meta">!important</span>;
  <span class="hljs-attribute">background-position</span>: center;
  <span class="hljs-attribute">background-repeat</span>: no-repeat; 
  <span class="hljs-attribute">background-size</span>: cover <span class="hljs-meta">!important</span>;
}
</code></pre>
<ul>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1671069362490/Ei-hCsVPZ.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Save changes and run the page.</p>
</li>
</ul>
<h2 id="heading-output">Output</h2>
<h2 id="heading-useful-links">Useful Links</h2>
<p>Stock Photos: <a target="_blank" href="https://www.pexels.com/">https://www.pexels.com/</a></p>
<p>Opensource Illustrations: <a target="_blank" href="https://undraw.co/">https://undraw.co/</a></p>
]]></content:encoded></item><item><title><![CDATA[How to install Oracle APEX v20 on Windows?]]></title><description><![CDATA[Introduction
This video tutorial is for installing Oracle APEX on a Windows machine and deploying ORDS in Apache Tomcat. The APEX version used in this tutorial is 20. However, the approach remains the same for later versions as well.
Watch Tutorial
h...]]></description><link>https://apexvarsity.com/how-to-install-oracle-apex-v20-on-windows</link><guid isPermaLink="true">https://apexvarsity.com/how-to-install-oracle-apex-v20-on-windows</guid><category><![CDATA[#oracle-apex]]></category><category><![CDATA[Apex]]></category><category><![CDATA[ords]]></category><dc:creator><![CDATA[Arun Mohan]]></dc:creator><pubDate>Sat, 03 Dec 2022 07:20:11 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1670051575813/wGlyLhTpR.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-introduction">Introduction</h2>
<p>This video tutorial is for installing Oracle APEX on a Windows machine and deploying ORDS in Apache Tomcat. The APEX version used in this tutorial is 20. However, the approach remains the same for later versions as well.</p>
<h2 id="heading-watch-tutorial">Watch Tutorial</h2>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=57h1uW-E02o">https://www.youtube.com/watch?v=57h1uW-E02o</a></div>
]]></content:encoded></item><item><title><![CDATA[How to set Oracle APEX page items using JavaScript?]]></title><description><![CDATA[Introduction
This tutorial will help you understand the usage of apex.item javascript API to set the value of a page item.
Syntax
setValue(pValue, pDisplayValueopt, pSuppressChangeEventopt)
Examples
Input Fields
In this example, the value of the page...]]></description><link>https://apexvarsity.com/how-to-set-oracle-apex-page-items-using-javascript</link><guid isPermaLink="true">https://apexvarsity.com/how-to-set-oracle-apex-page-items-using-javascript</guid><category><![CDATA[Oracle]]></category><category><![CDATA[#oracle-apex]]></category><dc:creator><![CDATA[Arun Mohan]]></dc:creator><pubDate>Sun, 27 Nov 2022 08:10:13 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1669536833692/0d2nxiMTq.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-introduction">Introduction</h1>
<p>This tutorial will help you understand the usage of apex.item javascript API to set the value of a page item.</p>
<h1 id="heading-syntax">Syntax</h1>
<pre><code>setValue(pValue, pDisplayValueopt, pSuppressChangeEventopt)
</code></pre><h1 id="heading-examples">Examples</h1>
<h2 id="heading-input-fields">Input Fields</h2>
<p>In this example, the value of the page item P1_ITEM will be set to 10. As pSuppressChangeEvent has not been passed, the default behavior of the change event triggering for P1_ITEM will occur.</p>
<pre><code>apex.item( <span class="hljs-string">"P1_ITEM"</span> ).setValue( <span class="hljs-string">"10"</span> );
</code></pre><h2 id="heading-pop-up-lov-select-list">Pop-Up LOV/ Select List</h2>
<p>In this example, P1_DEPARTMENT is a Popup LOV page item. A pop-up LOV must have a display value and return value. The display value of P1_DEPARTMENT will be set to <strong>Sales</strong>, and the hidden return value will be set to 10.</p>
<pre><code>apex.item( <span class="hljs-string">"P1_DEPARTMENT"</span> ).setValue( <span class="hljs-string">"10"</span>, <span class="hljs-string">"Sales"</span>);
</code></pre><p>This example shows how to suppress the change event when there is no display value.</p>
<pre><code>apex.item( <span class="hljs-string">"P1_DEPARTMENT"</span> ).setValue( <span class="hljs-string">"10"</span>, <span class="hljs-literal">null</span>, <span class="hljs-literal">true</span> );
</code></pre><h1 id="heading-reference">Reference</h1>
<p>https://docs.oracle.com/en/database/oracle/application-express/21.2/aexjs/item.html#setValue</p>
]]></content:encoded></item></channel></rss>