<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>khalil</title>
	<atom:link href="https://khalil232.com/author/khalil232/feed/" rel="self" type="application/rss+xml" />
	<link>https://khalil232.com</link>
	<description></description>
	<lastBuildDate>Tue, 14 Apr 2026 20:16:14 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://i0.wp.com/khalil232.com/wp-content/uploads/2023/12/khalil232-favicon-color.png?fit=32%2C32&#038;ssl=1</url>
	<title>khalil</title>
	<link>https://khalil232.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">222554886</site>	<item>
		<title>Building User-Friendly Web Apps</title>
		<link>https://khalil232.com/vbcs-tutorials/298/how-to-build-user-friendly-web-apps/</link>
		
		<dc:creator><![CDATA[khalil]]></dc:creator>
		<pubDate>Mon, 18 Nov 2024 16:15:31 +0000</pubDate>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[VBCS-Tutorials]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[VBCS]]></category>
		<guid isPermaLink="false">https://khalil232.com/?p=298</guid>

					<description><![CDATA[Building a user-friendly web app isn’t just about features. Learn practical UX improvements like better navigation, non-blocking interactions, and clear visual cues that make your app easier to use.]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-jetpack-markdown"><p>Building a web app isn’t just about features. It’s about how users interact with it. A good app should feel natural, predictable, and easy to use. Small usability improvements often make a big difference in how people experience your product.</p>
<hr>
<h2>Navigation Enhancements</h2>
<h3>Make Pages Easy to Bookmark</h3>
<p>Update the URL to reflect the current state when users search, filter, or view specific content. This allows them to return to the same place without repeating steps.</p>
<ul>
<li>
<p><strong>Example:</strong></p>
<ul>
<li>Before: User searches for “Vehicle XYZ”</li>
<li>After: <code>khalil232.com/someapp/search?query=Vehicle+XYZ</code></li>
</ul>
</li>
</ul>
<p>This saves time and makes your app feel more reliable.</p>
<h3>Support Deep Linking</h3>
<p>Allow users to open specific records, sections, or screens directly using a URL. This avoids repetitive navigation.</p>
<ul>
<li>
<p><strong>Example:</strong></p>
<ul>
<li><code>khalil232.com/someapp/vehicle/12345</code></li>
</ul>
</li>
</ul>
<p>Deep linking is especially useful in business apps where users frequently revisit or share specific records.</p>
<h2>Respect User Actions</h2>
<h3>Avoid Restricting Basic Functionalities</h3>
<p>Do not block basic browser actions like cut, copy, or paste. Users expect these to work everywhere.</p>
<ul>
<li>
<p><strong>Avoid:</strong></p>
<ul>
<li>Disabling right-click</li>
<li>Preventing text selection</li>
</ul>
</li>
</ul>
<p>Blocking these actions creates frustration and breaks normal user behavior.</p>
<h2>Non-Blocking Processes</h2>
<p><img data-recalc-dims="1" decoding="async" src="https://i0.wp.com/khalil232.com/wp-content/uploads/2024/11/do-dont-blocking-ui.png?ssl=1" alt="Do vs Don't blocking ui example"></p>
<h3>Reduce Blocking Actions</h3>
<p>Full-screen loaders and blocking overlays interrupt users and slow them down. Instead, allow them to continue working.</p>
<ul>
<li>
<p><strong>Better approaches:</strong></p>
<ul>
<li>Run tasks in the background</li>
<li>Keep screens interactive</li>
<li>Show completion using notifications or toasts</li>
</ul>
</li>
</ul>
<h4>Example</h4>
<p>While generating a report, let users continue using the app. Notify them when the report is ready to download.</p>
<p>This keeps the app responsive and efficient.</p>
<h2>Visual Clarity</h2>
<h3>Make Links Visually Distinct</h3>
<p><img data-recalc-dims="1" decoding="async" src="https://i0.wp.com/khalil232.com/wp-content/uploads/2024/11/do-dont-link-image.png?ssl=1" alt="Do vs Don't link example"></p>
<p>Links should clearly look clickable. Use color, underline, or icons to differentiate them from normal text.</p>
<ul>
<li>
<p><strong>Example:</strong></p>
<ul>
<li>Blue, underlined text for links</li>
</ul>
</li>
</ul>
<p>Clear visual cues improve navigation and reduce confusion.</p>
<h3>Confirm Difficult Actions</h3>
<p>Always confirm actions that cannot be undone, such as deleting data.</p>
<p><img data-recalc-dims="1" decoding="async" src="https://i0.wp.com/khalil232.com/wp-content/uploads/2024/11/delete-confirmation.png?ssl=1" alt="Delete popup example"></p>
<ul>
<li>
<p><strong>Example:</strong></p>
<ul>
<li>“This action will permanently delete your record. Do you want to continue?”</li>
</ul>
</li>
</ul>
<p>This prevents mistakes and gives users confidence.</p>
<h2>Data Management</h2>
<h3>Manage Text Length in Tables or Lists</h3>
<p>Long text can break layouts and reduce readability. Handle it properly.</p>
<ul>
<li>
<p><strong>Recommended:</strong></p>
<ul>
<li>Truncate long text</li>
<li>Add “Read More” options</li>
<li>Use tooltips or modals for full content</li>
</ul>
</li>
</ul>
<p>This keeps the UI clean without hiding important information.</p>
<hr>
<h3>File Upload Previews</h3>
<p><img data-recalc-dims="1" decoding="async" src="https://i0.wp.com/khalil232.com/wp-content/uploads/2024/11/File-upload-do-dont.png?ssl=1" alt="Do vs Don't File Upload example"></p>
<p>Show a preview before users submit uploaded files. Include key details.</p>
<ul>
<li>
<p><strong>Display:</strong></p>
<ul>
<li>File name</li>
<li>File size</li>
<li>File type</li>
</ul>
</li>
</ul>
<p>Users should be able to remove or replace files easily before submitting.</p>
<h2>Conclusion</h2>
<p>User-friendly apps are built through small, thoughtful decisions.</p>
<p>Making navigation easier, avoiding unnecessary restrictions, and keeping the interface responsive all contribute to a better experience. These improvements may seem minor, but they significantly reduce user frustration and make your app more enjoyable to use.</p>
</div>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">298</post-id>	</item>
		<item>
		<title>Make VBCS application migration easier</title>
		<link>https://khalil232.com/vbcs-tutorials/282/make-vbcs-application-migration-easier/</link>
		
		<dc:creator><![CDATA[khalil]]></dc:creator>
		<pubDate>Fri, 02 Aug 2024 18:32:38 +0000</pubDate>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[VBCS-Tutorials]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[VBCS]]></category>
		<guid isPermaLink="false">https://khalil232.com/?p=282</guid>

					<description><![CDATA[These are some general tips for a VBCS developer to make changes in VBCS application before migrating to different instances. Use connections based on backend. Instead of directly using a URL, This way, when we migrate from one instance to another, we can make changes in backend URL and credentials. This will be one-time setup [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>These are some general tips for a VBCS developer to make changes in VBCS application before migrating to different instances. </p>



<h2 class="wp-block-heading has-medium-font-size">Use connections based on backend. Instead of directly using a URL,</h2>



<p class="has-small-font-size">This way, when we migrate from one instance to another, we can make changes in backend URL and credentials. This will be one-time setup when me get a new instance and at code level, we don&#8217;t have to make many changes </p>



<p class="has-medium-font-size">Get Application URL using JS function </p>



<p class="has-small-font-size">For any kind of link to different VBCS application, use JavaScript code to get application URL using </p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="" style="font-size:clamp(14px, .875rem, 21px);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>$application.path
// design url -- {{vbcs-cloud-url}}/ic/builder/design/khalil/1.0.0/preview/webApps/demo/
// live url -- {{vbcs-cloud-url}}/ic/builder/rt/khalil/live/webApps/demo/ </textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">$application</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">path</span></span>
<span class="line"><span style="color: #6A9955">// design url -- {{vbcs-cloud-url}}/ic/builder/design/khalil/1.0.0/preview/webApps/demo/</span></span>
<span class="line"><span style="color: #6A9955">// live url -- {{vbcs-cloud-url}}/ic/builder/rt/khalil/live/webApps/demo/ </span></span></code></pre></div>



<p>Get SaaS URL using JS function</p>



<p class="has-small-font-size">For any kind of link to different ERP instance for any deep link or report link to get the host name of SaaS application, configure the SaaS application as one of the backend and configure a get API</p>



<p class="has-small-font-size">Using the get API, we can use the below JavaScript code to get full URL of API, from which we can extract the exact host name</p>



<p class="has-small-font-size">Code sample for getting SaaS URL using Rest Helper</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="" style="font-size:clamp(14px, .875rem, 21px);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>define(&#91;"vb/helpers/rest"&#93;, (Rest) => {
  "use strict";

  class PageModule {
    async getSaaSURL(arg1, arg2) {

      let apiURL = await Rest.get("jsonplaceholderTypicodeCom/getUsers").toUrl();

      // jsonplaceholderTypicodeCom --> this is service name
      // you can find this under Service Connections --> Overview --> Connection name 

      // getUsers --> this is endpoint name 
      // in above tab --> select endpoint and This is endpoint id 
      
      let hostName = new URL(apiURL).origin;

      console.log(apiURL); // https://jsonplaceholder.typicode.com/users
      console.log(hostName); // https://jsonplaceholder.typicode.com/
    }
  }

  return PageModule;
});
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">define</span><span style="color: #D4D4D4">(&#91;</span><span style="color: #CE9178">&quot;vb/helpers/rest&quot;</span><span style="color: #D4D4D4">&#93;, (</span><span style="color: #9CDCFE">Rest</span><span style="color: #D4D4D4">) </span><span style="color: #569CD6">=&gt;</span><span style="color: #D4D4D4"> {</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #CE9178">&quot;use strict&quot;</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">class</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">PageModule</span><span style="color: #D4D4D4"> {</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">async</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">getSaaSURL</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">arg1</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">arg2</span><span style="color: #D4D4D4">) {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #569CD6">let</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">apiURL</span><span style="color: #D4D4D4"> = </span><span style="color: #C586C0">await</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">Rest</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">get</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;jsonplaceholderTypicodeCom/getUsers&quot;</span><span style="color: #D4D4D4">).</span><span style="color: #DCDCAA">toUrl</span><span style="color: #D4D4D4">();</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #6A9955">// jsonplaceholderTypicodeCom --&gt; this is service name</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #6A9955">// you can find this under Service Connections --&gt; Overview --&gt; Connection name </span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #6A9955">// getUsers --&gt; this is endpoint name </span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #6A9955">// in above tab --&gt; select endpoint and This is endpoint id </span></span>
<span class="line"><span style="color: #D4D4D4">      </span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #569CD6">let</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">hostName</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">new</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">URL</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">apiURL</span><span style="color: #D4D4D4">).</span><span style="color: #9CDCFE">origin</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #9CDCFE">console</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">log</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">apiURL</span><span style="color: #D4D4D4">); </span><span style="color: #6A9955">// https://jsonplaceholder.typicode.com/users</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #9CDCFE">console</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">log</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">hostName</span><span style="color: #D4D4D4">); </span><span style="color: #6A9955">// https://jsonplaceholder.typicode.com/</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"><span style="color: #D4D4D4">  }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">PageModule</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">});</span></span>
<span class="line"></span></code></pre></div>



<p>Use messages or static status like APPROVED, DONE, or some ID like -1, 0, 1, or 2024 using a constant value at the application level. </p>



<p class="has-small-font-size">This will help to easily see all the values at one time and later, if there is change in actual value, we can change the value at this place with no need to change the code.</p>



<p></p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="" style="font-size:clamp(14px, .875rem, 21px);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>{
  "id": "demo",
  "description": "A new VB app",
  "defaultPage": "shell",
  "constants": {
    "SUCCESS_STATUS": {
      "type": "string",
      "defaultValue": "Successfully Created"
    }
  }
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">{</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">&quot;id&quot;</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;demo&quot;</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">&quot;description&quot;</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;A new VB app&quot;</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">&quot;defaultPage&quot;</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;shell&quot;</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">&quot;constants&quot;</span><span style="color: #D4D4D4">: {</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">&quot;SUCCESS_STATUS&quot;</span><span style="color: #D4D4D4">: {</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #9CDCFE">&quot;type&quot;</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;string&quot;</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #9CDCFE">&quot;defaultValue&quot;</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;Successfully Created&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"><span style="color: #D4D4D4">  }</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span></code></pre></div>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="" style="font-size:clamp(14px, .875rem, 21px);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>define(&#91;"vb/helpers/rest"&#93;, (Rest) => {
  "use strict";

  class PageModule {
    async checkStatus(status, APP_SUCCESS_STATUS) {
     // pass $application.constants.SUCCESS_STATUS
      return ( status === APP_SUCCESS_STATUS )
    }
  }

  return PageModule;
});
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">define</span><span style="color: #D4D4D4">(&#91;</span><span style="color: #CE9178">&quot;vb/helpers/rest&quot;</span><span style="color: #D4D4D4">&#93;, (</span><span style="color: #9CDCFE">Rest</span><span style="color: #D4D4D4">) </span><span style="color: #569CD6">=&gt;</span><span style="color: #D4D4D4"> {</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #CE9178">&quot;use strict&quot;</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">class</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">PageModule</span><span style="color: #D4D4D4"> {</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">async</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">checkStatus</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">status</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">APP_SUCCESS_STATUS</span><span style="color: #D4D4D4">) {</span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #6A9955">// pass $application.constants.SUCCESS_STATUS</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4"> ( </span><span style="color: #9CDCFE">status</span><span style="color: #D4D4D4"> === </span><span style="color: #4FC1FF">APP_SUCCESS_STATUS</span><span style="color: #D4D4D4"> )</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"><span style="color: #D4D4D4">  }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">PageModule</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">});</span></span>
<span class="line"></span></code></pre></div>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">282</post-id>	</item>
		<item>
		<title>How to learn VBCS as beginner</title>
		<link>https://khalil232.com/vbcs-tutorials/275/how-to-learn-vbcs-as-beginner/</link>
		
		<dc:creator><![CDATA[khalil]]></dc:creator>
		<pubDate>Tue, 16 Jul 2024 18:14:48 +0000</pubDate>
				<category><![CDATA[VBCS-Tutorials]]></category>
		<category><![CDATA[VBCS]]></category>
		<guid isPermaLink="false">https://khalil232.com/?p=275</guid>

					<description><![CDATA[How to learn VBCS as beginner

Basics of VBCS
What are application, page, and flow scopes?
How to connect to other systems
How to store data
Different status of application:]]></description>
										<content:encoded><![CDATA[
<p>General approach and topics to learn in VBCS</p>



<ol class="wp-block-list">
<li>Basics of&nbsp;VBCS
<ul class="wp-block-list">
<li>What is VBCS?</li>



<li>Why is it used?</li>
</ul>
</li>



<li>What are application, page, and flow scopes?
<ul class="wp-block-list">
<li>Which scope is used when </li>



<li>Identifying default flow / default page</li>
</ul>
</li>



<li>How to connect to other systems 
<ul class="wp-block-list">
<li>Using service connections
<ul class="wp-block-list">
<li>OIC-related connections: call an integration on a button and click from VBCS page</li>



<li>SaaS-related connections: call some fusion API on button click and populate in a table</li>



<li>Some direct APIs &#8212; call some external API to other than OIC or SaaS API </li>
</ul>
</li>



<li> In Service connections, understand different type of authentication methods, like basic authentication / OAuth.</li>



<li>Try to call REST APIs with different types of http methods ( GET, POST, PUT, PATCH, DELETE )</li>
</ul>
</li>



<li>How to store data 
<ul class="wp-block-list">
<li>Import and export data from business object using inbuilt data manager</li>



<li>Create business objects with different types of fields
<ul class="wp-block-list">
<li>generated id</li>



<li>number field</li>



<li>string field</li>



<li>date field</li>



<li>calculate field</li>
</ul>
</li>



<li>how to write business rules and inside we can write Groovy, and this can be called using API</li>



<li>Write some validations using business object trigger (like the salary of person cannot be &lt; 200 ) or (start date should always be less than end date)</li>



<li>Understanding how data is stored in development, stage and live applications.</li>



<li>Understanding how to copy data (from development to stage) or (from stage to live)</li>
</ul>
</li>



<li>Different status of application:
<ul class="wp-block-list">
<li>Development, Stage and Live mode</li>



<li>Understanding when to use which one to use when</li>



<li>Generally, when working on application, it will be in Development mode</li>



<li>When we want to test the application or if we want to share the application, we can stage and share the URL, or we can publish the application and share the live URL.</li>
</ul>
</li>



<li>Understanding different components
<ul class="wp-block-list">
<li>form-layout</li>



<li>oj-input-text</li>



<li>oj-bind-text</li>



<li>oj-input-date</li>



<li>oj-select-single&nbsp;&nbsp; </li>



<li>oj-table</li>



<li>template</li>



<li>oj-bind-if</li>



<li>oj-for-each</li>
</ul>
</li>



<li>Understanding actions in Action chain
<ul class="wp-block-list">
<li>assign variable ( create a variable and assign it using action chain and display using text field )</li>



<li>show notification (e.g.: show some message on button click using fire notification action )</li>



<li>call component ( e.g.: open dialog / close dialog )</li>



<li>call JS function  ( e.g.: create a JS function to find sum of two numbers)</li>



<li>if else ( use some condition to show different messages ) </li>



<li>call rest api ( get / post )</li>



<li>navigation ( e.g.: navigate to different page on link click ) </li>



<li>open URL (e.g.: on link-click, open some external site like google.com )</li>
</ul>
</li>



<li>Understanding variables and types
<ul class="wp-block-list">
<li>How to create variables</li>



<li>How to create types </li>



<li>How to create types using service endpoints</li>



<li>What is ADP ( Array Data Provider)?</li>



<li>What is SDP ( Service Data Provider)?</li>



<li>Understand scope of variables ( application, flow and page )</li>
</ul>
</li>



<li>Events and Event listeners</li>



<li>File structure -> Import/Export code -> Show file structure in Explorer.</li>



<li>Roles and Security </li>



<li>Custom styling using app.css / default themes</li>



<li>Deploying applications from one instance to another.</li>
</ol>



<p>Resources </p>



<p>Official documentation: <a href="https://docs.oracle.com/en/cloud/paas/app-builder-cloud/index.html" target="_blank" rel="noreferrer noopener">https://docs.oracle.com/en/cloud/paas/app-builder-cloud/index.html</a></p>



<p>VBCS cookbook: <a href="https://vbcookbook.oracle.com/" target="_blank" rel="noreferrer noopener">https://vbcookbook.oracle.com/</a> It has a lot of examples where you can download the sample code, import it into an application and modify it according to your needs</p>



<p>Customer Connect for visual builder: <a href="https://community.oracle.com/customerconnect/categories/oci-visual-builder-studio" target="_blank" rel="noreferrer noopener">https://community.oracle.com/customerconnect/categories/oci-visual-builder-studio</a> Great place to ask or find questions when you get stuck</p>



<p>JET Cookbook: <a href="https://www.oracle.com/webfolder/technetwork/jet/jetcookbook.html" target="_blank" rel="noreferrer noopener">https://www.oracle.com/webfolder/technetwork/jet/jetcookbook.html</a> &#8212; There is a lot of documentation of JET components and example, we can check the code from here, tweak it and use in VBCS applications</p>



<p>JS docs: <a href="https://www.oracle.com/webfolder/technetwork/jet/jsdocs/oj.ojTable.html" target="_blank" rel="noreferrer noopener">https://www.oracle.com/webfolder/technetwork/jet/jsdocs/oj.ojTable.html</a> &#8212; JS documents for jet components can be navigated using left navigation bar to find JS documents for other components</p>



<p>Linkedin group: <a href="https://www.linkedin.com/groups/13630219/" target="_blank" rel="noreferrer noopener">https://www.linkedin.com/groups/13630219/</a></p>



<p>Youtube Videos which I found </p>



<p>Visual Builder: A Crash Course from Oracle Developers &#8212; <a href="https://www.youtube.com/watch?v=9DNBAh0UTeY" target="_blank" rel="noreferrer noopener">https://www.youtube.com/watch?v=9DNBAh0UTeY</a></p>



<p>Visual Builder Playlist: <a href="https://www.youtube.com/playlist?list=PL3X62LScvI_K1Glab5N9Dvwcervel5e4R" target="_blank" rel="noreferrer noopener">https://www.youtube.com/playlist?list=PL3X62LScvI_K1Glab5N9Dvwcervel5e4R</a></p>



<p></p>



<p>Youtube channels that post content about VBCS and OIC</p>



<p>Shay: <a href="https://www.youtube.com/@ShayOracle" target="_blank" rel="noreferrer noopener">https://www.youtube.com/@ShayOracle</a></p>



<p>Oracle Developers Channel: <a href="https://www.youtube.com/channel/UCdDhYMT2USoLdh4SZIsu_1g" target="_blank" rel="noreferrer noopener">https://www.youtube.com/channel/UCdDhYMT2USoLdh4SZIsu_1g</a></p>



<p>Beenum learning: <a href="https://www.youtube.com/@BEENUMLEARNING" target="_blank" rel="noreferrer noopener">https://www.youtube.com/@BEENUMLEARNING</a></p>



<p>Techsupper Ankur: <a href="https://www.youtube.com/@TechSupper" target="_blank" rel="noreferrer noopener">https://www.youtube.com/@TechSupper</a></p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">275</post-id>	</item>
		<item>
		<title>Getting time difference from now</title>
		<link>https://khalil232.com/javascript/258/getting-time-difference-from-now/</link>
		
		<dc:creator><![CDATA[khalil]]></dc:creator>
		<pubDate>Fri, 10 May 2024 01:54:15 +0000</pubDate>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<guid isPermaLink="false">https://khalil232.com/?p=258</guid>

					<description><![CDATA[Intro Working with raw timestamps is not user-friendly. Instead of showing dates like &#8220;2024-05-10 10:15:43&#8221;,we can display them in a more readable way: &#8211; 5 minutes ago&#8211; 2 days ago&#8211; in 3 months This is called relative time formatting. Example Ouput let us say today is 15-Apr-2026 and we send the input date string, the [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Intro</h2>



<p>Working with raw timestamps is not user-friendly.</p>



<p>Instead of showing dates like &#8220;2024-05-10 10:15:43&#8221;,<br>we can display them in a more readable way: </p>



<p>&#8211; 5 minutes ago<br>&#8211; 2 days ago<br>&#8211; in 3 months</p>



<p>This is called relative time formatting.</p>



<h2 class="wp-block-heading">Example Ouput</h2>



<p>let us say today is 15-Apr-2026 and we send the input date string, the api will return date readable </p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>Input Date String</td><td>Date Readable</td><td>Time Before / After</td></tr><tr><td>10-Apr-2025</td><td>Thursday, 10 April 2025</td><td>last year</td></tr><tr><td>20-May-2025</td><td>Tuesday, 20 May 2025</td><td>11 months ago</td></tr><tr><td>10-Mar-2026</td><td>Tuesday, 10 March 2026</td><td>last month</td></tr><tr><td>20-Mar-2026</td><td>Friday, 20 March 2026</td><td>26 days ago</td></tr><tr><td>10-Apr-2026</td><td>Friday, 10 April 2026</td><td>5 days ago</td></tr><tr><td>22-Apr-2026</td><td>Wednesday, 22 April 2026</td><td>in 7 days</td></tr><tr><td>10-May-2026</td><td>Sunday, 10 May 2026</td><td>in 25 days</td></tr><tr><td>20-May-2026</td><td>Wednesday, 20 May 2026</td><td>next month</td></tr><tr><td>10-Apr-2027</td><td>Saturday, 10 April 2027</td><td>in 12 months</td></tr><tr><td>20-Apr-2027</td><td>Tuesday, 20 April 2027</td><td>next year</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">Try it yourself </h2>



<p>Enter any date and see how it converts into relative time.</p>



<iframe src="https://khalil232.com/apps/plain/date-time-ago/index.html" frameborder="0" width="100%" height="600px"></iframe>



<h2 class="wp-block-heading">How it works </h2>



<p>We calculate the difference between the current time and the given date.</p>



<p>Then we convert that difference into units like seconds, minutes, hours, days, months, or years.</p>



<p>Finally, we format it into readable text like &#8220;2 hours ago&#8221; or &#8220;in 5 days&#8221;.</p>



<h2 class="wp-block-heading">Code Example</h2>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="" style="font-size:clamp(14px, .875rem, 21px);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>function getTimeAgo(dateStr) {
  const relativeTime = new RelativeTime(); // defaults to OS localen  
  let dateObj = new Date(dateStr); 
  return relativeTime.from(dateObj);
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">function</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">getTimeAgo</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">dateStr</span><span style="color: #D4D4D4">) {</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">const</span><span style="color: #D4D4D4"> </span><span style="color: #4FC1FF">relativeTime</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">new</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">RelativeTime</span><span style="color: #D4D4D4">(); </span><span style="color: #6A9955">// defaults to OS localen  </span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">let</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">dateObj</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">new</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Date</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">dateStr</span><span style="color: #D4D4D4">); </span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">relativeTime</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">from</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">dateObj</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span></code></pre></div>



<p>We can use JavaScript to convert a date into a readable relative time format.</p>



<p>For example, &#8220;2024-05-10T01:25:14.317Z&#8221; is less readable than &#8220;7 hours ago&#8221;.</p>



<p>I have used the relative-time library to simplify this conversion:<br><a href="https://github.com/yairEO/relative-time">https://github.com/yairEO/relative-time</a></p>



<p>Full code available here:<br><a href="https://github.com/khalilahmed232/khalilahmed232/tree/main/plain/date-time-ago">https://github.com/khalilahmed232/khalilahmed232/tree/main/plain/date-time-ago</a></p>



<p>This makes date display much more user-friendly in real applications.</p>



<p>Using relative time formatting makes applications feel more modern and user-friendly, especially for feeds, comments, and activity logs.</p>



<p></p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">258</post-id>	</item>
		<item>
		<title>To upload csv data as ADP(Array data provider) or array</title>
		<link>https://khalil232.com/vbcs-tutorials/49/to-upload-csv-data-as-adparray-data-provider-or-array/</link>
		
		<dc:creator><![CDATA[khalil]]></dc:creator>
		<pubDate>Mon, 29 Apr 2024 19:16:42 +0000</pubDate>
				<category><![CDATA[VBCS-Tutorials]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[OJET]]></category>
		<category><![CDATA[VBCS]]></category>
		<guid isPermaLink="false">https://khalil232.com/?p=49</guid>

					<description><![CDATA[Steps to upload csv data as ADP(Array data provider) or array JavaScript function Sample CSV data that will work with this code Sample file picker html code Sample working code &#8212; iframe Link to live demo &#8212; file-picker]]></description>
										<content:encoded><![CDATA[
<p>Steps to upload csv data as ADP(Array data provider) or array</p>



<ul class="wp-block-list">
<li>Add a file component</li>



<li>On file select call the below JavaScript function and pass file as parameter</li>



<li>Assign the result from below function to ADP.data or Array </li>
</ul>



<p>JavaScript function </p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="" style="font-size:clamp(14px, .875rem, 21px);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" data-code="PageModule.prototype.getRowsFromCsv = function (file) {
  return new Promise((resolve) =&gt; {
    try {
      let fileContent = [];
      const fileReader = new FileReader();
      fileReader.readAsText(file);
      fileReader.onload = (e) =&gt; {
        let result = e.target.result;
        let columns = ['employee','name','phone','salary'];
        let size;
        let inputData = [];
        if (result) {
          let lines = result.split(&quot;\n&quot;);
          for ( let  i = 1 ; i &lt; lines.length ; i++ ) {
            let row = lines[i];
            let rowArray = row.split(&quot;,&quot;);
            let inputObj = {} ;
            inputObj.employee = rowArray[0];
            inputObj.name = rowArray[1];
            inputObj.phone = rowArray[2];
            inputObj.salary= rowArray[3];
            inputData.push(inputObj);
          }
          resolve({
            success: true,
            inputData: inputData,
            error: &quot;&quot;
          });
        } else {
          resolve({
            success: false,
            inputData: [],
            error: &quot;Empty File : &quot; + result
          });
        }
      };
    } catch (err) {
      resolve({
        success: false,
        inputData: [],
        error: &quot;Error while reading file : &quot; + err.detail
      });
    }
  });
};" style="color:#babed8;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki material-theme-ocean" style="background-color: #0F111A" tabindex="0"><code><span class="line"><span style="color: #FFCB6B">PageModule</span><span style="color: #89DDFF">.</span><span style="color: #BABED8">prototype</span><span style="color: #89DDFF">.</span><span style="color: #82AAFF">getRowsFromCsv</span><span style="color: #BABED8"> </span><span style="color: #89DDFF">=</span><span style="color: #BABED8"> </span><span style="color: #C792EA">function</span><span style="color: #BABED8"> </span><span style="color: #89DDFF">(</span><span style="color: #BABED8; font-style: italic">file</span><span style="color: #89DDFF">)</span><span style="color: #BABED8"> </span><span style="color: #89DDFF">{</span></span>
<span class="line"><span style="color: #F07178">  </span><span style="color: #89DDFF; font-style: italic">return</span><span style="color: #F07178"> </span><span style="color: #89DDFF">new</span><span style="color: #F07178"> </span><span style="color: #FFCB6B">Promise</span><span style="color: #F07178">(</span><span style="color: #89DDFF">(</span><span style="color: #BABED8; font-style: italic">resolve</span><span style="color: #89DDFF">)</span><span style="color: #F07178"> </span><span style="color: #C792EA">=&gt;</span><span style="color: #F07178"> </span><span style="color: #89DDFF">{</span></span>
<span class="line"><span style="color: #F07178">    </span><span style="color: #89DDFF; font-style: italic">try</span><span style="color: #F07178"> </span><span style="color: #89DDFF">{</span></span>
<span class="line"><span style="color: #F07178">      </span><span style="color: #C792EA">let</span><span style="color: #F07178"> </span><span style="color: #BABED8">fileContent</span><span style="color: #F07178"> </span><span style="color: #89DDFF">=</span><span style="color: #F07178"> []</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">      </span><span style="color: #C792EA">const</span><span style="color: #F07178"> </span><span style="color: #BABED8">fileReader</span><span style="color: #F07178"> </span><span style="color: #89DDFF">=</span><span style="color: #F07178"> </span><span style="color: #89DDFF">new</span><span style="color: #F07178"> </span><span style="color: #82AAFF">FileReader</span><span style="color: #F07178">()</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">      </span><span style="color: #BABED8">fileReader</span><span style="color: #89DDFF">.</span><span style="color: #82AAFF">readAsText</span><span style="color: #F07178">(</span><span style="color: #BABED8">file</span><span style="color: #F07178">)</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">      </span><span style="color: #BABED8">fileReader</span><span style="color: #89DDFF">.</span><span style="color: #82AAFF">onload</span><span style="color: #F07178"> </span><span style="color: #89DDFF">=</span><span style="color: #F07178"> </span><span style="color: #89DDFF">(</span><span style="color: #BABED8; font-style: italic">e</span><span style="color: #89DDFF">)</span><span style="color: #F07178"> </span><span style="color: #C792EA">=&gt;</span><span style="color: #F07178"> </span><span style="color: #89DDFF">{</span></span>
<span class="line"><span style="color: #F07178">        </span><span style="color: #C792EA">let</span><span style="color: #F07178"> </span><span style="color: #BABED8">result</span><span style="color: #F07178"> </span><span style="color: #89DDFF">=</span><span style="color: #F07178"> </span><span style="color: #BABED8">e</span><span style="color: #89DDFF">.</span><span style="color: #BABED8">target</span><span style="color: #89DDFF">.</span><span style="color: #BABED8">result</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">        </span><span style="color: #C792EA">let</span><span style="color: #F07178"> </span><span style="color: #BABED8">columns</span><span style="color: #F07178"> </span><span style="color: #89DDFF">=</span><span style="color: #F07178"> [</span><span style="color: #89DDFF">&#39;</span><span style="color: #C3E88D">employee</span><span style="color: #89DDFF">&#39;</span><span style="color: #89DDFF">,</span><span style="color: #89DDFF">&#39;</span><span style="color: #C3E88D">name</span><span style="color: #89DDFF">&#39;</span><span style="color: #89DDFF">,</span><span style="color: #89DDFF">&#39;</span><span style="color: #C3E88D">phone</span><span style="color: #89DDFF">&#39;</span><span style="color: #89DDFF">,</span><span style="color: #89DDFF">&#39;</span><span style="color: #C3E88D">salary</span><span style="color: #89DDFF">&#39;</span><span style="color: #F07178">]</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">        </span><span style="color: #C792EA">let</span><span style="color: #F07178"> </span><span style="color: #BABED8">size</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">        </span><span style="color: #C792EA">let</span><span style="color: #F07178"> </span><span style="color: #BABED8">inputData</span><span style="color: #F07178"> </span><span style="color: #89DDFF">=</span><span style="color: #F07178"> []</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">        </span><span style="color: #89DDFF; font-style: italic">if</span><span style="color: #F07178"> (</span><span style="color: #BABED8">result</span><span style="color: #F07178">) </span><span style="color: #89DDFF">{</span></span>
<span class="line"><span style="color: #F07178">          </span><span style="color: #C792EA">let</span><span style="color: #F07178"> </span><span style="color: #BABED8">lines</span><span style="color: #F07178"> </span><span style="color: #89DDFF">=</span><span style="color: #F07178"> </span><span style="color: #BABED8">result</span><span style="color: #89DDFF">.</span><span style="color: #82AAFF">split</span><span style="color: #F07178">(</span><span style="color: #89DDFF">&quot;</span><span style="color: #BABED8">\n</span><span style="color: #89DDFF">&quot;</span><span style="color: #F07178">)</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">          </span><span style="color: #89DDFF; font-style: italic">for</span><span style="color: #F07178"> ( </span><span style="color: #C792EA">let</span><span style="color: #F07178">  </span><span style="color: #BABED8">i</span><span style="color: #F07178"> </span><span style="color: #89DDFF">=</span><span style="color: #F07178"> </span><span style="color: #F78C6C">1</span><span style="color: #F07178"> </span><span style="color: #89DDFF">;</span><span style="color: #F07178"> </span><span style="color: #BABED8">i</span><span style="color: #F07178"> </span><span style="color: #89DDFF">&lt;</span><span style="color: #F07178"> </span><span style="color: #BABED8">lines</span><span style="color: #89DDFF">.</span><span style="color: #BABED8">length</span><span style="color: #F07178"> </span><span style="color: #89DDFF">;</span><span style="color: #F07178"> </span><span style="color: #BABED8">i</span><span style="color: #89DDFF">++</span><span style="color: #F07178"> ) </span><span style="color: #89DDFF">{</span></span>
<span class="line"><span style="color: #F07178">            </span><span style="color: #C792EA">let</span><span style="color: #F07178"> </span><span style="color: #BABED8">row</span><span style="color: #F07178"> </span><span style="color: #89DDFF">=</span><span style="color: #F07178"> </span><span style="color: #BABED8">lines</span><span style="color: #F07178">[</span><span style="color: #BABED8">i</span><span style="color: #F07178">]</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">            </span><span style="color: #C792EA">let</span><span style="color: #F07178"> </span><span style="color: #BABED8">rowArray</span><span style="color: #F07178"> </span><span style="color: #89DDFF">=</span><span style="color: #F07178"> </span><span style="color: #BABED8">row</span><span style="color: #89DDFF">.</span><span style="color: #82AAFF">split</span><span style="color: #F07178">(</span><span style="color: #89DDFF">&quot;</span><span style="color: #C3E88D">,</span><span style="color: #89DDFF">&quot;</span><span style="color: #F07178">)</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">            </span><span style="color: #C792EA">let</span><span style="color: #F07178"> </span><span style="color: #BABED8">inputObj</span><span style="color: #F07178"> </span><span style="color: #89DDFF">=</span><span style="color: #F07178"> </span><span style="color: #89DDFF">{}</span><span style="color: #F07178"> </span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">            </span><span style="color: #BABED8">inputObj</span><span style="color: #89DDFF">.</span><span style="color: #BABED8">employee</span><span style="color: #F07178"> </span><span style="color: #89DDFF">=</span><span style="color: #F07178"> </span><span style="color: #BABED8">rowArray</span><span style="color: #F07178">[</span><span style="color: #F78C6C">0</span><span style="color: #F07178">]</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">            </span><span style="color: #BABED8">inputObj</span><span style="color: #89DDFF">.</span><span style="color: #BABED8">name</span><span style="color: #F07178"> </span><span style="color: #89DDFF">=</span><span style="color: #F07178"> </span><span style="color: #BABED8">rowArray</span><span style="color: #F07178">[</span><span style="color: #F78C6C">1</span><span style="color: #F07178">]</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">            </span><span style="color: #BABED8">inputObj</span><span style="color: #89DDFF">.</span><span style="color: #BABED8">phone</span><span style="color: #F07178"> </span><span style="color: #89DDFF">=</span><span style="color: #F07178"> </span><span style="color: #BABED8">rowArray</span><span style="color: #F07178">[</span><span style="color: #F78C6C">2</span><span style="color: #F07178">]</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">            </span><span style="color: #BABED8">inputObj</span><span style="color: #89DDFF">.</span><span style="color: #BABED8">salary</span><span style="color: #89DDFF">=</span><span style="color: #F07178"> </span><span style="color: #BABED8">rowArray</span><span style="color: #F07178">[</span><span style="color: #F78C6C">3</span><span style="color: #F07178">]</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">            </span><span style="color: #BABED8">inputData</span><span style="color: #89DDFF">.</span><span style="color: #82AAFF">push</span><span style="color: #F07178">(</span><span style="color: #BABED8">inputObj</span><span style="color: #F07178">)</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">          </span><span style="color: #89DDFF">}</span></span>
<span class="line"><span style="color: #F07178">          </span><span style="color: #82AAFF">resolve</span><span style="color: #F07178">(</span><span style="color: #89DDFF">{</span></span>
<span class="line"><span style="color: #F07178">            success</span><span style="color: #89DDFF">:</span><span style="color: #F07178"> </span><span style="color: #FF9CAC">true</span><span style="color: #89DDFF">,</span></span>
<span class="line"><span style="color: #F07178">            inputData</span><span style="color: #89DDFF">:</span><span style="color: #F07178"> </span><span style="color: #BABED8">inputData</span><span style="color: #89DDFF">,</span></span>
<span class="line"><span style="color: #F07178">            error</span><span style="color: #89DDFF">:</span><span style="color: #F07178"> </span><span style="color: #89DDFF">&quot;&quot;</span></span>
<span class="line"><span style="color: #F07178">          </span><span style="color: #89DDFF">}</span><span style="color: #F07178">)</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">        </span><span style="color: #89DDFF">}</span><span style="color: #F07178"> </span><span style="color: #89DDFF; font-style: italic">else</span><span style="color: #F07178"> </span><span style="color: #89DDFF">{</span></span>
<span class="line"><span style="color: #F07178">          </span><span style="color: #82AAFF">resolve</span><span style="color: #F07178">(</span><span style="color: #89DDFF">{</span></span>
<span class="line"><span style="color: #F07178">            success</span><span style="color: #89DDFF">:</span><span style="color: #F07178"> </span><span style="color: #FF9CAC">false</span><span style="color: #89DDFF">,</span></span>
<span class="line"><span style="color: #F07178">            inputData</span><span style="color: #89DDFF">:</span><span style="color: #F07178"> []</span><span style="color: #89DDFF">,</span></span>
<span class="line"><span style="color: #F07178">            error</span><span style="color: #89DDFF">:</span><span style="color: #F07178"> </span><span style="color: #89DDFF">&quot;</span><span style="color: #C3E88D">Empty File : </span><span style="color: #89DDFF">&quot;</span><span style="color: #F07178"> </span><span style="color: #89DDFF">+</span><span style="color: #F07178"> </span><span style="color: #BABED8">result</span></span>
<span class="line"><span style="color: #F07178">          </span><span style="color: #89DDFF">}</span><span style="color: #F07178">)</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">        </span><span style="color: #89DDFF">}</span></span>
<span class="line"><span style="color: #F07178">      </span><span style="color: #89DDFF">};</span></span>
<span class="line"><span style="color: #F07178">    </span><span style="color: #89DDFF">}</span><span style="color: #F07178"> </span><span style="color: #89DDFF; font-style: italic">catch</span><span style="color: #F07178"> (</span><span style="color: #BABED8">err</span><span style="color: #F07178">) </span><span style="color: #89DDFF">{</span></span>
<span class="line"><span style="color: #F07178">      </span><span style="color: #82AAFF">resolve</span><span style="color: #F07178">(</span><span style="color: #89DDFF">{</span></span>
<span class="line"><span style="color: #F07178">        success</span><span style="color: #89DDFF">:</span><span style="color: #F07178"> </span><span style="color: #FF9CAC">false</span><span style="color: #89DDFF">,</span></span>
<span class="line"><span style="color: #F07178">        inputData</span><span style="color: #89DDFF">:</span><span style="color: #F07178"> []</span><span style="color: #89DDFF">,</span></span>
<span class="line"><span style="color: #F07178">        error</span><span style="color: #89DDFF">:</span><span style="color: #F07178"> </span><span style="color: #89DDFF">&quot;</span><span style="color: #C3E88D">Error while reading file : </span><span style="color: #89DDFF">&quot;</span><span style="color: #F07178"> </span><span style="color: #89DDFF">+</span><span style="color: #F07178"> </span><span style="color: #BABED8">err</span><span style="color: #89DDFF">.</span><span style="color: #BABED8">detail</span></span>
<span class="line"><span style="color: #F07178">      </span><span style="color: #89DDFF">}</span><span style="color: #F07178">)</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">    </span><span style="color: #89DDFF">}</span></span>
<span class="line"><span style="color: #F07178">  </span><span style="color: #89DDFF">}</span><span style="color: #F07178">)</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #89DDFF">};</span></span></code></pre></div>



<p>Sample CSV data that will work with this code </p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="" style="font-size:clamp(14px, .875rem, 21px);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" data-code="employee,name,phone,salary
1,khalil,123,3000
2,ahmed,345,4000
3,sayeed,929,25000" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">employee,name,phone,salary</span></span>
<span class="line"><span style="color: #D4D4D4">1,khalil,123,3000</span></span>
<span class="line"><span style="color: #D4D4D4">2,ahmed,345,4000</span></span>
<span class="line"><span style="color: #D4D4D4">3,sayeed,929,25000</span></span></code></pre></div>



<p></p>



<p>Sample file picker html code</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="" style="font-size:clamp(14px, .875rem, 21px);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" data-code="&lt;div class=&quot;oj-sm-padding-0 oj-md-padding-4x&quot;&gt;
    &lt;h4&gt;file-picker sample code&lt;/h4&gt;

    &lt;oj-file-picker on-oj-select=&quot;[[ fileSelectListener ]]&quot;&gt;

    &lt;/oj-file-picker&gt;


    &lt;oj-table class=&quot;custom-table&quot; id=&quot;employeetable&quot; scroll-policy=&quot;loadMoreOnScroll&quot;
        class=&quot;oj-flex-item oj-sm-12 oj-md-12&quot; data=&quot;[[ employeeADP ]]&quot; columns='[
    {&quot;headerText&quot;:&quot;employee&quot;,&quot;field&quot;:&quot;employee&quot;},
    {&quot;headerText&quot;:&quot;name&quot;,&quot;field&quot;:&quot;name&quot;},
    {&quot;headerText&quot;:&quot;phone&quot;,&quot;field&quot;:&quot;phone&quot;},
    {&quot;headerText&quot;:&quot;salary&quot;,&quot;field&quot;:&quot;salary&quot;}
    ]'&gt;
    &lt;/oj-table&gt;

&lt;/div&gt;" style="color:#babed8;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki material-theme-ocean" style="background-color: #0F111A" tabindex="0"><code><span class="line"><span style="color: #89DDFF">&lt;</span><span style="color: #F07178">div</span><span style="color: #89DDFF"> </span><span style="color: #C792EA">class</span><span style="color: #89DDFF">=</span><span style="color: #89DDFF">&quot;</span><span style="color: #C3E88D">oj-sm-padding-0 oj-md-padding-4x</span><span style="color: #89DDFF">&quot;</span><span style="color: #89DDFF">&gt;</span></span>
<span class="line"><span style="color: #BABED8">    </span><span style="color: #89DDFF">&lt;</span><span style="color: #F07178">h4</span><span style="color: #89DDFF">&gt;</span><span style="color: #BABED8">file-picker sample code</span><span style="color: #89DDFF">&lt;/</span><span style="color: #F07178">h4</span><span style="color: #89DDFF">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #BABED8">    </span><span style="color: #89DDFF">&lt;</span><span style="color: #F07178">oj-file-picker</span><span style="color: #89DDFF"> </span><span style="color: #C792EA">on-oj-select</span><span style="color: #89DDFF">=</span><span style="color: #89DDFF">&quot;</span><span style="color: #C3E88D">[[ fileSelectListener ]]</span><span style="color: #89DDFF">&quot;</span><span style="color: #89DDFF">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #BABED8">    </span><span style="color: #89DDFF">&lt;/</span><span style="color: #F07178">oj-file-picker</span><span style="color: #89DDFF">&gt;</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #BABED8">    </span><span style="color: #89DDFF">&lt;</span><span style="color: #F07178">oj-table</span><span style="color: #89DDFF"> </span><span style="color: #C792EA">class</span><span style="color: #89DDFF">=</span><span style="color: #89DDFF">&quot;</span><span style="color: #C3E88D">custom-table</span><span style="color: #89DDFF">&quot;</span><span style="color: #89DDFF"> </span><span style="color: #C792EA">id</span><span style="color: #89DDFF">=</span><span style="color: #89DDFF">&quot;</span><span style="color: #C3E88D">employeetable</span><span style="color: #89DDFF">&quot;</span><span style="color: #89DDFF"> </span><span style="color: #C792EA">scroll-policy</span><span style="color: #89DDFF">=</span><span style="color: #89DDFF">&quot;</span><span style="color: #C3E88D">loadMoreOnScroll</span><span style="color: #89DDFF">&quot;</span></span>
<span class="line"><span style="color: #89DDFF">        </span><span style="color: #C792EA">class</span><span style="color: #89DDFF">=</span><span style="color: #89DDFF">&quot;</span><span style="color: #C3E88D">oj-flex-item oj-sm-12 oj-md-12</span><span style="color: #89DDFF">&quot;</span><span style="color: #89DDFF"> </span><span style="color: #C792EA">data</span><span style="color: #89DDFF">=</span><span style="color: #89DDFF">&quot;</span><span style="color: #C3E88D">[[ employeeADP ]]</span><span style="color: #89DDFF">&quot;</span><span style="color: #89DDFF"> </span><span style="color: #C792EA">columns</span><span style="color: #89DDFF">=</span><span style="color: #89DDFF">&#39;</span><span style="color: #C3E88D">[</span></span>
<span class="line"><span style="color: #C3E88D">    {&quot;headerText&quot;:&quot;employee&quot;,&quot;field&quot;:&quot;employee&quot;},</span></span>
<span class="line"><span style="color: #C3E88D">    {&quot;headerText&quot;:&quot;name&quot;,&quot;field&quot;:&quot;name&quot;},</span></span>
<span class="line"><span style="color: #C3E88D">    {&quot;headerText&quot;:&quot;phone&quot;,&quot;field&quot;:&quot;phone&quot;},</span></span>
<span class="line"><span style="color: #C3E88D">    {&quot;headerText&quot;:&quot;salary&quot;,&quot;field&quot;:&quot;salary&quot;}</span></span>
<span class="line"><span style="color: #C3E88D">    ]</span><span style="color: #89DDFF">&#39;</span><span style="color: #89DDFF">&gt;</span></span>
<span class="line"><span style="color: #BABED8">    </span><span style="color: #89DDFF">&lt;/</span><span style="color: #F07178">oj-table</span><span style="color: #89DDFF">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #89DDFF">&lt;/</span><span style="color: #F07178">div</span><span style="color: #89DDFF">&gt;</span></span></code></pre></div>



<p>Sample working code &#8212; iframe</p>



<p></p>



<iframe src="https://khalil232.com/apps/ojet-apps/?ojr=file-picker" frameborder="0" width="100%" height="400px">

</iframe>



<p>Link to live demo &#8212; <a href="https://khalil232.com/apps/ojet-apps/?ojr=file-picker">file-picker</a></p>



<p></p>



<p></p>



<p></p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">49</post-id>	</item>
		<item>
		<title>Format dates in VBCS page using functions</title>
		<link>https://khalil232.com/vbcs-tutorials/241/format-dates-in-vbcs-page-using-functions/</link>
					<comments>https://khalil232.com/vbcs-tutorials/241/format-dates-in-vbcs-page-using-functions/#comments</comments>
		
		<dc:creator><![CDATA[khalil]]></dc:creator>
		<pubDate>Wed, 17 Jan 2024 20:20:18 +0000</pubDate>
				<category><![CDATA[VBCS-Tutorials]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[OJET]]></category>
		<category><![CDATA[VBCS]]></category>
		<guid isPermaLink="false">https://khalil232.com/?p=241</guid>

					<description><![CDATA[You can use oj-input-date or oj-input-date-time components for showing formatted date and use convertor options But when using above component only for read-only purpose to show some values in grid or table, it doesn&#8217;t make sense to use input fields. Instead we can use oj-bind-text field and pass data using following JavaScript function. The JavaScript [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>You can use <strong>oj-input-date</strong> or <strong>oj-input-date-time</strong> components for showing formatted date and use convertor options  </p>



<p></p>



<p>But when using above component only for read-only purpose to show some values in grid or table, it doesn&#8217;t make sense to use input fields.</p>



<p></p>



<p>Instead we can use <strong>oj-bind-text</strong> field and pass data using following JavaScript function. </p>



<p></p>



<p>The JavaScript function will add necessary formatting to the date and return the value as string.</p>



<p></p>



<p>Live code preview</p>



<iframe src="https://khalil232.com/apps/ojet-apps/?ojr=date-format-sample" frameborder="0" width="100%" height="400px">

</iframe>



<p></p>



<p>We can use date convertor functions to format the date in required format </p>



<p></p>



<p>JavaScript function</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="" style="font-size:clamp(14px, .875rem, 21px);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" data-code="define([&quot;ojs/ojconverter-datetime&quot;], (datetimeConverter) =&gt; {
  &quot;use strict&quot;;

  class PageModule {
    convertDateToStr(customDate) {
        let dateConvertor = new datetimeConverter.IntlDateTimeConverter({
          pattern: &quot;dd-MMM-yyyy&quot;,
        });
      return dateConvertor.format(customDate);
    }
  }

  return PageModule;
});

" style="color:#babed8;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki material-theme-ocean" style="background-color: #0F111A" tabindex="0"><code><span class="line"><span style="color: #82AAFF">define</span><span style="color: #BABED8">([</span><span style="color: #89DDFF">&quot;</span><span style="color: #C3E88D">ojs/ojconverter-datetime</span><span style="color: #89DDFF">&quot;</span><span style="color: #BABED8">]</span><span style="color: #89DDFF">,</span><span style="color: #BABED8"> </span><span style="color: #89DDFF">(</span><span style="color: #BABED8; font-style: italic">datetimeConverter</span><span style="color: #89DDFF">)</span><span style="color: #BABED8"> </span><span style="color: #C792EA">=&gt;</span><span style="color: #BABED8"> </span><span style="color: #89DDFF">{</span></span>
<span class="line"><span style="color: #F07178">  </span><span style="color: #89DDFF">&quot;</span><span style="color: #C3E88D">use strict</span><span style="color: #89DDFF">&quot;</span><span style="color: #89DDFF">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F07178">  </span><span style="color: #C792EA">class</span><span style="color: #F07178"> </span><span style="color: #FFCB6B">PageModule</span><span style="color: #F07178"> </span><span style="color: #89DDFF">{</span></span>
<span class="line"><span style="color: #F07178">    convertDateToStr</span><span style="color: #89DDFF">(</span><span style="color: #BABED8; font-style: italic">customDate</span><span style="color: #89DDFF">)</span><span style="color: #F07178"> </span><span style="color: #89DDFF">{</span></span>
<span class="line"><span style="color: #F07178">        </span><span style="color: #C792EA">let</span><span style="color: #F07178"> </span><span style="color: #BABED8">dateConvertor</span><span style="color: #F07178"> </span><span style="color: #89DDFF">=</span><span style="color: #F07178"> </span><span style="color: #89DDFF">new</span><span style="color: #F07178"> </span><span style="color: #BABED8">datetimeConverter</span><span style="color: #89DDFF">.</span><span style="color: #82AAFF">IntlDateTimeConverter</span><span style="color: #F07178">(</span><span style="color: #89DDFF">{</span></span>
<span class="line"><span style="color: #F07178">          pattern</span><span style="color: #89DDFF">:</span><span style="color: #F07178"> </span><span style="color: #89DDFF">&quot;</span><span style="color: #C3E88D">dd-MMM-yyyy</span><span style="color: #89DDFF">&quot;</span><span style="color: #89DDFF">,</span></span>
<span class="line"><span style="color: #F07178">        </span><span style="color: #89DDFF">}</span><span style="color: #F07178">)</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">      </span><span style="color: #89DDFF; font-style: italic">return</span><span style="color: #F07178"> </span><span style="color: #BABED8">dateConvertor</span><span style="color: #89DDFF">.</span><span style="color: #82AAFF">format</span><span style="color: #F07178">(</span><span style="color: #BABED8">customDate</span><span style="color: #F07178">)</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">    </span><span style="color: #89DDFF">}</span></span>
<span class="line"><span style="color: #F07178">  </span><span style="color: #89DDFF">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F07178">  </span><span style="color: #89DDFF; font-style: italic">return</span><span style="color: #F07178"> </span><span style="color: #BABED8">PageModule</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #89DDFF">}</span><span style="color: #BABED8">)</span><span style="color: #89DDFF">;</span></span>
<span class="line"></span>
<span class="line"></span></code></pre></div>



<p>Patterns examples</p>



<figure class="wp-block-table"><table><thead><tr><th class="has-text-align-left" data-align="left">Patterns </th><th class="has-text-align-left" data-align="left">Input &#8211; date string</th><th class="has-text-align-left" data-align="left">Output &#8211; formatted date</th></tr></thead><tbody><tr><td class="has-text-align-left" data-align="left">dd-MMM-yyyy</td><td class="has-text-align-left" data-align="left">2024-01-18T13:59:23+05:30</td><td class="has-text-align-left" data-align="left">18-Jan-2024</td></tr><tr><td class="has-text-align-left" data-align="left">dd-MM-yyyy</td><td class="has-text-align-left" data-align="left">2024-01-18T13:59:23+05:30</td><td class="has-text-align-left" data-align="left">18-01-2024</td></tr><tr><td class="has-text-align-left" data-align="left">MM/dd/yyyy</td><td class="has-text-align-left" data-align="left">2024-01-18T13:59:23+05:30</td><td class="has-text-align-left" data-align="left">01/18/2024</td></tr><tr><td class="has-text-align-left" data-align="left">MM/dd/yyyy hh:mm:ss</td><td class="has-text-align-left" data-align="left">2024-01-18T13:59:23+05:30</td><td class="has-text-align-left" data-align="left">01/18/2024 01:59:23</td></tr><tr><td class="has-text-align-left" data-align="left">MM/dd/yyyy hh:mm:ss a</td><td class="has-text-align-left" data-align="left">2024-01-18T13:59:23+05:30</td><td class="has-text-align-left" data-align="left">01/18/2024 01:59:23 PM</td></tr></tbody></table></figure>



<p>References &#8211; </p>



<p>jsDoc for IntlDateTimeConverter ( to view all convertor options  )</p>



<p><a href="https://www.oracle.com/webfolder/technetwork/jet/jsdocs/oj.IntlDateTimeConverter.html">https://www.oracle.com/webfolder/technetwork/jet/jsdocs/oj.IntlDateTimeConverter.html</a></p>



<p>Live application URL ( to try out few configs )</p>



<p><a href="https://khalil232.com/apps/ojet-apps/?ojr=date-format-sample">https://khalil232.com/apps/ojet-apps/?ojr=date-format-sample</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://khalil232.com/vbcs-tutorials/241/format-dates-in-vbcs-page-using-functions/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">241</post-id>	</item>
		<item>
		<title>How to have different colors on rows based on one field in row in oj-data-grid</title>
		<link>https://khalil232.com/vbcs-tutorials/217/how-to-have-different-colors-on-rows-based-on-one-field-in-row-in-oj-data-grid/</link>
		
		<dc:creator><![CDATA[khalil]]></dc:creator>
		<pubDate>Mon, 04 Dec 2023 19:10:44 +0000</pubDate>
				<category><![CDATA[VBCS-Tutorials]]></category>
		<category><![CDATA[datagrid]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[OJET]]></category>
		<category><![CDATA[VBCS]]></category>
		<guid isPermaLink="false">https://khalil232.com/?p=217</guid>

					<description><![CDATA[On a data grid, we can use a function in the cell.class-name attribute to dynamically pass the class name based on row data. &#8220;cellContext&#8221; will contain the required information. We can use console.log() to identify the structure. This can be used for other attributes, like &#8220;header.column.class-name&#8221; as well on oj-data-grid This can be used when [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>On a data grid, we can use a function in the <strong>cell.class-name</strong> attribute to dynamically pass the class name based on row data.</p>



<p>&#8220;<em>cellContext</em>&#8221; will contain the required information. We can use console.log() to identify the structure.</p>



<p>This can be used for other attributes, like <em>&#8220;header.column.class-name&#8221;</em> as well on oj-data-grid</p>



<p>This can be used when we want show different style for different rows, like </p>



<ul class="wp-block-list">
<li>If we want to highlight top performer in a data set,</li>



<li>or differently show calculated fields </li>



<li>or if we want to show different type with a different color</li>
</ul>



<p>Sample HTML code:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="" style="font-size:clamp(14px, .875rem, 21px);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" data-code="&lt;div class=&quot;oj-flex&quot;&gt;
  &lt;div class=&quot;oj-flex-item oj-sm-12 &quot;&gt;
    &lt;h5&gt;Data grid&lt;/h5&gt;
    &lt;oj-data-grid id=&quot;datagrid&quot; style=&quot;width:100%;height:400px&quot; aria-label=&quot;My Data Grid&quot; 
      data='{{ salaryDataADP }}'
      header.column.style=&quot;[[ headerColStyle ]]&quot; header.column.resizable.width=&quot;enable&quot;
      header.column.resizable.height=&quot;enable&quot; header.row.resizable.width=&quot;enable&quot;     
      header.row.resizable.height=&quot;enable&quot;
      header.column.class-name=&quot;oj-helper-justify-content-flex-start&quot; 
      cell.class-name=&quot;[[ cellClassNameFunc ]]&quot;
      cell.style=&quot;width: 200px;&quot;&gt;     
    &lt;/oj-data-grid&gt;
  &lt;/div&gt;
&lt;/div&gt;" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #808080">&lt;</span><span style="color: #569CD6">div</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">class</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;oj-flex&quot;</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #808080">&lt;</span><span style="color: #569CD6">div</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">class</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;oj-flex-item oj-sm-12 &quot;</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #808080">&lt;</span><span style="color: #569CD6">h5</span><span style="color: #808080">&gt;</span><span style="color: #D4D4D4">Data grid</span><span style="color: #808080">&lt;/</span><span style="color: #569CD6">h5</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #808080">&lt;</span><span style="color: #569CD6">oj-data-grid</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">id</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;datagrid&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">style</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;width:100%;height:400px&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">aria-label</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;My Data Grid&quot;</span><span style="color: #D4D4D4"> </span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #9CDCFE">data</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&#39;{{ salaryDataADP }}&#39;</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #9CDCFE">header.column.style</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;[[ headerColStyle ]]&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">header.column.resizable.width</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;enable&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #9CDCFE">header.column.resizable.height</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;enable&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">header.row.resizable.width</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;enable&quot;</span><span style="color: #D4D4D4">     </span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #9CDCFE">header.row.resizable.height</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;enable&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #9CDCFE">header.column.class-name</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;oj-helper-justify-content-flex-start&quot;</span><span style="color: #D4D4D4"> </span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #9CDCFE">cell.class-name</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;[[ cellClassNameFunc ]]&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #9CDCFE">cell.style</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;width: 200px;&quot;</span><span style="color: #808080">&gt;</span><span style="color: #D4D4D4">     </span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #808080">&lt;/</span><span style="color: #569CD6">oj-data-grid</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #808080">&lt;/</span><span style="color: #569CD6">div</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #808080">&lt;/</span><span style="color: #569CD6">div</span><span style="color: #808080">&gt;</span></span></code></pre></div>



<p>Sample JS code:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="" style="font-size:clamp(14px, .875rem, 21px);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" data-code="this.cellClassNameFunc = function (cellContext) {
  let cellRowIndex = cellContext.indexes.row;
  let classNameStr = &quot;oj-helper-justify-content &quot;;
  
  // to do styling based on index 
  // if (cellRowIndex % 3 === 0) {
  //   classNameStr += &quot;oj-bg-success-10 oj-text-color-success&quot;;
  // } else if (cellRowIndex % 3 === 1) {
  //   classNameStr += &quot;oj-bg-danger-30	 oj-text-color-danger&quot;;
  // } else {
  //   classNameStr += &quot;oj-bg-warning-30 oj-text-color-warning&quot;;
  // }
  
  let key = cellContext.key;
  console.log(cellContext);
  console.log(cellContext.datasource.data[cellRowIndex]);
  let rowData = cellContext.datasource.data.find((x) =&gt; x.id === key);
  if (rowData.city === &quot;Delhi&quot; || rowData.city === &quot;Banglore&quot;) {
    classNameStr += &quot;oj-bg-success-10 oj-text-color-success&quot;;
  } else if (rowData.city === &quot;Hyderabad&quot; || rowData.city === &quot;Kolkata&quot;) {
    classNameStr += &quot;oj-bg-danger-30	 oj-text-color-danger&quot;;
  } else if (rowData.city === &quot;Mumbai&quot; || rowData.city === &quot;Nagpur&quot;) {
    classNameStr += &quot;oj-bg-warning-30 oj-text-color-warning&quot;;
  }
  
  cellContext.datasource[cellRowIndex];
  
  return classNameStr;
};" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">this</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">cellClassNameFunc</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">function</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">cellContext</span><span style="color: #D4D4D4">) {</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">let</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">cellRowIndex</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">cellContext</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">indexes</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">row</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">let</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">classNameStr</span><span style="color: #D4D4D4"> = </span><span style="color: #CE9178">&quot;oj-helper-justify-content &quot;</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">  </span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #6A9955">// to do styling based on index </span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #6A9955">// if (cellRowIndex % 3 === 0) {</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #6A9955">//   classNameStr += &quot;oj-bg-success-10 oj-text-color-success&quot;;</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #6A9955">// } else if (cellRowIndex % 3 === 1) {</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #6A9955">//   classNameStr += &quot;oj-bg-danger-30	 oj-text-color-danger&quot;;</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #6A9955">// } else {</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #6A9955">//   classNameStr += &quot;oj-bg-warning-30 oj-text-color-warning&quot;;</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #6A9955">// }</span></span>
<span class="line"><span style="color: #D4D4D4">  </span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">let</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">key</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">cellContext</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">key</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">console</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">log</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">cellContext</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">console</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">log</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">cellContext</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">datasource</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">data</span><span style="color: #D4D4D4">[</span><span style="color: #9CDCFE">cellRowIndex</span><span style="color: #D4D4D4">]);</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">let</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">rowData</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">cellContext</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">datasource</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">data</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">find</span><span style="color: #D4D4D4">((</span><span style="color: #9CDCFE">x</span><span style="color: #D4D4D4">) </span><span style="color: #569CD6">=&gt;</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">x</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">id</span><span style="color: #D4D4D4"> === </span><span style="color: #9CDCFE">key</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">rowData</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">city</span><span style="color: #D4D4D4"> === </span><span style="color: #CE9178">&quot;Delhi&quot;</span><span style="color: #D4D4D4"> || </span><span style="color: #9CDCFE">rowData</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">city</span><span style="color: #D4D4D4"> === </span><span style="color: #CE9178">&quot;Banglore&quot;</span><span style="color: #D4D4D4">) {</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">classNameStr</span><span style="color: #D4D4D4"> += </span><span style="color: #CE9178">&quot;oj-bg-success-10 oj-text-color-success&quot;</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">  } </span><span style="color: #C586C0">else</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">rowData</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">city</span><span style="color: #D4D4D4"> === </span><span style="color: #CE9178">&quot;Hyderabad&quot;</span><span style="color: #D4D4D4"> || </span><span style="color: #9CDCFE">rowData</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">city</span><span style="color: #D4D4D4"> === </span><span style="color: #CE9178">&quot;Kolkata&quot;</span><span style="color: #D4D4D4">) {</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">classNameStr</span><span style="color: #D4D4D4"> += </span><span style="color: #CE9178">&quot;oj-bg-danger-30	 oj-text-color-danger&quot;</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">  } </span><span style="color: #C586C0">else</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">rowData</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">city</span><span style="color: #D4D4D4"> === </span><span style="color: #CE9178">&quot;Mumbai&quot;</span><span style="color: #D4D4D4"> || </span><span style="color: #9CDCFE">rowData</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">city</span><span style="color: #D4D4D4"> === </span><span style="color: #CE9178">&quot;Nagpur&quot;</span><span style="color: #D4D4D4">) {</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">classNameStr</span><span style="color: #D4D4D4"> += </span><span style="color: #CE9178">&quot;oj-bg-warning-30 oj-text-color-warning&quot;</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">  }</span></span>
<span class="line"><span style="color: #D4D4D4">  </span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">cellContext</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">datasource</span><span style="color: #D4D4D4">[</span><span style="color: #9CDCFE">cellRowIndex</span><span style="color: #D4D4D4">];</span></span>
<span class="line"><span style="color: #D4D4D4">  </span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">classNameStr</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">};</span></span></code></pre></div>



<p>Screenshots </p>



<p>Choosing row background color and text color based on city </p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" fetchpriority="high" decoding="async" width="1024" height="646" src="https://i0.wp.com/khalil232.com/wp-content/uploads/2023/12/image-2.png?resize=1024%2C646&#038;ssl=1" alt="" class="wp-image-218" srcset="https://i0.wp.com/khalil232.com/wp-content/uploads/2023/12/image-2.png?resize=1024%2C646&amp;ssl=1 1024w, https://i0.wp.com/khalil232.com/wp-content/uploads/2023/12/image-2.png?resize=300%2C189&amp;ssl=1 300w, https://i0.wp.com/khalil232.com/wp-content/uploads/2023/12/image-2.png?resize=768%2C484&amp;ssl=1 768w, https://i0.wp.com/khalil232.com/wp-content/uploads/2023/12/image-2.png?w=1194&amp;ssl=1 1194w" sizes="(max-width: 1000px) 100vw, 1000px" /></figure>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" decoding="async" width="1013" height="601" src="https://i0.wp.com/khalil232.com/wp-content/uploads/2023/12/image-4.png?resize=1013%2C601&#038;ssl=1" alt="" class="wp-image-220" srcset="https://i0.wp.com/khalil232.com/wp-content/uploads/2023/12/image-4.png?w=1013&amp;ssl=1 1013w, https://i0.wp.com/khalil232.com/wp-content/uploads/2023/12/image-4.png?resize=300%2C178&amp;ssl=1 300w, https://i0.wp.com/khalil232.com/wp-content/uploads/2023/12/image-4.png?resize=768%2C456&amp;ssl=1 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></figure>



<p></p>



<p>Choosing row background color and text color based on index </p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" decoding="async" width="1024" height="627" src="https://i0.wp.com/khalil232.com/wp-content/uploads/2023/12/image-3.png?resize=1024%2C627&#038;ssl=1" alt="" class="wp-image-219" srcset="https://i0.wp.com/khalil232.com/wp-content/uploads/2023/12/image-3.png?resize=1024%2C627&amp;ssl=1 1024w, https://i0.wp.com/khalil232.com/wp-content/uploads/2023/12/image-3.png?resize=300%2C184&amp;ssl=1 300w, https://i0.wp.com/khalil232.com/wp-content/uploads/2023/12/image-3.png?resize=768%2C470&amp;ssl=1 768w, https://i0.wp.com/khalil232.com/wp-content/uploads/2023/12/image-3.png?w=1128&amp;ssl=1 1128w" sizes="(max-width: 1000px) 100vw, 1000px" /></figure>



<p>Live application URL ( row style based on city ):  <a href="https://khalil232.com/apps/ojet-apps/?ojr=data-grid-example">https://khalil232.com/apps/ojet-apps/?ojr=data-grid-example</a> </p>



<p></p>



<p>References: </p>



<p>Datagrid js doc for identifying other attributes : <a href="https://www.oracle.com/webfolder/technetwork/jet/jsdocs/oj.ojDataGrid.html">https://www.oracle.com/webfolder/technetwork/jet/jsdocs/oj.ojDataGrid.html</a></p>



<p>CSS helpers used:</p>



<p>Background-color: <a href="https://www.oracle.com/webfolder/technetwork/jet/jsdocs/BackgroundColor.html">https://www.oracle.com/webfolder/technetwork/jet/jsdocs/BackgroundColor.html</a></p>



<p>Font color: <a href="https://www.oracle.com/webfolder/technetwork/jet/jsdocs/Text.html">https://www.oracle.com/webfolder/technetwork/jet/jsdocs/Text.html</a></p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">217</post-id>	</item>
		<item>
		<title>How to enable resize in oj-data-grid</title>
		<link>https://khalil232.com/vbcs-tutorials/212/how-to-enable-resize-in-oj-data-grid/</link>
		
		<dc:creator><![CDATA[khalil]]></dc:creator>
		<pubDate>Mon, 04 Dec 2023 18:32:09 +0000</pubDate>
				<category><![CDATA[VBCS-Tutorials]]></category>
		<category><![CDATA[datagrid]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[OJET]]></category>
		<category><![CDATA[VBCS]]></category>
		<guid isPermaLink="false">https://khalil232.com/?p=212</guid>

					<description><![CDATA[We can enable resize in oj-data-grid by adding the following html code to &#60;oj-data-grid>: The following attributes on the header will allow resizing. When hovering on a border, the user can resize the row or column height or width. To add an additional right-click menu, we can add the below code. The user can right-click [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>We can enable resize in oj-data-grid by adding the following html code to &lt;oj-data-grid>:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="" style="font-size:clamp(14px, .875rem, 21px);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" data-code="&lt;oj-data-grid
  id=&quot;datagrid&quot;
  style=&quot;width:100%;height:400px&quot;
  aria-label=&quot;My Data Grid&quot;
  data='{{ salaryDataADP }}'
  header.column.style=&quot;[[ headerColStyle ]]&quot;
  header.column.resizable.width=&quot;enable&quot;
  header.column.resizable.height=&quot;enable&quot;
  header.row.resizable.width=&quot;enable&quot;
  header.row.resizable.height=&quot;enable&quot;
  header.column.class-name=&quot;oj-helper-justify-content-flex-start&quot;
  cell.class-name=&quot;oj-helper-justify-content-flex-start&quot;
&gt;
  &lt;oj-menu slot=&quot;contextMenu&quot; aria-label=&quot;Employee Edit&quot;&gt;
    &lt;oj-option id=&quot;resizeWidth&quot; value=&quot;Resize Width&quot;
      data-oj-command=&quot;oj-datagrid-resizeWidth&quot;&gt;&lt;/oj-option&gt;
    &lt;oj-option id=&quot;resizeHeight&quot; value=&quot;Resize Height&quot;
      data-oj-command=&quot;oj-datagrid-resizeHeight&quot;&gt;&lt;/oj-option&gt;
    &lt;oj-option id=&quot;resizeFitToContent&quot; value=&quot;Resize Fit To Content&quot;
      data-oj-command=&quot;oj-datagrid-resizeFitToContent&quot;&gt;&lt;/oj-option&gt;
  &lt;/oj-menu&gt;
&lt;/oj-data-grid&gt;" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #808080">&lt;</span><span style="color: #569CD6">oj-data-grid</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">id</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;datagrid&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">style</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;width:100%;height:400px&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">aria-label</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;My Data Grid&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">data</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&#39;{{ salaryDataADP }}&#39;</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">header.column.style</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;[[ headerColStyle ]]&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">header.column.resizable.width</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;enable&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">header.column.resizable.height</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;enable&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">header.row.resizable.width</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;enable&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">header.row.resizable.height</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;enable&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">header.column.class-name</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;oj-helper-justify-content-flex-start&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">cell.class-name</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;oj-helper-justify-content-flex-start&quot;</span></span>
<span class="line"><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #808080">&lt;</span><span style="color: #569CD6">oj-menu</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">slot</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;contextMenu&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">aria-label</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;Employee Edit&quot;</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #808080">&lt;</span><span style="color: #569CD6">oj-option</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">id</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;resizeWidth&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">value</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;Resize Width&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #9CDCFE">data-oj-command</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;oj-datagrid-resizeWidth&quot;</span><span style="color: #808080">&gt;&lt;/</span><span style="color: #569CD6">oj-option</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #808080">&lt;</span><span style="color: #569CD6">oj-option</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">id</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;resizeHeight&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">value</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;Resize Height&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #9CDCFE">data-oj-command</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;oj-datagrid-resizeHeight&quot;</span><span style="color: #808080">&gt;&lt;/</span><span style="color: #569CD6">oj-option</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #808080">&lt;</span><span style="color: #569CD6">oj-option</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">id</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;resizeFitToContent&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">value</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;Resize Fit To Content&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #9CDCFE">data-oj-command</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;oj-datagrid-resizeFitToContent&quot;</span><span style="color: #808080">&gt;&lt;/</span><span style="color: #569CD6">oj-option</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #808080">&lt;/</span><span style="color: #569CD6">oj-menu</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #808080">&lt;/</span><span style="color: #569CD6">oj-data-grid</span><span style="color: #808080">&gt;</span></span></code></pre></div>



<p>The following attributes on the header will allow resizing. When hovering on a border, the user can resize the row or column height or width.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="" style="font-size:clamp(14px, .875rem, 21px);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" data-code="&lt;oj-data-grid
  header.column.resizable.width=&quot;enable&quot;
  header.column.resizable.height=&quot;enable&quot;
  header.row.resizable.width=&quot;enable&quot;
  header.row.resizable.height=&quot;enable&quot;
&gt;
&lt;/oj-data-grid&gt;" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #808080">&lt;</span><span style="color: #569CD6">oj-data-grid</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">header.column.resizable.width</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;enable&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">header.column.resizable.height</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;enable&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">header.row.resizable.width</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;enable&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">header.row.resizable.height</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;enable&quot;</span></span>
<span class="line"><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #808080">&lt;/</span><span style="color: #569CD6">oj-data-grid</span><span style="color: #808080">&gt;</span></span></code></pre></div>



<p>To add an additional right-click menu, we can add the below code. The user can right-click and click on Resize width, and enter a desired width, like 100 or 200.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="" style="font-size:clamp(14px, .875rem, 21px);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" data-code="&lt;oj-menu slot=&quot;contextMenu&quot; aria-label=&quot;Employee Edit&quot;&gt;
    &lt;oj-option id=&quot;resizeWidth&quot; value=&quot;Resize Width&quot;
      data-oj-command=&quot;oj-datagrid-resizeWidth&quot;&gt;&lt;/oj-option&gt;
    &lt;oj-option id=&quot;resizeHeight&quot; value=&quot;Resize Height&quot;
      data-oj-command=&quot;oj-datagrid-resizeHeight&quot;&gt;&lt;/oj-option&gt;
    &lt;oj-option id=&quot;resizeFitToContent&quot; value=&quot;Resize Fit To Content&quot;
      data-oj-command=&quot;oj-datagrid-resizeFitToContent&quot;&gt;&lt;/oj-option&gt;
  &lt;/oj-menu&gt;" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #808080">&lt;</span><span style="color: #569CD6">oj-menu</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">slot</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;contextMenu&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">aria-label</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;Employee Edit&quot;</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #808080">&lt;</span><span style="color: #569CD6">oj-option</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">id</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;resizeWidth&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">value</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;Resize Width&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #9CDCFE">data-oj-command</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;oj-datagrid-resizeWidth&quot;</span><span style="color: #808080">&gt;&lt;/</span><span style="color: #569CD6">oj-option</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #808080">&lt;</span><span style="color: #569CD6">oj-option</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">id</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;resizeHeight&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">value</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;Resize Height&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #9CDCFE">data-oj-command</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;oj-datagrid-resizeHeight&quot;</span><span style="color: #808080">&gt;&lt;/</span><span style="color: #569CD6">oj-option</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #808080">&lt;</span><span style="color: #569CD6">oj-option</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">id</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;resizeFitToContent&quot;</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">value</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;Resize Fit To Content&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #9CDCFE">data-oj-command</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;oj-datagrid-resizeFitToContent&quot;</span><span style="color: #808080">&gt;&lt;/</span><span style="color: #569CD6">oj-option</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #808080">&lt;/</span><span style="color: #569CD6">oj-menu</span><span style="color: #808080">&gt;</span></span></code></pre></div>



<p>There are other commands available, like below ( see the jsdoc link for more information ). Few features are supported only in latest version of JET</p>



<figure class="wp-block-table"><table><thead><tr><th>Default Function</th><th>data-oj-command value</th></tr></thead><tbody><tr><td><kbd>Resize menu</kbd>&nbsp;(contains width and height resize)</td><td>oj-datagrid-resize</td></tr><tr><td><kbd>Sort Row menu</kbd>&nbsp;(contains ascending and descending sort)</td><td>oj-datagrid-sortRow</td></tr><tr><td><kbd>Sort Column menu</kbd>&nbsp;(contains ascending and descending sort)</td><td>oj-datagrid-sortCol</td></tr><tr><td><kbd>Resize Width</kbd></td><td>oj-datagrid-resizeWidth</td></tr><tr><td><kbd>Resize Height</kbd></td><td>oj-datagrid-resizeHeight</td></tr><tr><td><kbd>Resize Fit To Content</kbd></td><td>oj-datagrid-resizeFitToContent</td></tr><tr><td><kbd>Sort Row Ascending</kbd></td><td>oj-datagrid-sortRowAsc</td></tr><tr><td><kbd>Sort Row Descending</kbd></td><td>oj-datagrid-sortRowDsc</td></tr><tr><td><kbd>Sort Column Ascending</kbd></td><td>oj-datagrid-sortColAsc</td></tr><tr><td><kbd>Sort Column Descending</kbd></td><td>oj-datagrid-sortColDsc</td></tr><tr><td><kbd>Cut (for reordering)</kbd></td><td>oj-datagrid-cut</td></tr><tr><td><kbd>Paste (for reordering)</kbd></td><td>oj-datagrid-paste</td></tr><tr><td><kbd>CutCells (for data transferring)</kbd></td><td>oj-datagrid-cutCells</td></tr><tr><td><kbd>CopyCells (for data transferring)</kbd></td><td>oj-datagrid-copyCells</td></tr><tr><td><kbd>PasteCells (for data transferring)</kbd></td><td>oj-datagrid-pasteCells</td></tr><tr><td><kbd>Fill</kbd></td><td>oj-datagrid-fillCells</td></tr><tr><td><kbd>Select Multiple Cells on Touch Device</kbd></td><td>oj-datagrid-discontiguousSelection</td></tr><tr><td><kbd>Freeze Columns</kbd></td><td>oj-datagrid-freezeCol</td></tr><tr><td><kbd>Freeze Rows</kbd></td><td>oj-datagrid-freezeRow</td></tr><tr><td><kbd>Unfreeze Columns</kbd></td><td>oj-datagrid-unfreezeColumn</td></tr><tr><td><kbd>Unfreeze Rows</kbd></td><td>oj-datagrid-unfreezeRow</td></tr><tr><td><kbd>Hide Columns</kbd></td><td>oj-datagrid-hideCol</td></tr><tr><td><kbd>Unhide Columns</kbd></td><td>oj-datagrid-unhideCol</td></tr></tbody></table></figure>



<p>Screenshots</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="652" height="467" src="https://i0.wp.com/khalil232.com/wp-content/uploads/2023/12/image.png?resize=652%2C467&#038;ssl=1" alt="" class="wp-image-213" srcset="https://i0.wp.com/khalil232.com/wp-content/uploads/2023/12/image.png?w=652&amp;ssl=1 652w, https://i0.wp.com/khalil232.com/wp-content/uploads/2023/12/image.png?resize=300%2C215&amp;ssl=1 300w" sizes="(max-width: 652px) 100vw, 652px" /></figure>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="515" src="https://i0.wp.com/khalil232.com/wp-content/uploads/2023/12/image-1.png?resize=1024%2C515&#038;ssl=1" alt="" class="wp-image-214" srcset="https://i0.wp.com/khalil232.com/wp-content/uploads/2023/12/image-1.png?resize=1024%2C515&amp;ssl=1 1024w, https://i0.wp.com/khalil232.com/wp-content/uploads/2023/12/image-1.png?resize=300%2C151&amp;ssl=1 300w, https://i0.wp.com/khalil232.com/wp-content/uploads/2023/12/image-1.png?resize=768%2C386&amp;ssl=1 768w, https://i0.wp.com/khalil232.com/wp-content/uploads/2023/12/image-1.png?w=1432&amp;ssl=1 1432w" sizes="(max-width: 1000px) 100vw, 1000px" /></figure>



<p>Live application URL: <a href="https://khalil232.com/apps/ojet-apps/?ojr=data-grid-example">https://khalil232.com/apps/ojet-apps/?ojr=data-grid-example</a></p>



<p>References: </p>



<p>helper classes: <a href="https://www.oracle.com/webfolder/technetwork/jet/jsdocs/Helpers.html">https://www.oracle.com/webfolder/technetwork/jet/jsdocs/Helpers.html</a></p>



<p>jet cookbook: <a href="https://www.oracle.com/webfolder/technetwork/jet/jetCookbook.html?component=dataGrid&amp;demo=resizing">https://www.oracle.com/webfolder/technetwork/jet/jetCookbook.html?component=dataGrid&amp;demo=resizing</a></p>



<p>link for oj-data-commands: <a href="https://www.oracle.com/webfolder/technetwork/jet/jsdocs/oj.ojDataGrid.html#contextmenu-section">https://www.oracle.com/webfolder/technetwork/jet/jsdocs/oj.ojDataGrid.html#contextmenu-section</a></p>



<p></p>



<p></p>



<p></p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">212</post-id>	</item>
		<item>
		<title>How to refresh particular cell in oj-data-grid</title>
		<link>https://khalil232.com/vbcs-tutorials/209/how-to-refresh-particular-cell-in-oj-data-grid/</link>
		
		<dc:creator><![CDATA[khalil]]></dc:creator>
		<pubDate>Sun, 03 Dec 2023 19:57:12 +0000</pubDate>
				<category><![CDATA[VBCS-Tutorials]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[OJET]]></category>
		<category><![CDATA[VBCS]]></category>
		<guid isPermaLink="false">https://khalil232.com/?p=209</guid>

					<description><![CDATA[We can use the update event to refresh particular grid cells. Let us say we are displaying a grid with few rows where the user can edit the data and we are showing few calculated fields (like total or percentage). If we have to refresh the grid cells after updating the cell with the correct [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>We can use the update event to refresh particular grid cells.</p>



<p>Let us say we are displaying a grid with few rows where the user can edit the data and we are showing few calculated fields (like total or percentage). If we have to refresh the grid cells after updating the cell with the correct value, we can use the following JavaScript code:</p>



<p></p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="" style="font-size:clamp(14px, .875rem, 21px);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" data-code="// &quot;gridData&quot; is a variable holding grid information. 
// We can pass &quot;gridData&quot; to the JS function and call the below code.

let updateEventDetails = {
&quot;type&quot;: &quot;update&quot;,
&quot;detail&quot;: {
    &quot;ranges&quot;: [{
            &quot;rowOffset&quot;: 0,      // start of grid row
            &quot;columnOffset&quot;: 0,   // start of grid col
            &quot;rowCount&quot;:  gridData.counts.row // end of grid row
            &quot;columnCount&quot;: gridData.counts.column // end of grid col 
       }]
    }
};
gridData.dispatchEvent(updateEventDetails);" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #6A9955">// &quot;gridData&quot; is a variable holding grid information. </span></span>
<span class="line"><span style="color: #6A9955">// We can pass &quot;gridData&quot; to the JS function and call the below code.</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">let</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">updateEventDetails</span><span style="color: #D4D4D4"> = {</span></span>
<span class="line"><span style="color: #CE9178">&quot;type&quot;</span><span style="color: #9CDCFE">:</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;update&quot;</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #CE9178">&quot;detail&quot;</span><span style="color: #9CDCFE">:</span><span style="color: #D4D4D4"> {</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #CE9178">&quot;ranges&quot;</span><span style="color: #9CDCFE">:</span><span style="color: #D4D4D4"> [{</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #CE9178">&quot;rowOffset&quot;</span><span style="color: #9CDCFE">:</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4">,      </span><span style="color: #6A9955">// start of grid row</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #CE9178">&quot;columnOffset&quot;</span><span style="color: #9CDCFE">:</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4">,   </span><span style="color: #6A9955">// start of grid col</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #CE9178">&quot;rowCount&quot;</span><span style="color: #9CDCFE">:</span><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE">gridData</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">counts</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">row</span><span style="color: #D4D4D4"> </span><span style="color: #6A9955">// end of grid row</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #CE9178">&quot;columnCount&quot;</span><span style="color: #D4D4D4">: </span><span style="color: #9CDCFE">gridData</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">counts</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">column</span><span style="color: #D4D4D4"> </span><span style="color: #6A9955">// end of grid col </span></span>
<span class="line"><span style="color: #D4D4D4">       }]</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"><span style="color: #D4D4D4">};</span></span>
<span class="line"><span style="color: #9CDCFE">gridData</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">dispatchEvent</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">updateEventDetails</span><span style="color: #D4D4D4">);</span></span></code></pre></div>



<p>The above code will refresh all the grid cells; if we want to refresh only a particular grid cell, we can set relative rowOffset, columnOffset, rowCount or columnCount.</p>



<p></p>



<p>We can also give multiple ranges if the cells cannot be captured in a single range.</p>



<p></p>



<p>When we use the refresh event on the grid, the grid becomes white and renders again. In order to avoid that, we use the update event. The update event doesn&#8217;t remove the focus, and only the cells in range will get refreshed. </p>



<p></p>



<p>If you have a huge amount of data in the grid, use the update event very rarely. It has a huge impact on performance. If you want a large number of cells to be refreshed, use the refresh event instead of the update event.</p>



<p></p>



<p>References:</p>



<p>Data Grid Cookbook: <a href="https://www.oracle.com/webfolder/technetwork/jet/jetCookbook.html?component=dataGrid&amp;demo=overView">https://www.oracle.com/webfolder/technetwork/jet/jetCookbook.html?component=dataGrid&amp;demo=overView</a></p>



<p>ojDataGrid JS doc: <a href="https://www.oracle.com/webfolder/technetwork/jet/jsdocs/oj.ojDataGrid.html">https://www.oracle.com/webfolder/technetwork/jet/jsdocs/oj.ojDataGrid.html</a></p>



<p>DataGridProviderUpdateEvent: <a href="https://www.oracle.com/webfolder/technetwork/jet/jsdocs/DataGridProviderUpdateEvent.html">https://www.oracle.com/webfolder/technetwork/jet/jsdocs/DataGridProviderUpdateEvent.html</a></p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">209</post-id>	</item>
		<item>
		<title>Calling Rest API using JavaScript function in vbcs</title>
		<link>https://khalil232.com/vbcs-tutorials/183/calling-rest-api-using-javascript-function-in-vbcs/</link>
		
		<dc:creator><![CDATA[khalil]]></dc:creator>
		<pubDate>Tue, 10 Oct 2023 17:56:43 +0000</pubDate>
				<category><![CDATA[VBCS-Tutorials]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[OJET]]></category>
		<category><![CDATA[VBCS]]></category>
		<guid isPermaLink="false">https://khalil232.com/?p=183</guid>

					<description><![CDATA[We can call rest API configured in service connection using RestHelper The function getLineItems() can be called using action chain. We can call the rest API configured in the service connection using Rest Helper in APP UI as well We have to additional pass extensionId &#8211; site_MyExtension. ( id of the APP UI extension. You [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>We can call rest API configured in service connection using RestHelper</p>



<p>The function <strong>getLineItems()</strong> can be called using action chain.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="" style="font-size:clamp(14px, .875rem, 21px);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" data-code="define([&quot;vb/helpers/rest&quot;], (Rest) =&gt; {
  &quot;use strict&quot;;

  class PageModule {
    getLineItems() {
      let endpointurl = &quot;buinessObjects/getalls_Country&quot;;
      let queryString = &quot;id is not null&quot;;

      return new Promise(function (resolve, reject) {
        var ep = Rest.get(endpointurl);
        ep.parameters({
          q: queryString,
          onlyData: true,
          limit: 50,
          orderBy: &quot;id:asc&quot;,
        });
        ep.fetch().then(function (result) {
          if (result.response.ok) {
            resolve(result.body.items);
          } else {
            resolve([]);
          }
        });
      });
    }
  }

  return PageModule;
});" style="color:#babed8;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki material-theme-ocean" style="background-color: #0F111A" tabindex="0"><code><span class="line"><span style="color: #82AAFF">define</span><span style="color: #BABED8">([</span><span style="color: #89DDFF">&quot;</span><span style="color: #C3E88D">vb/helpers/rest</span><span style="color: #89DDFF">&quot;</span><span style="color: #BABED8">]</span><span style="color: #89DDFF">,</span><span style="color: #BABED8"> </span><span style="color: #89DDFF">(</span><span style="color: #BABED8; font-style: italic">Rest</span><span style="color: #89DDFF">)</span><span style="color: #BABED8"> </span><span style="color: #C792EA">=&gt;</span><span style="color: #BABED8"> </span><span style="color: #89DDFF">{</span></span>
<span class="line"><span style="color: #F07178">  </span><span style="color: #89DDFF">&quot;</span><span style="color: #C3E88D">use strict</span><span style="color: #89DDFF">&quot;</span><span style="color: #89DDFF">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F07178">  </span><span style="color: #C792EA">class</span><span style="color: #F07178"> </span><span style="color: #FFCB6B">PageModule</span><span style="color: #F07178"> </span><span style="color: #89DDFF">{</span></span>
<span class="line"><span style="color: #F07178">    getLineItems</span><span style="color: #89DDFF">()</span><span style="color: #F07178"> </span><span style="color: #89DDFF">{</span></span>
<span class="line"><span style="color: #F07178">      </span><span style="color: #C792EA">let</span><span style="color: #F07178"> </span><span style="color: #BABED8">endpointurl</span><span style="color: #F07178"> </span><span style="color: #89DDFF">=</span><span style="color: #F07178"> </span><span style="color: #89DDFF">&quot;</span><span style="color: #C3E88D">buinessObjects/getalls_Country</span><span style="color: #89DDFF">&quot;</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">      </span><span style="color: #C792EA">let</span><span style="color: #F07178"> </span><span style="color: #BABED8">queryString</span><span style="color: #F07178"> </span><span style="color: #89DDFF">=</span><span style="color: #F07178"> </span><span style="color: #89DDFF">&quot;</span><span style="color: #C3E88D">id is not null</span><span style="color: #89DDFF">&quot;</span><span style="color: #89DDFF">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F07178">      </span><span style="color: #89DDFF; font-style: italic">return</span><span style="color: #F07178"> </span><span style="color: #89DDFF">new</span><span style="color: #F07178"> </span><span style="color: #FFCB6B">Promise</span><span style="color: #F07178">(</span><span style="color: #C792EA">function</span><span style="color: #F07178"> </span><span style="color: #89DDFF">(</span><span style="color: #BABED8; font-style: italic">resolve</span><span style="color: #89DDFF">,</span><span style="color: #F07178"> </span><span style="color: #BABED8; font-style: italic">reject</span><span style="color: #89DDFF">)</span><span style="color: #F07178"> </span><span style="color: #89DDFF">{</span></span>
<span class="line"><span style="color: #F07178">        </span><span style="color: #C792EA">var</span><span style="color: #F07178"> </span><span style="color: #BABED8">ep</span><span style="color: #F07178"> </span><span style="color: #89DDFF">=</span><span style="color: #F07178"> </span><span style="color: #BABED8">Rest</span><span style="color: #89DDFF">.</span><span style="color: #82AAFF">get</span><span style="color: #F07178">(</span><span style="color: #BABED8">endpointurl</span><span style="color: #F07178">)</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">        </span><span style="color: #BABED8">ep</span><span style="color: #89DDFF">.</span><span style="color: #82AAFF">parameters</span><span style="color: #F07178">(</span><span style="color: #89DDFF">{</span></span>
<span class="line"><span style="color: #F07178">          q</span><span style="color: #89DDFF">:</span><span style="color: #F07178"> </span><span style="color: #BABED8">queryString</span><span style="color: #89DDFF">,</span></span>
<span class="line"><span style="color: #F07178">          onlyData</span><span style="color: #89DDFF">:</span><span style="color: #F07178"> </span><span style="color: #FF9CAC">true</span><span style="color: #89DDFF">,</span></span>
<span class="line"><span style="color: #F07178">          limit</span><span style="color: #89DDFF">:</span><span style="color: #F07178"> </span><span style="color: #F78C6C">50</span><span style="color: #89DDFF">,</span></span>
<span class="line"><span style="color: #F07178">          orderBy</span><span style="color: #89DDFF">:</span><span style="color: #F07178"> </span><span style="color: #89DDFF">&quot;</span><span style="color: #C3E88D">id:asc</span><span style="color: #89DDFF">&quot;</span><span style="color: #89DDFF">,</span></span>
<span class="line"><span style="color: #F07178">        </span><span style="color: #89DDFF">}</span><span style="color: #F07178">)</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">        </span><span style="color: #BABED8">ep</span><span style="color: #89DDFF">.</span><span style="color: #82AAFF">fetch</span><span style="color: #F07178">()</span><span style="color: #89DDFF">.</span><span style="color: #82AAFF">then</span><span style="color: #F07178">(</span><span style="color: #C792EA">function</span><span style="color: #F07178"> </span><span style="color: #89DDFF">(</span><span style="color: #BABED8; font-style: italic">result</span><span style="color: #89DDFF">)</span><span style="color: #F07178"> </span><span style="color: #89DDFF">{</span></span>
<span class="line"><span style="color: #F07178">          </span><span style="color: #89DDFF; font-style: italic">if</span><span style="color: #F07178"> (</span><span style="color: #BABED8">result</span><span style="color: #89DDFF">.</span><span style="color: #BABED8">response</span><span style="color: #89DDFF">.</span><span style="color: #BABED8">ok</span><span style="color: #F07178">) </span><span style="color: #89DDFF">{</span></span>
<span class="line"><span style="color: #F07178">            </span><span style="color: #82AAFF">resolve</span><span style="color: #F07178">(</span><span style="color: #BABED8">result</span><span style="color: #89DDFF">.</span><span style="color: #BABED8">body</span><span style="color: #89DDFF">.</span><span style="color: #BABED8">items</span><span style="color: #F07178">)</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">          </span><span style="color: #89DDFF">}</span><span style="color: #F07178"> </span><span style="color: #89DDFF; font-style: italic">else</span><span style="color: #F07178"> </span><span style="color: #89DDFF">{</span></span>
<span class="line"><span style="color: #F07178">            </span><span style="color: #82AAFF">resolve</span><span style="color: #F07178">([])</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">          </span><span style="color: #89DDFF">}</span></span>
<span class="line"><span style="color: #F07178">        </span><span style="color: #89DDFF">}</span><span style="color: #F07178">)</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">      </span><span style="color: #89DDFF">}</span><span style="color: #F07178">)</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">    </span><span style="color: #89DDFF">}</span></span>
<span class="line"><span style="color: #F07178">  </span><span style="color: #89DDFF">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F07178">  </span><span style="color: #89DDFF; font-style: italic">return</span><span style="color: #F07178"> </span><span style="color: #BABED8">PageModule</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #89DDFF">}</span><span style="color: #BABED8">)</span><span style="color: #89DDFF">;</span></span></code></pre></div>



<p></p>



<p></p>



<p>We can call the rest API configured in the service connection using Rest Helper in APP UI as well</p>



<p>We have to additional pass extensionId &#8211; site_MyExtension. ( id of the APP UI extension.</p>



<p>You can find the extension id from -&gt; </p>



<ul class="wp-block-list">
<li>Open workspace, click on extension name in left hand side </li>



<li>Go to settings and you will find extension id.</li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="" style="font-size:clamp(14px, .875rem, 21px);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" data-code="define([&quot;vb/helpers/rest&quot;], (Rest) =&gt; {
  &quot;use strict&quot;;

  class PageModule {
    getLineItems() {
      let extensionId = &quot;site_MyExtension&quot;
    
      let endpointurl = &quot;site_MyExtension:saasRestApi/getalls_Country&quot;;
      let queryString = &quot;id is not null&quot;;
 
      return new Promise(function (resolve, reject) {
        var ep = Rest.get(endpointurl, { extensionId: &quot;site_MyExtension&quot; } );
        ep.parameters({
          q: queryString,
          onlyData: true,
          limit: 50,
          orderBy: &quot;id:asc&quot;,
        });
        ep.fetch().then(function (result) {
          if (result.response.ok) {
            resolve(result.body.items);
          } else {
            resolve([]);
          }
        });
      });
    }
  }

  return PageModule;
});" style="color:#babed8;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki material-theme-ocean" style="background-color: #0F111A" tabindex="0"><code><span class="line"><span style="color: #82AAFF">define</span><span style="color: #BABED8">([</span><span style="color: #89DDFF">&quot;</span><span style="color: #C3E88D">vb/helpers/rest</span><span style="color: #89DDFF">&quot;</span><span style="color: #BABED8">]</span><span style="color: #89DDFF">,</span><span style="color: #BABED8"> </span><span style="color: #89DDFF">(</span><span style="color: #BABED8; font-style: italic">Rest</span><span style="color: #89DDFF">)</span><span style="color: #BABED8"> </span><span style="color: #C792EA">=&gt;</span><span style="color: #BABED8"> </span><span style="color: #89DDFF">{</span></span>
<span class="line"><span style="color: #F07178">  </span><span style="color: #89DDFF">&quot;</span><span style="color: #C3E88D">use strict</span><span style="color: #89DDFF">&quot;</span><span style="color: #89DDFF">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F07178">  </span><span style="color: #C792EA">class</span><span style="color: #F07178"> </span><span style="color: #FFCB6B">PageModule</span><span style="color: #F07178"> </span><span style="color: #89DDFF">{</span></span>
<span class="line"><span style="color: #F07178">    getLineItems</span><span style="color: #89DDFF">()</span><span style="color: #F07178"> </span><span style="color: #89DDFF">{</span></span>
<span class="line"><span style="color: #F07178">      </span><span style="color: #C792EA">let</span><span style="color: #F07178"> </span><span style="color: #BABED8">extensionId</span><span style="color: #F07178"> </span><span style="color: #89DDFF">=</span><span style="color: #F07178"> </span><span style="color: #89DDFF">&quot;</span><span style="color: #C3E88D">site_MyExtension</span><span style="color: #89DDFF">&quot;</span></span>
<span class="line"><span style="color: #F07178">    </span></span>
<span class="line"><span style="color: #F07178">      </span><span style="color: #C792EA">let</span><span style="color: #F07178"> </span><span style="color: #BABED8">endpointurl</span><span style="color: #F07178"> </span><span style="color: #89DDFF">=</span><span style="color: #F07178"> </span><span style="color: #89DDFF">&quot;</span><span style="color: #C3E88D">site_MyExtension:saasRestApi/getalls_Country</span><span style="color: #89DDFF">&quot;</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">      </span><span style="color: #C792EA">let</span><span style="color: #F07178"> </span><span style="color: #BABED8">queryString</span><span style="color: #F07178"> </span><span style="color: #89DDFF">=</span><span style="color: #F07178"> </span><span style="color: #89DDFF">&quot;</span><span style="color: #C3E88D">id is not null</span><span style="color: #89DDFF">&quot;</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178"> </span></span>
<span class="line"><span style="color: #F07178">      </span><span style="color: #89DDFF; font-style: italic">return</span><span style="color: #F07178"> </span><span style="color: #89DDFF">new</span><span style="color: #F07178"> </span><span style="color: #FFCB6B">Promise</span><span style="color: #F07178">(</span><span style="color: #C792EA">function</span><span style="color: #F07178"> </span><span style="color: #89DDFF">(</span><span style="color: #BABED8; font-style: italic">resolve</span><span style="color: #89DDFF">,</span><span style="color: #F07178"> </span><span style="color: #BABED8; font-style: italic">reject</span><span style="color: #89DDFF">)</span><span style="color: #F07178"> </span><span style="color: #89DDFF">{</span></span>
<span class="line"><span style="color: #F07178">        </span><span style="color: #C792EA">var</span><span style="color: #F07178"> </span><span style="color: #BABED8">ep</span><span style="color: #F07178"> </span><span style="color: #89DDFF">=</span><span style="color: #F07178"> </span><span style="color: #BABED8">Rest</span><span style="color: #89DDFF">.</span><span style="color: #82AAFF">get</span><span style="color: #F07178">(</span><span style="color: #BABED8">endpointurl</span><span style="color: #89DDFF">,</span><span style="color: #F07178"> </span><span style="color: #89DDFF">{</span><span style="color: #F07178"> extensionId</span><span style="color: #89DDFF">:</span><span style="color: #F07178"> </span><span style="color: #89DDFF">&quot;</span><span style="color: #C3E88D">site_MyExtension</span><span style="color: #89DDFF">&quot;</span><span style="color: #F07178"> </span><span style="color: #89DDFF">}</span><span style="color: #F07178"> )</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">        </span><span style="color: #BABED8">ep</span><span style="color: #89DDFF">.</span><span style="color: #82AAFF">parameters</span><span style="color: #F07178">(</span><span style="color: #89DDFF">{</span></span>
<span class="line"><span style="color: #F07178">          q</span><span style="color: #89DDFF">:</span><span style="color: #F07178"> </span><span style="color: #BABED8">queryString</span><span style="color: #89DDFF">,</span></span>
<span class="line"><span style="color: #F07178">          onlyData</span><span style="color: #89DDFF">:</span><span style="color: #F07178"> </span><span style="color: #FF9CAC">true</span><span style="color: #89DDFF">,</span></span>
<span class="line"><span style="color: #F07178">          limit</span><span style="color: #89DDFF">:</span><span style="color: #F07178"> </span><span style="color: #F78C6C">50</span><span style="color: #89DDFF">,</span></span>
<span class="line"><span style="color: #F07178">          orderBy</span><span style="color: #89DDFF">:</span><span style="color: #F07178"> </span><span style="color: #89DDFF">&quot;</span><span style="color: #C3E88D">id:asc</span><span style="color: #89DDFF">&quot;</span><span style="color: #89DDFF">,</span></span>
<span class="line"><span style="color: #F07178">        </span><span style="color: #89DDFF">}</span><span style="color: #F07178">)</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">        </span><span style="color: #BABED8">ep</span><span style="color: #89DDFF">.</span><span style="color: #82AAFF">fetch</span><span style="color: #F07178">()</span><span style="color: #89DDFF">.</span><span style="color: #82AAFF">then</span><span style="color: #F07178">(</span><span style="color: #C792EA">function</span><span style="color: #F07178"> </span><span style="color: #89DDFF">(</span><span style="color: #BABED8; font-style: italic">result</span><span style="color: #89DDFF">)</span><span style="color: #F07178"> </span><span style="color: #89DDFF">{</span></span>
<span class="line"><span style="color: #F07178">          </span><span style="color: #89DDFF; font-style: italic">if</span><span style="color: #F07178"> (</span><span style="color: #BABED8">result</span><span style="color: #89DDFF">.</span><span style="color: #BABED8">response</span><span style="color: #89DDFF">.</span><span style="color: #BABED8">ok</span><span style="color: #F07178">) </span><span style="color: #89DDFF">{</span></span>
<span class="line"><span style="color: #F07178">            </span><span style="color: #82AAFF">resolve</span><span style="color: #F07178">(</span><span style="color: #BABED8">result</span><span style="color: #89DDFF">.</span><span style="color: #BABED8">body</span><span style="color: #89DDFF">.</span><span style="color: #BABED8">items</span><span style="color: #F07178">)</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">          </span><span style="color: #89DDFF">}</span><span style="color: #F07178"> </span><span style="color: #89DDFF; font-style: italic">else</span><span style="color: #F07178"> </span><span style="color: #89DDFF">{</span></span>
<span class="line"><span style="color: #F07178">            </span><span style="color: #82AAFF">resolve</span><span style="color: #F07178">([])</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">          </span><span style="color: #89DDFF">}</span></span>
<span class="line"><span style="color: #F07178">        </span><span style="color: #89DDFF">}</span><span style="color: #F07178">)</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">      </span><span style="color: #89DDFF">}</span><span style="color: #F07178">)</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #F07178">    </span><span style="color: #89DDFF">}</span></span>
<span class="line"><span style="color: #F07178">  </span><span style="color: #89DDFF">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F07178">  </span><span style="color: #89DDFF; font-style: italic">return</span><span style="color: #F07178"> </span><span style="color: #BABED8">PageModule</span><span style="color: #89DDFF">;</span></span>
<span class="line"><span style="color: #89DDFF">}</span><span style="color: #BABED8">)</span><span style="color: #89DDFF">;</span></span></code></pre></div>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">183</post-id>	</item>
	</channel>
</rss>
