从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;