OracleEBS-WebService开发笔记
- 格式:pdf
- 大小:1.73 MB
- 文档页数:36
在Oracle EBS二次开发中,PL/SQL程序是开发人员使用频率最高的开发语言,同时也是大家最容易掌握的工具之一了,而我们也很希望将自己编写的PL/SQL 程序发布为Web服务来提供给客户端程序使用,同时也可以实现和外围系统的集成,有了irep_parser这个工具,我们就可以将自己编写的PL/SQL 程序发布到Oracle Integration Repositoy中。
Oracle Integration Repositoy中集成接口的来源都是Oracle,客户化的程序发布上去的为Custom:下面描述如何将PL/SQL程序接口发布到Oracle Integration Repositoy中作为集成接口供第三方程序集成调用一、给EBS系统打补丁参考如下安装文档:安装文档.docx二、添加客户化应用到Product Family客户化应用设置好之后,它没有归属于任何的产品家族,如我的客户化应用CUX,因此发布在客户化应用下的集成接口在Oracle Integration Repositoy中无法方便的查看,如下图:如果客户化集成接口是组织到自己的应用下就需要先注册一个产品家族,下面将CUX Developer(CUX) 应用注册到CUX Developer(cux_pf)这个产品家族下作为例子进行演示:1,添加产品家族 CUX Developer(cux_pf)--添加产品家族begin-- Call the proceduread_pa_insert_package.insert_ad_pm_product_info(x_product_abbreviation => 'cux_pf',x_pseudo_product_flag => 'N',x_product_family_flag => 'Y',x_application_short_name => NULL,x_product_name => 'CUX Developer',x_product_family_abbreviation => NULL,x_product_family_name => NULL,x_aru_update_date => to_char(SYSDATE,'YYYY-MM-DD HH24:MI:SS'), x_currdate => to_char(SYSDATE,'YYYY-MM-DD HH24:MI:SS'),x_last_updated_by => -1,x_created_by => -1);COMMIT;end;2,注册CUX Developer(CUX)应用到产品家族中--注册CUX应用到产品家族中begin-- Call the proceduread_pa_insert_package.insert_ad_pm_product_info(x_product_abbreviation => 'cux',x_pseudo_product_flag => 'N',x_product_family_flag => 'N',x_application_short_name => 'CUX',x_product_name => 'CUX Developer',x_product_family_abbreviation => NULL,x_product_family_name => NULL,x_aru_update_date => to_char(SYSDATE,'YYYY-MM-DD HH24:MI:SS'),x_currdate => to_char(SYSDATE,'YYYY-MM-DDHH24:MI:SS'),x_last_updated_by => -1,x_created_by => -1);COMMIT;end;3,关联CUX Developer应用到产品家族CUX Developer下--关联CUX应用到产品家族CUX Developer下begin-- Call the proceduread_pa_insert_package.insert_ad_pm_prod_family_map(x_product_abbreviat ion => 'cux',x_product_family_abbreviation => 'cux_pf',x_aru_update_date => to_char(SYSDATE,'YYYY-MM-DD HH24:MI:SS'),x_currdate => to_char(SYSDATE,'YYYY-MM-DDHH24:MI:SS'),x_last_updated_by => -1,x_created_by => -1);COMMIT;end;执行完成后通过下面2条SQL验证是否添加成功,查出3条数据表示添加成功。
技术心得一、SQL查询:1、”列出同部门中工资高于1000的员工数量超过2人的部门,显示部门名字、地区名称”.查询语句如下:select distinct dept.department_name,loc.cityfrom employees emp,departments dept,locations locwhere emp.department_id=dept.department_idand dept.location_id=loc.location_idand EXISTS(select1from employees emp2where emp2.department_id=emp.department_idand emp2.salary>1000group by emp2.department_idhaving count(emp2.department_id)>2)通常我们只需要对记录逐行的筛选,对于分组数据我们只能使用分组语句avg、max等,也就是说如果你想在select中得到这个属性那么“它们“也必须出现在group by中或者你只想得到一个统计数据.回顾上面的例子,我们也可以用以下语句完成:select dept.department_name,loc.city,count(*)from employees emp,departments dept,locations locwhere emp.department_id=dept.department_idand dept.location_id=loc.location_idand emp.salary>1000group by dept.department_name,loc.cityhaving count(*) > 2对于group by来说每一条emp.department_id必对应唯一dept.department_id、dept.department_name因此不论group by department_id还是group by department_name,loc.city达到的效果是一样的2、用一条语句查询出scott.emp表中每个部门工资前三位的数据:select department_id,max(salary) max_salary,max(decode (rank,2,salary,salary))mid_salary,min(salary) min_salaryfrom(select department_id,salary,rank from(select emp.department_id,emp.employee_id,emp.salary,row_number()over(partition by emp.department_id order by emp.salary) as rankfrom employees emp) Ewhere E.rank<=3)group by department_idrownumber()over(patition by column1 order by column2),表示以column1分组对column2排序,row_number可用于筛选重复项.3、哪些员工跟Den(FIRST_NAME)、Rephaely(Last_Name)不在同一个部门.此处可能存在没有部门的员工,应该用No Exists筛选deptno与该员工不等的记录.若要求空值可使用NO EXISTS若不要求空值可用EXISTS,尽量用EXISTS取代IN、ANY、ALL等操作(可提高性能),注意空值的处理!!!4、在多表连接查询中,子查询最多只可嵌套一层否则Oracle无法识别5、for handle in:游标二、PL/SQl存储过程1、游标的使用:显式游标的使用分为四步,声明、打开、循环、关闭.打开游标:就是执行游标所对应的SELECT 语句,将其查询结果放入工作区,并且指针指向工作区的首部,标识结果集合。
EBS中发布WEBSERVICE接口的方法发布Web服务接口是将现有的应用程序或功能暴露给其他应用程序或系统,通过网络进行交互的一种方式。
EBS(Enterprise Services Bus)是一种中间件架构,用于集成和连接多个应用程序和系统。
在EBS中发布Web服务接口,需要经过以下步骤:1. 明确需求和目标:在发布Web服务接口之前,需要明确需求和目标。
首先确定要暴露的应用程序或功能,以及可提供的服务、数据和操作。
同时,也需要考虑与其他系统的集成方式,包括数据格式、接口协议和安全性要求等。
2. 设计接口规范:根据需求和目标,设计Web服务接口的规范。
规范包括接口的名称、输入输出参数、数据格式、协议要求等。
可以使用标准的Web服务技术,如SOAP(Simple Object Access Protocol)、RESTful(Representational State Transfer)等。
此外,还可以考虑使用标准的数据交换格式,如XML(eXtensible Markup Language)、JSON (JavaScript Object Notation)等。
3. 实现接口代码:根据接口规范,实现接口代码。
可以使用不同的编程语言和开发框架,如Java、C#、NET等。
在实现接口代码时,需要注意处理输入参数、处理业务逻辑、生成输出结果等。
4.配置EBS框架:将实现的接口代码部署到EBS框架中。
配置EBS框架,以确保接口可以被其他应用程序或系统访问和调用。
配置包括网络端口、认证授权、安全性等。
5. 测试接口功能:在发布Web服务接口之前,需要进行功能测试。
测试接口的输入输出参数,验证接口的正确性和可靠性。
可以使用自动化测试工具,如SoapUI、Postman等。
6. 文档和API管理:编写接口的文档和说明,以便其他开发人员或系统管理员使用。
文档应包含接口的详细说明、参数的使用方法和示例代码。
工作流的主要组成部分包括:l 工作流生成器(Workflow Builder)l 工作流引擎(Workflow Engine)l 工作流定义载入器(Workflow Definitions Loader)l 通知系统(Notification System)l 工作流监控器(Workflow Monitor)如下图所示:这里写下Workflow Definitions Loader。
在开放工作流中,我们使用Oracle Workflow Builder建立工作流,整个工作流的建立过程就是跟工作流定义载入相关。
在程序层面,我们找到WF_LOAD 包,这里就是整个工作流建立的后台实现相关。
在WF_LOAD包中,我们可以看到工作流开发过程中的Attributes, Processes, Notifications, Functions, Messages和Lookup Types的程序实现。
ORACLE把所有的这些对象都作为数据库表元素保存在表里面,通过表中各字段的定义和表与表之间的关联来提现他们的关系。
列一下表与对象对应关系:wf_item_attributes定义Attributes。
wf_activities定义Process、Funciton和Notices,同时有相对应的wf_activities_tl表定义名称。
wf_messages定义Messages,其中Message里面的属性在wf_message_attributes表中定义。
wf_lookup_types_tl(有对应的wf_lookup_types视图)定义Lookup Types,其中Lookup Type里面的Lookup Code在wf_lookups_tl表(有对应的wf_lookups视图)中定义。
这里要特别注意一点:Lookup Type是全局变量,它的表的主键是(LOOKUP_TYPE, LANGUAGE),做后台操作请慎重。
WebService开发笔记 1 -- 利用cxf开发WebService竟然如此简单关键字: webservice cxf soaWebService开发笔记 1 -- 利用cxf开发WebService竟然如此简单现在的项目中需要用到SOA概念的地方越来越多,最近我接手的一个项目中就提出了这样的业务要求,需要在.net开发的客户端系统中访问java开发的web 系统,这样的业务需求自然需要通过WebService进行信息数据的操作。
下面就将我们在开发中摸索的一点经验教训总结以下,以供大家参考.在WebService开发笔记 2 -- VS 2005 访问WebServcie更简单中作一个跨平台访问WebServcie服务的例子....在WebService开发笔记 3 -- 增强访问 WebService 的安全性通过一个简单的用户口令验证机制来加强一下WebService的安全性....我们项目的整个架构使用的比较流行的WSH MVC组合,即webwork2 + Spring + Hibernate;1.首先集成Apacha CXF WebService 到 Spring 框架中;apache cxf 下载地址:/dist/incubator/cxf/2.0.4-incubator/apache -cxf-2.0.4-incubator.zip在spring context配置文件中引入以下cxf配置Xml代码1.<import resource="classpath*:META-INF/cxf/cxf.xml"/>2.<import resource="classpath*:META-INF/cxf/cxf-extension-soap.xml"/>3.<import resource="classpath*:META-INF/cxf/cxf-servlet.xml"/>在web.xml中添加过滤器:Xml代码1.<servlet>2.<servlet-name>CXFServlet</servlet-name>3.<servlet-class>4. org.apache.cxf.transport.servlet.CXFServlet5.</servlet-class>6.</servlet>7.<servlet-mapping>8.<servlet-name>CXFServlet</servlet-name>9.<url-pattern>/services/*</url-pattern>10.</servlet-mapping>2.开发服务端WebService接口:Java代码1./**2. * WebService接口定义类.3. *4. * 使用@WebService将接口中的所有方法输出为Web Service.5. * 可用annotation对设置方法、参数和返回值在WSDL中的定义.6. */7.@WebService8.public interface WebServiceSample {9.10.11. /**12. * 一个简单的方法,返回一个字符串13. * @param hello14. * @return15. */16. String say(String hello);17.18. /**19. * 稍微复杂一些的方法,传递一个对象给服务端处理20. * @param user21. * @return22. */23. String sayUserName(24. @WebParam(name = "user")25. UserDTO user);26.27. /**28. * 最复杂的方法,返回一个List封装的对象集合29. * @return30. */31. public32. @WebResult(partName="o")33. ListObject findUsers();34.35.}由简单到复杂定义了三个接口,模拟业务需求;3.实现接口Java代码1./**2. * WebService实现类.3. *4. * 使用@WebService指向Interface定义类即可.5. */6.@WebService(endpointInterface = ".examples.webservice.WebServiceSample")7.public class WebServiceSampleImpl implements WebServiceSample {8.9. public String sayUserName(UserDTO user) {10. return "hello "+user.getName();11. }12.13. public String say(String hello) {14. return "hello "+hello;15. }16.17. public ListObject findUsers() {18. ArrayList<Object> list = new ArrayList<Object>();19.20. list.add(instancUser(1,"lib"));21. list.add(instancUser(2,"mld"));22. list.add(instancUser(3,"lq"));23. list.add(instancUser(4,"gj"));24. ListObject o = new ListObject();25. o.setList(list);26. return o;27. }28.29. private UserDTO instancUser(Integer id,String name){30. UserDTO user = new UserDTO();31. user.setId(id);32. user.setName(name);33. return user;34. }35.}4.依赖的两个类:用户对象与List对象Java代码1./**2. * Web Service传输User信息的DTO.3. *4. * 分离entity类与web service接口间的耦合,隔绝entity类的修改对接口的影响.5. * 使用JAXB 2.0的annotation标注JAVA-XML映射,尽量使用默认约定.6. *7. */8.@XmlAccessorType(XmlAccessType.FIELD)9.@XmlType(name = "User")10.public class UserDTO {11.12. protected Integer id;13.14. protected String name;15.16. public Integer getId() {17. return id;18. }19.20. public void setId(Integer value) {21. id = value;22. }23.24. public String getName() {25. return name;26. }27.28. public void setName(String value) {29. name = value;30. }31.}关于List对象,参照了有关JWS的一个问题中的描述:DK6.0 自带的WebService 中 WebMethod的参数好像不能是ArrayList 或者其他List传递List需要将List 包装在其他对象内部才行 (个人理解如有不对请指出) ,我在实践中也遇到了此类问题.通过以下封装的对象即可以传递List对象.Java代码1./**2. * <p>Java class for listObject complex type.3. *4. * <p>The following schema fragment specifies the expected content contained within this class.5. *6. * <pre>7. * <complexType name="listObject">8. * <complexContent>9. * <restriction base="{/2001/XMLSchema}anyType">10. * <sequence>11. * <element name="list" type="{/2001/XMLSchema}anyType" maxOccurs="unbounded" minOccurs="0"/>12. * </sequence>13. * </restriction>14. * </complexContent>15. * </complexType>16. * </pre>17. *18. *19. */20.@XmlAccessorType(XmlAccessType.FIELD)21.@XmlType(name = "listObject", propOrder = { "list" })22.public class ListObject {23.24. @XmlElement(nillable = true)25. protected List<Object> list;26.27. /**28. * Gets the value of the list property.29. *30. * <p>31. * This accessor method returns a reference to the live list,32. * not a snapshot. Therefore any modification you make to the33. * returned list will be present inside the JAXB object.34. * This is why there is not a <CODE>set</CODE> method for the list property.35. *36. * <p>37. * For example, to add a new item, do as follows:38. * <pre>39. * getList().add(newItem);40. * </pre>41. *42. *43. * <p>44. * Objects of the following type(s) are allowed in the list45. * {@link Object }46. *47. *48. */49. public List<Object> getList() {50. if (list == null) {51. list = new ArrayList<Object>();52. }53. return this.list;54. }55.56. public void setList(ArrayList<Object> list) {57. this.list = list;58. }59.60.}5.WebService 服务端 spring 配置文件 ws-context.xmlXml代码1.<beans xmlns="/schema/beans"2.xmlns:xsi="http://www.w/2001/XMLSchema-instance"3.xmlns:jaxws="/jaxws"4.xsi:schemaLocation="/jaxws http://cxf./schemas/jaxws.xsd /sch ema/beans /schema/beans/spring-b eans.xsd"5.default-autowire="byName"default-lazy-init="true">6.7.<jaxws:endpoint id="webServiceSample"8.address="/WebServiceSample"implementor=".coral.biz.examples.webservice.WebServiceSampleImpl"/>9.10.</beans>WebService 客户端 spring 配置文件 wsclient-context.xmlXml代码1.<beans xmlns="/schema/beans"2.xmlns:xsi="http://www.w/2001/XMLSchema-instance"3.xmlns:jaxws="/jaxws"4.xsi:schemaLocation="/jaxws http://cxf./schemas/jaxws.xsd /sch ema/beans /schema/beans/spring-b eans.xsd"5.default-autowire="byName"default-lazy-init="true">6.7. <!-- ws client -->8.<bean id="identityValidateServiceClient"class=".coral.admin.service.IdentityValidateService"9.factory-bean="identityValidateServiceClientFactory"factory-method="create"/>10.11. <bean id="identityValidateServiceClientFactory"12. class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">13. <property name="serviceClass"14. value=".coral.admin.service.IdentityValidateService"/>15. <property name="address"16. value="http://88.148.29.54:8080/coral/services/IdentityValidateService"/>17. </bean>18.19.</beans>6.发布到tomcat服务器以后通过以下地址即可查看自定义的webservice接口生成的wsdl:http://88.148.29.54:8080/aio/services/WebServiceSample?wsdl7.调用WebService接口的Junit单元测试程序Java代码1.package test.coral.sample;2.3.import org.springframework.test.AbstractDependencyInjectionSpringContextTests;4.5.import .examples.webservice.WebServiceSample;6.import erDTO;7.8.public class TestWebServiceSample extends9. AbstractDependencyInjectionSpringContextTests {10. WebServiceSample webServiceSampleClient;11.12. public void setWebServiceSampleClient(WebServiceSample webServiceSampleClient) {13. this.webServiceSampleClient = webServiceSampleClient;14. }15.16. @Override17. protected String[] getConfigLocations() {18. setAutowireMode(AUTOWIRE_BY_NAME);19. //spring 客户端配置文件保存位置20. return new String[] { "classpath:/cn/org/coral/biz/examples/webservice/wsclient-context.xml" };21. }22.23. public void testWSClinet(){24. Assert.hasText(webServiceSampleClient.say(" world"));25. }26.}。
OracleEBS学习经验总结目录1、form中数据查询时给定where条件,过滤数据 (2)2、radio-button中给item动态修改属性 (2)3、FORM窗口关闭时报错 (2)4、Form中自定义导出excel (3)5、FORM中限制下限LOV可选数据必须大于上限已选值 (4)6、FORM中选中上限时,默认下限等于上限值 (4)7、按照固定字符分割字符串取其中某段 (4)1、form中数据查询时给定where条件,过滤数据show_window(需要跳转到的window,2,2); --窗口调用函数,窗口名称,和坐标位置GO_BLOCK(指定数据块); --跳转数据块名称------3拼接where条件sql,单引号用’’’’四个单引号来转换,并且数据字段和变量都要用单引号括起来,也可以用三个引号代替where_cause := ' STUNO = '||''''||变量1||’’’’||’and ’;相当于where cause :STUNO = ‘变量1’ andwhere_cause := ' STUNO = '''||变量2||’’’and ’; 相当于where cause :STUNO = ‘变量2’and-----4执行sqlset_block_property('指定数据块',DEFAULT_WHERE,where_cause); --给数据块增加where 条件,将上面的where条件赋值给要查询的数据块EXECUTE_QUERY; --结束2、radio-button中给item动态修改属性SET_ITEM_PROPERTY('指定item ',LOV_NAME,'指定LOV');--set_item_property给item设置属性,将固定的lov设置给某个item--设置ITEM属性NAVIGABLESet_Item_Property('Block_name.Item_name',NAVIGABLE,PR OPERTY_TRUE|FALSE);--设置ITEM属性VISUAL_ATTRIBUTESet_Item_Property('Block_name.Item_name',visual_attribute,' vname'); --'vname'由导航器中(VISUAL_ATTRIBUTES)定义--设置ITEM属性DISPLAYEDSet_Item_Property('Block_name.Item_name',displayed,TRUE| FALSE);--设置ITEM属性POSITIONSet_Item_Property('Block_name.Item_name',position,x,y);--设置ITEM_SIZESet_Item_Property('Block_name.Item_name',item_size,x,y);--设置ITEM属性LABLESet_Item_Property('Block_name.Item_name',LABEL,'MESSAG E')3、FORM窗口关闭时报错在程序单元中修改程序包主体if (wnd = 'MAIN_W') then --这个是必须改的,否则主窗口不能关闭app_window.close_first_window; --关闭函数elsif (wnd = 'SECOND_W') then --某个关闭报错的窗口if (wnd = get_view_property(get_item_property(:SYSTEM.CURSOR_ITEM, ITEM_CANVAS), WINDOW_NAME)) thengo_block(:PARAMETER.PREVIOUS_BLOCK_NAME); --关闭它跳转至其他数据块,直接写数据块name,也可以用系统参数获取数据块名称end if;elsif (wnd = '') then –可以增加自己需要的内容--defer relations--close related windowsnull;end if;4、Form中自定义导出excelDECLAREdb_file NUMBER;url VARCHAR2(500);c_filename VARCHAR2(20);BEGINc_filename := 'test.xls'; --文件名,导出excel格式文件,也可以是txt等多种格式--生成文件db_file := fnd_gfm.file_create(file_name => c_filename,content_type => 'text/tab-separated-values',--文本分隔符,导出数据将按照excel的格式自动分格program_name => 'SQLGL');--用到的application的短名-- 输出块里面的内容,输出语句比如fnd_gfm.file_write_line(db_file, 'Hellow World'||chr(9)||'haha'); -- 输出内容chr(9),tab 符号,用来分割数据db_file := fnd_gfm.file_close(db_file); -- 关闭文件-- 打开文件URLurl := fnd_gfm.construct_download_url(fnd_web_config.gfm_agent, db_file,FALSE); --打开一个页面用来下载文件/* 注意这里要选flase,否则函数会调用系统的环境变量,就不会生成你想要的文件和文件类型,其实拆开fnd_gfm包可以看到*/fnd_utilities.open_url(url);END;5、FORM中限制下限LOV可选数据必须大于上限已选值在LOV的SQL中加where条件,例如::BLOCKNAME.TO_TIEM >= :BLOCKNAME.FORM_TIEM6、FORM中选中上限时,默认下限等于上限值在上限item的触发器WHEN-VALIDATE-ITEM中增加内容,例如::MAIN_B.TO_PERIOD := :MAIN_B.FROM_PERIOD;7、按照固定字符分割字符串取其中某段REGEXP_SUBSTR(’某字符串’,'[^.]+',从第几个字符开始,取截取后的第几段)取科目段很方便SELECT REGEXP_SUBSTR(’01.002.0003.004’,'[^.]+',1,2) FROM DUAL;--'[^.]+'按照.小数点来分割字符串,如果是按照-来分就应该写成'[^-]+'--1表示从第一个字符开始,--2表示取第二段,三个点将字符串分为四段,第二段为002这个方法要求数据库是R12,在11中不能用。
一、HOST文件c://windows/system32/drivers/etc/hosts最后加入192.168.0.8 浏览器进入:8000user:yysoft_zhmpassword:yysoft2015二、TNS文件D:\DevSuiteHome_1\NETWORK\ADMIN\tnsnames.orayysoft=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521)) (CONNECT_DA TA=(SID=vis)))三、建表、同义词、序列-- Create tablecreate table CUX.HYP_VENDORS(VENDOR_ID NUMBER not null,VENDOR_CODE V ARCHAR2(20),VENDOR_NAME V ARCHAR2(50),ADDRESS1 V ARCHAR2(200),VENDOR_TYPE V ARCHAR2(1),CREATION_DA TE DATE,UPDATED_DATE DA TE);create or replace synonym HYP_VENDORSfor CUX.HYP_VENDORS;-- Create sequencecreate sequence hyp_vendors_sminvalue 1maxvalue 99999999start with 100001increment by 1;四、WHEN-NEW-FORM-INSTANCEgo_block(‘block_name’);app_window.set_window_position(‘child_block’,’center’,’parent_block’);五、QUERY-FINDgo_block(‘block_name’);六、PRE-INSERT:block_name.item_name := package_name.function_name(parameter1…);七、WHEN-NEW-RECORD-INSTANCEIf :block_name.item_name <> ‘N’ thenSet_block_property(‘block_name’,DELETE_ALLOWED |DEFAULT_WHERE,PROPERTY_FALSE);End if;八、记录组的建立Select_statement九、LOV的建立选择现有记录组LOV返回值LOV分配的项LOV高:4750,宽:3000十、开关服务器的步骤开机:按开机键登陆root 密码:Founder123进入数据库su –oracle 密码:oracle 输入:sh startDB.sh进入应用服务器su –applmgr 密码:applmgr 输入:sh startAPP.sh 关机:进入应用服务器su –applmgr 密码:applmgr 输入:sh stopAPP.sh 进入数据库su –oracle 密码:oracle 输入:sh stopDB.sh进入根目录su –root 密码:Founder123 输入:shutdown-h now十一、创建数据视图CREATE OR REPLACE VIEW view_name ASSelect_statement;十二、创建触发器CREATE OR REPLACE TRIGGER trigger_nameINSTEAD OF INSERT OR UPDATE OR DELETE ON view_nameFOR EACH ROWDECLAREBEGINIF inserting THENINSERT INTO table_name V ALUES();END IF;IF updating THENUPDA TE table_name set item = vlaue WHERE primary_key = primary_key;END IF;IF deleting THENDELETE FROM table_name WHERE primary_key = primary_key;END IF;END;十三、创建包规范和包体CREATE OR REPLACE package_name ISFUNCTION function_name(parameter_name IN | OUT | IN OUT V ALUE_TYPE, …) RETURN V ALUE_TYPE;PROCEDURE procedure_name(parameter_name IN | OUT | IN OUT V ALUE_TYPE, …);END package_name;CREATE OR REPLACE PACKAGE BODY package_name ISFUNCTION function_name(parameter_name IN | OUT | IN OUT V ALUE_TYPE, …) RETURN V ALUE_TYPE ISBEGINEND;END package_name;十四、五个固定字段的维护LAST_UPDATE_DATE,LAST_UPDATED_BY,LAST_UPDATE_LOGIN,CREATION_DATE,CREATED_BY数据块级别触发器PRE-INSERT、PRE-UPDATE中加入fnd_standard.set_who;十五、FORM中的对齐规则数字是右对齐字符,文字,日期是左对齐十六、设置数据块属性,才可以做增删改数据块的键模式:可更新数据块设置主键:是项主键:是设置主键初始值::SEQUENCE.my_sequence.NEXTVAL十七、子类化所有显示项都要子类化TEXT-ITEMLISTCHECKBOXCURRENT_RECORD_INDICATOR十八、主子表在子表中建立主从关系,主数据块要正确,建立后,关系在主数据块上,子表中的外键的属性,从项中复制值:primary_block.primary_key十九、从一个FORM跳转到另一个FORM中在第一个FORM中加入按钮,加入WHEN-BUTTON-PRESSED触发器代码写:fnd_function.execute(FUNCTION_NAME => ‘form_name’,OPEN_FLAG => ‘Y’,SESSION_FLAG => ‘Y’,OTHER_PARAMS => ‘parameter_name = ’ || :block_name.item_name);二十、格式掩码设置999,999,999,999.00 当为零时显示.00999,999,999,990.00 可以显示0.00yyyy-mm-dd 日期格式掩码等二十一、查询PL/SQL数据字典SELECT ao.object_nameoFROM All_Objects aoWHERE ao.object_type LIKE'%SEQUENCE%'AND ao.owner LIKE'%APPS%';SELECT *FROM user_triggers utWHERE ut.trigger_name LIKE'%HYP%';二十二、异常声明:lv_error V ARCHAR2(200);lv_raise EXCEPTION;抛出:RAISE lv_raise; --引发异常异常处理:EXCEPTIONWHEN lv_raise THENFND_MESSAGE.SET_NAME(‘application_name’,’name’);FND_MESSAGE.SET_TOKEN(‘token_name’,lv_error);APP_EXCEPTION.RAISE_EXCEPTION;二十三、注册请求系统管理员→并发→方案→可执行系统管理员→并发→方案→定义系统管理员→安全性→请求二十四、请求为:PL/SQL存储过程PROCEDURE procedure_name(errbuf OUT NOCOPY V ARCHAR2,retcode OUT NOCOPY V ARCHAR2)IS BEGINfnd_file.PUT_LIEN(); --在查看输出中输出fnd_file.LOG(); --在日志中输出END;二十五、FORM中启动请求触发器:WHEN-BUTTON-PRESSEDDECLARElv_number NUMBER;BEGINlv_number := fnd_request.submit_request(application => 'appl_name', program => 'request_short_name',description => '',start_time => '',sub_request => FALSE,argument1 => argument1);END;二十六、PL/SQL游标DECLARECURSOR cursor_type ISselect_statement;cursor_name_rec cursor_type%ROWTYPE;BEGINFOR cursor_name_rec in cursor_type LOOPdbms_output.put_line(output_language);END LOOP;END;二十七、公用代码建立Application Developer→应用产品→代码→公用二十八、公用代码的查询SELECT lval.lookup_code, --制作LOV时,存入数据库的项lval.meaning,lval.description --制作LOV时,显示的项FROM fnd_lookup_types ltype,fnd_lookup_values lvalWHERE ltype.lookup_type = lval.lookup_typeAND lval.lookup_type = 'CUX_DEST_OFFICE'AND nguage = 'ZHS';二十九、子菜单制作先做一个菜单,把这个菜单放置在主菜单下。
调用OracleEBSWebservice常见的几个错误Fault from server : Missing wsse:Security in SOAP Header.Cause: This error is thrown by server if SOAP request does not contain a Web Service Security Header in SOAPHeader section of SOAPEnvelope.Resolution: Pass a valid Web Service Security Header, containing valid Username token, in SOAPHeader.(如果是SoapUI测试的话,也需要设置WSS-Password Type为PasswordText)Fault from server : Policy requires authentication token.Cause: This error is thrown by server when either Web Service Security Username Token in Security header is missing or is invalid.Resolution: Pass a valid Web Service Security Username Token in Security header.Fault from server : The security token could not be authenticated or authorizedCause: This error is thrown by server when username or(/and) password in Web Service Security Username T oken is invalid.Resolution: Pass valid oracle applications username and password in Web Service Security Username T oken.Fault from server : User not authorized to execute serviceCause: This error is thrown by server when user given in Web Service Security Username Token is not authorized to execute the Web Service function being invoked in SOAP Request.Resolution: Create grant at user, role or global level fromIntegration Repository UI to authorize the the user to execute Web Service function. Clear cache from Functional Administrator Responsibility.Fault from server : Responsibility key is not validCause: This error is thrown by server when Responsibility Key passed in Responsibility Header in SOAHeader is invalid.Resolution: Server expects a valid Responsibility Key in Responsibility Header in SOAHeader.Use this query to find valid Responsibility Keys for a particular user:-Select resp.RESPONSIBILITY_KEY, grp.SECURITY_GROUP_KEY, APP.APPLICATION_SHORT_NAMEFrom FND_USER_RESP_GROUPS furg, FND_USER usr, fnd_responsibility_vlresp,FND_SECURITY_GROUPS grp,FND_APPLICATION APPwhere er_id=er_idand furg.RESPONSIBILITY_ID=resp.RESPONSIBILITY_IDand furg.SECURITY_GROUP_ID=grp.SECURITY_GROUP_IDandfurg.RESPONSIBILITY_APPLICATION_ID=APP.APPLICATION_ID and er_name= <username>Fault from server: Responsibility Application Short name is not valid.Cause: This error is thrown by server when Application Short name in RespApplication Header in SOAHeader is invalid.Resolution: Server expects a valid Application short name in RespApplication Header in SOAHeader. Use query given above to find a valid Application short name.Fault from server: Security Group Key is not valid.Cause: This error is thrown by server when Security Group Key in SecurityGroup Header in SOAHeader is invalid.Resolution: Server expects a valid Security Group Key in SecurityGroup Header in SOAHeader. Use query given above to find a valid Security Group Key.Fault from server: NLS Language is not valid.Cause: This error is thrown by server when NLS Language in NLSLanguage Header in SOAHeader is invalid.Resolution: Server expects a valid NLSLanguage value in NLSLanguage Header in SOAHeader. Use the following query to find a valid NLSLanguage:S ELECT NLS_LANGUAGEFROM FND_LANGUAGESWHERE INSTALLED_FLAG in (‘B’,'I’);Fault from server: Service is not deployed.Cause: This error is thrown by server when invoked service is generated but not deployed.Resolution: Deploy this service from Integration Repository UI.Fault from server: Error occured while service was processing.Cause: This error is thrown by server when a internal error happens in Service Provider.Resolution: View SOAP Response via SOA Monitor UI. It has a error trace of the error happened in server. This should give afair idea of what went wrong.。