实现WebADI输入值列表验证

四月 12, 2009 in Oracle EBS二次开发

 

讲到输入值的验证,比起报表参数值的验证要复杂很多,而且也显得更加的灵活,更重要的是这个地方的值验证是通过OAF中的LOV来实现的,因此使用也较为方便,性能问题也得到解决。请看下图:

clip_image002

当用户双击Category输入区域的时候会有一个验证值列表的窗口弹出,让用户选择数据,如下图:

 

clip_image004

图中序号:

  1. LOV窗口标题
  2. LOV表格题头
  3. LOV表格显示记录数
  4. LOV窗口的高度
  5. LOV窗口的宽度

 

LOV表格中的数据源,目前支持以下几种验证类型:

  1. TABLE
  2. JAVA
  3. KEYFLEX
  4. KEYFLEXSEG
  5. EXPANDEDSQL
  6. DESCFLEX
  7. DESCFLEXSEG
  8. DESCFLEXCONTEXT
  9. GROUP

 

不过比较失望的是输入值的验证在界面定义中踪影未见,目前要实现这一功能,完全需要从后台插入数据。需要完成如下的工作:

  1. LOV数据源
  2. LOV与Item关联
  3. LOV窗口属性:标题、表格题头、高度、宽度和显示记录数

 

一,输入值验证后台表结构

同上面一样,要搞清楚WebADI输入值验证的问题,首先还得先弄明白后台的表结构关系,此部分只描述与输入值验证有关的表结构。

clip_image001

数据结构图中只列出了基本信息表,没有列出多语言对应的_TL表,在理解的时候请大家注意。

表简要描述:

  1. bne_integrators_b:存贮WebADI集成器
  2. bne_interfaces_b:存贮集成器对应接口信息
  3. bne_interface_cols_b:存贮接口对应的列信息,包括列的各种验证信息和属性
  4. bne_components_b:OA组件定义,如一个验证的LOV就是一个组件
  5. bne_param_lists_b:参数列表,可以理解为参数的分组。目的是为了实现参数的重用
  6. bne_param_list_items:存贮参数列表和参数的关联信息
  7. bne_param_defns_b:存贮参数定义,包括默认值、验证信息、显示信息等。

 

从上图中得出:

  1. 一个集成器包含1..N个接口
  2. 一个接口包括0..1个接口列
  3. 一个接口列和0..1个OA组件关联
  4. 一个OA组件对应一个参数列表
  5. 一个参数列表包括1..N个参数项目
  6. 一个参数项目对应0..1个参数定义

 

二,后台逻辑和相关的表列

  1. 首先后台根据bne_interface_cols_b表中的设置取得验证信息
  2. 根据验证类型和验证对象取得验证数据
  3. 根据OA组件的设置初始化和显示LOV窗口。组件对应的属性都当作参数存贮在bne_param_defns_b表中

 

列的验证信息存储在表bne_interface_cols_b中,涉及的列为:

  1. VAL_TYPE:验证类型,现在有:TABLE, JAVA, KEYFLEX, KEYFLEXSEG, EXPANDEDSQL, DESCFLEX, DESCFLEXSEG, DESCFLEXCONTEXT, GROUP
  2. VAL_ID_COL:验证列表返回ID,相当于值集定义中的ID
  3. VAL_MEAN_COL:验证列表的显示值,相当于值集定义中的Name
  4. VAL_DESC_COL:验证列表描述,相当于值集定义中的Meaning
  5. VAL_OBJ_NAME:验证列表对应的对象,根据验证类型的不同而不同
  6. VAL_ADDL_W_C:验证列表附加条件,相当于值集定义中的Where条件
  7. LOV_TYPE:LOV的类型,有NONE,STANDRAD,POPLIST

 

表bne_interface_cols_b中包括了如下两列来实现一个验证值列表与OA组件的关联

  1. VAL_COMPONENT_APP_ID:组建对应的应用ID
  2. VAL_COMPONENT_CODE:组建的代码

 

三,插入表记录步骤 –> 实现输入值列表验证

  1. 为LOV创建参数一个列表:bne_param_lists_b
  2. 创建参数列表多语言信息:bne_param_lists_tl
  3. 创建参数:bne_param_defns_b
  4. 创建参数多语言信息:bne_param_defns_tl
  5. 将参数和参数列表进行关联:bne_param_list_items
  6. 创建OA组件,并与参数列表关联:bne_components_b ,组件编码一般以“OA_”打头
  7. 创建OA组件多语言信息:bne_components_tl
  8. 更新接口列信息:bne_interface_cols_b

 

插入表记录步骤 –> bne_param_lists_b表要求

  1. Param_list_code:一般以“COMP_”打头,如COMP_CATEGORY

插入表记录步骤 –> bne_param_defns_b表要求

为值列表LOV定义参数的目的是将LOV窗口的一些属性当作参数来处理,因此一般一个LOV窗口需要创建如下的6个属性参数:

  1. TABLE_SELECT_COLUMN
  2. TABLE_COLUMNS
  3. WINDOW_WIDTH:LOV参数窗口宽度
  4. WINDOW_HEIGHT:LOV参数窗口高度
  5. TABLE_BLOCK_SIZE:LOV结果记录数
  6. OA_<xxx>_WIN_CAP:LOV参数窗口标题
  7. 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

 

说明:

  1. 上面表格中底色为浅红色行中的param_list_code和param_name必须和表格中保持一致
  2. 底色为浅红色的参数可以在多个LOV中引用,只要将这些参数赋给不同的参数列表项就可以
  3. 如果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表要求

要求:

  1. Component_code:一般以“OA_”打头,如OA_CATEGORY
  2. Component_java_class:oracle.apps.bne.integrator.component.BneOAValueSetComponent(还有其他值,各位可以研究一下)

 

插入表记录步骤 –> 更新表bne_interface_cols_b表要求

根据验证类型的不同,更新列差距比较大,需要关注的列:

  1. INTERFACE_COL_NAME
  2. VAL_TYPE
  3. VAL_ID_COL
  4. VAL_MEAN_COL
  5. VAL_DESC_COL
  6. VAL_OBJ_NAME
  7. VAL_ADDL_W_C
  8. VAL_COMPONENT_APP_ID
  9. VAL_COMPONENT_CODE
  10. LOV_TYPE
  11. OFFLINE_LOV_ENABLED_FLAG
  12. GROUP_NAME
  13. OA_FLEX_NUM
  14. OA_FLEX_APPLICATION_ID
  15. OA_FLEX_CODE
  16. OA_CONCAT_FLEX

 

本文以验证类型为Table做个示例,请看下面2个图:

clip_image002

clip_image004[6]

其它很多的验证类型各位可以参考系统的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 ;

 

 

相关文章:

  1. 实现WebADI报表参数值列表

11 responses to 实现WebADI输入值列表验证

  1. 我做成功了,不過需要重新啟動AP,
    過程中遇到一個錯誤,解決方法就是要重啟AP。
    http://www.itpub.net/viewthread.php?tid=1048246

  2. 测试了一把,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

    • 你這個錯誤我也遇到了,已解決,是因為參數對應的PARAM_DEFN_APP_ID欄位不對應,這一點很容易出錯!

  3. 创建客制化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

    –郁闷阿~~~~~

  4. 集成器如何开发?

  5. 不好意思,我没有说清楚,即webadi是否可以实现对于客制化模块中的基表进行导入,而不仅仅是财务数据或者是物料等oracle标准功能的信息

  6. 请教一下,webadi,可以用于客制化form数据导入么?

  7. 我的这个也是11i的,但是11i下有很多小版本,所以存在字段不一样是很正常的,ls的只要稍加分析应该就可以解决这样的问题

  8. 我用的是11i,不知道提供的是什么版本的,好像里面有一些表中的字段跟我的不一样bne_param_defns_b.Default_string_trans_flag我没有找到这个字段,param_list_code是不是指PARAM_DEFN_CODE这个字段?郁闷啦,看不太懂!!

Leave a reply

You must be logged in to post a comment.