EBS 11i升级R12

从EBS 11i升级至R12,总的来说更变较大的就是多OU访问(MOAC)和表视图的更变。

因为标准功能oracle都帮我们做了升级,本文档所说的11升12都是客户化的更改。

多OU访问[1][2]

不同于11i限定ORG_ID的方式,使得视图只能筛选单个OU的数据,R12使用安全策略来控制OU数据的访问,可以用类似下面的执行语句注册客户化的应用:

DECLARE

CURSOR c_init_mo IS

SELECT fa.application_short_name

FROM fnd_application fa

WHERE fa.application_short_name LIKE 'ZZ%';

l_init_app VARCHAR2(20);

BEGIN

FOR l_init_app IN c_init_mo

LOOP

fnd_mo_product_init_pkg.register_application(l_init_app.application_short_name, 'SEED', 'N');

END LOOP;

END;

由于是将11的功能完全移植到R12,form与报表需要设置OU访问层次的地方全部设为单个OU。

FORM更改当中,有可能用到11i当中是视图,R12当中是同义词的表(例如PO_HEADERS),如果简单进行编译,有可能取不到任何数据,在pre-form的地方需要加以语句进行初始化:

MO_GLOBAL.init(‘ZZOM’);

报表遇到类似的情况也要做相应处理:

切换到:系统管理员->系统管理->并发->程序

查询出需要设置的请求,设置为单个OU。

数据库对应字段为:

fnd_concurrent_programs.multi_org_category (S,M)

选取FORM源代码

可能会出现之前实施标准不一致,出现同一个form在form/ZHS出现forms/US出现以及form目录都出现,并且时间不一样的情况。为了避免以后由于版本不对造成的一系列问题。在取form源代码的时候可以进入APPL_TOP,使用下面的语句筛选最符合要求,时间离fmx最近的一个fmb源代码:

find . -name "ZZCSTDBT034F.fmb" -exec ls -l {} \;

R12视图更变

处理视图更变是R12升级最占时间的一项工作,一些客户化的程序包使用11i当中存在,R12当中不存在;R12表字段更变、表字段缺失;R12数据存储方式更变的各种情况。

以下列出一些常见的表视图更变实例及替换:(肯定还有其他的)

GL_TRANSLATION_RATES_V

基表筛选或新增视图

RA_ADDRESSES_ALL

基表筛选或新增视图

RA_SITE_USES_MORG

基表筛选或新增视图

RA_ADDRESSES

基表筛选或新增视图

AR_CUSTOMERS_V

基表筛选或新增视图

RA_CUSTOMERS

ar_customers

RA_HCUSTOMERS

ar_customers

RA_CONTACTS

基表筛选或新增视图(HZ_CUST_ACCOUNT_ROLES)

AP_AE_HEADERS_ALL

XLA_AE_HEADERS

AP_AE_LINES_ALL

XLA_AE_LINES

AP_ACCOUNTING_EVENTS_ALL

XLA_EVENTS

AP_BANK_ACCOUNTS_ALL

CE_BANK_ACCOUNTS

AP_BANK_ACCOUNT_USES_ALL

CE_BANK_ACCT_USES_ALL

AR_CUSTOMER_BANK_ACCOUNTS_V

特别对待

AP_BANK_BRANCHES

CE_BANK_BRANCHES_V

AP_CHECK_FORMATS

IBY_FORMATS_B

AP_CHECK_STOCKS_ALL

CE_PAYMENT_DOCUMENTS

RA_SITE_USES_ALL

HZ_CUST_SITE_USES_ALL

RA_SITE_USES

HZ_CUST_SITE_USES_ALL

AR_HCUSTOMER_PROFILE_AMOUNTS

HZ_CUST_PROFILE_AMTS

AR_VAT_TAX_ALL

AR_VAT_TAX_ALL_B

ZX_RATES_B

AR_CUSTOMER_PROFILE_AMOUNTS

HZ_CUST_PROFILE_AMTS

GL_TRANSLATION_RATES

期间汇率不用了

注意:这里只提到了_ALL的表,实际开发肯定要将不带_ALL的也考虑进更替项当中。考虑到form当中也可能用到这些表或者视图(R12不用,但是表存在),建议升级客户化修改当中首先将这些表的apps同义词删除!

补充:RA_ADDRESSES_ALL发现,基于11i的表视图筛选有问题!!!有部分数据筛选不出来,hz_loc_assignments更变比较大,建议RA_ADDRESSES_ALL直接用表hz_cust_acct_sites_all替换

其中,对于AP_AE_HEADERS_ALL与AP_AE_LINES_ALL表,部分字段R12存储在其他表当中了,比如AP_AE_LINES_ALL的SUBLEDGER_DOC_SEQUENCE_ID存在了GL_IMPORT_REFERENCES表(可能是考虑到了数据重复的情况,11里面查询subledger_doc_sequence_value,subledger_doc_sequence_id全部对应)。具体可以视情况而定,不清楚可以查看相应oaf界面。

可以用以下SQL确认subledger_doc_sequence_id字段:

SELECT a.subledger_doc_sequence_id,

a.subledger_doc_sequence_value,

b.subledger_doc_sequence_id,

b.subledger_doc_sequence_value

FROM gl_import_references a,

ap_ae_lines_all      b

WHERE a.gl_sl_link_table = 'APECL'

AND b.gl_sl_link_id = a.gl_sl_link_id

AND a.subledger_doc_sequence_id IS NOT NULL

AND a.subledger_doc_sequence_value != b.subledger_doc_sequence_value

数据变换比较大的是这两个表:

AP_BANK_ACCOUNTS_ALL、AP_BANK_ACCOUNT_USES_ALL

在11当中,客户银行账户、供应商银行账户、内部银行账户全部存在上面2个表当中,而R12,内部银行账户存储在列出的变换表中,但是客户银行账户、供应商银行账户分别以其他的方式存储了。有些包使用供应商地点ID、客户地点ID关联银行账户就会出错。

这种情况通过在界面上进行查看,可以找出在12当中筛选出供应商、客户银行账户的相关信息:

客户银行账户:

SELECT iby_bank.currency_code,

cust_site.site_use_id,

ce_br.bank_name,

ce_br.bank_branch_name,

iby_bank.bank_account_name

FROM iby_external_payers_all iby_player,

iby_pmt_instr_uses_all  iby_use,

hz_cust_site_uses_all   cust_site,

iby_ext_bank_accounts   iby_bank,

ce_bank_branches_v      ce_br

WHERE iby_use.ext_pmt_party_id = iby_player.ext_payer_id

AND iby_player.acct_site_use_id = cust_site.site_use_id

AND iby_bank.ext_bank_account_id = iby_use.instrument_id

AND ce_br.branch_party_id(+) = iby_bank.branch_id

AND cust_site.site_use_id = 10509;

供应商银行账户:

SELECT iby_bank.currency_code,

ce_br.bank_name,

ce_br.bank_branch_name,

iby_bank.bank_account_name,

iby_bank.bank_account_num,

iby_player.ext_payee_id

FROM iby_external_payees_all iby_player,

iby_pmt_instr_uses_all  iby_use,

iby_ext_bank_accounts   iby_bank,

ce_bank_branches_v      ce_br

WHERE iby_use.ext_pmt_party_id = iby_player.ext_payee_id

AND iby_player.payee_party_id = 27900 --ap_supplier.party_id

AND iby_bank.ext_bank_account_id = iby_use.instrument_id

AND ce_br.branch_party_id(+) = iby_bank.branch_id;

说明:

iby_external_payees_all

这个表的payee_party_id就是ap_supplier的party_id

银行账户对应的主要字段

PARTY_SITE_ID,SUPPLIER_SITE_ID,ORG_ID

账户分配层次:地点

PARTY_SITE_ID,SUPPLIER_SITE_ID,ORG_ID都不为空

账户分配层次:地址

PARTY_SITE_ID不为空

账户分配层次:地址 - 业务实体

PARTY_SITE_ID,ORG_ID不为空

账户分配层次:供应商

都为空

其余还可能遇到一些11、12都存在,12字段缺失,但是不像上面那么凶猛的案例,比如PO_VENDORS的bill_to_location_id,R12没有,PO_VENDORS在R12是视图,这种情况可以直接使用ap_suppliers的对应字段。

视图更变当中还2 视图XLA_AP_INV_AEL_GL_V、XLA_AP_PAY_AEL_GL_V在12当中不存在,也不能简单进行表的替换,一些列字段不存在,如果是只选取一些信息出来,那么可以做一些特殊处理,从界面上查找出数据源,筛选相应信息。

R12 OAF数据源[3]

在11i当中很容易查找到数据源,在form界面上使用历史记录,或者last_query就可以知道具体sql,但是R12有很多OAF界面,不是那么简单就可以看到具体筛选的表的。

设置预制文件:Personalize Self-Service Defn为YES

之后OAF界面的左下角就会出现一个“关于此页”的标签。点击进去可以看到OAF界面用到的VO,查找出具体的SQL。

标准值集更变

一些在11i当中可以用的值集,R12进行了相应更改,就拿值集GL_SRS_PERIOD_NAMES来说,值集定义where条件的地方R12用到了另外一个值集:$FLEX$.GL_SRS_LEDGER_ID_UNVALIDATED,此处并不能随意猜测,我们可以参考标准功能用到GL_SRS_PERIOD_NAMES值集的请求:

SELECT fcpv.user_concurrent_program_name,

fdfcu.flex_value_set_id,

ffvs.flex_value_set_name,

fe.execution_file_name

FROM fnd_descr_flex_col_usage_vl fdfcu,

fnd_concurrent_programs_vl  fcpv,

fnd_flex_value_sets         ffvs,

fnd_executables             fe

WHERE '$SRS$.' || fcpv.concurrent_program_name = fdfcu.descriptive_flexfield_name

AND ffvs.flex_value_set_id = fdfcu.flex_value_set_id

AND fe.executable_id = fcpv.executable_id

AND ffvs.flex_value_set_name LIKE upper('%GL_SRS_PERIOD_NAMES%')

或者可以在form界面上查看:

对于GL_SRS_PERIOD_NAMES值集,R12标准功能是添加了P_LEDGER_ID,值集为GL_SRS_LEDGER_ID_UNVALIDATED,默认值配置文件:gl_set_of_bks_id

后来发现可以将此值集更改为:JGZZ_GL_PERIOD_NAMES即可

GL_SRS_TRANS_CURRENCIES_USD_STAT

该值集R12升级where条件发生错误

原因是GL_TRANSACTION_TRACKING的SET_OF_BOOKS_ID在12中叫做LEDGER_ID

可以将相应字段进行替换,或者考虑到是标准的一个值集,也可以新建一个与其一样的值集,并加以修正。

Servlet程序发布

有些功能是被直接做成了Servlet,在11i当中是使用 Jserver发布Servlet,非常简单,只需将 Servlet文件放进$IAS_ORACLE_HOME/ Apache/Jserv/servlets既可。

而R12并无Jserver,全部使用OC4J进行管理。这需要将class文件放到$JAVA_TOP下面,之后修改以下配置文件$ORA_CONFIG_HOME/10.1.3/j2ee/oacore/application-deployments/oacore/html/orion-web.xml,参照以前的配置加入servlet的定义,servlet mapping配置。重启应用即可。

查询客户化的请求、报表

R12升级主要就是改客户化的东西,但是如何确定该功能是客户化的呢?为了标准化,我想许多客户化的东西都会加上一些专门的标志,比如说这次的R12升级客户化的东西是以ZZ开头的(报表、FORM、PKG)。

但是假如客户化的名字并不是那么标准,那么对于查找来说就比较困难,确保没有遗漏的东西,建议装一个R12 DEMO或者PROD环境专门执行此事,将升级过后的R12当中,R12 DEMO不存在的FORM、报表筛选出来。这些东西就很有可能是客户化的程序。

PO无法取消

在升级测试环境2遇到一个PO无法取消的问题,最后查出来是这么一个package无效导致:PO_CHG_REQUEST_PVT,但是测试环境1那里并没有这种情况,原因是DBA在升级测试环境2的时候多加了一些oracle建议设置的东西,造成测试环境2的PO无法取消。提了SR,oracle的回复是打一个补丁(18M),改了很多包,造成了更多严重的问题,PO模块直接瘫痪。最终不得不重新克隆测试环境再次升级,如果你也遇到类似情况,请直接使用这个包吧!

其余课题

u  ARXRWMAI 收款界面发生如下错误:

FRM-41014: ERROR "CANNOT SET ATTRIBUTE OF NULL CANVAS ITEM"

解决方法:菜单ONT_SETUP_CUSTOMERS 加上功能 全球化弹性域    (AR_GL_FLEXFIELD)

 

u  有时候提交请求会出现一些莫名的报错,可以尝试换个语言环境进行提交。

u  R12升级过后,一些基本的设置,比如CNY币种的启用,供应商编号方法等会发生更变,一定要进行系统测试,上线的时候进行更改。

u  应用->帮助->诊断->检查,报“职责找不到对应函数”,不能进行相应查看。

解决方法:设置profile“公用程序: 诊 断”为是。

u  请求日志内容无法通过“复制”在浏览器中阅读

解决方法:

1、个性系统配置文件“RRA: 已启用”,值设置为“是”
2、确保系统配置文件“RRA: 服务前缀”为空,不允许有空格

u  升级过后会标准功能或多或少会出现问题,建议标准FORM全部重新编译一次(服务器执行 adadmin)

u  升级之后,加入了 VPD的功能,执行某些 SQL语句的时候会发生错误。

DELETE FROM oe_hold_sources

WHERE hold_entity_code = 'I'

AND hold_entity_id = 1

AND - 1 = (oe_sys_parameters.value('MASTER_ORGANIZATION_ID', org_id));

exec_delete 5 ORA-01732: data manipulation operation not legal on this view

发生地:INV->Items->Delete Items 带出的请求Delete Item Information(追踪即可得到这个SQL,参数改了下)

参照Metalink 1487181.1的解决方案sys执行:

GRANT MERGE ANY VIEW TO apps;

u  DBA_DIRECTORY的更变

升级过后某些路径会发生更变,检查一下DBA_DIRECTORY

u  ap_invoices_interface_s、ap_invoice_lines_interface_s

收款界面操作报错,最后查是这2个sequence的nextval 小于接口表当中的值,所以报错,增加他们的nextval值,留意类似的接口表sequence。

u  R12 FORM日期显示格式中文为DD-MM-YYYY,英文为DD-MON-YYYY  ,而11当中中英文都为DD-MON-YYYY

这其实是11i当中的一个配置文件:ICX_DATE_LANGUAGE,而R12 该配置文件已经失效!建议类似情况直接改代码。[ID 393861.1]

u  升级过后提交部分客户化请求会报莫名其妙的错误,但是查的话实际上并不知道到底怎么回事。 其实只需进入程序定义界面,在请求参数的地方做一个保存操作(随便怎么,主要发生保存操作,比如description那里多加一个空格),之后提交就正常了。暂不知具体如何将这些需要做保存操作的请求筛选出来。(后来得知是有的请求参数定义直接采用代码进行更新,对于此类请求都需要做保存操作!)

u  JAVA LIB

升级过后,会发现客户化加入的java jar无法找到,可以在这里进行重新添加:

$INST_TOP/ora/10.1.3/j2ee/oacore/application-deployments/oacore/orion-application.xml   [ID 433241.1]

u  值集源表order by

有一个客户化值集定义的非常牛逼,基于表筛选,而源表那里末尾直接弄了一个order by ,造成使用的时候报了莫名其妙的错误。将order by 去掉即可。[ID 1461060.1]

u  自动开票主程序、程序 - 自动过账计划请求报错

重新提交一个计划请求

[ID 1406913.1]、[ID 1374519.1]

u  日记账行追溯报错

You are not authorized to access the function View Material Transactions. Please

contact your System Administrator

GL_SUPERS菜单(报错职责对应的菜单)加上以下function

View Material Trxns

Receiving Transaction Summary

View Resource Transactions

Lot Based Job Transactions

View Write-Off Transactions

u  废弃的东西

Supplier Customer Netting Report [ID 556146.1]

Payables Account Analysis Report [ID 752596.1]

XLA_MO_TOP_REPORTING_LEVEL (Mo: Top Reporting Level) (PROFILE) [ID 1184318.1]

SYNCHRONIZE WORKFLOW LOCAL TABLES (1) (REPORT SET) [ID 1061277.1]

Response Processor[E16342-04.P45]

u  AP发票的汇率都移到了AP_INVOICES_ALL

u  Material Account Distribution Detail报表不展示来源

标准功能就是这样,只显示目标子库存,不显示来源子库存[ID 1330609.1]

u  XLA_DISTRIBUTION_LINKS数据移植不全

参见[ID 604893.1]

升级有用的SQL

客户化的东西比较多,直接不知道form或者某个报表在什么地方,弄了些常用SQL查询这些东西

Form使用处

SELECT frv.responsibility_name,

menu.user_menu_name,

menu.prompt,

menu.lv

FROM (SELECT LEVEL lv,

entr.prompt,

entr.description,

menu.menu_name,

menu.user_menu_name,

menu.menu_id

FROM fnd_menus_vl        menu,

fnd_menu_entries_vl entr

WHERE menu.menu_id = entr.menu_id

START WITH function_id = (SELECT fun.function_id

FROM fnd_form_functions_vl fun,

fnd_form              form

WHERE fun.form_id = form.form_id

AND upper(form.form_name) = upper('ZZCSTDBT011F'))

CONNECT BY PRIOR entr.menu_id = entr.sub_menu_id) menu,

fnd_responsibility_vl frv

WHERE frv.menu_id(+) = menu.menu_id;

报表提交处

SELECT fcpv.concurrent_program_id,

--frg.request_group_name,

res.responsibility_name,

fcpv.user_concurrent_program_name,

fcpv_tl.user_concurrent_program_name,

fe.execution_file_name,

decode(frgu.request_unit_type, 'P', '程序', 'A', '应用', '其他') 类型

FROM fnd_request_group_units         frgu,

fnd_request_groups              frg,

--fnd_request_sets_vl             frsv,

apps.fnd_responsibility_vl      res,

apps.fnd_concurrent_programs_vl fcpv,

apps.fnd_concurrent_programs_tl fcpv_tl,

fnd_executables                 fe

WHERE ((fcpv.concurrent_program_id = frgu.request_unit_id AND frgu.request_unit_type = 'P' --程序

) OR (fcpv.application_id = frgu.request_unit_id AND frgu.request_unit_type = 'A' --应用

))

AND fe.executable_id = fcpv.executable_id

AND fe.application_id = fcpv.executable_application_id

AND res.request_group_id = frg.request_group_id

AND frg.request_group_id = frgu.request_group_id

AND fcpv_tl.application_id(+) = fcpv.application_id

AND fcpv_tl.concurrent_program_id(+) = fcpv.concurrent_program_id

AND fcpv_tl.language(+) != userenv('lang')

AND fcpv.executable_application_id = fe.application_id

AND upper(fe.execution_file_name) LIKE upper('%%')

AND (upper(fcpv.user_concurrent_program_name) LIKE upper('%%')

and upper(fcpv_tl.user_concurrent_program_name) like upper('%%'))

AND upper(fcpv.concurrent_program_name) LIKE upper('%%');

历史请求运行状态

SELECT fcr.actual_start_date "起始",

fcr.actual_completion_date "结束",

fcr.request_id "请求编号",

(fcr.actual_completion_date - fcr.actual_start_date) * 24 * 60 "运行时间(分钟)",

fcr.argument_text "参数",

decode(fcr.description,

NULL,

fcpv.user_concurrent_program_name,

fcr.description || '(' || fcpv.user_concurrent_program_name || ')') "请求名",

flv.meaning "状态",

flvv.meaning "阶段",

frv.responsibility_name,

fu.user_name

FROM apps.fnd_concurrent_requests    fcr,

apps.fnd_concurrent_programs_vl fcpv,

fnd_lookup_values               flv,

apps.fnd_lookup_values_vl       flvv,

apps.fnd_responsibility_vl      frv,

fnd_user                        fu

WHERE fcr.concurrent_program_id = fcpv.concurrent_program_id

AND fcr.program_application_id = fcpv.application_id

AND flv.lookup_type = 'CP_STATUS_CODE'

AND flv.language = userenv('lang')

AND flv.view_application_id = 0

AND flvv.lookup_type = 'CP_PHASE_CODE'

AND flvv.lookup_code = fcr.phase_code

AND flvv.view_application_id = 0 --不确定

AND flv.lookup_code = fcr.status_code

AND frv.responsibility_id = fcr.responsibility_id

AND fu.user_id = fcr.requested_by

--AND fcpv.concurrent_program_id = 52375

--AND fcr.actual_start_date IS NOT NULL

--AND fcr.request_id = 4695935

/*AND status_code IN ('I', 'Q')

AND ((decode(implicit_code, 'N', status_code, 'E', 'E', 'W', 'G') = status_code OR

decode(implicit_code, 'W', 'E') = status_code))

AND (nvl(request_type, 'X') != 'S')

and fcr.hold_flag='N'  --计划请求

*/

ORDER BY fcr.request_id DESC

查询客户化请求以程序包

SELECT t.object_name,

fe.execution_file_name,

fe.executable_name,

fcpv.concurrent_program_name,

fcpv.user_concurrent_program_name

FROM dba_objects t,

(SELECT upper(f.execution_file_name) execution_file_name,

f.executable_name,

f.executable_id,

f.application_id

FROM apps.fnd_executables f) fe,

apps.fnd_concurrent_programs_vl fcpv

WHERE t.object_name LIKE 'ZZ%'

AND t.object_type = 'PACKAGE'

AND fcpv.executable_id(+) = fe.executable_id

AND fcpv.executable_application_id(+) = fe.application_id

--AND t.status = 'VALID'

AND fe.execution_file_name(+) LIKE upper(t.object_name) || '%'

ORDER BY t.object_name;

查看EBS打过的补丁

SELECT pp.creation_date,

dd.patch_name,

pp.driver_file_name,

lang.language,

pp.last_update_date

FROM ad_patch_drivers      pp,

ad_applied_patches    dd,

ad_patch_driver_langs lang

WHERE pp.applied_patch_id = dd.applied_patch_id

AND lang.patch_driver_id = pp.patch_driver_id

--AND patch_name = '2408149'

ORDER BY pp.last_update_date DESC;

监控用户登陆信息

SELECT fu.user_name,

frv.responsibility_name,

ff.user_form_name,

login_form.start_time,

login_form.end_time

FROM fnd_logins                 fl,

fnd_user                   fu,

fnd_login_resp_forms       login_form,

fnd_form_tl                ff,

fnd_login_responsibilities r,

fnd_responsibility_vl      frv

WHERE fl.user_id = fu.user_id

AND fu.user_name LIKE upper('Z%')

AND fl.login_id = login_form.login_id

AND fl.login_id = r.login_id(+)

AND r.responsibility_id = frv.responsibility_id(+)

AND r.resp_appl_id = frv.application_id

AND ff.form_id = login_form.form_id

AND login_form.form_appl_id = ff.application_id

AND login_form.start_time BETWEEN r.start_time AND r.end_time

AND ff.language = userenv('lang')

ORDER BY fl.login_id           DESC,

login_form.start_time DESC;

上一篇:EBS trace分析


下一篇:Symmetrical Network Acceleration with EBS 12