Showing posts with label development. Show all posts
Showing posts with label development. Show all posts

Friday, August 09, 2013

Oracle BI Publisher Desktop Microsoft Visual Basic System Error &H8000FFFF -2147418113 Catastrophic failure

Not too sure what I changed on my laptop, possibly just installation of another product or perhaps Microsoft or similar updates, but when I went to edit a BI Publisher RTF template I got the following error message on clicking ANY button in the BI Publisher plugin for Microsoft Word.

---------------------------
Microsoft Visual Basic
---------------------------
System Error &H8000FFFF (-2147418113). Catastrophic failure 
---------------------------
OK   Help   
---------------------------

After quite a bit of researching, I found the solution, for me it was the second of the following fixes:

1. Delete the EXD files. I attempted this in the root of my C:\ and D:\ drives, but it didn't fix the error.

DEL /S /A:H /A:-H *.EXD

2. Change security setting, and then reboot Windows.

2a. For Windows 32bit:

Regsvr32 "C:\Windows\System32\MSCOMCTL.OCX"

2b. For Windows 64bit:

Regsvr32 "C:\Windows\SysWOW64\MSCOMCTL.OCX"

Problem solved!

Catch ya!

Gareth

This is a post from Gareth's blog at http://garethroberts.blogspot.com

References

Related Posts

Friday, February 22, 2013

NZOUG 2013 Conference: Agenda online - register while Earlybird Pricing still here!

The New Zealand Oracle Users Group - NZOUG Conference 2013 is open for registrations and Earlybird pricing is still available! The agenda is now available.

NZOUG 2013 is being held in Wellington at the iconic Te Papa Museum on the beautiful waterfront on the 18th and 19th of March, with an additional Workshop Day on the 20th March.

The conference will see a wealth of brilliant speakers from around the world, including Tom Kyte, Graham Wood, Andrew Holdsworth, John Schiff and Nadia Bendjedou and of course top speakers from Middle Earth (NZ) as well. Tom, Andrew and Graham will be presenting their Real World Performance show, which will be a highlight of the conference.

Topics being covered cross a wide range of Oracle solutions, with tracks for Development, DBA, Cloud Computing, Oracle E-Business Suite, a full dedicated JD Edwards Day, Fusion Applications, EPM/BI, Middleware, Management, Infrastructure, Security, Hardware and Professional Development.

I'll be co-presenting one paper on utilizing the Oracle E-Business Suite Integrated SOA Gateway, tips, tricks and a demo, not too much this time around so that I can head along to as many of the other presentations as I can. Drop me an email if you want to catch up at the conference!

So, if you're around New Zealand in mid-March, perhaps following on from the NZ - England Cricket Test, and if you like getting out and networking often with fun consequences, then make sure you come to the New Zealand Oracle event of the year, not to be missed!

Catch ya!

Gareth

This is a post from Gareth's blog at http://garethroberts.blogspot.com

References

Monday, October 03, 2011

R12 E-Business Suite Suppliers Query - SQL to join Suppliers, Contacts, Banks

In the Oracle E-Business Suite (EBS) Release 12 the data model of Suppliers has become much more complex. The base tables have changed (Suppliers, Sites, Bank Accounts, Contacts) and some of the fields have become obsolete.

Here is a query to bring many of the Supplier attributes together, with focus on banks / bank accounts, payment methods, contacts, remittance delivery (email, notification method). Please post comments if you find any issues!

Adjust the WHERE clause on the first WITH query to return the suppliers that you need to report on. Hope this query helps someone out.

Add additional fields to the final query (or WITH queries as required.)

Update 29-Feb-2012: Outer join sites ss to payment methods pm.

with vendors as
(
select vendor_id
from   ap_suppliers
where  1=1
/* COMMENT / UNCOMMENT and UPDATE THE NEXT 5 LINES AS YOU REQUIRE */
--and    vendor_type_lookup_code = 'VENDOR'
--and    upper( vendor_name ) like 'VIRTUATE%'
and    creation_date between '01-JAN-2011' and '01-JAN-2012'
--and    enabled_flag = 'Y'
)
, vend as
(
select pv.vendor_id                 vendor_id
,      pv.vendor_name_alt           vendor_name_alt
,      pv.vendor_name               vendor_name
,      pv.segment1                  vendor_number
,      pv.vendor_type_lookup_code   vendor_type_lookup_code
from   ap_suppliers pv
where  pv.vendor_id in (select v.vendor_id from vendors v)
)
, site as
(
select ss.vendor_id                    vendor_id
,      ss.vendor_site_id               vendor_site_id
,      ss.vendor_site_code             vendor_site_code
,      ss.vendor_site_code_alt         vendor_site_code_alt
,      ss.vat_code                     tax_code
,      ss.vat_registration_num         vat_registration_num
,      t.name                          terms_name
,      ss.address_line1                ss_address_line1
,      ss.address_line2                ss_address_line2
,      ss.address_line3                ss_address_line3
,      ss.zip                          ss_zip          
,      ss.city                         ss_city         
,      ss.state                        ss_state        
,      ss.country                      ss_country      
,      ss.area_code                    ss_area_code    
,      ss.phone                        ss_phone        
,      ss.fax_area_code                ss_fax_area_code
,      ss.fax                          ss_fax          
,      ss.telex                        ss_telex
,      ss.pay_site_flag                ss_pay_site_flag
,      ss.primary_pay_site_flag        ss_primary_pay_site_flag
,      pm.remit_advice_delivery_method ss_remit_advice_deliv_meth
,      pm.remit_advice_email           ss_remit_advice_email
,      pm.remit_advice_fax             ss_remit_advice_fax
,      pm.payment_method_code          ss_payment_method_code
,      ss.remittance_email             ss_remittance_email
,      ss.supplier_notif_method        ss_supplier_notif_method
,      ps.addressee                    ss_addressee
,      ( select hcp.phone_area_code
         from   hz_contact_points hcp
         where  hcp.owner_table_id = ss.party_site_id
         and    hcp.owner_table_name = 'HZ_PARTY_SITES'
         and    hcp.phone_line_type = 'GEN'
         and    hcp.contact_point_type = 'PHONE'
         --and    hcp.created_by_module = 'AP_SUPPLIERS_API'
         and    rownum < 2 -- copied from OAF View Object 
       ) ss_hcp_phone_area_code
,      ( select hcp.phone_number
         from   hz_contact_points hcp
         where  hcp.owner_table_id = ss.party_site_id
         and    hcp.owner_table_name = 'HZ_PARTY_SITES'
         and    hcp.phone_line_type = 'GEN'
         and    hcp.contact_point_type = 'PHONE'
         --and    hcp.created_by_module = 'AP_SUPPLIERS_API'
         and    rownum < 2 -- copied from OAF View Object 
       ) ss_hcp_phone_number
,      ( select hcp.phone_area_code
         from   hz_contact_points hcp
         where  hcp.owner_table_id = ss.party_site_id
         and    hcp.owner_table_name = 'HZ_PARTY_SITES'
         and    hcp.phone_line_type = 'FAX'
         and    hcp.contact_point_type = 'PHONE'
         --and    hcp.created_by_module = 'AP_SUPPLIERS_API'
         and    rownum < 2 -- copied from OAF View Object 
       ) ss_hcp_fax_area_code
,      ( select hcp.phone_number
         from   hz_contact_points hcp
         where  hcp.owner_table_id = ss.party_site_id
         and    hcp.owner_table_name = 'HZ_PARTY_SITES'
         and    hcp.phone_line_type = 'FAX'
         and    hcp.contact_point_type = 'PHONE'
         --and    hcp.created_by_module = 'AP_SUPPLIERS_API'
         and    rownum < 2 -- copied from OAF View Object 
       ) ss_hcp_fax_number
from   ap_supplier_sites_all ss
,      ap_suppliers sup
,      ap_terms t
,      (
         select ss.vendor_site_id
              , payee.remit_advice_delivery_method
              , payee.remit_advice_email
              , payee.remit_advice_fax
              , pm.payment_method_code
         from   iby_external_payees_all payee
         ,      iby_ext_party_pmt_mthds pm
         ,      hz_party_sites ps
         ,      ap_supplier_sites_all ss
         where  payee.payee_party_id = ps.party_id
         and    payee.payment_function = 'PAYABLES_DISB'
         and    payee.party_site_id = ss.party_site_id
         and    payee.supplier_site_id = ss.vendor_site_id
         and    payee.org_id = ss.org_id
         and    payee.org_type = 'OPERATING_UNIT'
         and    ss.party_site_id = ps.party_site_id
         and    payee.ext_payee_id = pm.ext_pmt_party_id (+)
         and    pm.primary_flag (+) = 'N'
         and not exists
                ( select 1
                  from   iby_ext_party_pmt_mthds pm2
                  where  pm.ext_pmt_party_id = pm2.ext_pmt_party_id
                  and    pm2.primary_flag = 'Y'
                )
         union all
         select ss.vendor_site_id
              , payee.remit_advice_delivery_method
              , payee.remit_advice_email
              , payee.remit_advice_fax
              , pm.payment_method_code
         from   iby_external_payees_all payee
         ,      iby_ext_party_pmt_mthds pm
         ,      hz_party_sites ps
         ,      ap_supplier_sites_all ss
         where  payee.payee_party_id = ps.party_id
         and    payee.payment_function = 'PAYABLES_DISB'
         and    payee.party_site_id = ss.party_site_id
         and    payee.supplier_site_id = ss.vendor_site_id
         and    payee.org_id = ss.org_id
         and    payee.org_type = 'OPERATING_UNIT'
         and    ss.party_site_id = ps.party_site_id
         and    pm.ext_pmt_party_id = payee.ext_payee_id
         and    pm.primary_flag = 'Y'
       ) pm
,      hz_party_sites ps
where  sup.vendor_id in (select vendor_id from vendors)
and    sup.vendor_id = ss.vendor_id
and    ss.vendor_site_id = pm.vendor_site_id (+)
and    ss.party_site_id = ps.party_site_id (+)
and    ss.terms_id = t.term_id (+)
)
, cont as
(
select pv.vendor_id           vendor_id
,      pvs.vendor_site_id     vendor_site_id
,      hp.party_id            c_party_id
,      hp.person_first_name   c_first_name
,      hp.person_last_name    c_last_name
,      hp.person_title        c_person_title
,      hcpe.email_address     c_email_address
,      hcpp.phone_area_code   c_phone_area_code
,      hcpp.phone_number      c_phone_number
,      hcpf.phone_area_code   c_fax_area_code
,      hcpf.phone_number      c_fax_number
from   hz_parties hp
,      hz_relationships hzr
,      hz_contact_points hcpp
,      hz_contact_points hcpf
,      hz_contact_points hcpe
,      ap_suppliers pv
,      ap_supplier_sites_all pvs
,      hz_party_sites hps
where  hp.party_id = hzr.subject_id
and    hzr.relationship_type = 'CONTACT'
and    hzr.relationship_code = 'CONTACT_OF'
and    hzr.subject_type = 'PERSON'
and    hzr.subject_table_name = 'HZ_PARTIES'
and    hzr.object_type = 'ORGANIZATION'
and    hzr.object_table_name = 'HZ_PARTIES'
and    hzr.status = 'A'
and    hcpp.owner_table_name(+) = 'HZ_PARTIES'
and    hcpp.owner_table_id(+) = hzr.party_id
and    hcpp.phone_line_type(+) = 'GEN'
and    hcpp.contact_point_type(+) = 'PHONE'
and    hcpf.owner_table_name(+) = 'HZ_PARTIES'
and    hcpf.owner_table_id(+) = hzr.party_id
and    hcpf.phone_line_type(+) = 'FAX'
and    hcpf.contact_point_type(+) = 'PHONE'
and    hcpe.owner_table_name(+) = 'HZ_PARTIES'
and    hcpe.owner_table_id(+) = hzr.party_id
and    hcpe.contact_point_type(+) = 'EMAIL'
and    hcpp.status (+)='A'
and    hcpf.status (+)='A'
and    hcpe.status (+)='A'
and    hps.party_id = hzr.object_id
and    pvs.party_site_id = hps.party_site_id
and    pv.vendor_id = pvs.vendor_id
and    exists
       ( select 1
         from ap_supplier_contacts ascs
         where (ascs.inactive_date is null
         or ascs.inactive_date      > sysdate)
         and hzr.relationship_id    = ascs.relationship_id
         and hzr.party_id           = ascs.rel_party_id
         and hps.party_site_id      = ascs.org_party_site_id
         and hzr.subject_id         = ascs.per_party_id
       )
and    pv.vendor_id in (select vendor_id from vendors)
)
, bank as
(
select  pv.vendor_id                    vendor_id
,       ss.vendor_site_id               vendor_site_id
,       hopbank.bank_or_branch_number   bank_number
,       hopbranch.bank_or_branch_number branch_number
,       eba.bank_account_num            bank_account_num
,       eba.bank_account_name           bank_account_name
,       piu.start_date                  bank_use_start_date
,       piu.end_date                    bank_use_end_date
,       piu.order_of_preference         bank_priority
from    iby_ext_bank_accounts eba
,       iby_external_payees_all payee
,       iby_pmt_instr_uses_all piu
,       ap_supplier_sites_all ss
,       ap_suppliers pv
,       hz_organization_profiles hopbank
,       hz_organization_profiles hopbranch
where   1=1
and     eba.bank_id = hopbank.party_id
and     eba.branch_id = hopbranch.party_id
and     payee.payment_function = 'PAYABLES_DISB'
and     payee.party_site_id = ss.party_site_id
and     payee.supplier_site_id = ss.vendor_site_id
and     payee.org_id = ss.org_id
and     payee.org_type = 'OPERATING_UNIT'
and     payee.ext_payee_id = piu.ext_pmt_party_id
and     piu.payment_flow = 'DISBURSEMENTS'
and     piu.instrument_type = 'BANKACCOUNT'
and     piu.instrument_id = eba.ext_bank_account_id
and     piu.start_date < sysdate
and     ( piu.end_date is null or
          piu.end_date > sysdate
        )
and     ss.vendor_id = pv.vendor_id
and     pv.vendor_id in (select vendor_id from vendors)
)
-- select distinct v.*, s.*, c.*, b.*
select distinct v.vendor_id             supplier_id
,      v.vendor_number                  supplier_num
,      v.vendor_name                    supplier_name
,      v.vendor_type_lookup_code        supplier_type
,      s.terms_name                     terms_name
,      s.tax_code                       invoice_tax_code
,      s.vat_registration_num           vat_registration_num
,      s.vendor_site_code               site_code
,      s.ss_address_line1               address1
,      s.ss_address_line2               address2
,      s.ss_address_line3               address3
,      s.ss_city                        suburb
,      s.ss_state                       state
,      s.ss_zip                         post_code
,      s.ss_country                     country
,      s.ss_payment_method_code         payment_method
,      b.bank_account_name              bank_account_name
,      b.bank_number                    bank_number
,      b.branch_number                  branch_number
,      b.bank_account_num               bank_account_num
,      s.ss_remit_advice_email          remittance_email
,      s.ss_remit_advice_deliv_meth     notification_method
,      c.c_first_name                   contact_first_name
,      c.c_last_name                    contact_last_name
,      c.c_person_title                 contact_title
,      c.c_email_address                contact_email
,      c.c_phone_area_code              contact_ph_area_code
,      c.c_phone_number                 contact_ph_number
,      c.c_fax_area_code                contact_fax_area_code
,      c.c_fax_number                   contact_fax_number
from   vend v
,      site s
,      cont c
,      bank b
where  v.vendor_id = s.vendor_id (+)
and    s.vendor_id = b.vendor_id (+)
and    s.vendor_site_id = b.vendor_site_id (+)
and    s.vendor_id = c.vendor_id (+)
and    s.vendor_site_id = c.vendor_site_id (+)
and    nvl(b.bank_priority,-1) = (select nvl(min(bank_priority),-1)
                                  from   bank b2
                                  where  b2.vendor_id = b.vendor_id
                                  and    b2.vendor_site_id = b.vendor_site_id)
order by 3,1,2,4,5,6,7,8,9,10,11,12,13;

Catch ya!
Gareth
This is a post from Gareth's blog at http://garethroberts.blogspot.com

Related Posts

Thursday, August 11, 2011

Track and Trace E-Business Suite Concurrent Request - EBS Logs, O/S Process IDs, Locks

I often get asked to take a look at an Oracle eBusiness Suite concurrent request to see what it is doing, this can come from a few different angles:

  1. What requests are currently running?
  2. I have an operating system process that is taking too much CPU - what is it doing?
  3. Can you tell me where the request is at? I've clicked on the log but it doesn't show anything!
  4. My request is taking too long - can you check for blocking locks?

There are a number of strategies to track and trace where things are at for a running request, these include:

  1. Monitor the currently running requests in fnd_concurrent_requests
  2. Checking the v$sqlarea to see what SQL statement or PL/SQL is running
  3. Tailing the concurrent request log / output file while it is being written to near realtime - prior to request completing
  4. Checking for locks blocking the concurrent request

So without further ado, let's take a look at the following sweet query. UPDATE: 23-Aug-2012 fixed multi rows due to missing join on inst_id between gv$session and gv$process. Also note for non-RAC environments change gv$ to v$ and remove joins to sys.v_$active_instances:

set pages 9999 feed on lines 150
col user_concurrent_program_name format a40 head PROGRAM trunc
col elapsed format 9999
col request_id format 9999999 head REQUEST
col user_name format a12
col oracle_process_id format a5 head OSPID
col inst_name format a10
col sql_text format a30
col outfile_tmp format a30
col logfile_tmp format a30

REM *********************
REM **** RAC VERSION ****
REM *********************
select /*+ ordered */ 
       fcp.user_concurrent_program_name
,      fcr.request_id
,      round(24*60*( sysdate - actual_start_date )) elapsed
,      fu.user_name
,      fcr.oracle_process_id
,      sess.sid
,      sess.serial#
,      inst.inst_name
,      sa.sql_text
,      cp.plsql_dir || '/' || cp.plsql_out outfile_tmp
,      cp.plsql_dir || '/' || cp.plsql_log logfile_tmp
from   apps.fnd_concurrent_requests fcr
,      apps.fnd_concurrent_programs_tl fcp
,      apps.fnd_concurrent_processes cp
,      apps.fnd_user fu
,      gv$process pro
,      gv$session sess
,      gv$sqlarea sa
,      sys.v_$active_instances inst
where  fcp.concurrent_program_id = fcr.concurrent_program_id
and    fcp.application_id = fcr.program_application_id
and    fcr.controlling_manager = cp.concurrent_process_id
and    fcr.requested_by = fu.user_id (+)
and    fcr.oracle_process_id = pro.spid (+)
and    pro.addr = sess.paddr (+)
and    pro.inst_id = sess.inst_id (+)
and    sess.sql_address = sa.address (+)
and    sess.sql_hash_value = sa.hash_value (+)
and    sess.inst_id = inst.inst_number (+)
and    fcr.phase_code = 'R' /* only running requests */
;

REM *********************
REM ** NON-RAC VERSION **
REM *********************
select /*+ ordered */ 
       fcp.user_concurrent_program_name
,      fcr.request_id
,      round(24*60*( sysdate - actual_start_date )) elapsed
,      fu.user_name
,      fcr.oracle_process_id
,      sess.sid
,      sess.serial#
,      sa.sql_text
,      cp.plsql_dir || '/' || cp.plsql_out outfile_tmp
,      cp.plsql_dir || '/' || cp.plsql_log logfile_tmp
from   apps.fnd_concurrent_requests fcr
,      apps.fnd_concurrent_programs_tl fcp
,      apps.fnd_concurrent_processes cp
,      apps.fnd_user fu
,      v$process pro
,      v$session sess
,      v$sqlarea sa
where  fcp.concurrent_program_id = fcr.concurrent_program_id
and    fcp.application_id = fcr.program_application_id
and    fcr.controlling_manager = cp.concurrent_process_id
and    fcr.requested_by = fu.user_id (+)
and    fcr.oracle_process_id = pro.spid (+)
and    pro.addr = sess.paddr (+)
and    sess.sql_address = sa.address (+)
and    sess.sql_hash_value = sa.hash_value (+)
and    fcr.phase_code = 'R' /* only running requests */
;

PROGRAM                                   REQUEST ELAPSED USER_NAME    OSPID        SID    SERIAL# INST_NAME  SQL_TEXT                       OUTFILE_TMP                    LOGFILE_TMP
---------------------------------------- -------- ------- ------------ ----- ---------- ---------- ---------- ------------------------------ ------------------------------ ------------------------------
Workflow Background Process               2960551       1 VIRTUATE     24814        130      29699 APPLPROD1  BEGIN WF_ENGINE.BACKGROUNDCONC /usr/tmp/o0068194.tmp          /usr/tmp/l0068194.tmp
                                                                                                              URRENT(:errbuf,:rc,:A0,:A1,:A2
                                                                                                              ,:A3,:A4,:A5); END;

1 row selected.

From the above we can see key information:

  • The running Concurrent Request Program Name and Request_ID
  • The database node operating system process id (OSPID) so we can monitor usage via top / iostat / vmstat
  • The SID / Serial in case we want to kill the session via alter system kill session '130,29699';
  • The instance name the database session is running on in a RAC environment
  • The currently running SQL text
  • The temporary files where concurrent request log/out is being written to via utl_file while running. These files are copied over to the Concurrent Tier $APPLCSF/$APPLOUT and $APPLLOG after completion of the request.

We can break out the above into a few queries and procedures to drill into specific information information from the core EBS tables and DBA v$ views

1. Get concurrent requests running, temp files and Operating System PID

col user_concurrent_program_name format a40 head PROGRAM trunc
col elapsed format 9999
col request_id format 9999999 head REQUEST
col user_name format a12
col oracle_process_id format a5 head OSPID
select  fcp.user_concurrent_program_name
,       fcr.request_id
,       round(24*60*( sysdate - actual_start_date )) elapsed
,       fu.user_name
,       fcr.oracle_process_id
from    apps.fnd_concurrent_requests fcr
,       apps.fnd_concurrent_programs_tl fcp
,       apps.fnd_user fu
where   fcp.concurrent_program_id = fcr.concurrent_program_id
and     fcp.application_id = fcr.program_application_id
and     fu.user_id = fcr.requested_by
and     fcr.phase_code = 'R';

PROGRAM                                   REQUEST ELAPSED USER_NAME    OSPID
---------------------------------------- -------- ------- ------------ -----
Virtuate GL OLAP Data Refresh             2960541       5 VIRTUATE     21681

2. Get current running sql from instance (RAC inst_id/name) where request is running

col inst_name format a10
col sql_text format a30
col module format a20

REM *********************
REM **** RAC VERSION ****
REM *********************
select sess.sid
,      sess.serial#
,      sess.module
,      sess.inst_id
,      inst.inst_name
,      sa.fetches
,      sa.runtime_mem
,      sa.sql_text
,      pro.spid
from   gv$sqlarea sa
,      gv$session sess
,      gv$process pro
,      sys.v_$active_instances inst
where  sa.address = sess.sql_address
and    sa.hash_value = sess.sql_hash_value
and    sess.paddr = pro.addr
and    sess.inst_id = pro.inst_id
and    sess.inst_id = inst.inst_number (+)
and    pro.spid = &OSPID_from_running_request;

REM *********************
REM ** NON-RAC VERSION **
REM *********************

select sess.sid
,      sess.serial#
,      sess.module
,      sa.fetches
,      sa.runtime_mem
,      sa.sql_text
,      pro.spid
from   v$sqlarea sa
,      v$session sess
,      v$process pro
where  sa.address = sess.sql_address
and    sa.hash_value = sess.sql_hash_value
and    sess.paddr = pro.addr
and    pro.spid = &OSPID_from_running_request;

If you're running something that has long SQL statements, get the full SQL Statement by selecting from v$sqltext_with_newlines as follows

select t.sql_text
from   v$sqltext_with_newlines t
,      v$session s
where  s.sid = &SID
and    s.sql_address = t.address
order by t.piece

3. Find currently spooling temp file from request

col outfile format a30
col logfile format a30
select cp.plsql_dir || '/' || cp.plsql_out outfile
,      cp.plsql_dir || '/' || cp.plsql_log logfile
from  apps.fnd_concurrent_requests cr
,     apps.fnd_concurrent_processes cp
where cp.concurrent_process_id = cr.controlling_manager
and cr.request_id = &request_id;

OUTFILE                        LOGFILE
------------------------------ ------------------------------
/usr/tmp/PROD/o0068190.tmp     /usr/tmp/PROD/l0068190.tmp

REM Now tail log file on database node to see where it is at, near realtime
REM tail -f /usr/tmp/l0068190.tmp

Then on the Database node you can tail -f the above plsql_out or plsql_log files to see where program is at. Combine this with good logging techniques (date/time stamp on each entry) and you'll be able to know where your program is at.

If locks are the potential problem, then drill into those:

Currently held locks per concurrent request

set lines 150
col object_name format a32
col mode_held format a15
select /*+ ordered */
       fcr.request_id
,      object_name
,      object_type
,      decode( l.block
             , 0, 'Not Blocking'
             , 1, 'Blocking'
             , 2, 'Global'
             ) status
,      decode( v.locked_mode
             , 0, 'None'
             , 1, 'Null'
             , 2, 'Row-S (SS)'
             , 3, 'Row-X (SX)'
             , 4, 'Share'
             , 5, 'S/Row-X (SSX)'
             , 6, 'Exclusive'
             , to_char(lmode)
             ) mode_held
from   apps.fnd_concurrent_requests fcr
,      gv$process pro
,      gv$session sess
,      gv$locked_object v
,      gv$lock l
,      dba_objects d
where  fcr.phase_code = 'R'
and    fcr.oracle_process_id = pro.spid (+)
and    pro.addr = sess.paddr (+)
and    sess.sid = v.session_id (+)
and    v.object_id = d.object_id (+)
and    v.object_id = l.id1 (+)
;

REQUEST_ID OBJECT_NAME                      OBJECT_TYPE         STATUS       MODE_HELD
---------- -------------------------------- ------------------- ------------ ---------------
   1070780 VIRTUATE_GL_OLAP_REFRESH         TABLE               Not Blocking Exclusive

So there you have it - enough tools to keep you happy Track n Tracing! Maybe next time we'll look at tracing with bind / waits or PL/SQL Profiling concurrent programs

Catch ya!
Gareth
This is a post from Gareth's blog at http://garethroberts.blogspot.com

Related Posts

Thursday, August 12, 2010

EBS Bursting: Filter on XML Elements using XPATH in Bursting Control File

Just a quick post to give an example of a bursting control file that has multiple emails, with a filter based on XML Element in the data to select which email to send.

Oracle EBusiness Suite XML / BI Publisher Bursting Control File Example - Multiple Email Filter

Here it is:

<?xml version="1.0" encoding="UTF-8"?>
<xapi:requestset xmlns:xapi="http://xmlns.oracle.com/oxp/xapi">
<xapi:globalData location="stream"/>
<xapi:request select="/ARXSGPO_CPG/LIST_G_SETUP/G_SETUP/LIST_G_STATEMENT/G_STATEMENT">
<xapi:delivery>
<xapi:email server="${XXX_SMTP}" port="25" from="${XXX_SEND_FROM}" reply-to ="${XXX_REPLY_TO}">
<xapi:message id="email1" to="${XXX_CUST_EMAIL}" cc="${XXX_ARCHIVE_EMAIL}" attachment="true" content-type="html/text" subject="Statement from ${ORG_NAME} - ${STATEMENT_DATE}">Hello,
Please find attached the Statement for period to ${STATEMENT_DATE}.
${ORG_NAME}
Internal Ref: Customer Email
</xapi:message>
</xapi:email>
<xapi:email server="${XXX_SMTP}" port="25" from="${XXX_SEND_FROM}" reply-to ="${XXX_REPLY_TO}">
<xapi:message id="email2" to="${XXX_AGENT_EMAIL}" cc="${XXX_ARCHIVE_EMAIL}" attachment="true" content-type="html/text" subject="Statement from ${ORG_NAME} - ${STATEMENT_DATE}">Hello,
Please find attached the Statement for period to ${STATEMENT_DATE}.
Regards,
${ORG_NAME}
Internal Ref: Agent Email
</xapi:message>
</xapi:email>
</xapi:delivery>
<xapi:document key="${CUSTOMER_ID}_1" output="${XXX_SHORTNAME}_Statement_${STATEMENT_DATE}" output-type="pdf" delivery="email1">
<xapi:template type="rtf" location="xdo://AR.XXX_STATEMENT_PRINT.en.00/?getSource=true" filter="/ARXSGPO_CPG/LIST_G_SETUP/G_SETUP/LIST_G_STATEMENT/G_STATEMENT[XXX_CUST_MODE='Email']"/>
</xapi:document>
<xapi:document key="${CUSTOMER_ID}_2" output="${XXX_SHORTNAME}_Statement_${STATEMENT_DATE}_Agent" output-type="pdf" delivery="email2">
<xapi:template type="rtf" location="xdo://AR.XXX_STATEMENT_PRINT.en.00/?getSource=true" filter="/ARXSGPO_CPG/LIST_G_SETUP/G_SETUP/LIST_G_STATEMENT/G_STATEMENT[XXX_AGENT_MODE='Email']"/>
</xapi:document>
</xapi:request>
</xapi:requestset>

Catch ya!
Gareth

This is a post from Gareth's blog at http://garethroberts.blogspot.com

References

Related Posts

Tuesday, April 06, 2010

Environment Variables from database table - Oracle E-Business Suite

Are you running Oracle E-Business Suite (EBS) / Applications and want to get an operating system level environment variable value from a database table, for example for use in PL/SQL? Or perhaps to default a concurrent program parameter? Didn't think environment variables were stored in the database?

Try out out this query that shows you $FND_TOP:

select value
from   fnd_env_context
where  variable_name = 'FND_TOP'
and    concurrent_process_id = 
      ( select max(concurrent_process_id) from fnd_env_context );

VALUE
--------------------------------------------------------------------------------
/d01/oracle/VIS/apps/apps_st/appl/fnd/12.0.0

Or did you want to find out the Product "TOP" directories e.g the full directory path values from fnd_appl_tops under APPL_TOP?

col variable_name format a15
col value format a64
select variable_name, value
from   fnd_env_context
where  variable_name like '%\_TOP' escape '\'
and    concurrent_process_id = 
     ( select max(concurrent_process_id) from fnd_env_context )
order by 1;

VARIABLE_NAME   VALUE
--------------- ----------------------------------------------------------------
AD_TOP          /d01/oracle/VIS/apps/apps_st/appl/ad/12.0.0
AF_JRE_TOP      /d01/oracle/VIS/apps/tech_st/10.1.3/appsutil/jdk/jre
AHL_TOP         /d01/oracle/VIS/apps/apps_st/appl/ahl/12.0.0
AK_TOP          /d01/oracle/VIS/apps/apps_st/appl/ak/12.0.0
ALR_TOP         /d01/oracle/VIS/apps/apps_st/appl/alr/12.0.0
AME_TOP         /d01/oracle/VIS/apps/apps_st/appl/ame/12.0.0
AMS_TOP         /d01/oracle/VIS/apps/apps_st/appl/ams/12.0.0
AMV_TOP         /d01/oracle/VIS/apps/apps_st/appl/amv/12.0.0
AMW_TOP         /d01/oracle/VIS/apps/apps_st/appl/amw/12.0.0
APPL_TOP        /d01/oracle/VIS/apps/apps_st/appl
AP_TOP          /d01/oracle/VIS/apps/apps_st/appl/ap/12.0.0
AR_TOP          /d01/oracle/VIS/apps/apps_st/appl/ar/12.0.0
...

Or perhaps the full directory path to $APPLTMP?

select value
from   fnd_env_context
where  variable_name = 'APPLTMP'
and    concurrent_process_id = 
      ( select max(concurrent_process_id) from fnd_env_context );

VALUE
--------------------------------------------------------------------------------
/d01/oracle/VIS/inst/apps/VIS_demo/appltmp

NB: These queries assume your concurrent managers are running!

Catch ya!
Gareth
This is a post from Gareth's blog at http://garethroberts.blogspot.com

References

Update - Added example output and $APPLTMP output.

Wednesday, December 02, 2009

Lessons in Loose Coupling - Special Delivery

Photo credit: Kordite@Flickr

I'm generally nervous when I hear people that deal with software throw around the phrase "loosely coupled" with exhuberance. For me, loose coupling is one of the few phrases that resonates a feeling of ambivalence. An abstraction layer is a necessity, especially in proprietory software, to give you the coding hooks you need. Just be careful though to avoid Special Deliveries of Coal. Classic!

Catch ya!
Gareth
This is a post from Gareth's blog at http://garethroberts.blogspot.com

References

Related Posts

Monday, November 02, 2009

Concurrent Program parameters in XML / BI Publisher Template - eBusiness Suite

Just a short post with a note of how to get Oracle eBusiness Suite Concurrent Program Parameters into the output on an XML Publisher RTF Template.

There are two simple options, given an example parameter with token P_ORG_ID:

1. Add the concurrent program parameter as a field in the XML - this may be easier / necessary when you get to bursting or similar. Refer to the parameter using the usual <?P_ORG_ID?> RTF syntax.

2. Add the parameter using the param@begin syntax at the top of your RTF file:

<?param@begin:P_ORG_ID?>

And then refer the the value using dollar notation:

<?$P_ORG_ID?>

Catch ya!
Gareth
This is a post from Gareth's blog at http://garethroberts.blogspot.com

Related Posts

BI / XML Publisher 5.4pt start-indent problems in XSL-FO blocks on EBS Check Format recursive template

So you've just finished the first cut of your funky BI Publisher Check (Cheque) format template, and you feel pretty accomplished:

  • Logos, tables, non-preprinted stationary: Yes
  • Magnetic ink on printer loaded and ready to go: Yes
  • MICR font: Yes
  • Conditional signatures: Yes
  • Void check handling: Yes
  • Fixed Row Enumeration filler in tables via recursive templates: Yes




And then it all goes pear shaped … Doh!
Your filler recursive template does a dance to the right, indenting 5.4pt at a time.



With the cause in the XSL-FO template something like this: start-ident="5.4pt"



Well, you aren't the first person, or second to hit this, thanks theFurryOne for prompting this post. There is a workaround ... or two. You could edit the XSL-FO and replace the 5.4pt text with 0.0pt, but then you'd need to work with XSL-FO templates rather than RTF.

Alternatively you could put the following magic in the first cell of the filler recursive template:

<?attribute@incontext:end-indent;'0.0pt'?>
<?attribute@incontext:start-indent;'0.0pt'?>
<?attribute@incontext:padding-start;'0.0pt'?>

And a bit of a re-jig on the recurvsive sub template alignment. For example:



And we're rockin and rolling - no XSL-FO template needed, "pure" RTF:



Catch ya!
Gareth
This is a post from Gareth's blog at http://garethroberts.blogspot.com

References

Related Posts

Friday, September 11, 2009

Discoverer with EBS R12 - Sheet contains no data for custom Oracle eBusiness Suite Responsibility

So you're working with Discoverer 10g integrated with the Oracle eBusiness Suite on Release 12. You've installed and set everything up per Metalink/MOS Note 373634.1 "Using Discoverer 10.1.2 with Oracle E-Business Suite Release 12" plus created a custom application and responsibility to have it's own menu items corresponding to your Discoverer Workbooks/Worksheets.

You login to your new responsibility and click on your new menu entry that you created per Metalink/MOS Note "How to Create a Link to a Discoverer Workbook in Apps R12" and what do you get when you query subledger data such as Payables Invoices, or secured General Ledger data?

This sheet currently contains no data.

Well, its a quick fix. Simply save the following value in the "Initialization SQL Statement - Custom" profile option at Responsibility level for your new Responsibility.

begin gl_security_pkg.init; mo_global.init('M'); end;

Note: this may depend on your setup of the following profile options:

  • GL Ledger Name
  • GL: Data Access Set
  • MO: Operating Unit
  • MO: Security Profile

All sorted!

References

Related Posts

Tuesday, May 05, 2009

Oracle EBS Release 12.1 Released: Top 8 New ATG Features

Oracle has announced the availability of Release 12.1, plenty of buzz around on this and Beehive updates.

Update: Oracle Application Management / Change Management Pack 3.0 also released! See Patch 8333939

Let's take a look at the Top Eight R12.1 new ATG (Applications Technology) features from my perspective.

  1. Out of the box Techstack Upgrades. New R12.1.1 installations are Database 11.1.0.7, Java 6, Application Server (Java/OAF)/JDeveloper Runtime 10.1.3.4, Application Server (Forms/Reports) 10.1.2.3.
  2. OAF: Record History. R12.1.1 OAF allows viewing Row/Blame or Row/Who information similar to that available in Forms interface (who remembers Release 9 character mode key sequences ;-)
  3. OAF: BI Publisher Integration. R12.1.1 provides a personalizable "Print" button for OAF pages. Very Nice.
  4. OAF: Flexfield References support. R12.1.1 gives the same functionality as Forms UI for referencing other fields as part of flexfields.
  5. Attachments APIs. Bulk upload and web services/API for Document Attachments. Sounds great!
  6. Integration / SOA. A bunch of new functionality including Web Services Invocation Framework (WSIF), a step towards easier integration.
  7. Diagnostics upgrades. A variety of changes/functionality to Oracle Diagnostics including BI Publisher enablement for new diagnostics. Oracle Diagnostics is an excellent source of EBS information for techie types!
  8. Autoconfig: Share Applications Tier between environments. R12.1 introduces the ability to share applications executables between instances, like Production and Test. Probably not what you'd want for your typical PROD/DEV/TEST setup, but for a "Production" / "Production Support" mirror setup this is very tempting.

Plenty of other candidates, but those are the ones that took my fancy from the ATG bag of tricks!

So how am I doing against my Chinese New Year predictions?

  1. Release 12.1: AVAILABLE
  2. Patch 5612820 for EBS Release 11i: AVAILABLE
  3. Native Excel Templates for XML / BI Publisher: Still waiting for them!
  4. Further emergence of OBIA with EBS: Release 12.1.1 has specific mention of further integration with Business Intelligence Applications (OBIA), needs a closer look.
  5. Change Management Pack for the eBusiness Suite: AVAILABLE: Patch 8333939.
  6. New Oracle Application Express (APEX) components to allow APEX/EBS Integration/support: Still waiting, but I'm currently looking at alternatives for APEX/Apps integration for R12.x.
  7. Oracle Fusion Applications: As expected delayed until at least 2010.

Disclaimer: The words, ideas and opinions here are my own. Please don't assume they represent the opinion of any other person or organization. This information is based on various sources, so it may not match the actual functionality delivered!

Related Posts

Tuesday, February 10, 2009

Revisited: Changing the default layout format between RTF/PDF/Excel for BI / XML Publisher 11i Concurrent Requests: Patches 5612820, 7627832 here now!

Some good news for eBusiness Suite 11i "bippers" to kick off the year of the Ox. In a previous post I provided a temporary solution for the issue where the default value of the Output Format for a BI Publisher based concurrent request was hardcoded to PDF. Many people have requirements to default the output type to Excel (xls).

Happily, my custom solution is now obsolete.

I'm pleased to advise that on 9-Jan-2009 Oracle provided Patch 5612820 for Oracle eBusiness Suite Release 11i. This patch has a co-requisite, Patch 7627832 released 11-Dec-2008 that took me a while to track down! Now both major current install levels of R11i and R12 are catered for:

  • R11i and R12 Patch 5612820 DEFAULT OUTPUT FORMAT ATTRIBUTE AT TEMPLATE LEVEL IS REQUIRED
  • R11i Patch 7627832 1OFF:7017250:ATG RUP6:11.5.10.2:5612820 : BI PUBLISHER LAYOUT DEFAULTS TO 'RTF'

For R11i prerequisites, you'll need to be on ATG RUP 6 Patch 5903765 see Note:444524.1, which I previously wrote about here. Both patch 7627832 and ATG RUP 6 have a number of other prerequisites and postrequisites so you may have some patching to do to get your 11i environment up to the required patch level.

For R12, Patch 5612820 is included in Release Update Pack 12.0.6, otherwise you'll need R12.AD.A.delta.4 and R12.ATG_PF.A.delta.4 before it can be applied.

Here are some screenshots of the new Default Output Type field on the Templates page.

Release 11i:

Release 12:

And the new Profile Option FND: Default Template Output Type, which takes effect if there is no default output type on the XMLP Template setup.

Release 11i:

And verification that the default output format is indeed working...

Release 11i:

Release 12:

Nice, get patching!

Related Posts

Thursday, December 18, 2008

Email Address validation by Forms Personalization, Profile Options and Regular Expressions (regex) in the Oracle eBusiness Suite

In prior posts I've dealt with Forms Personalizations, and played with email e.g. via BI (XML) Publisher Bursting. In this post we'll come up with a simple Forms Personalization to ensure that data entry of email addresses results in well-formed email addresses. We'll use regular expressions: an underutilized feature in Oracle since 10g. Initially we'll look at the Remittance Email address on Supplier Sites. But the implementation will allow easy re-use for other email address fields in the EBS by storing the regular expression in a Profile Option.

The Regular Expression

Lets take a look at the regular expression I'll use for email address validation. This regular expression is a consolidation from a variety of sources, considers IPv4 and IPv6 addressing, and includes specific formatting to get around an Oracle Regex bug. Note it isn't the "full official" regex for email address validation - I wanted a one-liner! What does the regular expression below mean? Basically allow a bunch of characters before the @ and a bunch of characters after the @ considering IPv4 or IPv6 addressing. If anyone has any suggestions/issues/changes, please feel free to comment!

Update 27-JUL-2010: Changed regex to allow multiple hypens as it was only accepting one hyphen in hostname.

Update 09-MAY-2012: Changed regex to disallow leading/trailing periods in username and disallow leading periods in server/domain.

^[-a-zA-Z0-9_\+\^!#\$%&*+\/\=\?\`\|\{\}~\']+(\.([-a-zA-Z0-9_\+\^!#\$%&*+\/\=\?\`\|\{\}~\'])+)*@((([0-9a-zA-Z]*[-\w]*[0-9a-zA-Z])+\.)+[a-zA-Z]{2,9})|(\[([0-9]{1,3}(\.[0-9]{1,3}){3})|([0-9a-fA-F]{1,4}(\:[0-9a-fA-F]{1,4}){7})\])$

Profile Option

We'll store the regular express as a profile option. This allows a single source of truth for our email address validation logic. We could equally put it in a PL/SQL package, but then updates would require coding ... and no-one wants to code these days ;-)

Navigate to Application Developer, Profile
    Name: XXV8_REGEX_EMAIL
    Application: Virtuate (or your chosen modifications application)
    User Profile Option Name: Virtuate Regular Expression: Email Address
    Set to Site level visible/updatable only
    Save
Navigate to System Administrator, Profile, System
    Query "Virtuate Regular Expression: Email Address"
    Set site level value to the regular expression above
    Save

Forms Personalization

Okay, moving onto the good stuff. Now we'll setup the Forms Personalization to validate the Remittance Email address on the Supplier Sites, Payment tab.

Navigate to Payables Manager, Suppliers, Entry
    Query up an existing supplier and navigate to Sites
    Click Help, Diagnostics, Custom Code, Personalization from the menu.
    Enter the APPS password
Enter the Forms Personalization Header and Condition
    Seq: 10
    Description: Remittance Email Validation
    Trigger Event: WHEN-VALIDATE-RECORD
    Trigger Object: SITE
    Condition: nvl(:SITE.REMITTANCE_EMAIL,'X') != nvl(regexp_substr(:SITE.REMITTANCE_EMAIL,fnd_profile.value('XXV8_REGEX_EMAIL')),'X')
    Save
Enter the Forms Personalization Action
    Seq: 10
    Type: Message
    Description: Remittance Email Invalid
    Message Type: Error
    Message Text: Remittance Email is invalid. Please enter a well-formed email address. Ensure there are no spaces and check that periods are in the correct position. For example: firstname.lastname@gmail.com

Test it out!

Enter junk in the Remittance Email address on the Payment tab and save.

Code Reuse

To implement the same email address validation on other forms, run through the Forms Personalization steps above, identifying the new block and field, replacing SITE.REMITTANCE_EMAIL as required, and update the Error Message action message description / text with the field name.

If you identify a problem with the regular expression, you have one place to change it and it flows through to all the places you implemented the forms personalization the next time your Users log in!

Requirements/Restrictions

  • Regular Expression functionality (regexp_substr) requires that you are on Oracle Database 10g or higher.
  • The solution presented doesn't test email account validity via SMTP query for address verification.

References

Related Posts

 

Thursday, November 20, 2008

R12 Patch 5612820 Available: Changing the default layout format between RTF/PDF/Excel when submitting XML / BI Publisher Concurrent Request

In a previous post I provided a temporary solution for the issue where the default value for the Output Format of a BI Publisher based concurrent request was hardcoded to PDF.

For those those customers lucky enough to be on Release 12 I'm glad to say Oracle has provided a patch for this enhancement, the base issue documented in Metalink Note 401328.1 or Bug 5612820 or Bug 5036916:

  • R12 Patch 5612820 DEFAULT OUTPUT FORMAT ATTRIBUTE AT TEMPLATE LEVEL IS REQUIRED

This patch is included in R12 Release Update Pack 12.0.6, but as a note at the time of writing 5612820 is available on controlled release ... not sure of the reason since its in 12.0.6. The code base required for applying 5612820 is:

  • R12.AD.A.delta.4
  • R12.ATG_PF.A.delta.4

For those people on Release 11i, unfortunately you'll have to wait a little longer ... still awaiting the 11i version of the patch.

Here's a screenshot of the new Default Output Format field on the Templates page.

And verification that the default output format is indeed working...

Nice!

Tuesday, November 11, 2008

Enhancing the Oracle eBusiness Suite 11i/12 Homepage Menu via Firefox, Greasemonkey, XPath, Javascript & DOM: aka Foxiness Menus

Update: 12-Nov-08 Extended script for Release 12

The Background

One of the most user-unfriendly and neglected aspects of the eBusiness Suite in my opinion is the homepage. No sooner than you arrive there you really just wanna get out, and get out fast! The majority of people I know, including myself, do one of the following:

  • Save one function from each of your primary responsibilities as a "Favorite" and thereafter only use the "Favorites" area of the homepage
  • After choosing the responsibility just blinding pick the first "Forms" based menu entry so that you get into the forms navigator menu. At least for any responsibility that still has a majority of forms.

One of the aspects that I've desired for a while is a tree based Responsibility menu structure. Now Oracle does provide this, but when I last checked, admitedly a few years ago, it required Oracle Portal integration. As a bit of a refresher, there is a profile option called "Self Service Personal Home Page mode" which used to be able to be set to "Personal Home Page" and then clicking on the responsibility went straight into forms for a Forms based application.

But from 11.5.10, "Self Service Personal Home Page mode" must be set to "Framework Only" and hence you now have an extra couple of mouse clicks to get to where you want to go. At least EBS Release 11i/12 has show/hide responsibilities.

Where is all this going you ask? Well, for a bit of late night entertainment ... sad I know ;-) plus a bit of experimentation, considering Firefox's 4th Birthday was just a couple of days ago, and since I'm now comfortable using Firefox with EBS, I've created a Greasemonkey script to give a smidgen of intelligence to the Framework homepage Responsibility menu.

Introducing the Virtuate Oracle EBS Homepage Menu enhancement Greasemonkey Script!

So, what does this do? Well it turns this:

Into this:

With a quick video here ... apologies if its a bit big:

How do I install it?

Assuming you have Firefox and Greasemonkey, just click on this UserScripts.org link and then click the install button! If you have any hassles, you're more than welcome to fix the code on UserScripts.org (or let me know)! Open Source rocks!

Requirements

References

Related Posts

 

Saturday, July 12, 2008

Revisited: Why is mod_plsql not supported with the Oracle eBusiness Suite Release 12? Fusion Crossroads #1

In a prior post I raised the question of why mod_plsql was not supported with the eBusiness Suite R12. Excellent to see that Oracle was listening to the community and as Steven Chan's post highlights, Metalink Note:726711.1 has been created to address this question.

In summary you can still run mod_plsql connecting to the eBusiness Suite as long as the Apache/mod_plsql are in an isolated install and you address security and associated considerations. And of course as a customization it is not supported under the guise of the eBusiness Suite ... but hey your customizations never are!

Guess that means the same for the other sweet tools you'd connect/integrate to your eBusiness Suite ... like Application Express (APEX), PHP/Zend, Ruby on Rails, etc.

Wednesday, July 09, 2008

Where do I get the XML file or request output file for my BI Publisher Report / Concurrent Request?

A quick post ... it's been a frenetic few months, so blog posts a bit thin lately but plenty of good stuff in the pipeline!

Generally when I'm designing a BI Publisher/XML Publisher report I'll create a concurrent program that generates XML, I'll follow the usual steps:

  1. Setup the concurrent program to output Text
  2. Run it to ensure its working
  3. Switch the concurrent program to output XML
  4. Run the concurrent program to output XML
  5. SFTP/copy the o*.out XML file from $APPLCSF/$APPLOUT
  6. Load it into Word via the BI Publisher Desktop plugin and design the layout "on the run".
  7. Setup the BI Publisher Data Definition/Template
  8. Perform system/unit tests

Is there an easier way to get the XML file from a concurrent request? Sure is - nice and easy through the front end.

Get the XML File from a BI Publisher based concurrent request/report:

  1. View->Requests
  2. Find the request you're interested in
  3. Click on Diagnostics button
  4. Click the View XML
  5. Save the file to your PC by doing File->Save As, *.xml

But where does the XML file live?

Well, by default it is $APPLCSF/$APPLOUT/o{REQUEST_ID}.out.

But if that's the XML file, then where does the actual output file reside as the location of the XML file is where normal request output resides?

Get the Request Output File for a BI Publisher based concurrent request/report:

The output is $APPLCSF/$APPLOUT/{REPORTNAME}_{REQUEST_ID}_{COUNT}.PDF|RTF|EXCEL|HTML

Where

  • REPORTNAME is the concurrent program short name,
  • REQUEST_ID is the concurrent request ID
  • COUNT is a counter based on the number of times a request has been re-published.
  • One of PDF, RTF, EXCEL, HTML is the file extension/type dependent on the output formats chosen.

An example is: XXXX_FNDSCURS_2803880_1.EXCEL

Output file location courtesy of Tim's post here.

Cool, file locations identified!

 

Friday, June 06, 2008

Find JDeveloper with OAF / OA Extension patch for Oracle eBusiness Suite Release 11i / Release 12

I've been working with Java more recently, and thought this might be a handy reference.

In order to find the right JDeveloper match up for extending the Oracle eBusiness Suite / Applications, point your web browser to http://host:port/OA_HTML/OAInfo.jsp, then choose the matched JDeveloper patch.

Release 11i

OA Framework 5.10 patch JDeveloper 9i Patch

ATG.PF.H (patch 3438354 or Oracle Applications 11.5.10) or 11.5.10K

Patch 4045639 9IJDEVELOPER WITH OA EXTENSION ARU FOR FWK.H
ATG PF CU1 (patch 4017300) or 11.5.101CU Patch 4141787 9IJDEVELOPER WITH OA EXTENSION ARU FOR CU1
ATG PF CU2 (patch 4125550) or 11.5.102CU Patch 4573517 Oracle9i JDeveloper with OA Extension for 11.5.10 CU2
11i.ATG_PF.H RUP3 (patch 4334965) or 11.5.103CU Patch 4725670 9IJDEVELOPER WITH OA EXTENSION ARU FOR 11i10 RUP3
11i.ATG_PF.H RUP4 (patch 4676589) Patch 5455514 9IJDEVELOPER WITH OA EXTENSION ARU FOR 11i10 RUP4
11i.ATG_PF.H RUP5 (patch 5473858) Patch 6012619 9IJDeveloper With OA Extension ARU FOR 11i10 RUP5

11i.ATG_PF.H.RUP6 (patch 5903765)

Patch 6739235 9IJDeveloper With OA Extension ARU FOR 11i10 RUP6

Release 12

ATG Release 12 Version

JDeveloper 10g Patch
12.0.0 Patch 5856648 10g Jdev with OA Extension
12.0.1 (patch 5907545) Patch 5856648 10g Jdev with OA Extension
12.0.2 (patch 5484000 or 5917344) Patch 6491398 10g Jdev with OA Extension ARU for R12 RUP2 (replaces 6197418)
12.0.3 (patch 6141000 or 6077669) Patch 6509325 10g Jdev with OA Extension ARU for R12 RUP3
12.0.4 (patch 6435000 or 6272680) Patch 6908968 10G JDEVELOPER WITH OA EXTENSION ARU FOR R12 RUP4
12.0.5 - no full 12.0.5 release planned only individual
product suites like HRMS and Financials 12.0.5
n/a
12.0.6 (patch 6728000 or patch 7237006) Patch 7523554 10G Jdeveloper With OA Extension ARU for R12 RUP6
12.1 (Controlled Release - only included for completeness) Patch 7315332 10G Jdev with OA Extension ARU for R12.1 (Controlled Release)
12.1.1 (rapidInstall or patch 7303030) Patch 8431482 10G Jdeveloper with OA Extension ARU for R12.1.1
12.1.2 (patch 7303033 or patch 7651091) Patch 9172975 10G Jdeveloper with OA Extension ARU for R12.1.2
12.1.3 (patch 9239090 or patch 8919491) Patch 9879989 10G Jdeveloper with OA Extension ARU for R12.1.3

For details latest details see Metalink Note:416708.1 or Note:330236.1

Monday, April 07, 2008

Oracle Discoverer Statement of Direction March 2008

Quite a bit of noise and even FUD surrounding the position of Oracle Discoverer and its fit (or lack of fit) within the Fusion roadmap. Good to see Oracle come out with a statement of direction on this last month firmly cementing its place in the BI toolset and hence Fusion Middleware stack.

For details see: Statement of Direction Oracle Business Intelligence Discoverer March 2008

Great to keep that Disco happenin!

Wednesday, April 02, 2008

BI Publisher: How do I replace linefeeds, newline or carriage return whitespace / special characters

Over on the forums, one post came up that is usually a quick answer.

How do I replace newlines (carriage returns or linefeeds) with a space? Well, with BI Publisher Template Builder things weren't exactly going to plan.

Basically you've got an XML element like this:

<sort_field1_inv>110
000
000
110000
0000
0000</sort_field1_inv>

And you want the output to be this: 110 000 000 110000 0000 0000

Should be easy. The 10.1.3.2.0 documentation for xdofx has replace function for replacing strings. Only problem is no mention of special characters. Doh! Okay, just throw in the chr(10) function and should be fine.

So let's try it out:

<?xdofx:replace(SORT_FIELD1_INV,chr(10),' ')?>  

Uh-oh: lovely error message on preview including:

oracle.xdo.parser.v2.XPathException: Extension function error: Method not found 'chr' 

Oh well, lets try some xsl magic similar to the following, including a bunch of variations not presented here!:

<xsl:value-of select='translate(/SORT_FIELD1_INV,"&#x20;&#x9;&#x10;&#x13;&#xD;&#xA;"," ")'/>

Nope, that didn't change anything, still newlines coming through.

Hmm, now what version of the BI Publisher Desktop Word Addin are on? In my case, a tad behind the times, but still matching the documentation that says chr should be available - 10.1.3.2.0 Build 87.

Luckily with Google, a ounce of Japanese reading ability, and of course Babelfish - found that 10.1.3.3.1 or higher would fix this.

So downloaded BI Publisher Desktop 10.1.3.3.2 from this page, uninstalled 10.1.3.2.0, installed 10.1.3.3.2 and now its all go, solution is as previously:

<?xdofx:replace(SORT_FIELD1_INV,chr(10),' ')?>  

Sorted!

UPDATE: Since the eBusiness Suite is still on 5.6.3, the above solution does not work. Here is an alternative solution:

<fo:inline linefeed-treatment="treat-as-space"><?SORT_FIELD1_INV?></fo>

On with it!