Are there some little things in life that frustrate you?
- Java Web Start Available for EBS 12.1 and 12.2
- Using Java Web Start with Oracle E-Business Suite (Doc ID 2188898.1)
Data Warehousing, Oracle eBusiness Suite/Applications technical news, views and developments.
Are there some little things in life that frustrate you?
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
Posted by
Gareth
at
11:03 AM
4
comments
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:
There are a number of strategies to track and trace where things are at for a running request, these include:>
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:
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
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
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
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:
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!
Posted by
Gareth
at
10:16 AM
3
comments
Labels: dba, development, ebiz, fnd, interfaces, performance, query, reports, techie, troubleshooting
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.
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
Posted by
Gareth
at
10:31 PM
8
comments
Labels: ar, bi publisher, development, ebiz, techie
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!
Posted by
Gareth
at
11:12 AM
9
comments
Labels: appsdba, atg, dba, development, ebiz, fnd, interfaces, query, techie, troubleshooting
It had to happen. I've moved away from very retro hardware requirements and a couple of hacks to something much simpler, and more applicable to "modern" computers ie. those with USB ;-)
No. 8 wire solution no longer needed ... luckily the wires aren't that thick :-)
Old:
New:
Bonus points to Readers that guess the application of this stuff!
Catch ya!
Posted by
Gareth
at
12:43 PM
4
comments
Revisited: Following the upgrade from Metalink to My Oracle Support (MOS) I've updated the Note and Bug search engines (files oranote.xml and orabug.xml) per my prior post.
Revisited again 30-NOV-2010: Following the ARU change I've updated the Patch search engine (file orapatch.xml) per my prior post.
Navigate directly to a specific Oracle Patch, MOS/Metalink Note or Bug, speeding things up & sidestep that Flash! You gotta know the Patch/Note/Bug number you wanna get to:
Posted by
Gareth
at
2:29 PM
0
comments
Disclaimer: This page may become out of date very quickly!
Only a couple of days of Metalink access left, with the change over to full My Oracle Support due on Friday - 6 November 09.
For me this is a somewhat sad occasion. Metalink has been around for such a long time, and has been a great companion, it will be a shame to see it go.
We now herald in the era of MOS (My Oracle Support). And of course, with any shiny new thing, there have been discussions and more discussions. With that debate there has been some good feedback, some negative. To be honest I'm a bit nervous about this change. I'd be keen to know why the APEX interface of Metalink is on the out, when APEX was just brought in for the latest Oracle Store, and with some very sexy functionality on the horizon. The answer is sure to be a double edged sword ;-)
At the end of the day MOS as I've seen so far just doesn't tick all the boxes for me. That will hopefully change. Hopefully soon. My biggest gripe of course would be Flash versus HTML. Given Oracle's current catchphrase "Open. Complete. Integrated." I'd have thought Flash would be a little further down the list than HTML for many of the MOS components. One issue related to this can be summed up by the following screenshot. The eagle-eyed amongst you will spot the problem in the following picture:
… with the issue being the Firefox "Find" not finding "Font" when it was present many times on the MOS search results presented. A bit of a hassle that something I use regularly ain't gonna work. Guess I'll need to have two sessions up, one Flash, one HTML.
Fortunately, it seems an HTML interface will still be available according to Note 841061.1, with limited functionality including SR Management? BUT WAIT ... while I was writing this post I got another MOS related announcement... No SR Management??? Hmm, this is specific to "On Demand" functionality. Fingers crossed for SR Management through the HTML only interface!
The HTML option will not support the following On Demand functionality:
- Service Request management
- Change Request Management
- Viewing performance reports
And there are some other little things that will probably come out in the wash, like email notifications no longer linking directly to an SR:
Prior:
New:
Oh, and of course, let's hope the powers that be manage to keep the gremlins away...
Exception Gremlin:
I/O Gremlin:
Error 1088 Gremlin:
Internal Gremlin:
Well ... I guess we'll find out where we stand in a couple of days!
Catch ya!
Posted by
Gareth
at
2:59 PM
2
comments
Labels: apex, email, HTML, internet, MOS, search, techie, troubleshooting
Apologies for the cryptic title on this one. The issue is a simple but subtle one ... and if you're not an eBusiness Suite customer, but interested in the BIP HTML formatting part, please read on as the discussion may be relevant.
In the Oracle eBusiness Suite Release 12 there is an out-of-the-box solution for sending Payables Remitttance Advice notices via Email. The program is "Send Separate Remittance Advices" and is integrated into the Payments Process. The standard solution utilizes XML Publisher under the covers, but (at the time of writing) has been coded to force HTML output for the Email content and uses its own delivery mechanism, rather than a more flexible bursting one that could attach PDFs to emails. Now, this means there are a couple of limitations with the output format for these Remittance Advice notices:
So the out-of-the-box solution has these gotcha's until such time as it uses a "fixed-format", "all content embedded in email" delivery method such as attaching a PDF to the email with the advice details...
BUT WAIT, there may be workarounds.
For Issue 1. we can tell XML / BI Publisher to embed Inline CSS rather than CSS Stylesheets using the following undocumented XML Publisher configuration. Place the following configuration in the xdo.cfg file and put it in eBusiness Suite $XDO_TOP/resource directory. Usual caveats apply; please test this before rolling to Production. Also be aware that this may affect all HTML output, with output file sizes likely to increase.
<config version="1.0.0" xmlns="http://xmlns.oracle.com/oxp/config/"> <properties> <!-- html-css-embedding valid values embed-to-element | embed-to-header | externalize --> <property name="html-css-embedding">embed-to-element</property> </properties> </config>
For Issue 2. one trick is to place your formatting inside a Table and fix the width / height to that which you require. This may take a smidgen of tweaking, but at least you can get something that looks and prints nicely.
For Issue 3 ... well, I'm still working that one - no workaround from Support yet to embed the images in the HTML. Will keep you posted. UPDATE: Enhancement request (ER) Bug 9834226 has been raised for the issue of inability to embed images in Remittance Advice.
Hope this helps.
Catch ya!
Gareth
This is a post from Gareth's blog at http://garethroberts.blogspot.com
Posted by
Gareth
at
11:09 PM
15
comments
Labels: ap, bi publisher, ebiz, email, HTML, internet, techie
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:
All sorted!
Posted by
Gareth
at
1:20 PM
3
comments
Labels: development, discoverer, ebiz, integration, reports, security, techie, troubleshooting
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.
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?
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!
Posted by
Gareth
at
2:20 PM
10
comments
Labels: appsdba, atg, bi publisher, dba, development, ebiz, fnd, reports, techie
Revisited again 30-NOV-2010: Following the ARU change I've updated the Patch search engine (file orapatch.xml)
Update: The Note and Bug search engines (files oranote.xml and orabug.xml) have been updated post upgrade to My Oracle Support (MOS).
Navigating directly to a specific Oracle Patch, Metalink Note or Bug is a bit of a chore. Not to mention Metalink / My Oracle Support (MOS) could do with a mobile interface to speed things up & sidestep that Flash! Cut'n'pasting from my text file with the URL templates was getting tedious. So with inspiration from Eddie Awad's posts, I've put together three custom Firefox Search Engines, well, not really Search Engines, but "I'm Feeling Lucky" engines. You gotta know the Patch/Note/Bug number you wanna get to:
Once you've installed them, hit Control-K, choose the Patch, Note or Bug "search engine" (Control-Down Arrow), enter or paste the exact Patch, Note or Bug number, hit enter and voila, you're there ... if you're logged into the target site!
Give it a try: e.g. Patch 5612820, Note 444524.1, Bug 6074498.
If you get the XML files, put them in your C:\Program Files\Mozilla Firefox\searchplugins folder (or similar), restart your browser and you'll be up and running!
If you need a generic Metalink search engine in the same vain look here.
PS. You will need your Metalink (MOS) username/password to get to the target pages.
PPS. Hoping Oracle doesn't change the URL structures 2 minutes after I post this ;-) Let me know if I don't notice when that happens!
Eddie's posts:
Gong Xi Fa Cai
Happy Chinese New Year - for January the 26th!
2008 has been and gone, and we're well into 2009. Let's look at some of potential up and coming tidbits for the Oracle eBusiness Suite.
1. Release 12.1: I was expecting this late last year, but we saw 12.0.6 instead. Release 12.1 promises to deliver a number of things, the main one for me will be a whole swag of XML / BI Publisher layouts for standard reports. A couple of Metalink oops My Oracle Support Notes indicate R12.1 is in controlled release. Haven't had a chance to track down the patch number .. anyone have it? For documentation on R12.1 see the Release Content Documentation.
2. Patch 5612820 for EBS Release 11i: This minor piece of functionality to default the Layout Format for BI Publisher based concurrent requests has been nagging me. Its out for R12, and actually its already out for R11i (9-Jan-2009) however ... the Default Layout on the XMLP side is there but the critical concurrent processing portion to default the layout on a concurrent request was missing so its back with Development. I'll keep you posted.
3. Native Excel Templates for XML / BI Publisher: This one may be subtle but for me its a biggie. Release 12 FSGs with native Excel Templates I believe are in controlled release. RTF templates have their moments, but I know a number people are looking for Excel templates. Excel and Accounting live together, and its high time they were standard for XML Publisher with eBusiness Suite. Here's hoping for more than just FSG native Excel templates.
4. Further emergence of OBIA with EBS: I've spent quite a bit of time with the Business Intelligence products lately, and the Oracle Business Intelligence Applications (OBIA) stack is a formidible beast. Albeit complex, there is plenty of sense and underlying power. I think only a handful of people have tapped into this and I'm keen to see how it plays out this year.
5. Change Management Pack for the eBusiness Suite: I'll be watching this closely too - the important parts from my perspective will be automated patching, and the ability to cut your own custom patches for applying using adpatch - nice, but of course I'm assuming you'll need front up with a few $$ too. Watch this space.
6. New Oracle Application Express (APEX) listener: Apparently due in APEX v4, the new listener will hopefully once again push APEX squarely back into the realm of the EBS after mod_plsql's support was tragically cast aside, only to resurface after clarification from Oracle :-) Any update on this David?
7. Oracle Fusion Applications: I wasn't sure whether to put this in, but I think its worth a mention. Perhaps shouldn't include it here with the emphasis on 2009 as my gut feel is that we'll be waiting a tad longer than that. However, if you've heard anything let us know!
8. What's happening for me in 2009? Well, fingers crossed I'll get stuck into a couple of projects that should have seen the light in 2008!
Do you have any hopes/requests/tidbits for Oracle eBusiness Suite action in 2009? Post a comment.
In my neck of the woods a whole lot went on in 2008 including Website launches, Virtuate contract wins, Product demos, a GreaseMonkey Script release, attending OpenWorld for the first time, joining the NZOUG committee and helping to organize the NZOUG Conference, a new phone (Nokia E71 - nice), a new laptop (Toshiba A300 Y01 running Vista 64 ouch) and a ton more. Despite the gloomy economic outlook I'm hugely looking forward to 2009, the year of the Ox.
Disclaimer: The words, ideas and opinions here are my own. Please don't assume they represent the opinion of any other person or organization.
Posted by
Gareth
at
9:59 PM
1 comments
Labels: apex, appsdba, atg, bi publisher, ebiz, NZOUG, Openworld 2008, techie, windows
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.
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})\])$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
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
Enter the Forms Personalization Action
Enter junk in the Remittance Email address on the Payment tab and save.
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!
Posted by
Gareth
at
11:02 PM
7
comments
Labels: ap, development, ebiz, fnd, personalizations, regex, techie
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:
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:
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!
Posted by
Gareth
at
11:59 PM
4
comments
Labels: atg, bi publisher, development, ebiz, personalizations, reports, techie
An interesting one today; a Discoverer Plus Workbook called via an eBusiness Suite Menu errored out with:
OracleBI Discoverer: "Contact with the Discoverer Server has been lost. To continue your work, please restart Discoverer Plus. If this problem persists, please contact your Oracle Application Server administrator."
Doh! Who's that Application Server administrator ... oh! me :-(
Attempting to expand the workbook, after going directly into Discoverer Plus errors with:
"This workbook cannot be expanded".
Hmm, okay, let's look at the Java Console:
Reading bytes from input stream Unmarshalling response Session ID:2008111408252618857 BI Beans Graph version [3.2.3.0.37] DiscoApplet[0]: Error received by GlobalStatusListener.workerFailed() in SessionUI.java DiscoNetworkException - Nested exception: org.omg.CORBA.COMM_FAILURE: vmcid: SUN minor code: 208 completed: Maybe DiscoNetworkException - Nested exception: org.omg.CORBA.COMM_FAILURE: vmcid: SUN minor code: 208 completed: Maybe org.omg.CORBA.COMM_FAILURE: vmcid: SUN minor code: 208 completed: Maybe at com.sun.corba.se.internal.iiop.IIOPConnection.purge_calls(IIOPConnection.java:438) at com.sun.corba.se.internal.iiop.ReaderThread.run(ReaderThread.java:70) at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source) at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source) at sun.rmi.server.UnicastRef.invoke(Unknown Source) at oracle.disco.remote.rmi.serverbase.RMISessionBase_Stub.sendRecieveData(Unknown Source) at oracle.disco.model.corbaserver.ModelInterface.sendRecieveData(Unknown Source) at oracle.disco.model.corbaserver.ModelInterface.SendReceiveData(Unknown Source) at oracle.disco.model.corbaserver.serverrequest.DsrOpenWorkbook.xmlUpdateServer(Unknown Source) at oracle.disco.model.corbaserver.serverrequest.DsrCorbaXML.corbaUpdateServer(Unknown Source) at oracle.disco.model.corbaserver.serverrequest.DsrGeneralCorbaXML.updateServer(Unknown Source)
Ouch! Sounds like it hurts!
A quick blast through Metalink (oops MOS - My Oracle Support) and a bunch of old bugs later, not looking promising, however there's one major clue - the problem is only occurring for some Users. Okay, lets do a side by side comparison of Profile Options as a first guess:
select * from ( with prof_di as ( select 'USER' level_name, fu.user_name level_value, fpo.profile_option_id, fpot.user_profile_option_name, fpo.profile_option_name, fpov.profile_option_value from fnd_user fu, fnd_profile_options fpo, fnd_profile_option_values fpov, fnd_profile_options_tl fpot where fu.user_id = fpov.level_value and fpo.profile_option_id = fpov.profile_option_id and fpo.profile_option_name = fpot.profile_option_name and fpot.language = 'US' and fpov.level_id = 10004 and fu.user_name = 'SYSADMIN' ), prof_gr as ( select 'USER' level_name, fu.user_name level_value, fpo.profile_option_id, fpot.user_profile_option_name, fpo.profile_option_name, fpov.profile_option_value from fnd_user fu, fnd_profile_options fpo, fnd_profile_option_values fpov, fnd_profile_options_tl fpot where fu.user_id = fpov.level_value and fpo.profile_option_id = fpov.profile_option_id and fpo.profile_option_name = fpot.profile_option_name and fpot.language = 'US' and fpov.level_id = 10004 and fu.user_name = 'ROBERTSG' ) select pd.profile_option_id , pd.user_profile_option_name , pd.profile_option_name , pd.profile_option_value d_value , pg.profile_option_value g_value , decode(pd.profile_option_value,pg.profile_option_value,'EQUAL','DIFF') status from prof_di pd , prof_gr pg where pd.profile_option_name = pg.profile_option_name (+) union select pg.profile_option_id , pg.user_profile_option_name , pg.profile_option_name , pd.profile_option_value d_value , pg.profile_option_value g_value , decode(pg.profile_option_value,pd.profile_option_value,'EQUAL','DIFF') status from prof_di pd , prof_gr pg where pg.profile_option_name = pd.profile_option_name (+) ) where status != 'EQUAL';
The query gets output that includes the following:
USER_PROFILE_OPTION_NAME PROFILE_OPTION_NAME D_VALUE G_VALUE STATUS
------------------------ ------------------- ----------- ------- ------
ICX: Territory ICX_TERRITORY NEW ZEALAND AMERICA DIFF
Whenever I see anything related to "NLS_LANG" or "Territory" the alarm bells start ringing, and sure enough - for the problem User, just a quick navigate to the "Preferences" responsibility, General Preferences and change the Territory from New Zealand to United States and we're off and laughing again! Alternatively could have looked at the ICX: Territory profile option.
What was the real underlying problem? My guess is a clash on date formats for default parameter values ... but that's left for another day.
Posted by
Gareth
at
4:57 PM
7
comments
Labels: appsdba, discoverer, ebiz, fnd, reports, techie, troubleshooting
Update: 12-Nov-08 Extended script for Release 12
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:
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.
So, what does this do? Well it turns this:
Into this:
With a quick video here ... apologies if its a bit big:
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!
Posted by
Gareth
at
11:58 PM
13
comments
Labels: atg, browsers, development, ebiz, fnd, greasemonkey, open source, personalizations, techie