Tuesday, February 13, 2007

Need to customize Oracle eBusiness Suite release 12 frameworks?

If you've got your Release 12 environment up and running already, there's some good news to boot:


Oracle JDeveloper 10g with OA Extension (Patch 5856648) is available on Oracle MetaLink.

Also see Metalink Note 391554.1  Oracle Application Framework Documentation Resources, Release 12

And while you're at it checkout the Apps framework forum on Oracle Technology Network OA Framework Forum

Let me know if you got some sexy stuff happening with Framework customizations!

Thursday, February 01, 2007

Blogging via Email

Given the pressures we all have on our time, its often tough to use products and services to their maximum advantages. I thought I'd try out the blogging via email option at blogger.com and see what it looks like on the other end!

Oracle eBusiness Suite release 12 available

Good to see Oracle a few days ahead of the release launch and Steven Chan keeping his blog current! Oracle eBusiness Suite Release 12 Available Looking forward to seeing it in action!

Do you have an IP addressed assigned?

In one of my earlier posts, I rehashed a couple of terms that I'd heard at a recent event Digital Immigrant vs Digital Native. After having a conversion with one of my colleagues about the expansion of phone numbers due to the increase in VoIP technology, and the limits in the range of IP Address, we came to the conclusion that there will be a way to determine whether one is a Digital Immigrant or Native: Digital Natives will have an "IP address" assigned to them at birth! With the advent and intersection of mobile devices, GPS, Google Maps and the inevitable tracking application that ensues, will we be referring to the flashing little red dot friends on our mobile device screens as Jane Doe or 141.146.8.66.x? Food for thought.

Sunday, January 14, 2007

XML Publisher: Aargh! Another reporting tool for Oracle Apps

There is alot of hype and expectation being generated around Oracle XML Publisher and the use of it within the Oracle eBusiness Suite (Oracle Applications).

Having developed a number of reports with it specifically for Customer facing documentation, I can safely say some of this hype is deserved. The major benefit of the product from my perspective is the separation of the data and presentation.

Combine this with the ability to take an Oracle Reports report, switch it into XML mode without change, and feed the output into Oracle XML Publisher an you have a very attractive package. Of course, the ability to output the given data into a variety of formats is also immensely beneficial. This has long been a drawback of concurrent manager based Oracle Applications reports and so the ability to output a report to Microsoft Word, Excel, PDF is also excellent.

However, at the end of the day it is just another reporting tool. It has its quirkiness, limitations and suitability for given scenarios.

Some of the considerations having used the product are:

  • Its position relative to Oracle Reports. Oracle Reports is a very powerful and mature product. There is a huge amount of functionality and capabilty built into Oracle Reports that either does not exist in XML Publisher or cannot be done in XML Publisher. As time goes by this gap may diminish, but like the old saying "if it ain't broke, don't fix it", I wouldn't go coverting Oracle Reports to XML Publisher unless there is a very specific business need to do so. Primarily this would be when the User base need to define their own layouts based on a known dataset.
  • Data Model Knowledge. The major obstacle with developing reports for Oracle Applications / Oracle eBusiness Suite is the fact that the data model is hugely complex and lacking in constraints - primary, foreign keys etc to guide the uninitiated. Oracle XML Publisher doesn't solve the issues around this and currently doesn't provide anything like the End User Layer (EUL) meta-data of Oracle Discoverer. I'm keen to put some effort into this arena, so watch this space AppsReports.
  • Robustness given its time in the market. As with all things software, market maturity is something that takes time. I must say that for something I used the first time a number of months ago, it worked very well and I had few problems I couldn't overcome with a bit of delving into related issues, plus a heap of trial and error.
  • Versions and Features. My first few experiences were with Oracle XML Publisher version 5.0 where the feature list was relatively small compared to the latest releases. Within the context of Oracle Applications, many companies are "patch adverse" meaning regular software updates to technology stack components are minimised. So my advice would be get the latest available certified version for XML Publisher and apply the patch before you start your foray into XML Publisher. Check out Certify on Metalink
  • Watch your file size. Almost all standard Oracle Applications reports are character based, and usually use up a heap of trees. If you take a character report and add high definition layout objects, the filesize will blow out. I had an RTF template given to me to use as a basis that had equivalent of a 5Mb company logo in it. Doh! Of course hardware is cheap, but the impact must be taken into account for things such as this, and developers beware.

More and more I am finding that the work required to develop customizations to, and maintain Oracle Applications is decreasing. The right decisions on tools and design make a huge difference in cost, quality and time to implement. New features such as Oracle XML Publisher, Forms Personalizations and the like need to be utilized wherever possible.

If you are wondering about the various reporting tools, what is best in a given situation, and how you can enhance the level of reporting in your enterprise, visit our Virtuate or AppsReports websites or drop me an email.

We have experience reporting with Oracle Developer(Oracle Forms, Oracle Reports), Oracle Discoverer, Oracle XML Publisher, Financial Statement Generator FSGs, Oracle Application Express (APEX) / HTML DB, Noetix, Oracle Application Desktop Integrator (ADI) amongst others.

Bananas and Requirements Specification

During a stressful week I recently discovered a new way for me to work out what day of the week it is. At the start of each week I bring in 5 bananas to eat for breakfast, one for each day of the week. So I can work out what day it is based on how many bananas there are left on my desk, ie: 4 = Monday 3 = Tuesday 2 = Wednesday 1 = Thursday 0 = Friday So let's call this Gareth's Banana Calendar. That got me thinking about something in some text I was researching at the time. In the text, the author kept commenting in his text about how "the perceptive reader would notice x,y,z" based on details he just wrote. And that got me thinking how there is a very strong relation to this and how Software Developers interpret requirements, that is in order to get the rules right they need to interpret the business rules presented to them. However the perceptive developer will not only take the rules strictly, but also apply considerations to the rules, and if there is something they consider relevant that would brake or change the rules, then they should probe further for more detailed requirements or try it out. So the perceptive developer would realize there are a number of shortcomings to consider about Gareth's Banana Rule and seek answers. E.g. How do you work out what day it is if there is a public holiday during the week? Keen to hear what anyone else thinks about Gareth's Banana Rule ;-)

Wednesday, September 20, 2006

Setting your Oracle Applications session: fnd_global.apps_initialize (org_id)

If you are working with Oracle Applications, here's how you can initialize your session in whatever tool you are using to mimic the login process and pick up profile option values. The key profile option here is usually org_id so you can select from organization aware views, but it applied equally to other profile options, i.e. you can then use

fnd_profile.value('PROFILE_OPTION_NAME');
to get values from profile options. You need to be logged into the database as the APPS user. The examples set up the session for SYSADMIN user, System Administrator responsibility. e.g. SQL*Plus
exec fnd_global.apps_initialize(0,20420,1);
e.g. for PL/SQL, TOAD, SQLDeveloper, SQL Navigator etc.:
begin fnd_global.apps_initialize(0,20420,1); end;
The parameters used here are:
  1. User_ID
  2. Responsibility_ID
  3. Responsibility_Application_ID
To get these you have a couple of choices a) SQL - Replace SYSADMIN and System Administrator with your user and responsibility:
select 'begin fnd_global.apps_initialize(' ||
       fu.user_id || ',' ||
       fr.responsibility_id || ',' ||
       fr.application_id || '); end;' || chr(10) || '/'
from   fnd_user fu
,      fnd_responsibility_tl fr
where  fu.user_name = 'SYSADMIN'
and    fr.responsibility_name = 'System Administrator';
b) In your Oracle Applications forms session. Login as your user and navigate to the required responsibility. Open a function that uses Oracle forms Go to Help > Diagnostics > Examine In the Block enter $PROFILES$ In the field enter the appropriate field name for the parameter:
  1. User_ID = USER_ID
  2. Responsibility_ID = RESP_ID
  3. Responsibility_Application_ID = RESP_APPL_ID

Voila!

Chronological Tracing/Debugging with minimal intrusion in Oracle

Here is a simple way to provide chronological tracing, debugging or auditing of Oracle PL/SQL code, by inserting a minimally intrusive, no affect to session concurrency, non erroring code. You put calls to the procedure in your code and output will be written to file /usr/tmp/SID_debug.log if the code below is used exactly as is, where SID is your instance name. It works on Oracle 9i or higher, including 10g and Oracle XE database on Unix/Linux - change the directory as required for Windows, this directory must be included in database parameter utl_file_dir and the database needs to have been restarted if utl_file_dir is changed. To get the value utl_file_dir run the query:

select value from v$parameter where name = 'utl_file_dir';
You can call the procedure like this
mods_log('Hello, world!'); 
in PL/SQL. e.g. for database trigger or PL/SQL code
begin mods_log('Hello, world!'); end;
e.g. for SQL*Plus
exec mods_log('Hello, world!');
Here is the code to create the procedure:
create or replace procedure mods_log (pText varchar2) is
  pragma autonomous_transaction;
  vFP       utl_file.file_type;
  vFileName varchar2(20);
  vTime     varchar2(11);
begin
  select lower(instance_name) || '_debug.log'
  ,      to_char(sysdate,'MMDDHH24MISS ')
  into   vFileName
  ,      vTime
  from   v$instance;
  vFP := utl_file.fopen('/usr/tmp',vFileName,'a',6000);
  utl_file.put(vFP,vTime || pText);
  utl_file.fclose(vFP);
exception
when others then
  null; -- Do not report any errors for this procedure call
end;
/

Friday, September 01, 2006

Profile Option controlled Database SQL Trace for Oracle Applications User / Responsibility

For Oracle Applications tracing User/forms to database trace files in user_dump_dest (udump): System Admin > Profile > System At User level set profile option: Initialization SQL Statement - Custom Value:

BEGIN FND_CTL.FND_SESS_CTL('','','TRUE','TRUE','',''); END;
Or if you also want to have the user name in the file name (replace OPERATIONS with your username):
BEGIN FND_CTL.FND_SESS_CTL('','','TRUE','TRUE','','ALTER SESSION SET TRACEFILE_IDENTIFIER = OPERATIONS MAX_DUMP_FILE_SIZE = 5000000 EVENTS ='||''''||' 10046 TRACE NAME CONTEXT FOREVER, LEVEL 12'||'''');END;
Voila!

Discover what SQL a database user is running - Logon Trigger

Okay, first of the "handy techie" posts. TRACING Oracle users activity: (This is handy if you are trying to see what a third party app is doing and have no access to the code!) NB: This will log all future sessions for that user, so make sure you're the only one on the system for the schema:

sqlplus /nolog
connect / as sysdba;
create or replace trigger APPSTRACE
after logon on  apps.schema
begin   
  execute immediate 'ALTER SESSION SET SQL_TRACE TRUE';
end;
/

REM To disable once finshed:
alter trigger appstrace disable;