实现WebADI输入值列表验证
四月 12, 2009 in Oracle EBS二次开发
讲到输入值的验证,比起报表参数值的验证要复杂很多,而且也显得更加的灵活,更重要的是这个地方的值验证是通过OAF中的LOV来实现的,因此使用也较为方便,性能问题也得到解决。请看下图:
当用户双击Category输入区域的时候会有一个验证值列表的窗口弹出,让用户选择数据,如下图:
图中序号:
- LOV窗口标题
- LOV表格题头
- LOV表格显示记录数
- LOV窗口的高度
- LOV窗口的宽度
LOV表格中的数据源,目前支持以下几种验证类型:
- TABLE
- JAVA
- KEYFLEX
- KEYFLEXSEG
- EXPANDEDSQL
- DESCFLEX
- DESCFLEXSEG
- DESCFLEXCONTEXT
- GROUP
不过比较失望的是输入值的验证在界面定义中踪影未见,目前要实现这一功能,完全需要从后台插入数据。需要完成如下的工作:
- LOV数据源
- LOV与Item关联
- LOV窗口属性:标题、表格题头、高度、宽度和显示记录数
一,输入值验证后台表结构
同上面一样,要搞清楚WebADI输入值验证的问题,首先还得先弄明白后台的表结构关系,此部分只描述与输入值验证有关的表结构。
数据结构图中只列出了基本信息表,没有列出多语言对应的_TL表,在理解的时候请大家注意。
表简要描述:
- bne_integrators_b:存贮WebADI集成器
- bne_interfaces_b:存贮集成器对应接口信息
- bne_interface_cols_b:存贮接口对应的列信息,包括列的各种验证信息和属性
- bne_components_b:OA组件定义,如一个验证的LOV就是一个组件
- bne_param_lists_b:参数列表,可以理解为参数的分组。目的是为了实现参数的重用
- bne_param_list_items:存贮参数列表和参数的关联信息
- bne_param_defns_b:存贮参数定义,包括默认值、验证信息、显示信息等。
从上图中得出:
- 一个集成器包含1..N个接口
- 一个接口包括0..1个接口列
- 一个接口列和0..1个OA组件关联
- 一个OA组件对应一个参数列表
- 一个参数列表包括1..N个参数项目
- 一个参数项目对应0..1个参数定义
二,后台逻辑和相关的表列
- 首先后台根据bne_interface_cols_b表中的设置取得验证信息
- 根据验证类型和验证对象取得验证数据
- 根据OA组件的设置初始化和显示LOV窗口。组件对应的属性都当作参数存贮在bne_param_defns_b表中
列的验证信息存储在表bne_interface_cols_b中,涉及的列为:
- VAL_TYPE:验证类型,现在有:TABLE, JAVA, KEYFLEX, KEYFLEXSEG, EXPANDEDSQL, DESCFLEX, DESCFLEXSEG, DESCFLEXCONTEXT, GROUP
- VAL_ID_COL:验证列表返回ID,相当于值集定义中的ID
- VAL_MEAN_COL:验证列表的显示值,相当于值集定义中的Name
- VAL_DESC_COL:验证列表描述,相当于值集定义中的Meaning
- VAL_OBJ_NAME:验证列表对应的对象,根据验证类型的不同而不同
- VAL_ADDL_W_C:验证列表附加条件,相当于值集定义中的Where条件
- LOV_TYPE:LOV的类型,有NONE,STANDRAD,POPLIST
表bne_interface_cols_b中包括了如下两列来实现一个验证值列表与OA组件的关联
- VAL_COMPONENT_APP_ID:组建对应的应用ID
- VAL_COMPONENT_CODE:组建的代码
三,插入表记录步骤 –> 实现输入值列表验证
- 为LOV创建参数一个列表:bne_param_lists_b
- 创建参数列表多语言信息:bne_param_lists_tl
- 创建参数:bne_param_defns_b
- 创建参数多语言信息:bne_param_defns_tl
- 将参数和参数列表进行关联:bne_param_list_items
- 创建OA组件,并与参数列表关联:bne_components_b ,组件编码一般以“OA_”打头
- 创建OA组件多语言信息:bne_components_tl
- 更新接口列信息:bne_interface_cols_b
插入表记录步骤 –> bne_param_lists_b表要求
- Param_list_code:一般以“COMP_”打头,如COMP_CATEGORY
插入表记录步骤 –> bne_param_defns_b表要求
为值列表LOV定义参数的目的是将LOV窗口的一些属性当作参数来处理,因此一般一个LOV窗口需要创建如下的6个属性参数:
- TABLE_SELECT_COLUMN
- TABLE_COLUMNS
- WINDOW_WIDTH:LOV参数窗口宽度
- WINDOW_HEIGHT:LOV参数窗口高度
- TABLE_BLOCK_SIZE:LOV结果记录数
- OA_<xxx>_WIN_CAP:LOV参数窗口标题
- OA_<xxx>_TAB_HDR:LOV参数表格题头
|
param_list_code |
Param_name |
Data_Type |
Default_string |
Default_string_trans_flag |
Default_number |
Display_type |
Display_style |
|
TABLE_COLUMNS |
table-columns |
1 |
N |
4 |
1 |
||
|
TABLE_SELECT_COLUMN |
table-select-column |
1 |
N |
4 |
1 |
||
|
WINDOW_HEIGHT |
window-height |
1 |
450 |
N |
4 |
1 |
|
|
WINDOW_WIDTH |
window-width |
1 |
350 |
N |
4 |
1 |
|
|
TABLE_BLOCK_SIZE |
table-block-size |
2 |
N |
25 |
4 |
1 |
|
|
OA_<xxx>_TAB_HDR |
Web ADI Components: OA_<xxx> table-headers |
1 |
<xxx> |
Y |
4 |
1 |
|
|
OA_<xxx>_WIN_CAP |
Web ADI Components: OA_<xxx> window-caption |
1 |
Search and Select – <xxx> |
Y |
4 |
1 |
说明:
- 上面表格中底色为浅红色行中的param_list_code和param_name必须和表格中保持一致
- 底色为浅红色的参数可以在多个LOV中引用,只要将这些参数赋给不同的参数列表项就可以
- 如果Default_string_trans_flag为Y的必须在表bne_param_defns_tl中定义多语言信息
具体例子可以看系统标准的定义:
1 2 3 4 5 6 7 8 | SELECT * FROM bne_param_defns_vl d WHERE d.application_id = 231 AND d.param_defn_code IN (SELECT t.param_defn_code FROM bne_param_list_items t WHERE t.application_id = 231 AND t.param_list_code = 'COMP_CATEGORY'); |
插入表记录步骤 –> bne_components_b表要求
要求:
- Component_code:一般以“OA_”打头,如OA_CATEGORY
- Component_java_class:oracle.apps.bne.integrator.component.BneOAValueSetComponent(还有其他值,各位可以研究一下)
插入表记录步骤 –> 更新表bne_interface_cols_b表要求
根据验证类型的不同,更新列差距比较大,需要关注的列:
- INTERFACE_COL_NAME
- VAL_TYPE
- VAL_ID_COL
- VAL_MEAN_COL
- VAL_DESC_COL
- VAL_OBJ_NAME
- VAL_ADDL_W_C
- VAL_COMPONENT_APP_ID
- VAL_COMPONENT_CODE
- LOV_TYPE
- OFFLINE_LOV_ENABLED_FLAG
- GROUP_NAME
- OA_FLEX_NUM
- OA_FLEX_APPLICATION_ID
- OA_FLEX_CODE
- OA_CONCAT_FLEX
本文以验证类型为Table做个示例,请看下面2个图:
其它很多的验证类型各位可以参考系统的General Ledger – Journals,其中实现了很多种验证类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | SELECT infc.interface_col_name, infc.val_type, infc.val_id_col, infc.val_mean_col, infc.val_desc_col, infc.val_obj_name, infc.val_addl_w_c, infc.val_component_app_id, infc.val_component_code, infc.lov_type, infc.offline_lov_enabled_flag FROM bne_integrators_vl ingr, bne_interfaces_vl inf, bne_interface_cols_vl infc WHERE ingr.application_id = inf.integrator_app_id AND ingr.integrator_code = inf.integrator_code AND inf.interface_code = infc.interface_code AND inf.application_id = infc.application_id AND infc.display_flag = 'Y' AND ingr.integrator_code = 'JOURNALS_120' – ‘GL_BUDGET_INTERFACE_115’ --AND ingr.user_name = 'General Ledger - Journals' AND infc.VAL_TYPE is NOT NULL ; |
–
相关文章:
sudn said on 十二月 2, 2010
我做成功了,不過需要重新啟動AP,
過程中遇到一個錯誤,解決方法就是要重啟AP。
http://www.itpub.net/viewthread.php?tid=1048246
kaka said on 十二月 24, 2009
测试了一把,LOV始终没有成功,报如下错误Exception Name: oracle.apps.bne.exception.BneParameterException – No parameter list definition at parameter list id 20003:COMP_FSC_CFS_ITEM
参考文档:
http://hi.baidu.com/gdzhj/blog/item/0d892e4ffd145f33aec3abbc.html
sudn said on 五月 31, 2011
你這個錯誤我也遇到了,已解決,是因為參數對應的PARAM_DEFN_APP_ID欄位不對應,這一點很容易出錯!
kaka said on 十二月 23, 2009
创建客制化webadi集成器时,导入数据经常会发生ORA-06508: PL/SQL: Could not Find Program Unit being Called in Custom Web ADI Integrator
metlink上的解释是
[ID 567559.1]
修改时间 06-OCT-2008 类型 PROBLEM 状态 MODERATED
In this Document
Symptoms
Changes
Cause
Solution
References
This document is being delivered to you via Oracle Support’s Rapid Visibility (RaV) process, and
therefore has not been subject to an independent technical review.
Applies to:
Oracle Web Applications Desktop Integrator – Version: 11.5.10.2
This problem can occur on any platform.
Symptoms
In custom Web ADI integrator, when code changes are made to the API, then loading of rows fail
with the following error :
ORA-06508: PL/SQL: could not find program unit being called
Changes
Code changes in custom Web ADI integrator API.
Cause
This issue is addressed in Bug 5436732
This is an expected behavior which happens when a PL/SQL package containing session state
variables is called via a web service. Once the PL/SQL package body has been modified, it gets
out of synch with the session state variables already set on sessions being handled by the Web
Server. It is the act of bouncing Apache that clears out all of these session and allows the
session state variables to be set for the new package body.
Solution
To implement the solution, please execute the following steps:
1. Run the following sql:
SQL>alter system flush shared_pool;
This clears the Shared Pool
2. Bounce the Apache server
#sh adapcctl.sh stop
#sh adapcctl.sh start
3. Retest the issue.
References
BUG:5436732 – OHS:HR SETUP INTEGRATOR WITH CUSTOM API AND INITAL UPLOADS ERROR ORA-6508
–郁闷阿~~~~~
kaka said on 十二月 17, 2009
集成器如何开发?
kaka said on 十二月 15, 2009
不好意思,我没有说清楚,即webadi是否可以实现对于客制化模块中的基表进行导入,而不仅仅是财务数据或者是物料等oracle标准功能的信息
aronezhang said on 十二月 15, 2009
这个当然可以啦,自己开发一个集成器,然后就可以往自己的表中导入数据了
kaka said on 十二月 15, 2009
请教一下,webadi,可以用于客制化form数据导入么?
aronezhang said on 十二月 15, 2009
没有明白ls说的“客制化form数据导入”是什么意思,能否详细说明你的需求?
aronezhang said on 九月 27, 2009
我的这个也是11i的,但是11i下有很多小版本,所以存在字段不一样是很正常的,ls的只要稍加分析应该就可以解决这样的问题
zuibunan said on 九月 27, 2009
我用的是11i,不知道提供的是什么版本的,好像里面有一些表中的字段跟我的不一样bne_param_defns_b.Default_string_trans_flag我没有找到这个字段,param_list_code是不是指PARAM_DEFN_CODE这个字段?郁闷啦,看不太懂!!