<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1718757098974267127</id><updated>2025-06-11T16:38:44.802+01:00</updated><category term="Oracle"/><category term="SQL"/><category term="Customisations"/><category term="Documentum"/><category term="Personalisations"/><category term="Concurrent Request"/><category term="Forms Personalization"/><category term="OA Framework"/><category term="PL/SQL"/><category term="Payables"/><category term="Advanced Collections"/><category term="DQL"/><category term="Discoverer"/><category term="Flex Value"/><category term="Java Method"/><category term="Lifecycles"/><category term="Security"/><category term="Security ACL"/><category term="Site Caching Services"/><category term="Subscriptions"/><category term="TBO"/><category term="UWQ"/><category term="Universal Work Queue"/><category term="Web ADI"/><title type='text'>Extending App&#39;s</title><subtitle type='html'>Integrating Enterprise Applications with Business Requirements</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://extendingapps.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1718757098974267127/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://extendingapps.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>11</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1718757098974267127.post-8825117817690669375</id><published>2013-04-03T10:45:00.000+01:00</published><updated>2013-04-03T10:58:15.481+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Customisations"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle"/><category scheme="http://www.blogger.com/atom/ns#" term="PL/SQL"/><category scheme="http://www.blogger.com/atom/ns#" term="SQL"/><category scheme="http://www.blogger.com/atom/ns#" term="Web ADI"/><title type='text'>Oracle: Uploading Read-Only columns in ADI</title><content type='html'>&lt;span style=&quot;font-family: inherit;&quot;&gt;Standard functionality in Oracle Web Applications Desktop Integrator does not allow uploading columns marked as read-only; this is highlighted in Bug 6607618.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;The following customisation can be used as a workaround, however as it requires direct modification of underlying tables it is not supported nor recommended by Oracle (and don&#39;t blame me if it goes wrong!).&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;In the application do NOT set the columns as read-only, instead, after defining the Integrator and Content identify the CONTENT_CODE using the following:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;SELECT bint.user_name&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , bint.integrator_code&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , bcon.content_code&lt;br /&gt;FROM&amp;nbsp;&amp;nbsp; bne_integrators_tl bint&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , bne_contents_b bcon&lt;br /&gt;WHERE&amp;nbsp; bint.integrator_code = bcon.integrator_code&lt;br /&gt;AND&amp;nbsp;&amp;nbsp;&amp;nbsp; bint.user_name = &amp;amp;IntegratorName;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Then, update the READ_ONLY_FLAG to ‘Y’ on the table BNE_CONTENT_COLS_B for the columns you want to be read-only (based on the CONTENT_CODE identified in the above script).&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Finally, clear the BNE cache (refer to Metalink Note 1075840.1).&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://extendingapps.blogspot.com/feeds/8825117817690669375/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extendingapps.blogspot.com/2013/04/oracle-uploading-read-only-columns-in.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1718757098974267127/posts/default/8825117817690669375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1718757098974267127/posts/default/8825117817690669375'/><link rel='alternate' type='text/html' href='http://extendingapps.blogspot.com/2013/04/oracle-uploading-read-only-columns-in.html' title='Oracle: Uploading Read-Only columns in ADI'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1718757098974267127.post-772704394629410333</id><published>2012-01-13T19:06:00.000+00:00</published><updated>2012-01-13T19:06:47.448+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Concurrent Request"/><category scheme="http://www.blogger.com/atom/ns#" term="Customisations"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle"/><category scheme="http://www.blogger.com/atom/ns#" term="PL/SQL"/><category scheme="http://www.blogger.com/atom/ns#" term="SQL"/><title type='text'>Oracle: Submitting BI Publisher Reports using PL/SQL</title><content type='html'>&lt;span style=&quot;font-family: inherit;&quot;&gt;This simple example shows how to submit concurrent programs that use BI Publisher to render the output.Before calling the fnd_request.submit_request procedure to create the concurrent request the BI Publisher template must be assigned, to do this use the seeded fnd_request.add_layout procedure:&lt;/span&gt;&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
declare&lt;br /&gt;
&amp;nbsp; xml_layout BOOLEAN;&lt;br /&gt;
&amp;nbsp; jreq_id NUMBER;&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
&lt;br /&gt;
xml_layout := fnd_request.add_layout (&#39;XXAPPS&#39;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;, &#39;XXAPPS_TEMPLATE_CODE&#39;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;, &#39;en&#39;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;, &#39;00&#39;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;, &#39;PDF&#39;);&lt;br /&gt;
&lt;br /&gt;
jreq_id := fnd_request.submit_request (&#39;XXAPPS&#39;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;, &#39;XXAPPS_PROGRAM_CODE&#39;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;, &#39;&#39;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;, &#39;&#39;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;, FALSE&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;, &#39;PARAM1&#39;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;, &#39;PARAM2&#39;);&lt;br /&gt;
&lt;br /&gt;
end;&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;**&lt;strong&gt;XXAPPS&lt;/strong&gt; : Application Short Code&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;**&lt;strong&gt;XXAPPS_TEMPLATE_CODE&lt;/strong&gt; : Template Code (as defined in XML Publisher Administrator)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;**&lt;strong&gt;en&lt;/strong&gt; : Template Language&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;**&lt;strong&gt;00&lt;/strong&gt; : Template Territory&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;**&lt;strong&gt;PDF&lt;/strong&gt; : Output Format&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;**&lt;strong&gt;XXAPPS_PROGRAM_CODE&lt;/strong&gt; : Concurrent Program Short Code&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;**&lt;strong&gt;PARAM1/2&lt;/strong&gt; : Concurrent Program Parameters&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://extendingapps.blogspot.com/feeds/772704394629410333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extendingapps.blogspot.com/2012/01/oracle-submitting-bi-publisher-reports.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1718757098974267127/posts/default/772704394629410333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1718757098974267127/posts/default/772704394629410333'/><link rel='alternate' type='text/html' href='http://extendingapps.blogspot.com/2012/01/oracle-submitting-bi-publisher-reports.html' title='Oracle: Submitting BI Publisher Reports using PL/SQL'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1718757098974267127.post-6984501707009887511</id><published>2011-09-05T10:14:00.004+01:00</published><updated>2011-09-08T08:41:30.701+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Customisations"/><category scheme="http://www.blogger.com/atom/ns#" term="Forms Personalization"/><category scheme="http://www.blogger.com/atom/ns#" term="OA Framework"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle"/><category scheme="http://www.blogger.com/atom/ns#" term="Payables"/><category scheme="http://www.blogger.com/atom/ns#" term="Personalisations"/><category scheme="http://www.blogger.com/atom/ns#" term="SQL"/><title type='text'>Oracle: Adding a message box with Form Personalisations</title><content type='html'>The seeded Payment Overview form (APXPWALL) in Oracle Payables shows limited details relating to the payee, in this example we will make the payee bank details visible on this form.&lt;br /&gt;
&lt;br /&gt;
We could use Custom PLL to add additional fields to the form, however the simpler approach is to use Form Personalisations to display the details in a Pop-up message box.&lt;br /&gt;
&lt;br /&gt;
From the Payment Overview form select Form Personalisations and create an action that will enable a new Menu option:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Trigger Event:&lt;/b&gt; WHEN-NEW-FORM-INSTANCE&lt;br /&gt;
&lt;b&gt;Action Type:&lt;/b&gt; Menu&lt;br /&gt;
&lt;b&gt;Menu Entry:&lt;/b&gt; SPECIAL3&lt;br /&gt;
&lt;b&gt;Menu Label:&lt;/b&gt; Payment Details&lt;br /&gt;
&lt;br /&gt;
Then create an action that will display the message box:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Trigger Event:&lt;/b&gt; SPECIAL3&lt;br /&gt;
&lt;b&gt;Action Type:&lt;/b&gt; Message&lt;br /&gt;
&lt;b&gt;Message Type:&lt;/b&gt; Show&lt;br /&gt;
&lt;b&gt;Message Text:&lt;/b&gt; =SELECT xxapps_forms_util_pkg.inv_payee_bank_details(:PAYMENT.CHECK_ID,:PAYMENT.PAYMENT_METHOD) FROM dual&lt;br /&gt;
&lt;br /&gt;
The above action calls a function in a custom package to return the formatted details, the function is defined as:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
FUNCTION inv_payee_bank_details (p_check_id IN NUMBER&lt;br /&gt;
, p_pay_method IN VARCHAR2)&lt;br /&gt;
RETURN VARCHAR2&lt;br /&gt;
IS&lt;br /&gt;
v_payee_details VARCHAR2 (250);&lt;br /&gt;
BEGIN&lt;br /&gt;
IF p_pay_method = &#39;Electronic&#39;&lt;br /&gt;
THEN&lt;br /&gt;
SELECT    &#39;Bank Name: &#39;&lt;br /&gt;
|| xba.bank_name&lt;br /&gt;
|| CHR (10)&lt;br /&gt;
|| &#39;Sort Code: &#39;&lt;br /&gt;
|| xba.branch_number_fmt&lt;br /&gt;
|| CHR (10)&lt;br /&gt;
|| &#39;Account Num: &#39;&lt;br /&gt;
|| xba.bank_account_num&lt;br /&gt;
|| CHR (10)&lt;br /&gt;
|| &#39;Account Name: &#39;&lt;br /&gt;
|| xba.bank_account_name&lt;br /&gt;
INTO   v_payee_details&lt;br /&gt;
FROM   xxapps_iby_bank_accounts_v xba&lt;br /&gt;
, ap_checks_all aca&lt;br /&gt;
WHERE  aca.external_bank_account_id = xba.ext_bank_account_id&lt;br /&gt;
AND    aca.check_id = p_check_id;&lt;br /&gt;
ELSE&lt;br /&gt;
v_payee_details := &#39;Paid by Cheque&#39;;&lt;br /&gt;
END IF;&lt;br /&gt;
&lt;br /&gt;
RETURN v_payee_details;&lt;br /&gt;
EXCEPTION&lt;br /&gt;
WHEN OTHERS&lt;br /&gt;
THEN&lt;br /&gt;
RETURN &#39;No Data Found!&#39;;&lt;br /&gt;
END inv_payee_bank_details;&lt;br /&gt;
&lt;/CODE&gt;&lt;br /&gt;
&lt;br /&gt;
Now, from within the Payment Overview form select Tools &gt; Payment Details to view the message&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDpqagCXY4wYet29naSII3cwkDQFsckNOW6sCqYXyCBW-E8L02W7JaVvhFkP3ZdWsDK4uOY7y-Rgefgi3E00ATqsfcewuqTbdfOx6qdI1rSaQmXZJN9qQxSU9OvkK9ArYfrk8tRfCdVchA/s1600/2011-09-05_100143.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear:left; float:left;margin-right:1em; margin-bottom:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;214&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDpqagCXY4wYet29naSII3cwkDQFsckNOW6sCqYXyCBW-E8L02W7JaVvhFkP3ZdWsDK4uOY7y-Rgefgi3E00ATqsfcewuqTbdfOx6qdI1rSaQmXZJN9qQxSU9OvkK9ArYfrk8tRfCdVchA/s320/2011-09-05_100143.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://extendingapps.blogspot.com/feeds/6984501707009887511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extendingapps.blogspot.com/2011/09/oracle-adding-message-box-with-form.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1718757098974267127/posts/default/6984501707009887511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1718757098974267127/posts/default/6984501707009887511'/><link rel='alternate' type='text/html' href='http://extendingapps.blogspot.com/2011/09/oracle-adding-message-box-with-form.html' title='Oracle: Adding a message box with Form Personalisations'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDpqagCXY4wYet29naSII3cwkDQFsckNOW6sCqYXyCBW-E8L02W7JaVvhFkP3ZdWsDK4uOY7y-Rgefgi3E00ATqsfcewuqTbdfOx6qdI1rSaQmXZJN9qQxSU9OvkK9ArYfrk8tRfCdVchA/s72-c/2011-09-05_100143.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1718757098974267127.post-9102639523847248979</id><published>2011-08-04T15:35:00.000+01:00</published><updated>2011-08-04T15:35:51.031+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Concurrent Request"/><category scheme="http://www.blogger.com/atom/ns#" term="Customisations"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle"/><category scheme="http://www.blogger.com/atom/ns#" term="Personalisations"/><category scheme="http://www.blogger.com/atom/ns#" term="Security"/><category scheme="http://www.blogger.com/atom/ns#" term="SQL"/><title type='text'>Oracle: Concurrent Request Security</title><content type='html'>In previous releases of Oracle concurrent request access was controlled by the use of profile values, however in Release 12 access is controlled by the use of Roles. In these examples we will create two Roles; one which grants access to the output of concurrent programs based on Responsibility, and one which grants access to all outputs (for use by System Administrators).&lt;br /&gt;
&lt;br /&gt;
First up we will create the Role for Responsibility based security.&lt;br /&gt;
&lt;br /&gt;
Within the Functional Developer responsibility search for the Object named &quot;Concurrent Requests&quot;, then select the &#39;Object Instance Sets&#39; tab and create a new Instance Set:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Name&lt;/b&gt;: XXAPPS Responsibility Concurrent Access&lt;br /&gt;
&lt;b&gt;Code&lt;/b&gt;: XXAPPS_RESP_CR_ACCESS&lt;br /&gt;
&lt;b&gt;Description&lt;/b&gt;: Responsibility Concurrent Access&lt;br /&gt;
&lt;b&gt;Predicate&lt;/b&gt;: &lt;br /&gt;
&lt;code&gt;&amp;TABLE_ALIAS.request_id IN ( SELECT request_id FROM fnd_concurrent_requests WHERE concurrent_program_id IN (SELECT fru.request_unit_id FROM fnd_responsibility_vl frv , fnd_request_groups frg , fnd_request_group_units fru WHERE frv.request_group_id = frg.request_group_id AND frg.request_group_id = fru.request_group_id AND fru.request_unit_type IN (&#39;P&#39;, &#39;S&#39;) AND frv.responsibility_id = fnd_global.resp_id))&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
To assign this to all users create a new Grant:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Name&lt;/b&gt;: XXAPPS Responsibility Concurrent Access&lt;br /&gt;
&lt;b&gt;Description&lt;/b&gt;: Access to view all concurrent requests in current responsibility&lt;br /&gt;
&lt;b&gt;Grantee Type&lt;/b&gt;: All Users&lt;br /&gt;
&lt;b&gt;Data Security &gt; Object&lt;/b&gt;: Concurrent Requests&lt;br /&gt;
&lt;b&gt;Data Context Type&lt;/b&gt;: Instance Set (select the Instance Set XXAPPS Responsibility Concurrent Access)&lt;br /&gt;
&lt;b&gt;Permission Set&lt;/b&gt;: Request Operations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, create a new Instance Set for the System Administrator access:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Name&lt;/b&gt;: XXAPPS System Administrator Concurrent Access&lt;br /&gt;
&lt;b&gt;Code&lt;/b&gt;: XXAPPS_SYS_ADMIN_CR_ACCESS&lt;br /&gt;
&lt;b&gt;Description&lt;/b&gt;: System Administrator Concurrent Access &lt;br /&gt;
&lt;b&gt;Predicate&lt;/b&gt;: &lt;br /&gt;
&lt;code&gt;&amp;TABLE_ALIAS.request_id IN (SELECT request_id FROM fnd_concurrent_requests)&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
This Instance Set will be assigned to named users, so we need to create a Role (within the User Management responsibility):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Role:-&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Category&lt;/b&gt;: Miscellaneous&lt;br /&gt;
&lt;b&gt;Role Code&lt;/b&gt;: XXAPPS_SYS_ADMIN_CR_ACCESS&lt;br /&gt;
&lt;b&gt;Display Name&lt;/b&gt;: XXAPPS System Administrator Concurrent Access&lt;br /&gt;
&lt;b&gt;Description&lt;/b&gt;: Access to view all concurrent requests&lt;br /&gt;
&lt;b&gt;Application&lt;/b&gt;: XXAPPS Application&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Grant:-&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Name&lt;/b&gt;: XXAPPS System Administrator Concurrent Access&lt;br /&gt;
&lt;b&gt;Description&lt;/b&gt;: Access to view all concurrent requests&lt;br /&gt;
&lt;b&gt;Data Security &gt; Object&lt;/b&gt;: Concurrent Requests&lt;br /&gt;
&lt;b&gt;Data Context Type&lt;/b&gt;: Instance Set (select the Instance Set XXAPPS System Administrator Concurrent Access)&lt;br /&gt;
&lt;b&gt;Permission Set&lt;/b&gt;: Request Operations</content><link rel='replies' type='application/atom+xml' href='http://extendingapps.blogspot.com/feeds/9102639523847248979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extendingapps.blogspot.com/2011/08/oracle-concurrent-request-security.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1718757098974267127/posts/default/9102639523847248979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1718757098974267127/posts/default/9102639523847248979'/><link rel='alternate' type='text/html' href='http://extendingapps.blogspot.com/2011/08/oracle-concurrent-request-security.html' title='Oracle: Concurrent Request Security'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1718757098974267127.post-5489696463351723874</id><published>2011-06-21T10:45:00.003+01:00</published><updated>2011-07-07T13:22:48.888+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Advanced Collections"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle"/><category scheme="http://www.blogger.com/atom/ns#" term="Universal Work Queue"/><category scheme="http://www.blogger.com/atom/ns#" term="UWQ"/><title type='text'>Oracle: Universal Work Queue – Advanced Collections</title><content type='html'>The Universal Work Queue can be integrated with many other Oracle applications, in this example we will be using it to display Task information generated from Oracle Advanced Collections.&lt;br /&gt;
&lt;br /&gt;
Out of the box the Universal Work Queue has a number of nodes that display data relating to Advanced Collections and Delinquencies, however we have a requirement to categorise the Tasks based on Customer Attributes and Collector information.&lt;br /&gt;
&lt;br /&gt;
The first step is to create the Lookup Types that will be used, for this example the custom Lookup Type name that has been created is &quot;XXAPPS IEU Node Labels&quot; (XXAPPS_IEU_NODE_LABELS”). The Lookup Code &quot;Tasks : Customer Category&quot; (XXAPPS_IEU_NEW_TAKS) has been created within this Lookup Type.&lt;br /&gt;
&lt;br /&gt;
Lookup Type:&lt;br /&gt;
&lt;b&gt;Name&lt;/b&gt;  XXAPPS IEU Node Labels&lt;br /&gt;
&lt;b&gt;Code&lt;/b&gt;  XXAPPS_IEU_NODE_LABELS&lt;br /&gt;
&lt;b&gt;Description&lt;/b&gt; Node Labels for Custom UWQ Nodes&lt;br /&gt;
&lt;b&gt;Application&lt;/b&gt; XXAPPS Application&lt;br /&gt;
&lt;b&gt;Access&lt;/b&gt;  Extensible&lt;br /&gt;
Lookup Codes:&lt;br /&gt;
&lt;b&gt;Code&lt;/b&gt;        XXAPPS_IEU_NEW_TASKS&lt;br /&gt;
&lt;b&gt;Description&lt;/b&gt; Tasks : Customer Category     &lt;br /&gt;
&lt;br /&gt;
The next step is to create the database views that will be used by the custom node, in this example the view is based on the seeded IEU_UWQ_TASKS_V view with additional fields added to return the Customer Attribute information. Next, create the Spreadtable Metadata Definition (within the CRM Administration responsibility), for this example the Datasource Name is XXAPPS_IEU_UWQ_TASKS and the referenced Relational View is XXAPPS_IEU_UWQ_TASKS_V.&lt;br /&gt;
&lt;br /&gt;
Within the CRM Administrator the Work Provider can be created based on the configuration completed so far:&lt;br /&gt;
&lt;b&gt;Application Name&lt;/b&gt;  XXAPPS Application&lt;br /&gt;
&lt;b&gt;Node Name Lookup Type&lt;/b&gt;  XXAPPS_IEU_NODE_LABELS&lt;br /&gt;
&lt;b&gt;Node Name Lookup Code&lt;/b&gt;  XXAPPS_IEU_NEW_TASKS&lt;br /&gt;
&lt;b&gt;Node Name Lookup Meaning&lt;/b&gt; Tasks&lt;br /&gt;
&lt;b&gt;Enumerator UUID&lt;/b&gt;  XXAPPS_TASK_NODE&lt;br /&gt;
&lt;b&gt;Registration Type&lt;/b&gt;  Non Media&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Enumerator Procedure&lt;/b&gt;  XXAPPS_iex_util_pkg.enumerate_group_uwq_nodes&lt;br /&gt;
&lt;b&gt;Refresh Procedure&lt;/b&gt;  XXAPPS_iex_util_pkg.refresh_group_uwq_nodes&lt;br /&gt;
&lt;b&gt;View Name&lt;/b&gt;         XXAPPS_IEU_UWQ_TASKS_V&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Enumerator and Refresh Procedures defined above reference PL/SQL packages that build the Nodes and populate the UWQ with the relevant data.&lt;br /&gt;
&lt;br /&gt;
The XXAPPS_IEX_UTIL_PKG is defined as:&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;
CREATE OR REPLACE PACKAGE XXAPPS_iex_util_pkg
AS

PROCEDURE enumerate_group_uwq_nodes (P_RESOURCE_ID IN NUMBER
, P_LANGUAGE IN VARCHAR2
, P_SOURCE_LANG IN VARCHAR2
, P_SEL_ENUM_ID IN NUMBER);

PROCEDURE refresh_group_uwq_nodes (P_RESOURCE_ID IN        NUMBER
, p_node_id IN            NUMBER
, P_COUNT      OUT NOCOPY NUMBER);



END XXAPPS_iex_util_pkg;
/

CREATE OR REPLACE PACKAGE BODY XXAPPS_iex_util_pkg
AS


PROCEDURE enumerate_group_uwq_nodes (P_RESOURCE_ID IN NUMBER
, P_LANGUAGE IN VARCHAR2
, P_SOURCE_LANG IN VARCHAR2
, P_SEL_ENUM_ID IN NUMBER)
AS
l_node_label VARCHAR2 (200);
uwq_ld_list IEU_PUB.EnumeratorDataRecordList;
l_bind_list IEU_PUB.BindVariableRecordList;
l_node_counter NUMBER;
v_org_id  NUMBER := iex_org_override;
BEGIN
SAVEPOINT start_node_enumeration;

l_node_counter := 0;

uwq_ld_list (l_node_counter).NODE_LABEL := &#39;Tasks : Customer Category&#39;;
uwq_ld_list (l_node_counter).VIEW_NAME := &#39;XXAPPS_IEU_UWQ_TASKS_V&#39;;
uwq_ld_list (l_node_counter).DATA_SOURCE := &#39;XXAPPS_IEU_UWQ_TASKS&#39;;
uwq_ld_list (l_node_counter).MEDIA_TYPE_ID := &#39;&#39;;
uwq_ld_list (l_node_counter).WHERE_CLAUSE :=
&#39;CUSTOMER_ORG_ID = &#39; || v_org_id;
uwq_ld_list (l_node_counter).NODE_TYPE := 0;
uwq_ld_list (l_node_counter).HIDE_IF_EMPTY := &#39;&#39;;
uwq_ld_list (l_node_counter).NODE_DEPTH := 1;

DECLARE
CURSOR c1
IS
SELECT   customer_type
FROM     (SELECT lookup_code customer_type
FROM   ar_lookups
WHERE  lookup_type = &#39;ADDRESS_CATEGORY&#39;
UNION
SELECT   &#39;GENERAL&#39; FROM DUAL)
WHERE    EXISTS
(SELECT &#39;x&#39;
FROM   jtf_tasks_b tasks_b
, hz_cust_site_uses_all casu
, hz_cust_acct_sites_all cas
WHERE  casu.cust_acct_site_id = cas.cust_acct_site_id
AND    casu.site_use_id = tasks_b.source_object_id
AND    TRUNC (
NVL (tasks_b.planned_start_date, SYSDATE)) &lt;=
                                   SYSDATE
                         AND    NVL (tasks_b.deleted_flag, &#39;N&#39;) = &#39;N&#39;
                         AND    tasks_b.open_flag = &#39;Y&#39;
                         AND    tasks_b.entity = &#39;TASK&#39;
                         AND    cas.org_id = v_org_id
                         AND    NVL (
                                   NVL (cas.customer_category_code
                                      , UPPER (cas.attribute_category))
                                 , &#39;GENERAL&#39;) = customer_type
                         AND    tasks_b.owner_type_code = &#39;RS_GROUP&#39;)
            ORDER BY 1;
      BEGIN
         FOR x IN c1
         LOOP
            l_node_counter := l_node_counter + 1;

            uwq_ld_list (l_node_counter).NODE_LABEL := x.customer_type;
            uwq_ld_list (l_node_counter).VIEW_NAME := &#39;XXAPPS_IEU_UWQ_TASKS_V&#39;;
            uwq_ld_list (l_node_counter).DATA_SOURCE := &#39;XXAPPS_IEU_UWQ_TASKS&#39;;
            uwq_ld_list (l_node_counter).MEDIA_TYPE_ID := &#39;&#39;;
            uwq_ld_list (l_node_counter).WHERE_CLAUSE :=
                  &#39;CUSTOMER_TYPE = &#39;
               || &#39;&#39;&#39;&#39;
               || x.customer_type
               || &#39;&#39;&#39;&#39;
               || &#39; and CUSTOMER_ORG_ID = &#39;
               || v_org_id;
            uwq_ld_list (l_node_counter).NODE_TYPE := 0;
            uwq_ld_list (l_node_counter).HIDE_IF_EMPTY := &#39;Y&#39;;
            uwq_ld_list (l_node_counter).NODE_DEPTH := 2;
         END LOOP;
      END;

      IEU_PUB.ADD_UWQ_NODE_DATA (P_RESOURCE_ID, P_SEL_ENUM_ID, uwq_ld_list);
   EXCEPTION
      WHEN OTHERS
      THEN
         ROLLBACK TO start_node_enumeration;
         RAISE;
   END enumerate_group_uwq_nodes;


   PROCEDURE refresh_group_uwq_nodes (p_resource_id IN        NUMBER
                                    , p_node_id IN            NUMBER
                                    , p_count      OUT NOCOPY NUMBER)
   IS
      sql_stmt  VARCHAR2 (500);
      l_view_name VARCHAR2 (500);
      l_label   VARCHAR2 (500);
      l_where   VARCHAR2 (500);
      l_depth   NUMBER;
      v_count   NUMBER;
      v_org_id  NUMBER := iex_org_override;
   BEGIN
      BEGIN
         SELECT where_clause
              , node_label
              , node_depth
         INTO   l_where
              , l_label
              , l_depth
         FROM   IEU_UWQ_SEL_RT_NODES
         WHERE  node_id = p_node_id
         AND    resource_id = p_resource_id
         AND    data_source = &#39;XXAPPS_IEU_UWQ_TASKS&#39;;
      EXCEPTION
         WHEN NO_DATA_FOUND
         THEN
            l_where     := NULL;
            l_label     := NULL;
      END;


      IF l_depth = 1
      THEN
         SELECT COUNT ( * )
         INTO   p_count
         FROM   jtf_tasks_b tasks_b
              , hz_cust_site_uses_all casu
              , hz_cust_acct_sites_all cas
         WHERE  casu.cust_acct_site_id = cas.cust_acct_site_id
         AND    casu.site_use_id = tasks_b.source_object_id
         AND    NVL (tasks_b.deleted_flag, &#39;N&#39;) = &#39;N&#39;
         AND    tasks_b.open_flag = &#39;Y&#39;
         AND    tasks_b.entity = &#39;TASK&#39;
         AND    cas.org_id = v_org_id
         AND    tasks_b.owner_type_code = &#39;RS_GROUP&#39;
         AND    TRUNC (NVL (tasks_b.planned_start_date, SYSDATE)) &lt;= SYSDATE;
      ELSE
         SELECT COUNT ( * )
         INTO   p_count
         FROM   jtf_tasks_b tasks_b
              , hz_cust_site_uses_all casu
              , hz_cust_acct_sites_all cas
         WHERE  casu.cust_acct_site_id = cas.cust_acct_site_id
         AND    casu.site_use_id = tasks_b.source_object_id
         AND    NVL (tasks_b.deleted_flag, &#39;N&#39;) = &#39;N&#39;
         AND    tasks_b.open_flag = &#39;Y&#39;
         AND    tasks_b.entity = &#39;TASK&#39;
         AND    cas.org_id = v_org_id
         AND    NVL (
                   NVL (cas.customer_category_code
                      , UPPER (cas.attribute_category))
                 , &#39;GENERAL&#39;) = l_label
         AND    tasks_b.owner_type_code = &#39;RS_GROUP&#39;
         AND    TRUNC (NVL (tasks_b.planned_start_date, SYSDATE)) &lt;= SYSDATE;
      END IF;
   END refresh_group_uwq_nodes;
END XXAPPS_iex_util_pkg;
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
Now, within System Administrator enable the Profile Option “IEU: Queue: Tasks : Customer Category” (linked to the UWQ Work Provider) and the nodes will be visible within the Universal Work Queue.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_-1WCkzmwQJt335F_oai0z2lJlRYzm3ExSzc7FDwmMyBuD7_Oba-U9dk5O0nevxBYSqU2nmYbeC3CmJ15CmW8-Y23-BAOaKLtqwsszdNYEcTU3ncc2oZuNh50FvS6uLzImiF8N5Kwtlze/s1600/2011-07-05_131500.JPG&quot; imageanchor=&quot;1&quot; style=&quot;clear:left; float:left;margin-right:1em; margin-bottom:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;201&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_-1WCkzmwQJt335F_oai0z2lJlRYzm3ExSzc7FDwmMyBuD7_Oba-U9dk5O0nevxBYSqU2nmYbeC3CmJ15CmW8-Y23-BAOaKLtqwsszdNYEcTU3ncc2oZuNh50FvS6uLzImiF8N5Kwtlze/s320/2011-07-05_131500.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://extendingapps.blogspot.com/feeds/5489696463351723874/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extendingapps.blogspot.com/2011/06/oracle-universal-work-queue-advanced.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1718757098974267127/posts/default/5489696463351723874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1718757098974267127/posts/default/5489696463351723874'/><link rel='alternate' type='text/html' href='http://extendingapps.blogspot.com/2011/06/oracle-universal-work-queue-advanced.html' title='Oracle: Universal Work Queue – Advanced Collections'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_-1WCkzmwQJt335F_oai0z2lJlRYzm3ExSzc7FDwmMyBuD7_Oba-U9dk5O0nevxBYSqU2nmYbeC3CmJ15CmW8-Y23-BAOaKLtqwsszdNYEcTU3ncc2oZuNh50FvS6uLzImiF8N5Kwtlze/s72-c/2011-07-05_131500.JPG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1718757098974267127.post-4595582557992903729</id><published>2011-05-27T19:29:00.002+01:00</published><updated>2011-07-07T13:24:16.272+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Documentum"/><category scheme="http://www.blogger.com/atom/ns#" term="DQL"/><category scheme="http://www.blogger.com/atom/ns#" term="Java Method"/><category scheme="http://www.blogger.com/atom/ns#" term="Subscriptions"/><title type='text'>Documentum: Automating Subscriptions</title><content type='html'>Subscriptions within Documentum are an effective way of quickly getting to the Cabinets, Folders and documents that you require, they do however require visibility of the target in the first instance in order to create the subscription. &lt;br /&gt;
&lt;br /&gt;
In this scenario a Preset has been created within WebTop that has removed the Cabinet node in the navigation panel, therefore visibility of the available Cabinets and Folders will controlled via Subscriptions.&lt;br /&gt;
&lt;br /&gt;
The &#39;Subscription Targets&#39; will be assigned based on the groups that the user is in, a custom Java Method identifies the users and &#39;Targets&#39; and creates a &lt;code&gt;dm_relation&lt;/CODE&gt; record.&lt;br /&gt;
&lt;br /&gt;
The first step is to create a custom Type that will hold the Group and &#39;Target&#39; values, the Type is called &lt;code&gt;xapps_subscription_config&lt;/CODE&gt; and has the following two custom repeating attributes &lt;code&gt;c_group&lt;/CODE&gt; and &lt;code&gt;c_subscribe_target&lt;/CODE&gt;.&lt;br /&gt;
&lt;br /&gt;
In this example we want to automatically subscribe users of the doc_authors group to the Cabinet named &#39;Instructions&#39;; so, we create a new object of the Type &lt;code&gt;xapps_subscription_config&lt;/CODE&gt; and populate &lt;code&gt;c_group&lt;/CODE&gt; with the value &#39;doc_authors&#39; and &lt;code&gt;c_subscribe_target&lt;/CODE&gt; with the object_id of the &#39;Instructions&#39; Cabinet (as the names of Cabinets, Folders and Documents can change we are using object ID&#39;s instead of object names). &lt;br /&gt;
&lt;br /&gt;
The following DQL statement returns users of the group (along with their ID) and the object ID of the Cabinet, excluding any users that already have a subscription to the &#39;Target&#39; (as we don&#39;t waste processing time creating subscriptions that already exist):&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;select distinct us.user_name&lt;br /&gt;
, us.r_object_id as user_id&lt;br /&gt;
, csc1.c_subscribe_target&lt;br /&gt;
from dm_group_r gr&lt;br /&gt;
, dm_group_s gs&lt;br /&gt;
, dm_user_s us&lt;br /&gt;
, xapps_subscription_config csc &lt;br /&gt;
, xapps_subscription_config csc1&lt;br /&gt;
, dm_sysobject ds&lt;br /&gt;
where gs.r_object_id = gr.r_object_id&lt;br /&gt;
and csc.r_object_id = csc1.r_object_id&lt;br /&gt;
and gr.users_names = us.user_name&lt;br /&gt;
and gs.group_name = csc.c_group&lt;br /&gt;
and ds.r_object_id = csc1.c_subscribe_target&lt;br /&gt;
and us.user_state = 0&lt;br /&gt;
and csc.c_enabled = true&lt;br /&gt;
and not exists&lt;br /&gt;
(select &#39;x&#39;&lt;br /&gt;
from dm_relation dr&lt;br /&gt;
where dr.relation_name = &#39;dm_subscription&#39;&lt;br /&gt;
and dr.child_id = us.r_object_id&lt;br /&gt;
and dr.parent_id = csc1.c_subscribe_target)&lt;br /&gt;
enable(row_based)&lt;/CODE&gt;&lt;br /&gt;
&lt;br /&gt;
The script can be used as the bases of a record group in a Java Method that is subsequently used in an API call to create a &lt;code&gt;dm_relation&lt;/CODE&gt; record:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;public void execute(Map parameters, OutputStream ostream)&lt;br /&gt;
throws Exception {&lt;br /&gt;
try {&lt;br /&gt;
String strQuery = &quot;select distinct us.user_name,&quot;&lt;br /&gt;
+ &quot; us.r_object_id as user_id,&quot;&lt;br /&gt;
+ &quot; csc1.c_subscribe_target&quot; + &quot; from dm_group_r gr,&quot;&lt;br /&gt;
+ &quot; dm_group_s gs,&quot; + &quot; dm_user_s us,&quot;&lt;br /&gt;
+ &quot; xapps_subscription_config csc,&quot;&lt;br /&gt;
+ &quot; xapps_subscription_config csc1,&quot; + &quot; dm_sysobject ds&quot;&lt;br /&gt;
+ &quot; where gs.r_object_id = gr.r_object_id&quot;&lt;br /&gt;
+ &quot; and csc.r_object_id = csc1.r_object_id&quot;&lt;br /&gt;
+ &quot; and gr.users_names = us.user_name&quot;&lt;br /&gt;
+ &quot; and us.user_state = 0&quot;&lt;br /&gt;
+ &quot; and gs.group_name = csc.c_group&quot;&lt;br /&gt;
+ &quot; and csc1.c_subscribe_target = ds.r_object_id&quot;&lt;br /&gt;
+ &quot; and csc.c_enabled = true&quot; + &quot; and not exists&quot;&lt;br /&gt;
+ &quot; (select &#39;x&#39;&quot; + &quot; from dm_relation dr&quot;&lt;br /&gt;
+ &quot; where dr.relation_name = &#39;dm_subscription&#39;&quot;&lt;br /&gt;
+ &quot; and dr.child_id = us.r_object_id&quot;&lt;br /&gt;
+ &quot; and dr.parent_id = csc1.c_subscribe_target)&quot;&lt;br /&gt;
+ &quot; enable(row_based)&quot;;&lt;br /&gt;
IDfQuery idfQuery = new DfQuery();&lt;br /&gt;
idfQuery.setDQL(strQuery);&lt;br /&gt;
IDfCollection idfCQuery = idfQuery.execute(idfSession,&lt;br /&gt;
IDfQuery.DF_READ_QUERY);&lt;br /&gt;
while (idfCQuery.next()) {&lt;br /&gt;
String strUserName = idfCQuery.getString(&quot;user_name&quot;);&lt;br /&gt;
String strUserId = idfCQuery.getString(&quot;user_id&quot;);&lt;br /&gt;
String strSubscribeTo = idfCQuery&lt;br /&gt;
.getString(&quot;c_subscribe_target&quot;);&lt;br /&gt;
String strApi = &quot;create dm_relation object set relation_name = &#39;dm_subscription&#39;,  set parent_id = &#39;&quot;&lt;br /&gt;
+ strSubscribeTo&lt;br /&gt;
+ &quot;&#39;, set child_id = &#39;&quot;&lt;br /&gt;
+ strUserId&lt;br /&gt;
+ &quot;&#39;&quot;;&lt;br /&gt;
IDfQuery idfApi = new DfQuery();&lt;br /&gt;
idfApi.setDQL(strApi);&lt;br /&gt;
IDfCollection idfCApi = idfApi.execute(idfSession,&lt;br /&gt;
IDfQuery.DF_EXEC_QUERY);&lt;br /&gt;
idfCApi.close();&lt;br /&gt;
}&lt;br /&gt;
idfCQuery.close();&lt;br /&gt;
} catch (Exception e) {&lt;br /&gt;
DfLogger.error(null, “Exception …&quot;, null, e);&lt;br /&gt;
} finally {&lt;br /&gt;
}&lt;br /&gt;
}&lt;/CODE&gt;&lt;br /&gt;
&lt;br /&gt;
Attach the Java Method to a Job in DA and it can then be scheduled to run at regular intervals to create subscriptions without the need of manual intervention.</content><link rel='replies' type='application/atom+xml' href='http://extendingapps.blogspot.com/feeds/4595582557992903729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extendingapps.blogspot.com/2011/05/documentum-automating-subscriptions.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1718757098974267127/posts/default/4595582557992903729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1718757098974267127/posts/default/4595582557992903729'/><link rel='alternate' type='text/html' href='http://extendingapps.blogspot.com/2011/05/documentum-automating-subscriptions.html' title='Documentum: Automating Subscriptions'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1718757098974267127.post-9185271126526120864</id><published>2011-05-10T13:41:00.002+01:00</published><updated>2011-07-07T13:25:03.867+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Discoverer"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle"/><category scheme="http://www.blogger.com/atom/ns#" term="SQL"/><title type='text'>Oracle: Subqueries in Discoverer</title><content type='html'>With no out-of-the box method of using dynamic parameters in SQL queries within Discoverer, reports can become very cumbersome and costly to run. However, there is a work around for this with the use of database context values.&lt;br /&gt;
&lt;br /&gt;
In this example we will create a package to set a context value that can then be referenced within a custom Discoverer workbook.&lt;br /&gt;
&lt;br /&gt;
The first step is to create the custom context and a package that will set and return the context value (in this example xxapps_eul_us is the database user owning the Discoverer EUL):&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
CREATE OR REPLACE CONTEXT EUL_DISCO USING xxapps_eul_disco&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
CREATE OR REPLACE PACKAGE xxapps_eul_disco AUTHID DEFINER AS&lt;br /&gt;
&lt;br /&gt;
FUNCTION set_context(p_name  VARCHAR2&lt;br /&gt;
,p_value VARCHAR2)&lt;br /&gt;
RETURN VARCHAR2;&lt;br /&gt;
&lt;br /&gt;
FUNCTION show_context(p_name VARCHAR2)&lt;br /&gt;
RETURN VARCHAR2;&lt;br /&gt;
&lt;br /&gt;
END xxapps_eul_disco;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
CREATE OR REPLACE PACKAGE BODY xxapps_eul_disco AS&lt;br /&gt;
&lt;br /&gt;
FUNCTION set_context(p_name  VARCHAR2&lt;br /&gt;
,p_value VARCHAR2) RETURN VARCHAR2 AS&lt;br /&gt;
BEGIN&lt;br /&gt;
dbms_session.set_context(&#39;EUL_DISCO&#39;, p_name, p_value);&lt;br /&gt;
RETURN p_value;&lt;br /&gt;
END set_context;&lt;br /&gt;
&lt;br /&gt;
FUNCTION show_context(p_name VARCHAR2) RETURN VARCHAR2 IS&lt;br /&gt;
BEGIN&lt;br /&gt;
RETURN SYS_CONTEXT(&#39;EUL_DISCO&#39;, p_name);&lt;br /&gt;
END show_context;&lt;br /&gt;
&lt;br /&gt;
END xxapps_eul_disco;&lt;br /&gt;
/&lt;br /&gt;
&lt;br /&gt;
GRANT ALL ON xxapps_eul_disco TO xxapps_eul_us; &lt;br /&gt;
&lt;/CODE&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Within Discoverer Administrator select &lt;b&gt;Tools &gt; Register PL/SQL Functions&lt;/b&gt; and create a new function:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Function Name:&lt;/b&gt; SET_CONTEXT&lt;br /&gt;
&lt;b&gt;Display Name:&lt;/b&gt; XXAPPS Set Context&lt;br /&gt;
&lt;b&gt;Owner:&lt;/b&gt; APPS&lt;br /&gt;
&lt;b&gt;Package:&lt;/b&gt; XXAPPS_EUL_DISCO&lt;br /&gt;
&lt;b&gt;Database Link:&lt;/b&gt; &lt;default Database&gt;&lt;br /&gt;
&lt;b&gt;Return Type:&lt;/b&gt; Varchar&lt;br /&gt;
&lt;b&gt;Description:&lt;/b&gt; Set Context&lt;br /&gt;
&lt;b&gt;Identifier:&lt;/b&gt; SET_CONTEXT&lt;br /&gt;
&lt;b&gt;Available in Desktop/Plus:&lt;/b&gt; True&lt;br /&gt;
&lt;br /&gt;
In this example the context is set based on the value entered as a parameter in the workbook (the parameter is named ‘As of date’). To set the context; create a workbook Condition referencing the XXAPPS Set Context function:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Item:&lt;/b&gt; ‘DUMMY’&lt;br /&gt;
&lt;b&gt;Condition:&lt;/b&gt; &lt;&gt;&lt;br /&gt;
&lt;b&gt;Values:&lt;/b&gt; =XXAPPS Set Context(‘EFFECTIVE DATE’,:“As of date”)&lt;br /&gt;
&lt;br /&gt;
Now, within the SQL of the workbook the context value can be referenced as a subquery, EG:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
SELECT ...&lt;br /&gt;
&lt;br /&gt;
FROM ...&lt;br /&gt;
&lt;br /&gt;
WHERE date &lt;= &lt;b&gt;TO_DATE(xxapps_eul_disco.show_context(&#39;EFFECTIVE DATE&#39;),&#39;DD-MON-RRRR&#39;)&lt;/b&gt;&lt;br /&gt;
&lt;/CODE&gt;</content><link rel='replies' type='application/atom+xml' href='http://extendingapps.blogspot.com/feeds/9185271126526120864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extendingapps.blogspot.com/2011/05/oracle-subqueries-in-discoverer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1718757098974267127/posts/default/9185271126526120864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1718757098974267127/posts/default/9185271126526120864'/><link rel='alternate' type='text/html' href='http://extendingapps.blogspot.com/2011/05/oracle-subqueries-in-discoverer.html' title='Oracle: Subqueries in Discoverer'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1718757098974267127.post-7634146381972962627</id><published>2011-05-03T12:38:00.008+01:00</published><updated>2011-07-07T13:26:01.022+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Flex Value"/><category scheme="http://www.blogger.com/atom/ns#" term="Forms Personalization"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle"/><category scheme="http://www.blogger.com/atom/ns#" term="Payables"/><title type='text'>Oracle: Using Forms Personalisations to restrict a List of Values</title><content type='html'>In this scenario there is a requirement for end users in the Payables Department to be able to amend and create Flex Values (using the seeded Segment Values form). As there are many Flex Values that these users should not be given access to, Forms Personalisations is used to restrict the form (this personalisation can be adapted to any LOV in any form).&lt;br /&gt;
&lt;br /&gt;
The value set is called XXAPPS_CUST_ID, and the form to be personalised is Segment Values (FNDFFMSV). &lt;br /&gt;
&lt;br /&gt;
As we will be modifying the seeded Record Group attached to the LOV the first step is to download the FMB file from the application server and open it in Forms Developer to identify the query used in the record group. The record group attached to the LOV is FLEX_VALUE_SET_NAME_QF and the query is:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;select v.validation_type, v.flex_value_set_name, &lt;br /&gt;
l.meaning, v.parent_flex_value_set_id, v.flex_value_set_id &lt;br /&gt;
from fnd_flex_value_sets v, &lt;br /&gt;
fnd_lookups l, &lt;br /&gt;
fnd_flex_validation_tables t &lt;br /&gt;
where v.flex_value_set_id = t.flex_value_set_id (+) &lt;br /&gt;
and ((v.validation_type in (&#39;D&#39;,&#39;I&#39;,&#39;X&#39;,&#39;Y&#39;)) or &lt;br /&gt;
(v.validation_type = &#39;F&#39; and t.summary_allowed_flag = &#39;Y&#39;)) &lt;br /&gt;
and l.lookup_code = v.validation_type &lt;br /&gt;
and l.lookup_type = &#39;SEG_VAL_TYPES&#39; &lt;br /&gt;
order by v.flex_value_set_name&lt;/CODE&gt;&lt;br /&gt;
&lt;br /&gt;
Within Forms Personalisations create a new personalisation with a Trigger Event of WHEN-NEW-FORM-INSTANCE and the following Actions;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Action Type&lt;/b&gt;: Builtin &lt;br /&gt;
&lt;b&gt;Builtin Type&lt;/b&gt;: Create Record Group from Query&lt;br /&gt;
&lt;b&gt;Argument&lt;/b&gt;: &lt;br /&gt;
&lt;code&gt;select v.validation_type, v.flex_value_set_name, &lt;br /&gt;
l.meaning, v.parent_flex_value_set_id, v.flex_value_set_id &lt;br /&gt;
from fnd_flex_value_sets v, &lt;br /&gt;
fnd_lookups l, &lt;br /&gt;
fnd_flex_validation_tables t &lt;br /&gt;
where v.flex_value_set_id = t.flex_value_set_id (+) &lt;br /&gt;
and ((v.validation_type in (&#39;D&#39;,&#39;I&#39;,&#39;X&#39;,&#39;Y&#39;)) or &lt;br /&gt;
(v.validation_type = &#39;F&#39; and t.summary_allowed_flag = &#39;Y&#39;)) &lt;br /&gt;
and l.lookup_code = v.validation_type &lt;br /&gt;
and l.lookup_type = &#39;SEG_VAL_TYPES&#39; &lt;br /&gt;
&lt;b&gt;and v.flex_value_set_name  in (&#39;XXAPPS_CUST_ID&#39;)&lt;/b&gt;&lt;br /&gt;
order by v.flex_value_set_name&lt;/CODE&gt;&lt;br /&gt;
&lt;b&gt;Group Name&lt;/b&gt;: XXAPPS_LOV&lt;br /&gt;
This creates a new Record Group (based on the seeded query but restricted to only the XXAPPS_CUST_ID value set).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Action Type&lt;/b&gt;: Property&lt;br /&gt;
&lt;b&gt;Object Type&lt;/b&gt;: LOV&lt;br /&gt;
&lt;b&gt;Target Object&lt;/b&gt;: FLEX_VALUE_SET_NAME_QF&lt;br /&gt;
&lt;b&gt;Property Name&lt;/b&gt;: GROUP_NAME&lt;br /&gt;
&lt;b&gt;Value&lt;/b&gt;: XXAPPS_LOV&lt;br /&gt;
This assigns the Records Group to the List Of Values.&lt;br /&gt;
&lt;br /&gt;
These steps are all that is required to restrict the LOV, however to fully restrict the form we also need to amend the DEFAULT_WHERE (to stop users running ‘non-restricted’ queries IE: CTRL+F11) and also disable the other Radio Buttons in the Form.&lt;br /&gt;
&lt;br /&gt;
To amend the DEFAULT_WHERE create the following action:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Action Type&lt;/b&gt;: Property&lt;br /&gt;
&lt;b&gt;Object Type&lt;/b&gt;: Block&lt;br /&gt;
&lt;b&gt;Target Object&lt;/b&gt;: VSET&lt;br /&gt;
&lt;b&gt;Property Name&lt;/b&gt;: DEFAULT_WHERE&lt;br /&gt;
Click in the Value field and select &#39;Get Value&#39; – this will return the seeded value, this can then be modified to restrict the results:&lt;br /&gt;
&lt;code&gt;((validation_type IN (&#39;I&#39;, &#39;D&#39;, &#39;X&#39;, &#39;Y&#39;) OR (validation_type = &#39;F&#39; AND summary_allowed_flag = &#39;Y&#39;)) &lt;b&gt;and parent_value_set_name in (&#39;XXAPPS_CUST_ID&#39;)&lt;/b&gt;)&lt;/CODE&gt;&lt;br /&gt;
&lt;br /&gt;
To disable the other Radio Buttons create actions to set the Property ENABLED to False for the following items:&lt;br /&gt;
QUERY_FIND.REGION_POPUP.KEY&lt;br /&gt;
QUERY_FIND.REGION_POPUP.DESCR&lt;br /&gt;
QUERY_FIND.REGION_POPUP.CONC&lt;br /&gt;
CONTROL.REGION_POPUP.KEY&lt;br /&gt;
CONTROL.REGION_POPUP.DESCR&lt;br /&gt;
CONTROL.REGION_POPUP.CONC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now when the form is opened the only available option is Values Sets and the LOV and Default Where is restricted to the XXAPPS_CUST_ID value.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqEYF_nr-DZ79TPPXcO_ty_P1NYiDDoXXgJT_VNo9As1mOMysX1kc3oVqmkWDQQtqPhhXDYNa_uFenKx8cAnLCrCKpN0dll00w6v_4ZfyI1eci3am09iXQX5oIwpyh3D8lZDKi7foC26iR/s1600/SegmentValues.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear:left; float:left;margin-right:1em; margin-bottom:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;214&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqEYF_nr-DZ79TPPXcO_ty_P1NYiDDoXXgJT_VNo9As1mOMysX1kc3oVqmkWDQQtqPhhXDYNa_uFenKx8cAnLCrCKpN0dll00w6v_4ZfyI1eci3am09iXQX5oIwpyh3D8lZDKi7foC26iR/s320/SegmentValues.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://extendingapps.blogspot.com/feeds/7634146381972962627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extendingapps.blogspot.com/2011/05/oracle-using-forms-personalisations-to.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1718757098974267127/posts/default/7634146381972962627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1718757098974267127/posts/default/7634146381972962627'/><link rel='alternate' type='text/html' href='http://extendingapps.blogspot.com/2011/05/oracle-using-forms-personalisations-to.html' title='Oracle: Using Forms Personalisations to restrict a List of Values'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqEYF_nr-DZ79TPPXcO_ty_P1NYiDDoXXgJT_VNo9As1mOMysX1kc3oVqmkWDQQtqPhhXDYNa_uFenKx8cAnLCrCKpN0dll00w6v_4ZfyI1eci3am09iXQX5oIwpyh3D8lZDKi7foC26iR/s72-c/SegmentValues.jpg" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1718757098974267127.post-8923648102980457196</id><published>2011-04-15T08:43:00.002+01:00</published><updated>2011-07-07T13:26:30.975+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Documentum"/><category scheme="http://www.blogger.com/atom/ns#" term="Site Caching Services"/><category scheme="http://www.blogger.com/atom/ns#" term="TBO"/><title type='text'>Documentum: Site Caching Services with multiple targets</title><content type='html'>&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;Documentum Site Caching Services is limited by its inability to build functionality based on object attributes (the only attribute that it references is Version Label), so in this example a TBO is used to add custom labels.&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;The scenario is a document can be published to either the Internet or Intranet or both, this is identified by a custom repeating attribute on the document called c_web_target (possible values are ‘Intranet’ &amp;amp; ‘Internet’).&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;A simple lifecycle has been created for this document type with the stages ‘Draft’, ‘Active’ and ‘Expired’; only active documents are to be published to the web sites. &lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;When the documents are promoted to Active the custom labels should be applied, these are dynamic based on the values in the c_web_target so are not applied within the lifecycle, instead either the doSave or doPromote actions can be extended to call the following procedure:&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;code&gt;&lt;br /&gt;
&amp;nbsp;protected void applyVersionLabel() throws DfException {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;String DELIM = &quot;:&quot;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;String strTarget = this.getAllRepeatingStrings(&quot;c_web_target&quot;,DELIM);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;StringTokenizer token = new StringTokenizer(strTarget, DELIM);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;while (token.hasMoreTokens()) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;String strCurrTarget = token.nextToken();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.appendString(&quot;r_version_label&quot;, strCurrTarget);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;}&lt;/CODE&gt;&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0pt;&quot;&gt;Site Caching can then be configured using the versions labels ‘Internet’ and ‘Intranet’.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://extendingapps.blogspot.com/feeds/8923648102980457196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extendingapps.blogspot.com/2011/04/documentum-site-caching-services-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1718757098974267127/posts/default/8923648102980457196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1718757098974267127/posts/default/8923648102980457196'/><link rel='alternate' type='text/html' href='http://extendingapps.blogspot.com/2011/04/documentum-site-caching-services-with.html' title='Documentum: Site Caching Services with multiple targets'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1718757098974267127.post-982506203270164403</id><published>2011-04-11T18:11:00.005+01:00</published><updated>2011-07-07T13:27:03.920+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Documentum"/><category scheme="http://www.blogger.com/atom/ns#" term="Lifecycles"/><category scheme="http://www.blogger.com/atom/ns#" term="Security ACL"/><title type='text'>Documentum: Security on Lifecycles</title><content type='html'>Something that caught me out today (mainly due to not reading the manual!); as well as requiring the appropriate permissions on the document/object that you are applying the lifecycle to,&amp;nbsp;you also requires at least RELATE permissions on the lifecycle. Installing a lifecycle without setting an ACL may result in the error DM_SYSOBJECT_E_NO_RELATE_ACCESS when trying to assign it to a document (or the lifecycle not being available to select).&lt;br /&gt;
&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;To correct the ACL on a lifecycle that has been installed use DQL to find the ACL that has been applied ...&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;&lt;code&gt;&lt;br /&gt;
select acl_name from dm_policy where object_name = &#39;your lifecycle name&#39;&lt;/code&gt;&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;.. then, in DA update the ACL to allow the required users/groups RELATE permissions.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://extendingapps.blogspot.com/feeds/982506203270164403/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extendingapps.blogspot.com/2011/04/documentum-security-on-lifecycles.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1718757098974267127/posts/default/982506203270164403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1718757098974267127/posts/default/982506203270164403'/><link rel='alternate' type='text/html' href='http://extendingapps.blogspot.com/2011/04/documentum-security-on-lifecycles.html' title='Documentum: Security on Lifecycles'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1718757098974267127.post-5230323140315289173</id><published>2011-04-04T20:29:00.006+01:00</published><updated>2011-07-07T13:29:33.386+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="OA Framework"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle"/><category scheme="http://www.blogger.com/atom/ns#" term="Personalisations"/><title type='text'>Oracle: HTML Personalisations (Raw Text and URL Include)</title><content type='html'>These first simple extensions shows how to add a bespoke &#39;Message Of The Day&#39; banner to the Oracle Application Home Page.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsvEj033M9iodsWIjUop3GPCpCmfQR6vMIdK9Sq88ef3I54IRNkS4fWEZlZlN3xgko8dxGN43DnCz4XGl4BKxXSjrMunrfa6ko7wFJCuRi8VvdBWoFn3-HuomXyozcyOwjJLLwgpxQDFH0/s1600/sample.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;268&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsvEj033M9iodsWIjUop3GPCpCmfQR6vMIdK9Sq88ef3I54IRNkS4fWEZlZlN3xgko8dxGN43DnCz4XGl4BKxXSjrMunrfa6ko7wFJCuRi8VvdBWoFn3-HuomXyozcyOwjJLLwgpxQDFH0/s400/sample.jpg&quot; width=&quot;450&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;&lt;strong&gt;Example 1 – Raw Text.&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;Enable the profile option &lt;b&gt;Personalize Self-Service Defn&lt;/b&gt; at user level, this enables the personalisation links on HTML forms and pages (after logging out and back in).&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;On the Application Home page select the &lt;b&gt;Personalize &quot;Home Contenttable”&lt;/b&gt; link.&lt;/div&gt;&lt;br /&gt;
Create a new item within the table layout &quot;Home Contenttable&quot; region.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;Select the Item Style &lt;b&gt;Raw Text&lt;/b&gt;, enter an &lt;b&gt;ID&lt;/b&gt; (e.g.: xx_motd) and enter the static text or HTML code in &lt;b&gt;Text field&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;&lt;strong&gt;Example 2 – URL Include.&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;Create an htm file within the $OA_HTML (e.g.: xx_motd.htm) directory on the application server (see below for sample code).&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;margin-bottom: 0cm;&quot;&gt;Enable personalisation links and select &lt;b&gt;Personalize &quot;Home Contenttable&quot;&lt;/b&gt; then create an item with an Item Style of &lt;b&gt;URL include&lt;/b&gt;, enter an ID (e.g.: xx_motd) and in the &lt;b&gt;Source URI&lt;/b&gt; enter the path to your htm file (e.g.: /OA_HTML/xx_motd.htm).&lt;/div&gt;&lt;br /&gt;
&lt;i&gt;Example xx_motd.htm&lt;/i&gt;&lt;br /&gt;
&lt;table border=&quot;1&quot;&gt;&lt;tbody&gt;&lt;code&gt;
&lt;tr&gt;&lt;td&gt;&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;lt;!-- ---------------------------------- --&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;lt;!-- dbdrv: none&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; --&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;lt;!-- File : xx_motd.htm&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;--&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;lt;!-- Author : C Hammond&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; --&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;lt;!-- Creation Date : 10-AUG-2010 --&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;lt;!-- Message Of The Day HTML Plugin --&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;lt;!-- ---------------------------------- --&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;lt;td id=&quot;MessageOfTheDay&quot; class=&quot;x9k&quot; valign=&quot;top&quot; width=&quot;34%&quot;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp;&amp;lt;table id=&quot;MessageOfTheDay&quot; class=&quot;xn&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;border:1px #87B4D9 solid;&quot; width=&quot;100%&quot;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp;&amp;lt;tr&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;lt;td class=&quot;xp&quot; style=&quot;background-image:url (/OA_HTML/cabo/images/swan/headingBarBg.gif);&quot;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;lt;h2 class=&quot;x75&quot;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;lt;!-- Plugin Header: --&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp; Message Of The Day&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;lt;!-- --&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;lt;/h2&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;lt;/td&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp;&amp;lt;tr&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;lt;td style=&quot;background-color:#D9E5EF&quot;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;lt;br&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;lt;font face=&quot;Tahoma&quot; size=&quot;2px&quot; color=&quot;#147590&quot;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;lt;div style=&quot;padding-left: 0.5em;&quot;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;lt;!-- Plugin Text: --&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;lt;STRONG&amp;gt;Latest News&amp;lt;/STRONG&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;lt;br&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;Your message goes here ...&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;lt;!-- --&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;lt;/div&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;lt;/font&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;lt;br&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;lt;/td&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp;&amp;lt;/table&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #444444; font-family: &amp;quot;Trebuchet MS&amp;quot;, sans-serif; font-size: x-small;&quot;&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/code&gt;&lt;/tbody&gt;&lt;/table&gt;</content><link rel='replies' type='application/atom+xml' href='http://extendingapps.blogspot.com/feeds/5230323140315289173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://extendingapps.blogspot.com/2011/04/oracle-hello-world.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1718757098974267127/posts/default/5230323140315289173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1718757098974267127/posts/default/5230323140315289173'/><link rel='alternate' type='text/html' href='http://extendingapps.blogspot.com/2011/04/oracle-hello-world.html' title='Oracle: HTML Personalisations (Raw Text and URL Include)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsvEj033M9iodsWIjUop3GPCpCmfQR6vMIdK9Sq88ef3I54IRNkS4fWEZlZlN3xgko8dxGN43DnCz4XGl4BKxXSjrMunrfa6ko7wFJCuRi8VvdBWoFn3-HuomXyozcyOwjJLLwgpxQDFH0/s72-c/sample.jpg" height="72" width="72"/><thr:total>0</thr:total></entry></feed>