<?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>Talent Point LLC</title>
	<atom:link href="http://www.talentpointllc.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.talentpointllc.com</link>
	<description></description>
	<lastBuildDate>Fri, 24 Jun 2011 10:45:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>TalentPoint gets APEX Certified!</title>
		<link>http://www.talentpointllc.com/blog/talentpoint-gets-apex-certified/</link>
		<comments>http://www.talentpointllc.com/blog/talentpoint-gets-apex-certified/#comments</comments>
		<pubDate>Mon, 02 Aug 2010 20:57:41 +0000</pubDate>
		<dc:creator>jeffh</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.talentpointllc.com/?p=110</guid>
		<description><![CDATA[Back in the spring Oracle introduced a Beta exam certification for Oracle Application Express. Unlike a typical certification exam, the results weren&#8217;t given at the time of completion. We are proud to announce that Managing Partner Jeff Holoman has successfully passed the exam and now in addition to his Oracle DBA certification, has become an [...]]]></description>
			<content:encoded><![CDATA[<p>Back in the spring Oracle introduced a Beta exam certification for Oracle Application Express. Unlike a typical certification exam, the results weren&#8217;t given at the time of completion. We are proud to announce that Managing Partner Jeff Holoman has successfully passed the exam and now in addition to his Oracle DBA certification, has become an <strong>Application Express Developer Certified Expert.</strong></p>
<p><span id="more-110"></span></p>
<p>Way to go Jeff!</p>
<p><strong><a href="http://www.talentpointllc.com/wp-content/uploads/jeff_apex_certified.jpg"><img class="alignnone size-medium wp-image-111" title="jeff_apex_certified" src="http://www.talentpointllc.com/wp-content/uploads/jeff_apex_certified-300x219.jpg" alt="" width="300" height="219" /></a><br />
</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.talentpointllc.com/blog/talentpoint-gets-apex-certified/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Website Launch!</title>
		<link>http://www.talentpointllc.com/blog/hello-world/</link>
		<comments>http://www.talentpointllc.com/blog/hello-world/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 18:43:48 +0000</pubDate>
		<dc:creator>mford</dc:creator>
				<category><![CDATA[TalentPoint News]]></category>

		<guid isPermaLink="false">http://www.talentpointllc.com/?p=1</guid>
		<description><![CDATA[We are very excited about the launch of our new and improved website. We feel like the new layout is a vast improvement and hope that the content really explains what sets us apart. The folks over at Three Stream have really done an outstanding job and have been a pleasure to work with. We [...]]]></description>
			<content:encoded><![CDATA[<p>We are very excited about the launch of our new and improved website. We feel like the new layout is a vast improvement<span id="more-1"></span> and hope that the content really explains what sets us apart. The folks over at <a href="http://threestream.com">Three Stream </a> have really done an outstanding job and have been a pleasure to work with. We look forward to partnering with them again in the future.</p>
<p>We should be posting here fairly regularly so look for a mix of industry news and technical postings as well.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.talentpointllc.com/blog/hello-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jsTree and Apex</title>
		<link>http://www.talentpointllc.com/blog/adding-time-to-jquery-datepicker-2/</link>
		<comments>http://www.talentpointllc.com/blog/adding-time-to-jquery-datepicker-2/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 22:41:40 +0000</pubDate>
		<dc:creator>mford</dc:creator>
				<category><![CDATA[APEX Insights]]></category>
		<category><![CDATA[Oracle Insights]]></category>

		<guid isPermaLink="false">http://www.talentpointllc.com/?p=36</guid>
		<description><![CDATA[I&#8217;ve never really used the built in APEX trees, but I had a need to display some hierarchical data and wanted some added functionality over what the built in apex trees provide. I went out looking for interesting JQuery plugins. The one I settled upon was JSTree . I like that it has a customizable [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve never really used the built in APEX trees, but I had a need to display some hierarchical data and wanted some added functionality<span id="more-36"></span> over what the built in apex trees provide. I went out looking for interesting JQuery plugins. The one I settled upon was <a href="http://www.jstree.com/">JSTree </a>. I like that it has a customizable context menu among other things.  Well this is just an example and can be made more generic&#8230;I&#8217;ve hard-coded a couple of things for the purposes of this demo but this should get you started. Here&#8217;s the demo: <a href="http://tryapexnow.com/apex/f?p=9155:2">http://tryapexnow.com/apex/f?p=9155:2</a></p>
<p>For this example I am organizing different types of samples in a case. Here are the tables.</p>
<pre class="brush: sql; title: ; notranslate">
SQL&gt; desc sample_types;
  ID                                        NOT NULL NUMBER(38)
 DESCRIPTION                                        VARCHAR2(50)
 ...
 TREE_IMAGE                                         VARCHAR2(250)

SQL&gt; desc samples;

ID                                        NOT NULL NUMBER(38)
CASE_ID                                   NOT NULL NUMBER(38)
SAMPLE_TYPE_ID                            NOT NULL NUMBER(38)
...
PARENT_ID                                          NUMBER(38)

SQL&gt; SELECT s.id, s.parent_id, level
      FROM samples s
      WHERE case_id = :CASE_ID
      START WITH parent_id = 0
      CONNECT BY PRIOR s.id = s.parent_id;

        ID  PARENT_ID      LEVEL
---------- ---------- ----------
      1067          0          1
      1068       1067          2
      1076       1068          3
      1071       1067          2
      1077       1071          3
      1078       1077          4
      1073       1067          2
      1072          0          1

8 rows selected.
</pre>
<p>Note that I made all parent samples have a parent_id of zero.</p>
<p>The author of JSTree <a href="http://vakata.com/en/">Ivan Bozhanov</a> has done a great job with providing both documentation and examples of how to setup the tree component.</p>
<p>Among the choices of data source, I chose to implement the source as a JSON object, and I wrote a function to output my connect by query in the format that jsTree expects.</p>
<pre class="brush: sql; title: ; notranslate">
create or replace function get_samples_tree(p_case_id_in cases.id%TYPE) RETURN VARCHAR2 AS
      l_json         VARCHAR2(32767);
      l_loop_counter NUMBER(5);
   BEGIN
      l_json := '[';
      FOR i IN (SELECT rownum,
                       s.id,
                       s.parent_id,
                       LEVEL,
                       lead(LEVEL, 1, 0) over(ORDER BY rownum) lead,
                       st.tree_image,
                       st.id type_id
                  FROM samples s, sample_types st
                 WHERE case_id = p_case_id_in
                   AND s.sample_type_id = st.id
                 START WITH parent_id = 0
                CONNECT BY PRIOR s.id = s.parent_id)
      LOOP
         l_json := l_json || '{ &quot;attributes&quot;: ';
         l_json := l_json || '{ &quot;id&quot; : ';
         l_json := l_json || '&quot;stree_' || i.id || '&quot;';
         l_json := l_json || ', &quot;rel&quot; : ';
         l_json := l_json || '&quot;' || i.type_id || '&quot;';
         l_json := l_json || '}, ';
         l_json := l_json || '&quot;data&quot;:{ &quot;title&quot; : &quot;';
         l_json := l_json || i.id || '&quot;, &quot;icon&quot; : &quot;/i/' || i.tree_image ||
                   '&quot;, &quot;attributes&quot; : { &quot;href&quot; : &quot;f?p=' || v('APP_ID') ||
                   ':3:' || v('APP_SESSION') ||
                   '::NO::P3_SAMPLE_ID:'|| i.id ||
                   '&quot; }}';
         --  l_loop_counter := i.LEVEL - i.lead;

         IF i.lead &gt; i.LEVEL
         THEN
            l_json := l_json || ', &quot;children&quot;: [ ';
         ELSE
            l_json := l_json || '},';
         END IF;
         IF i.lead &lt; i.LEVEL
         THEN
            l_loop_counter := i.LEVEL - i.lead;
            FOR j IN 1 .. l_loop_counter
            LOOP
               l_json := TRIM(trailing ',' FROM l_json);
               l_json := l_json || ' ] ';
               IF (i.lead &lt;&gt; 0 OR j &lt;&gt; l_loop_counter)
               THEN
                  l_json := l_json || '},';
               END IF;
            END LOOP;
         END IF;
      END LOOP;

      RETURN l_json;
   EXCEPTION
      WHEN OTHERS THEN
         RAISE;
   END get_samples_tree;
</pre>
<p>The on-demand process is straight-forward enough:</p>
<pre class="brush: sql; title: ; notranslate">
declare
l_tree varchar2(32767);
begin
l_tree := get_samples_tree(wwv_flow.g_x01);
htp.prn(l_tree);
end;
</pre>
<p>jsTree is quite flexible. In the javascript below, I&#8217;m using asynchronous json to get the data. In order to pass the values to the URL in the data.opts section, you use the callback &#8220;beforedata&#8221;</p>
<pre class="brush: jscript; title: ; notranslate">
function populateSamplesTree(pCaseId, pRegionId) {

jQuery(&quot;#&quot;+pRegionId).tree({
    data  : {
    type  : &quot;json&quot;,
    async : true,
    opts  : {
       method: &quot;POST&quot; ,
url:&quot;wwv_flow.show&quot;
	    }
	 },
  callback : {
  onchange : function (NODE,TREE_OBJ) {
  document.location.href = $(NODE).children(&quot;a:eq(0)&quot;).attr(&quot;href&quot;); },
  beforedata : function(NODE, TREE_OBJ) {
       return {
        p_flow_id:jQuery('#pFlowId').val(),
        p_flow_step_id:jQuery('#pFlowStepId').val(),
        p_instance:jQuery('#pInstance').val(),
        x01:$v(pCaseId),
        p_request:&quot;APPLICATION_PROCESS=GET_SAMPLE_TREE&quot; }
     }
  }
});
//jQuery.tree.reference( pRegionId).open_all();
}
</pre>
<p>Another way to accomplish the same thing would be to use a &#8220;standard&#8221; on demand call for APEX, and parse the result as a json object. In order to do that you need the json javascript library from http://www.json.org/</p>
<pre class="brush: jscript; title: ; notranslate">
function populateSamplesTree2(pCaseId, pRegionId) {
var get = new htmldb_Get(null,$v('pFlowId'), 'APPLICATION_PROCESS=GET_SAMPLE_TREE', 0);
 get.addParam('x01', $v(pCaseId));
gReturn = get.get();
var jsonobj = JSON.parse(gReturn);
apex.jQuery(&quot;#&quot;+pRegionId).tree({
  data  : {
    type  : &quot;json&quot;,
    opts  : {
      static :   jsonobj }
  },
  callback : {
  onchange : function (NODE,TREE_OBJ) {
  document.location.href = $(NODE).children(&quot;a:eq(0)&quot;).attr(&quot;href&quot;);
                               }
                          }

});
}
</pre>
<p>I could store the context menu config in the database as well and generate the JSON for it, but as this is just for example, I&#8217;ve left that out.  You can easily do dynamic context menus. I&#8217;ve included the type in the tree and you can see I&#8217;ve hardcoded in Sample Type 1 in the menu option for &#8220;split&#8221;.</p>
<pre class="brush: jscript; title: ; notranslate">
function populateSamplesTree3(pCaseId, pRegionId) {
var get = new htmldb_Get(null,$v('pFlowId'), 'APPLICATION_PROCESS=GET_SAMPLE_TREE', 0);
 get.addParam('x01', $v(pCaseId));
gReturn = get.get();
var jsonobj = JSON.parse(gReturn);
apex.jQuery(&quot;#&quot;+pRegionId).tree({
  data : {
    type : &quot;json&quot;,
    opts : {
        static : jsonobj
    }
},
callback : {
    onchange : function (NODE,
    TREE_OBJ) {
        document.location.href = $(NODE).children(&quot;a:eq(0)&quot;).attr(&quot;href&quot;);
    }
},
plugins : {
    contextmenu : {
        items : {
            create : false,
            rename : false,
            remove : false,
            split : {
                label : &quot;Split&quot;,
                icon : &quot;&quot;,
                visible : function (NODE,
                TREE_OBJ) {
                    if (TREE_OBJ.get_type(NODE) != &quot;1&quot;) {
                        return -1
                    } ;
                },
                action : function (NODE,
                TREE_OBJ) {
                    // Just a demo of the arguments
alert('&quot;' + NODE.children(&quot;a&quot;).text() + '&quot; from &quot;' + TREE_OBJ.container.attr(&quot;id&quot;) + '&quot;');
                }
            },
            type_2 : {
                label : &quot;Another Type&quot;,
                icon : &quot;&quot;,
                visible : true,
                action : function (NODE,
                TREE_OBJ) {
                    // Just a demo of the arguments
alert('&quot;' + NODE.children(&quot;a&quot;).text() + '&quot; from &quot;' + TREE_OBJ.container.attr(&quot;id&quot;) + '&quot;');
                }
            }
        }
    }
}
});
}
</pre>
<p>Now I can just create the regions on the page with source of</p>
<pre class="brush: plain; title: ; notranslate">
&lt;div id=&quot;samples_tree&quot;&gt;&lt;/div&gt;

&lt;div id=&quot;samples_tree2&quot;&gt;&lt;/div&gt;

&lt;div id=&quot;samples_tree3&quot;&gt;&lt;div&gt;
</pre>
<p>Now go time:</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot;&gt;
apex.jQuery(document).ready(function(){
   populateSamplesTree('P2_CASE_ID', 'samples_tree');
   populateSamplesTree2('P2_CASE_ID', 'samples_tree2');
populateSamplesTree3('P2_CASE_ID', 'samples_tree3');
});
&lt;/script&gt;
</pre>
<p>I&#8217;ve left out icons, which are easy to add, and a host of other things. If I ever get some more time I&#8217;d like to make this more generic and reusable.</p>
<p>Check out a demo here:<br />
<a href="http://tryapexnow.com/apex/f?p=9155:2">http://tryapexnow.com/apex/f?p=9155:2</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.talentpointllc.com/blog/adding-time-to-jquery-datepicker-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

