Oracle WEB ADI开发笔记(抽丝拨茧篇)

VileeTang

贡献于2011-01-11

字数:0 关键词: Oracle 数据库服务器 web

Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 1 ORACLE EBS —Web ADI 开发笔记(抽丝拨茧篇) Author: Jarwang(王重东) Create Date: September 28th,2009 Update Date: Control No: Current Edition: 1.0 声明:本文可以任意免费转载、复制、传播。但您务必保持其完整性! If you copy this document,you ought to keep the document completely. Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 2 Document Control Modify Record 日期 作者 版本 更改参考 September 28th,2009 jarwang 1.0 Approved 姓名 职位 签字 Distribute 编码 姓名 地点和位置 1 2 3 4 Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 3 Index Document Control 2 Modify Record 2 Approved 2 Index 3 Preface 5 WEB ADI安装 5 浏览器设置 5 EXCEL设置 5 Web ADI—GL导入 6 Oracle Web ADI原理 10 WebADI之VBA分析 10 VBA实现下拉菜单 11 VBA实现下拉菜单之事件 13 WebADI与Oracle通信 14 Oracle Web ADI权限 16 职责、菜单、功能 16 Integrator权限 17 WEBADI开发权限 17 配置文件 18 Oracle ADI客制化开发(一) 19 Single Table 19 创建数据库对象 19 注册表及列 19 创建程序包 20 创建Integrator 21 创建Function 23 建立Integrator与Function关联 23 定义Layout 25 定义Mapping 27 定义查询条件 27 使用WEBADI 29 查询参数使用下拉框 30 修改Excel的列标题 33 创建Integrator快捷方式 34 Oracle ADI客制化开发(二) 37 Relation Table 37 创建数据库对象 37 注册表及列 37 创建程序包 38 创建Integrator 40 创建Function 41 建立Integrator与Function关联 41 定义Layout 42 定义Mapping 43 定义查询条件 44 使用WEBADI 45 实现excel中的LOV(步骤一) 46 实现excel中的LOV(步骤二) 53 实现excel中的LOV(步骤三) 60 Oracle Web ADI客制化开发(三) 61 Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 4 自行开发Web ADI 61 创建数据库对象 61 Other Notes 62 Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 5 Preface WEB ADI全称是 WEB Application Development Integrator,原来是Oracle HRMS 模块提供的一个利用浏览器 来进行存取的,在服务器段运行的self-service应用程序。后来经过不断地发展,也可以用于其他模块的数据导入。现 在,我们也可能通过客制化开发ADI,来实现EXCEL与EBS模块通信。特别是财务人员习惯了excel界面,叫他们使 用form,总是可以找出一堆理由。WEB ADI让他们无话说吧。呵呵!^_^ 本文主要是基于EBS11.5.10.2,但在R12.0.4中也能测试通过。 本文参考文档:Oracle Web Applications Desktop Integrator User Guide (bne115ug.pdf) Oracle Web Applications Desktop Integrator Implementation Guide (bne115ig.pdf) WEB ADI安装 WEB ADI在具体的EBS版本中配置不尽相同,具体可参考user guide。例:在R12中,WEBADI 是默认安装好的。又如: 在EBS 11.5.10.2环境中,WEBADI的职责名:Oracle Web ADI。 在EBS R12.0.4环境中,WEBADI的职责名:Desktop Integration。 浏览器设置 Oracle建议你使用IE,事实也可以间接支持firefox,因为ADI生成的Excel会自行调用IE。 EXCEL设置 Excel必须安装VBA组件,同时设置如下: Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 6 Web ADI—GL导入 日记帐导入是ORACLE WEBADI本身就开发的模板,可以直接拿来使用。授权职责,这是肯定 的啦。 Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 7 登陆EBS后,选择Oracle Web ADI职责。 选择create document 选择View:如果勾选reporting的话,则无法修改,上传。 选择Intergrator:General Ledger-Journals 选择Layout:Functional Actuals-Single Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 8 选择Conten:None 选择Review:Create Document 输入日记帐信息,然后选择Oracle菜单upload。 Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 9 选择Upload。 OK,完成了。 Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 10 Oracle Web ADI原理 坦言,第一次接触Web ADI时感觉只不是个VBA生成器。偶曾经也主导过一个VB项目的开发, 所以对VBA并不陌生。Oracle WEB ADI架构图: WebADI之VBA分析 经过WEB ADI服务端自动生成的Excel文件,打这个excel文件VBA工程,就可以查看到相关的代 码。了解VB的同学们,对下面的代码会感到亲切(事实上,PL/SQL与VB语言的相似程序很高, 所以对于PL/SQL程序员来说,也可以看得懂!)。^_^!如果不想了解VBA的,可以考虑跳过。 Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 11 上图是excel中的VBA工程的基本结构:对象层(由sheet、workbook构成)、Fomrs(界面)、modules (模块,用于公共变量、过程的声明区)、class modules(类模块,其实就是类啦)。 VBA实现下拉菜单 WEB ADI: 这个功能是由sheet层BneCreateOracleMenu子过程实现的。 VBA脚本: Public Sub BneCreateOracleMenu() Dim strMenuTitle As String Dim strMenuListOfValues As String Dim strMenuUpload As String Dim strMenuMonitor As String Dim strMenuDownload As String Dim strMenuAbout As String strMenuTitle = "Or&acle" strMenuListOfValues = "&List of Values" Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 12 strMenuUpload = "&Upload" strMenuMonitor = "&Monitor" strMenuDownload = "&Download" strMenuAbout = "&About" On Error Resume Next MenuBars(xlWorksheet).Menus(strMenuTitle).Delete MenuBars(xlWorksheet).Menus.add strMenuTitle, before:=8 With MenuBars(xlWorksheet).Menus(strMenuTitle) .MenuItems.add strMenuListOfValues, OnAction:=Application.ActiveSheet.CodeName & ".BneDBLClick" .MenuItems.add strMenuUpload, OnAction:=Application.ActiveSheet.CodeName & ".BneUploadDocument" .MenuItems.add strMenuMonitor, OnAction:=Application.ActiveSheet.CodeName & ".BneMonitor" .MenuItems.add "-" .MenuItems.add strMenuAbout, OnAction:=Application.ActiveSheet.CodeName & ".BneAbout" End With End Sub 调用这个BneCreateOracleMenu,在workbook层的activate事件下。 --------------------------------------------------------------------------------------------------------------------------- 什么?你不太相信偶?呵呵!以事实说话!*******访谈!^_^ 1.新建一下excel文件,保留一个sheet即可,删除多余的sheet。 2.打开VBA工程 在workbook层的worbook_open()中加入 Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 13 Dim strMenuTitle As String Dim strMenuListOfValues As String Dim strMenuUpload As String Dim strMenuMonitor As String Dim strMenuDownload As String Dim strMenuAbout As String strMenuTitle = "Oracle ADI" strMenuListOfValues = "值列表" strMenuUpload = "上传" strMenuMonitor = "监视" strMenuDownload = "下载" strMenuAbout = "&About me" MenuBars(xlWorksheet).Menus.Add strMenuTitle, before:=8 With MenuBars(xlWorksheet).Menus(strMenuTitle) .MenuItems.Add strMenuListOfValues .MenuItems.Add strMenuUpload .MenuItems.Add strMenuMonitor .MenuItems.Add "-" .MenuItems.Add strMenuAbout End With 3.保存后,重新打开excel。这下相信了吧。 VBA实现下拉菜单之事件 细心的人会注意上述代码中的OnAction。一点也没错,菜单对应的事件代码就是由它实现。 1. 以上述例子的about me菜单为例,切换到sheet层加入 Public Sub About() MsgBox ("this is an adi test!") End Sub 2.然后在切换到workbook层的worbook_open事件 找到这句 .MenuItems.Add strMenuAbout 修改为 .MenuItems.Add strMenuAbout, OnAction:=Application.ActiveSheet.CodeName & ".About" Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 14 3. 保存并重启excel,得到效果如下: 4. 调用IE,可加入代码: Dim IE As Object Set IE = CreateObject("InternetExplorer.Application") IE.Visible = True IE.Navigate ("http://oa.hek.cn") 5. 调用FORM,可先建一个FORM: 然后加入代码: BneBrowser.show 6. 总结:以上是VBA简单功能的实现,更多功能有侍大家在实际应用发掘。在WEB ADI的菜单 事件是调用OAF页面,如:About菜单 大致实现方法是:引用先在VBA工程创建一个FORM,然后在FORM中套入IE浏览器。 WebADI与Oracle通信 经过WEB ADI服务端自动生成的Excel文件,这个EXCEL文件已经脱机状态了。怎样实现与 Oracle交互数据呢?与哪个服务器连接?连接协议是什么?带着问题来看代码,效率就比较高 了。^_^ 1.打开VBA工程,切到sheet层代码。PICTURE: /home/oracle/.tencent/qq//AppData/file//sendpix0.jpg Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 15 显然, Web ADI生成的excel文件并没直接与数据库连接,而是通过应用服务器中转的。 2. 既然是通过应用层中转的,那么excel文件通过什么方式与应用服务器通信呢? 我的测试结果是:Java+xmlhttp。这样就避免了客户端安装的问题,也不在excel使用ado、odbc、 jdbc之类东东啦。 如下代码: Public Function createDOMDocument() As Object On Error Resume Next Dim newDocument As Object Set newDocument = CreateObject("MSXML2.DOMDocument") If Err Then Set newDocument = CreateObject("MSXML.DOMDocument") End If Set createDOMDocument = newDocument End Function Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 16 Oracle Web ADI权限 职责、菜单、功能 前面我们加入的职责:Oracle Web ADI。 查看一下该职责对应的菜单。 再查看一下对应的功能。 HTML CALL:调用的是一个OAF页面。 Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 17 Integrator权限 Integrator:集成器,这是WEBADI中的一个概念。Web ADI的权限控制方式之一就是判断 Integrator对应的Function是否包含在当前菜单。如果没有,报错: 解决方法:将这个Integrator对应的function加入到web adi这个菜单中。 问题:如何知道这个Integrator对应的function呢? 解决方法: 一、开发时就必须配置一个excel来定义Integrator与function的关系。 二、查询数据库。 先得到Integrator代码 select integrator_code,USER_NAME from bne_integrators_tl where user_name like 'HEK_ADI_测试1' 再得到function SELECT bsr.security_code --integrator代码 ,bsr.security_value --function名称 FROM bne_security_rules bsr WHERE bsr.security_value like '%HEK%'; WEBADI开发权限 开发WEBADI要用到” HR ADI Seeded Integrator Form Functions”,应该分配进来。 Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 18 配置文件 Profile Name 说明 设置建议 BNE Allow No Security Rule 允许不设Security Rule 访问Integrator 。N: 那么Integrator 必须创建 Security Rule , 否则报You do not have permission to access this functionality。 Y:那么没有创建Security Rule可以访问;有Security Rule的则需 要通过安全规 则验证才行。 Once a security rule is defined the profile option BNE Allow No Security Rule is ignored Y ADI: Use Function Security 是否启用功能安全性。是的话,菜单中需要包含相应功能 Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 19 Oracle ADI客制化开发(一) Single Table 本例为仅涉及一张数据表的Web ADI开发,其功能是实现excel数据的导入EBS(可update数据)。 创建数据库对象 1. 在apps用户下创建table, synonym,sequence。下同。 create table HEK_ADI_TEST1 ( ADI_ID NUMBER, ADI_CODE VARCHAR2(30), ADI_DATE DATE, created_by NUMBER, creation_date DATE, last_updated_by NUMBER, last_update_login NUMBER, last_update_date DATE ); create public synonym HEK_ADI_TEST1 FOR HEK_ADI_TEST1; create sequence HEK_ADI_TEST1_S; 2. 创建视图 create or replace view HEK_ADI_TEST1_V as select hat.adi_id,hat.adi_code,hat.adi_date from HEK_ADI_TEST1 hat; 注册表及列 注:HEK为客户化开发的简称,可至应用开发员=>application=register去查找。 BEGIN AD_DD.REGISTER_TABLE('HEK','HEK_ADI_TEST1','T'); AD_DD.REGISTER_COLUMN('HEK','HEK_ADI_TEST1','ADI_ID',1,'NUMBER',38,'Y','N'); AD_DD.REGISTER_COLUMN('HEK','HEK_ADI_TEST1','ADI_CODE',2,'VARCHAR2',30,'Y',' N'); AD_DD.REGISTER_COLUMN('HEK','HEK_ADI_TEST1','ADI_DATE',3,'DATE',9,'Y','N'); AD_DD.REGISTER_COLUMN('HEK','HEK_ADI_TEST1','created_by',4,'NUMBER',38,'Y','N'); AD_DD.REGISTER_COLUMN('HEK','HEK_ADI_TEST1','creation_date',5,'DATE',9,'Y','N'); AD_DD.REGISTER_COLUMN('HEK','HEK_ADI_TEST1','last_updated_by',6,'NUMBER',38,' Y','N'); AD_DD.REGISTER_COLUMN('HEK','HEK_ADI_TEST1','last_update_login',7,'NUMBER',38,' Y','N'); AD_DD.REGISTER_COLUMN('HEK','HEK_ADI_TEST1','last_update_date',8,'DATE',9,'Y','N' ); Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 20 COMMIT; END; 创建程序包 关键的程序包,所有操作都在这边。 create or replace package HEK_ADI_TEST1_PKG AS g_user_id number:= fnd_profile.value('user_id'); PROCEDURE upload_data(p_code IN VARCHAR2, p_date IN DATE DEFAULT SYSDATE, p_id IN NUMBER DEFAULT NULL); end HEK_ADI_TEST1_PKG; create or replace package body HEK_ADI_TEST1_PKG AS PROCEDURE upload_data(p_code IN VARCHAR2, p_date IN DATE DEFAULT SYSDATE, p_id IN NUMBER DEFAULT 0) as begin --通过p_id是否为0来区分insert、update,如果要实现delete也可以的,方法很多哦。 IF nvl(p_id, 0) = 0 THEN INSERT INTO HEK_ADI_TEST1 (ADI_ID, ADI_CODE, ADI_DATE, created_by, creation_date, last_updated_by, last_update_login, last_update_date) SELECT HEK_ADI_TEST1_S.NEXTVAL, p_code, p_date, g_user_id,sysdate,g_user_id,1,sysdate FROM dual; ELSE UPDATE HEK_ADI_TEST1 hat SET hat.adi_code = p_code, hat.adi_date = p_date, last_updated_by = g_user_id, last_update_date = sysdate WHERE hat.adi_id = p_id; END IF; COMMIT; end upload_data; end HEK_ADI_TEST1_PKG; Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 21 创建Integrator 点击create document进入。 选择Integrator:HR Intergrator Setup(必须选择这个Integrator,尽管名字有点奇怪。可能是跟 ADI就是由HR模块发展出来的有关) 选择Layout:Integrator Setup 选择Content:None。 最后选择Create Document,出现一个Excel文件(这是我们要配置第一个excel文件)。这个excel 文件对应的数据库视图是bne_integrators_vl(这个视图是多语言的。例:在英文环境下做 的integrator在中文环境下查询不到,必须修改会话语言) ALTER SESSION SET NLS_LANGUAGE=american; Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 22 双点excel单元格,跳出一个IE登陆框。因为登陆EBS时,我使用的是Firefox。 Excel填写说明(双击会弹出LOV,然后进行选择) Item Value Note Metadata Type UPDATE Create仅新增、Download仅查询、Update查询并修 改 Application Short Name HEK 客户化开发的简称 Integrator User Name HEK_ADI_测试1 这个名称,就是ADI中显示出来的Integrator名称。 View Name HEK_ADI_TEST1_V 用APPS下的视图名!如果是表,需要加前缀! Form Name GENERAL API Package Name HEK_ADI_TEST1_PKG ADI调用的功能程序包 API Procedure Name UPLOAD_DATA ADI调用的功能程序包的过程名 Interface User Name ADI Interface Interface Parameter List Name Parameter List Name API Type PROCEDURE PROCEDURE 过程或函数 API Return Type 如果是函数,必须填写返回类型。 Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 23 填写完后,upload。 创建Function 这个Function完全是为了满足EBS的权限管理,没有其他用途。 操作路径:Application Developer=>Application=>Function Type:选择SubFunction 建立Integrator与Function关联 这个功能主要是实现Integrator与Function关联。同样也是点击create document进入。 选择Integrator:HR Maintain Integrator Form Function Associations 选择Layout:Form Function Association Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 24 选择Content:Form Function Association 填入: Application Short Name:即应用开发的简称 Integrator User Name:即前面创建的Integrator名称。 完成后,选择create document生成Excel文件(这是我们要配置第二个excel文件)。这个excel对应 的数据库表bne_security_rules(通过security_code字段与前面的Integrator表 BNE_INTEGRATORS_TL关联) 在Form Function List中填入:HEK_ADI_TEST1,即前面创建Function名称。 完后后,upload。成功! Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 25 定义Layout 点击Define Layout进入。 选择Integrator:即前面创建的Integrator名称。 提示:没权限。 解决方法:将这个Integrator对应的function分配到webadi菜单。 Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 26 点击:Define Layout 输入layout name、Layoutkey。 这边就是定义字段在excel中的显示方式。因为只有涉及一张表,所以全部选择line。 上述显示字段有二种:一种是从API Procedure Name的参数列表中自动带出来的,并且自动去 掉前面的P_;另一种是View Name的视图字段。我们只要选择API Procedure Name参数字段即 可(参数列表中没有Default值的为必勾先;其他的为可选的。),VIEW的字段可以忽略。 另外:关于default值的设置,可参考 Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 27 SELECT DISTINCT t.default_type, t.default_value FROM bne_interface_cols_vl t WHERE t.default_type IS NOT NULL; 单击apply,完成layout定义。 定义Mapping 这一步主要的功能是,实现将VIEW的记录下载到excel中,然后自定义实现将excel的值传给 pakage的参数。 选择前面定义好的Integrator:HEK_ADI_测试1 选择update按钮 单击next 左边是从VIEW的列,右边是Excel的列。 系统自动增加三行:将excel中的值传给package的参数,这说明WEBADI是一行一行将excel的 值传给package参数,然后update数据库。这也是造成ADI在处理大数据量时,效率很慢的原因 之一。 定义查询条件 这一步主要的功能,实现对记录进行条件限定查询。这一步也可不做,但要想实现对表记录的 修改就必须做啦。 Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 28 选择Integrator:HR Create Standalone Query,必须得选择这个Integrator。 如果是创建以后想要修改或删除查询条件,则要选择HR Maintain Standalone Query重新生成 excel。另外还有更奇怪的是,修改时参数名,adi会自动增加一个hr:extra的参数。必须得手工 删除掉,晕晕的。 选择Layout:Maintain Standalone Query 选择Content:Standalone Integrator 输入Application Short name、Integrator User Name 点击create ducoument,生成一个excel文件(这是我们要配置第三个excel文件)。这个excel有 对应的视图bne_param_defns_vl((这个视图是多语言的。例:在英文环境下做的 integrator在中文环境下查询不到,必须修改会话语言。ALTER SESSION SET NLS_LANGUAGE=american;) Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 29 Excel填写说明 Item Value Note Application Short Name HEK 客户化开发应用的简称 Integrator User Name HEK_ADI_测试1 前面定义Integrator名称。 SQL WHERE clause where ADI_CODE like nvl($PARAM$.HEK:P_ADI_CODE1,ADI_CODE) order by ADI_ID 注意:SQL语法。$PARAM$即为引用 后面定义参数名。ADI_CODE是视图 中定义的字段 1st Parameter Name HEK:P_ADI_CODE1 参数名,与前面SQL中的参数名要一 致。特别注意这个参数名要保持唯一 性。 1st Parameter Type Varchar2 参数的数据类型。 1st Parameter Prompt 请输入查询条件(ADI CODE): 参数的标题 OK,点击Upload。完成! 使用WEBADI 前面折腾了那么多步,终于可以看到效果啦。点击Create Document进入。 选择Integrator:HEK_ADI_测试1,即前面定义好的Integrator。 Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 30 选择Layout:选择前面定义好的layout。 选择Content:选择前面定义好的Content Download parameters:即下载时限定表的查询条件。 输入两条数据,然后点击upload。OK,出现两个smiling face,成功啦。 查询参数使用下拉框 前面的查询参数只实现一个文本框,要用户只个填数据进去。本例就是要实现下拉框。 Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 31 1.先定义一个值集,作来下拉框的数据来源: 2.先执行以下列SQL语句: ALTER SESSION SET NLS_LANGUAGE=american; --ALTER SESSION SET NLS_LANGUAGE='SIMPLIFIED CHINESE'; SELECT pdf.rowid, pdf.param_defn_code, pdf.param_name, pdf.prompt_left, pdf.datatype, pdf.val_type, pdf.val_value, pdf.display_type, pdf.display_style,intg.user_name FROM bne_integrators_vl intg, bne_contents_vl cont, bne_param_list_items pl, Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 32 bne_param_defns_vl pdf WHERE intg.application_id = cont.integrator_app_id AND intg.integrator_code = cont.integrator_code AND cont.param_list_app_id = pl.application_id AND cont.param_list_code = pl.param_list_code AND pl.param_defn_app_id = pdf.application_id AND pl.param_defn_code = pdf.param_defn_code AND intg.user_name LIKE '%HEK_ADI_测试1%'; --integrator 得到结果如下: 各列的含义: Item ITEM作用 Note VAL_TYPE 验证类型 1:无验证 2:值集验证 3:Lookup验证 VAL_VALUE 验证的值 值集验证的情况下,填值集的名称。Lookup验证的 情况下,按照view_application_id:lookup_type 格式 填值,如:450:FII_PLAN_TYPE DISPLAY_TYPE 显示类型 1 :check box 2 :radio button 3 :list box 4 :text area 5 :password box DISPLAY_STYLE 显示样式 这个值只有显示类型为1,2时生效 3.执行修改: update bne_param_defns_b bpd set bpd.val_type = 2, --值集验证 bpd.val_value = 'HEK_ADI_TEST1_LIST', --值集名称 bpd.display_type = '3' where bpd.param_name = 'HEK:P_ADI_CODE1' ; commit; 4.查询修改后的结果: Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 33 想要实现LOV的形式,目前是不能的。原因很简单LOV不是HTML标准组件,实现起来有一定 的难度。 修改Excel的列标题 细心的同学可能已经发现,WebADI 生成的Excel列名与package的参数是一样的。让用户看英 文的列标题,估计有人会不同意。^_^ 查询数据库表 select inc.prompt_left, --excel列名 inc.prompt_above, --excel列名 interface_col_name --package参数名 from bne_interface_cols_vl inc WHERE EXISTS (SELECT * FROM bne_integrators_vl bni, bne_interfaces_vl inf WHERE bni.application_id = inf.integrator_app_id AND bni.integrator_code = inf.integrator_code AND inf.application_id = inc.application_id AND inf.interface_code = inc.interface_code AND bni.user_name = 'HEK_ADI_测试1') --Integrator for update; 修改成如下: 查看结果: Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 34 创建Integrator快捷方式 这一步主要实现,简化每次create document都要点一堆的按钮。 1、在EBS新一个function。 TYPE:SSWA servlet function HTML Call:oracle.apps.bne.webui.BneApplicationService Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 35 Parameters:这个玩意实际就是URL参数,通过URL给JAVA Servlet的变量赋值。 示例: bne:page=BneCreateDoc&bne:language=en&bne:viewer=BNE:EXCEL2003&bne:reporting=Y &bne:integrator=GENERAL_102_INTG 具体规则: Item ITEM作用 Note bne:page Create document BneCreateDoc bne:language 浏览器的语言 En、ZHS等 bne:viewer 是指所选用的查看程序 EXCEL2003 bne:reporting 表示可以编辑, Y bne:integrator Integrator代码。查询:select integrator_code,USER_NAME from bne_integrators_tl where user_name like 'HEK_ADI_测试1') GENERAL_102_INTG bne:layout 应用短名:Layout代 bne:content 应用短名:Content代 2、将这个功能挂个某个菜单下。 Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 36 直接点击职责下的菜单就可以访问到这个Integrator啦。 Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 37 Oracle ADI客制化开发(二) Relation Table 本例实现了EXCEL的LOV值列表。由于Excel传参数是一行一行的传给package,并没有区别头 与行分开调用不用的程序包(尽管excel布局可以实现头与行的布局)。所以放弃了主从表的 WEBADI实现。时间有限。 ^_^ 创建数据库对象 1. 在apps用户下创建table, synonym,sequence。下同。 create table HEK_ADI_TEST2 ( HEADER_ID NUMBER primary key, ITEM_DATE DATE, ITEM_ID NUMBER, ITEM_NUM VARCHAR(20), ITEM_DESC VARCHAR2(100), BUDGET_QTY NUMBER, created_by NUMBER, creation_date DATE, last_updated_by NUMBER, last_update_login NUMBER, last_update_date DATE ); create public synonym HEK_ADI_TEST2 FOR HEK_ADI_TEST2; create sequence HEK_ADI_TEST2_S; 2. 创建VIEW create or replace view HEK_ADI_TEST2_V as select HEADER_ID, ITEM_DATE, ITEM_ID, ITEM_NUM, ITEM_DESC, BUDGET_QTY from HEK_ADI_TEST2 注册表及列 注:HEK为客户化开发的简称,可至应用开发员=>application=register去查找。 BEGIN AD_DD.REGISTER_TABLE('HEK','HEK_ADI_TEST2','T'); AD_DD.REGISTER_COLUMN('HEK','HEK_ADI_TEST2','HEADER_ID',1,'NUMBER',38,'Y' Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 38 ,'N'); AD_DD.REGISTER_COLUMN('HEK','HEK_ADI_TEST2','ITEM_DATE',2,'DATE',9,'Y','N'); AD_DD.REGISTER_COLUMN('HEK','HEK_ADI_TEST2','ITEM_ID',3,'NUMBER',9,'Y','N'); AD_DD.REGISTER_COLUMN('HEK','HEK_ADI_TEST2','ITEM_NUM',4,'NUMBER',9,'Y',' N'); AD_DD.REGISTER_COLUMN('HEK','HEK_ADI_TEST2','ITEM_DESC',5,'VARCHAR2',100 ,'Y','N'); AD_DD.REGISTER_COLUMN('HEK','HEK_ADI_TEST2','BUDGET_QTY',6,'number',9,'Y',' N'); AD_DD.REGISTER_COLUMN('HEK','HEK_ADI_TEST2','created_by',7,'NUMBER',38,'Y',' N'); AD_DD.REGISTER_COLUMN('HEK','HEK_ADI_TEST2','creation_date',8,'DATE',9,'Y','N'); AD_DD.REGISTER_COLUMN('HEK','HEK_ADI_TEST2','last_updated_by',9,'NUMBER',38 ,'Y','N'); AD_DD.REGISTER_COLUMN('HEK','HEK_ADI_TEST2','last_update_login',10,'NUMBER' ,38,'Y','N'); AD_DD.REGISTER_COLUMN('HEK','HEK_ADI_TEST2','last_update_date',11,'DATE',9,'Y' ,'N'); COMMIT; END; 创建程序包 关键的程序包,所有操作都在这边。 create or replace package hek_adi_test2_pkg as g_user_id number := fnd_profile.value('user_id'); procedure upload_data(p_header_id number default 0, p_ITEM_DATE DATE, p_ITEM_ID NUMBER, p_ITEM_NUM VARCHAR, p_ITEM_DESC VARCHAR2, p_BUDGET_QTY NUMBER); end hek_adi_test2_pkg; create or replace package body hek_adi_test2_pkg as procedure upload_data(p_header_id number default 0, p_ITEM_DATE DATE, p_ITEM_ID NUMBER, p_ITEM_NUM VARCHAR, p_ITEM_DESC VARCHAR2, p_BUDGET_QTY NUMBER) as v_hid number:=0; begin Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 39 if nvl(p_header_id,0) =0 then select HEK_ADI_TEST2_S.nextval into v_hid from dual; insert into HEK_ADI_TEST2 (HEADER_ID, ITEM_DATE, ITEM_ID, ITEM_NUM, ITEM_DESC, BUDGET_QTY, created_by, creation_date, last_updated_by, last_update_login, last_update_date) values (v_hid, p_ITEM_DATE, p_ITEM_ID, p_ITEM_NUM, p_ITEM_DESC, p_BUDGET_QTY, g_user_id, sysdate, g_user_id, 1, sysdate); else update HEK_ADI_TEST2 ht set ht.item_date = p_ITEM_DATE, ht.item_id = p_ITEM_ID, ht.item_num = p_ITEM_NUM, ht.item_desc = p_ITEM_DESC, ht.budget_qty = p_BUDGET_QTY where ht.header_id = p_header_id; end if; commit; exception when others then rollback; raise_application_error(-20000, 'has an occur' || sqlerrm); Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 40 end upload_data; end hek_adi_test2_pkg; 创建Integrator 点击create document进入。 选择Integrator:HR Intergrator Setup 最后选择Create Document,出现一个Excel文件。 Excel填写说明(双击会弹出LOV,然后进行选择) Item Value Note Metadata Type UPDATE Create仅新增、Download仅查询、Update查询并修 改 Application Short Name HEK 客户化开发的简称 Integrator User Name HEK_ADI_TEST2 这个名称,就是ADI中显示出来的Integrator名称。 View Name HEK_ADI_TEST2_V 用APPS下的视图名!如果是表,需要加前缀! Form Name GENERAL API Package Name HEK_ADI_TEST2_PKG ADI调用的功能程序包 API Procedure Name upload_data ADI调用的功能程序包的过程名 Interface User Name ADI Interface2 没什么用途 Interface Parameter List Name Parameter List Name2 没什么用途 Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 41 API Type PROCEDURE PROCEDURE 过程或函数 API Return Type 如果是函数,必须填写返回类型。 填写完后,upload。 创建Function 这个Function完全是为了满足EBS的权限管理,没有其他用途。 操作路径:Application Developer=>Application=>Function Type:选择SubFunction 建立Integrator与Function关联 这个功能主要是实现Integrator与Function关联。同样也是点击create document进入。 选择Integrator:HR Maintain Integrator Form Function Associations 填入: Application Short Name:即应用开发的简称 Integrator User Name:即前面创建的Integrator名称。 Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 42 在Form Function List中填入:前面创建Function名称。 完后后,upload。成功! 定义Layout 在WEBADI MENU菜单加入职责:HEK_ADI_TEST2 然后点击Define Layout进入。 选择Integrator:即前面创建的Integrator名称。 输入layout name、Layoutkey。 Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 43 上述显示字段有二种:一种是从API Procedure Name的参数列表中自动带出来的,并且自动去 掉前面的P_;另一种是View Name的视图字段。我们只要选择API Procedure Name参数字段即 可(参数列表中没有Default值的为必勾先;其他的为可选的),VIEW的字段可以忽略。 定义Mapping 这一步主要的功能是,实现将VIEW的记录下载到excel中,然后自定义实现将excel的值传给 pakage的参数。 选择前面定义好的Integrator:HEK_ADI_测试2 选择UPDATE Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 44 左边是从VIEW的列,右边是Excel的列。 定义查询条件 这一步主要的功能,实现对记录进行条件限定查询。 选择Integrator:HR Create Standalone Query,必须得选择这个Integrator。 如果是创建以后想要修改或删除查询条件,则要选择HR Maintain Standalone Query重新生成 excel。另外还有更奇怪的是,修改时参数名,adi会自动增加一个hr:extra的参数。必须得手工 删除掉,晕晕的。 输入Application Short name、Integrator User Name Excel填写说明 Item Value Note Application Short Name HEK 客户化开发应用的简称 Integrator User Name HEK_ADI_TEST2 前面定义Integrator名称。 SQL WHERE clause where item_num like nvl($PARAM$.HEK:P_ITEM1, item_num) and TO_CHAR(ITEM_DATE, 'YYYY-MM-DD') like nvl(TO_CHAR($PARAM$.HEK:P_DATE2, 'YYYY-MM-DD%'), ITEM_DATE) 注意:SQL语法,对应在前面定义的 VIEW后面。$PARAM$即为引用后面 定义参数名。 Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 45 1st Parameter Name HEK:P_ITEM1 参数名1,与前面SQL中的参数名要一 致。特别注意这个参数名要保持唯一 性。 1st Parameter Type Varchar2 参数1的数据类型。 1st Parameter Prompt 请输入查询条件(item代码): 参数1的标题 2st Parameter Name HEK:P_DATE2 参数名2,与前面SQL中的参数名要一 致。特别注意这个参数名要保持唯一 性,如果使用过的名称是修改成功的 2st Parameter Type DATE 参数2的数据类型。 2st Parameter Prompt 请输入查询条件(日期): 参数2的标题 OK,点击Upload。完成! 使用WEBADI 点击Create Document进入。 选择Integrator 选择查询条件: HEK_ADI_TEST2。然后创建DOCUMENT。 Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 46 Ok,成功。 实现excel中的LOV(步骤一) 为了实现这个功能,首先必须创建一个新的Integrator用来配置LOV(当然也可直接以数据库中 update相关的表,则本步骤可以省啦?) 1.创建VIEW CREATE OR REPLACE VIEW HEK_WEBADI_LOV_V AS select INTG.APPLICATION_ID ,INTG.INTEGRATOR_CODE ,INTG.USER_NAME ,INTG.DATE_FORMAT ,INTC.INTERFACE_CODE ,INTC.SEQUENCE_NUM ,INTC.DISPLAY_ORDER ,INTC.INTERFACE_COL_NAME ,INTC.REQUIRED_FLAG ,INTC.DISPLAY_FLAG ,INTC.READ_ONLY_FLAG ,INTC.NOT_NULL_FLAG ,INTC.DATA_TYPE ,INTC.FIELD_SIZE ,INTC.DEFAULT_TYPE ,INTC.DEFAULT_VALUE ,INTC.VAL_TYPE ,INTC.VAL_ID_COL ,INTC.VAL_MEAN_COL ,INTC.VAL_DESC_COL ,INTC.VAL_OBJ_NAME ,INTC.VAL_ADDL_W_C ,INTC.VAL_COMPONENT_APP_ID ,INTC.VAL_COMPONENT_CODE ,INTC.LOV_TYPE ,INTC.OFFLINE_LOV_ENABLED_FLAG ,INTC.USER_HINT ,INTC.PROMPT_LEFT ,INTC.PROMPT_ABOVE from BNE_INTERFACE_COLS_vl INTC ,BNE_INTERFACES_VL INTF ,BNE_INTEGRATORS_VL INTG where INTC.INTERFACE_CODE = INTF.INTERFACE_CODE AND INTF.INTEGRATOR_CODE = INTG.INTEGRATOR_CODE; Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 47 2.创建PACKAGE CREATE OR REPLACE PACKAGE HEK_PACKAGES is procedure pop_interface_cols(P_APPLICATION_ID NUMBER, P_INTEGRATOR_CODE VARCHAR2, P_USER_NAME VARCHAR2, P_DATE_FORMAT VARCHAR2, P_INTERFACE_CODE VARCHAR2, P_SEQUENCE_NUM VARCHAR2, P_DISPLAY_ORDER VARCHAR2, P_INTERFACE_COL_NAME VARCHAR2, P_REQUIRED_FLAG VARCHAR2, P_DISPLAY_FLAG VARCHAR2, P_READ_ONLY_FLAG VARCHAR2, P_NOT_NULL_FLAG VARCHAR2, P_DATA_TYPE VARCHAR2, P_FIELD_SIZE VARCHAR2, P_DEFAULT_TYPE VARCHAR2, P_DEFAULT_VALUE VARCHAR2, P_VAL_TYPE VARCHAR2, P_VAL_ID_COL VARCHAR2, P_VAL_MEAN_COL VARCHAR2, P_VAL_DESC_COL VARCHAR2, P_VAL_OBJ_NAME VARCHAR2, P_VAL_ADDL_W_C VARCHAR2, P_VAL_COMPONENT_APP_ID VARCHAR2, P_VAL_COMPONENT_CODE VARCHAR2, P_LOV_TYPE VARCHAR2, P_OFFLINE_LOV_ENABLED_FLAG VARCHAR2, P_USER_HINT VARCHAR2, P_PROMPT_LEFT VARCHAR2, P_PROMPT_ABOVE VARCHAR2); end HEK_PACKAGES; CREATE OR REPLACE PACKAGE BODY HEK_PACKAGES is procedure pop_interface_cols(P_APPLICATION_ID NUMBER, P_INTEGRATOR_CODE VARCHAR2, P_USER_NAME VARCHAR2, P_DATE_FORMAT VARCHAR2, P_INTERFACE_CODE VARCHAR2, P_SEQUENCE_NUM VARCHAR2, P_DISPLAY_ORDER VARCHAR2, P_INTERFACE_COL_NAME VARCHAR2, P_REQUIRED_FLAG VARCHAR2, Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 48 P_DISPLAY_FLAG VARCHAR2, P_READ_ONLY_FLAG VARCHAR2, P_NOT_NULL_FLAG VARCHAR2, P_DATA_TYPE VARCHAR2, P_FIELD_SIZE VARCHAR2, P_DEFAULT_TYPE VARCHAR2, P_DEFAULT_VALUE VARCHAR2, P_VAL_TYPE VARCHAR2, P_VAL_ID_COL VARCHAR2, P_VAL_MEAN_COL VARCHAR2, P_VAL_DESC_COL VARCHAR2, P_VAL_OBJ_NAME VARCHAR2, P_VAL_ADDL_W_C VARCHAR2, P_VAL_COMPONENT_APP_ID VARCHAR2, P_VAL_COMPONENT_CODE VARCHAR2, P_LOV_TYPE VARCHAR2, P_OFFLINE_LOV_ENABLED_FLAG VARCHAR2, P_USER_HINT VARCHAR2, P_PROMPT_LEFT VARCHAR2, P_PROMPT_ABOVE VARCHAR2) IS BEGIN UPDATE BNE_INTERFACE_COLS_B b SET B.REQUIRED_FLAG = P_REQUIRED_FLAG, B.DISPLAY_FLAG = P_DISPLAY_FLAG, B.READ_ONLY_FLAG = P_READ_ONLY_FLAG, B.NOT_NULL_FLAG = P_NOT_NULL_FLAG, B.DATA_TYPE = P_DATA_TYPE, B.FIELD_SIZE = P_FIELD_SIZE, B.DEFAULT_TYPE = P_DEFAULT_TYPE, B.DEFAULT_VALUE = P_DEFAULT_VALUE, B.VAL_TYPE = P_VAL_TYPE, B.VAL_ID_COL = P_VAL_ID_COL, B.VAL_MEAN_COL = P_VAL_MEAN_COL, B.VAL_DESC_COL = P_VAL_DESC_COL, B.VAL_OBJ_NAME = P_VAL_OBJ_NAME, B.VAL_ADDL_W_C = P_VAL_ADDL_W_C, B.VAL_COMPONENT_APP_ID = P_VAL_COMPONENT_APP_ID, B.VAL_COMPONENT_CODE = P_VAL_COMPONENT_CODE, B.DISPLAY_ORDER = P_DISPLAY_ORDER, B.LOV_TYPE = P_LOV_TYPE, B.OFFLINE_LOV_ENABLED_FLAG = P_OFFLINE_LOV_ENABLED_FLAG WHERE B.INTERFACE_CODE = P_INTERFACE_CODE Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 49 AND B.SEQUENCE_NUM = P_SEQUENCE_NUM; UPDATE BNE_INTERFACE_COLS_TL T SET T.USER_HINT = P_USER_HINT, T.PROMPT_LEFT = P_PROMPT_LEFT, T.PROMPT_ABOVE = P_PROMPT_ABOVE WHERE T.INTERFACE_CODE = P_INTERFACE_CODE AND T.SEQUENCE_NUM = P_SEQUENCE_NUM; COMMIT; END; end HEK_PACKAGES; 3.创建Integrator 点击Create Document进入,然后选择:HR Integrator Setup 创建EXCEL文件 Excel填写说明(双击会弹出LOV,然后进行选择) Item Value Note Metadata Type UPDATE Create仅新增、Download仅查询、Update查询并修 改 Application Short Name HEK 客户化开发的简称 Integrator User Name HEK_LOV配置 这个名称,就是ADI中显示出来的Integrator名称。 View Name HEK_WEBADI_LOV_V 用APPS下的视图名!如果是表,需要加前缀! Form Name GENERAL API Package Name HEK_PACKAGES ADI调用的功能程序包 Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 50 API Procedure Name pop_interface_cols ADI调用的功能程序包的过程名 Interface User Name ADI LOV Interface Interface Parameter List Name Parameter LOV List Name API Type PROCEDURE PROCEDURE 过程或函数 API Return Type 如果是函数,必须填写返回类型。 4.创建功能及授权 4.定义功能与Integrator关联 Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 51 5.创建查询条件 Excel填写说明 Item Value Note Application Short Name HEK 客户化开发应用的简称 Integrator User Name HEK_LOV配置 前面定义Integrator名称。 SQL WHERE clause where user_name like nvl($PARAM$.HEK:p_user_name, user_name) 注意:SQL语法,对应在前面定义的 VIEW后面。$PARAM$即为引用后面 定义参数名。 1st Parameter Name HEK:p_user_name 参数名1,与前面SQL中的参数名要一 致。特别注意这个参数名要保持唯一 性。 1st Parameter Type Varchar2 参数1的数据类型。 1st Parameter Prompt 请输入Integrator名称: 参数1的标题 OK,点击Upload。完成! 6.定义Layout(全部为LINE) 7.定义MAPPING(略) 8.LOV参数配置: Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 52 点击CREATE DEOCUMENT。 选择前面创建的Integrator。 在查询条件框中,输入要定义LOV的Integrator:HEK_ADI_TEST2 Excel填写说明 Item Value Note VAL_TYPE TABLE 值列表数据来源,从Oracle数据库中获得,则统一选择:TABLE VAL_ID_COL 传递给程序参数的字段 VAL_MEAN_COL 在EXCEL中显示的字段 VAL_DESC_COL 说明的字段 VAL_OBJ_NAME 值列表所在的表名(可以多表及别名) VAL_ADDL_W_C WHERE语句 VAL_COMPONENT_APP_ID 231 组件的应用ID,如对格式没有严格要求,可选择任一个通用的 组件(select bcb.application_id,bcb.component_code from bne_components_b bcb)。例如231(注:POPLIST时,可为空)。 VAL_COMPONENT_CODE OA_REVERSE _JOURNAL 组件名,如对格式没有严格要求,可选择任一个通用的组件 (select bcb.application_id,bcb.component_code from bne_components_b bcb)。例如OA_REVERSE_JOURNAL(注: POPLIST时,可为空) Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 53 LOV_TYPE POPLIST 值列表类型,统一选择:POPLIST OFFLINE_LOV_ENABLED_FLAG Y 离线编辑EXCEL表格时是否可用 PROMPT_LEFT PROMPT_ABOVE 字段的提示,可更改为中文 例:我们要实现excel中的ITEM_NUM列为LOV。数据来源为物料编码(IC_ITEM_MST_B)。 在package的参数行p_item_numE定义:(注意:要在相应的package参数行) Item Value Note VAL_TYPE TABLE 值列表数据来源,从Oracle数据库中获 得,则统一选择:TABLE VAL_ID_COL ITEM_NO, ITEM_ID 传递给程序参数的字段 VAL_MEAN_COL ITEM_NO,ITEM_UM,ITEM_ID 在EXCEL中显示的字段 VAL_DESC_COL ITEM_DESC1 即LOV说明的字段 VAL_OBJ_NAME IC_ITEM_MST_B 值列表所在的表名 VAL_ADDL_W_C item_no like '21%'and delete_mark = 0 WHERE语句 VAL_COMPONENT_APP_ID 20003 新建一个组件ID。 select bcb.application_id,bcb.component_code from bne_components_b bcb VAL_COMPONENT_CODE COM_HEK_ITEM_TEST 新建一个组件名,这参数很重要。 LOV_TYPE STANDARD 值列表类型, POPLIST或STANDARD OFFLINE_LOV_ENABLED_FLAG Y 离线编辑EXCEL表格时是否可用 PROMPT_ABOVE 物料编码 字段的提示, Upload上传数据。OK! 实现excel中的LOV(步骤二) 1.创建LOV组件 通过前面定义VAL_COMPONENT_CODE来获取 application_id ,VAL_COMPONENT_APP_ID, VAL_COMPONENT_CODE Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 54 SELECT b.application_id, b.VAL_COMPONENT_APP_ID, b.VAL_COMPONENT_CODE FROM BNE_INTERFACE_COLS_B B where b.VAL_COMPONENT_CODE = 'COM_HEK_ITEM_TEST' 2.更新组件表: insert into bne_components_b (application_id, component_code, object_version_number, component_java_class, param_list_app_id, param_list_code, created_by, creation_date, last_updated_by, last_update_login, last_update_date) values (20003, --对应BNE_INTERFACE_COLS_B.VAL_COMPONENT_APP_ID 'COM_HEK_ITEM_TEST', --对应BNE_INTERFACE_COLS_B.VAL_COMPONENT_CODE 1, 'oracle.apps.bne.integrator.component.BneOAValueSetComponent', --Oracle标准的代码 20003, --参数应用ID 'COM_HEK_ITEM_TEST_L', --参数的代码名称,这个参数很重要 -1, sysdate, -1, -1, sysdate); insert into bne_components_tl (application_id, component_code, language, source_lang, user_name, created_by, creation_date, last_updated_by, last_update_login, last_update_date) values Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 55 (20003, --对应bne_components_b.application_id 'COM_HEK_ITEM_TEST', --对应bne_components_b.component_code 'ZHS', 'ZHS', 'WEBADI物料编码', --参数说明 -1, sysdate, -1, -1, sysdate); -1, -1, sysdate); 3.创建一个功能 类型:SSWA servlet函数 参数:bne:page=BneParameter HTML调用:oracle.apps.bne.webui.BneApplicationService 4.加入菜单 Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 56 5. 调用BNE的参数设置界面 选择访问刚才定义的功能 选择:Web应用产品桌面集成器 。并去掉Restrict to this application 点击查找。可以使用Oralce系统原有的一个参数(如:COMP_AVG_JNL_FLAG)来创建客户 化应用的参数及属性。 Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 57 输入:COMP_AVG_JNL_FLAG 。选择点击select 点击duplicate按钮 注意:Application必须与前面的客户化应用相同; CODE必须与bne_components_b.param_list_code保持一致。 select bcb.param_list_code, bcb.component_code from bne_components_b bcb where bcb.component_code = 'COM_HEK_ITEM_TEST' 点击保存。然后退出至WEADI主页,选择客户化应用进入。 去掉Restrict to this application勾选 Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 58 输入查找条件:HEK_WEBADI_ITEM 5.1 修改Table Columns属性。 该属性控制在值列表中显示列,以及列的顺序。从设置规范的角度,Tables Columns参数属性 中的列和顺序,应该与Table Column Alias和Table Headers这两个参数属性的列和顺序保持完 全一致。 在VALUE中输入各个列名,用“,”分隔。注意这里的字段名必须是 BNE_INTERFACE_COLS_B.VAL_OBJ_NAME的字段之一,并且出现在 BNE_INTERFACE_COLS_B中的VAL_ID_COL、VAL_MEAN_COL或者Val_Desc_Col中,否 则显示不出值。 SELECT b.VAL_OBJ_NAME, b.VAL_ID_COL, b.VAL_MEAN_COL, b.Val_Desc_Col FROM BNE_INTERFACE_COLS_B B where b.VAL_COMPONENT_CODE = 'COM_HEK_ITEM_TEST' 5.2.修改Table Column Alias属性。 Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 59 设置Table Column Alias的参数属性。针对Tables Columns参数属性中的列,指定假名。 这一步非常重要。必须与前面的table column顺序相同(用逗号隔开),名称必须与以下相同,即 PACKAGE的参数相同。否则值不会返回excel SELECT B.INTERFACE_COL_NAME,b.VAL_OBJ_NAME,b.* FROM BNE_INTERFACE_COLS_B B ORDER BY B.CREATION_DATE DESC 5.2.修改table-select-column属性。 设置TABLE SELECT COLUMN的参数属性。此参数决定通过值列表选择后,返还到EXCEL表 格的哪个字段。 VALUE代表返还的字段: Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 60 该字段的名字必须与BNE_INTERFACE_COLS_B.interface_col_name保持完全一致。并且该字 段必须存在于BNE_INTERFACE_COLS_B.VAL_OBJ_NAME的列中,或者使用在Table Column Alias的参数属性中被指定假名。否则在值列表挑选后,不会自动更新EXCEL表格中对应的项目。 SELECT B.INTERFACE_COL_NAME,b.* FROM BNE_INTERFACE_COLS_B B ORDER BY B.CREATION_DATE DESC 实现excel中的LOV(步骤三) 1.重启Apache:为什么要重启呢?因为LOV调用servlet类,必须重新载入方可生效。 # cd /EBS目录/SID/SIDora/iAS/Apache/Apache/bin # apachectl stop #apachectl start 2.使用ADI,终于看到LOV的效果。 Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 61 Oracle Web ADI客制化开发(三) 自行开发Web ADI 这一节不是基于WEBADI的开发,而是直接通过VBA编程,实现类似于Web ADI的功能。为什 么要这么做呀?原因有两:一、VBA相比于WEB ADI的复杂设置,显然有点更简单。二、WEB ADI无法独立于Oracle EBS。 本例只是一个VBA编程的例子,没有象Web ADI那样实现对VBA代码自动生成。有兴趣的同学 可以深入。 创建数据库对象 Author:JarWang (王重东) QQ:jarwang@sina.com Copyright(R):Jarwang 62 Other Notes Oracle EBS11i开发笔记:http://www.itpub.net/thread-1133804-1-1.html Oracle EBS11i--OAF开发笔记: Oracle EBS11i-Workflow开发笔记: Oracle EBS11i OM-扩展开发:http://www.itpub.net/thread-1154690-1-1.html Oracle EBS WEB ADI开发笔记(抽丝拨茧篇):http://www.itpub.net/thread-1225495-1-1.html Oracle EBS-11i多节点安装、克隆等 (32bit):http://www.itpub.net/thread-1228782-1-1.html Oracle EBS-11i DBA维护笔记: Oracle EBS-R12安装、克隆等(64bit):http://www.itpub.net/thread-1129128-1-1.html Oracle EBS Advanced Replication10g配置:http://www.itpub.net/thread-1216295-1-1.html Oracle EBS DataGuard10g配置: Oracle EBS Stream10g配置: Oracle10g OCP学习笔记:http://www.itpub.net/thread-1229073-1-1.html Oracle10g RAC安装:http://www.itpub.net/thread-1194959-1-1.html Oracle10g 基于ASM存储的异机恢复:http://www.itpub.net/thread-1208926-1-1.html PL/SQL操作EXCEL:http://www.itpub.net/thread-1101710-1-1.html RHEL5.2内核升级:http://www.itpub.net/thread-1145199-1-1.html

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 20 金币 [ 分享文档获得金币 ] 2 人已下载

下载文档

相关文档