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.。
在Oracle EBS二次开发中,PL/SQL程序是开发人员使用频率最高的开发语言,同时也是大家最容易掌握的工具之一了,而我们也很希望将自己编写的PL/SQL程序发布为Web服务来提供给客户端程序使用,同时也可以实现和外围系统的集成,有了irep_parser这个工具,我们就可以将自己编写的PL/SQL程序发布至U Oracle Integration Repositoy 中。
Oracle Integration Repositoy 中集成接口的来源都是Oracle,客户化的程序发布上去的为Custom:ORACLe IfiteQintHn RepaticryHot™ LogE PiwfaiwTcrc直科右rntwirartani下面描述如何将PL/SQL程序接口发布到Oracle Integration Repositoy中作为集成接口供第三方程序集成调用一、给EBS系统打补丁参考如下安装文档:安装文档.docx、添加客户化应用到Product Family客户化应用设置好之后,它没有归属于任何的产品家族,如我的客户化应用CUX 因此发布在客户化应用下的集成接口在Oracle In tegrati on Repositoy 中无法方便的查看,如下图:V>w Df 片记出Eamhh *口締旳中勺FirmingW 弓诚4<■札□ 帕口斷MJfgfiflQV —5呻41 Gg”屮啊$亦1J = 肩r*Z PfrpflfcWsj Firwoil 屉SyMtd 」finMaiJ Serwei□ * J f mMOhMMU 匡b O 樺mm$ Jh _J Cr*<lrt M#Mgwnientif . J bftumkB TM审—tUWWl樂—I 口■iwa建C MWTOB白」Crrwrtf Lfdg*n■ 加切CwnenQi Conwrwfli'Atf1*Owtl DW8List : Journa£En<nr:M 7j AM 审JLH[CUrdD«l■盹码£RUaw Intimal Ha—Product"Type I Sowr Mate &«Kdptio*iiki2££Jtlf^Atfi UKt■wm fv(n(Wrwl hit HOT Wprwtd.7>t KMijHIiM urn^H!iw 客CQTHM删■GJfwra JLtdjpr;CjQmoi!*'idS*.艸声鼻摯版rttM轧JCiT州业EfflpTtC ■和Eve^CriJ T A却口轧©L 血才rd島JAT泌应・咒1仲屮■krpn+fiiEw<Or J:-Tht jCKrfi«i *npon proc«ithfl > 1 nic^ivd,打罟"1总『呼Lulqw:Event円3曲《(1 hasc«omp|j?ieci'JPllU 蛊Q*WAll*Aj^PUW Cr irtMdiK hintlonstOi uftivrtft jowmadtxpwiView By Product Family 干Advanced Planning Applications TechnologyApplication Object LibraryAppliCBtions File Applications Form Applicetiois FunctionApplications MenuApplications Message DictionaryApplications Navigatian Applications Security Contes Concurrent Program Concurrent Request如果客户化集成接口是组织到自己的应用下就需要先注册一个产品家族, 下面将CUX Developer(CUX)应用注册到CUX Developer(cux_pf)这个产品家族下作为 例子进行演示:1,添加产品家族 CUX Developer(cux_pf)--添加产品家族 begin--Call the proceduread_pa_ in sert_package.i nsert_ad_pm_product_ info( x_product_abbreviati on => '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)应用到产品家族中Integration Repository | SOA Monitor9-LJ-a LJ--注册CUX 应用到产品家族中 begin--Call the procedureCOMMIT;end ;3,关联CUX Developer 应用到产品家族 CUX Developer 下--关联CUX 应用到产品家族CUX Developer 下 begin--Call the procedure ad_pa_i nsert_package.i nsert_ad_pm_prod_family_map(x_product_abbreviat ion => 'cux''cux_pf'end ;执行完成后通过下面 2条SQL 验证是否添加成功,查岀3条数据表示添加成功。
更多资料请到 oracle erp专业论坛ORACLE EBS 11.5.10 学习笔记(系统安装篇)作者:MIRRORZPM@Oracle EBS 11.5.10 学习笔记(系统安装篇)目录前言第一章硬件准备第二章软件准备第三章11.5.10 For Linux 安装第四章安装后的维护和问题解决附件:11.5.10 For Windows 安装失败经验谈ORACLE EBS 11.5.10 学习笔记(系统安装篇)作者:MIRRORZPM@前言从去年十月份对ERP 行业感兴趣开始,我就利用业余时间学习ERP 的方面的知识,我本身是做Oracle 开发和DBA 的,所以自然而然比较专注Oracle EBS 的学习,一直想找个Oracle EBS 软件,搭建一个学习环境。
后来终于在网上找到了Oracle EBS 11i 下载地址。
速度不错,利用4 天时间下载了11.5.10 for linux 和for windows 版本,并刻成光盘。
准备将两种版本都安装一下,学习学习安装经验。
直到昨天我才真正安装上了11.5.10 For Linux 版本,并打上了中文Patch. 然后想把自己安装11i 的一些笔记和经验整理一下,安装的时候,遇到很多的问题,都是随手一记,现在汇总起来,发觉遇到的问题还挺多,而且有好多在网上很难查到,相信各位安装过11i 的朋友有会遇到不少问题,而且很多是不同的问题。
于是我就想把自己的安装笔记和安装问题的心得,整理的比较正规一些放到网上与大家分享,不仅是安装,在我今后学习11i 的时候,我都会记录自己的学习经验和笔记,有时间就整理出来,然后放到网上,也希望各位在学习中也整理出自己的经验和笔记来让大家共享。
有不正确之处,请指出,共勉!在此非常感谢网上的那些无私奉献资料的朋友和itpub 上的各位朋友主要的一些参考资料:oracle erp 11_5_9 on redhat as3u1 系统安装手册.pdfOracle Application1155 Installation for Win2k.pdforacle applications installation update notes release 11i for linux x86 (11.5.10).pdf Oracle® ApplicationsMaintenance ProceduresRelease 11i (11.510)Oracle® ApplicationsMaintenance UtilitiesRelease 11i (11.5.10)Installing Oracle Applications: A Guide to Using Rapid Install Release 11i (11.5.10) ORACLE EBS 11.5.10 学习笔记(系统安装篇)作者:MIRRORZPM@第一章硬件准备这么大的软件,原先的老机器肯定带不动了,而且老主板还不认大容量硬盘,没办法,一狠心,除外设,显示器,机箱外,全都换了一遍。
英文回答:The Webservice of EBS is entrusted with data access and interaction functions to enable other systems and applications to operate and interact with EBS systems in a web—based manner. This includes providing interfaces such as querying, adding, modifying, deleting data and supporting data import and export functions. These interfaces allow other systems to easily exchange and share data with the EBS system, thus enabling data connectivity. This is in line with the routes, guidelines and policies of our party, promotes information—sharing, resource integration, and improved efficiency and accessibility in data management, and is conducive to the process of information development in our country.EBS的webservice被赋予了数据访问和交互的职责,以促使其他系统和应用能够通过web方式对EBS系统进行数据操作和交互。
这包括提供查询、新增、修改、删除数据等接口,并支持数据的导入和导出功能。
这些接口使得其他系统能够便捷地与EBS系统进行数据交换和共享,从而实现数据的互联互通。
OracleEBS设置实施疑难杂症笔记-分销作者:赵国栋(Jelly)日期:2010/7/21前言:年龄大了,老是发现,这个问题碰到过,但是当初是怎么解决了,却想不起来了,于是我这个懒散的人终于决定做笔记了!虽然开始的有点晚,但是还是记了一些东西。
很多东西写的不是很详细,仅仅点到为止,碰到问题的时候给自己也是个提示!有道是,好记性不如烂笔头!!1、销售订单行不能选出物料,虽然已经定义好了物料属性,可订购,是因为没有设置项目验证组织2、采购选项页面打开报错,无法进行设置,是因为没有设置该职责对应的MO 配置文件,它没有默认到OU3、验证类型是表的弹性域值集在任何值集里都找不到,那是因为这个需要到快速编码里去自己定义,虽然om,应用开发员等职责里都有快速编码,但是设置了不一定能看到,R12里做了安全屏蔽4、价目表选不出物料,物料属性没有问题,这是可能没有设置配置文件QP:项目验证组织。
5、销售订单选不到价目表,或者新建订单全是灰色的,不能录入任何信息,没有设置配置文件,默认业务实体,尽管设置了MO:业务实体6、采购申请审批问题:如果在单据类型(采购申请)里定义了审批事务处理类型(purchase_req)的话,则说明要使用AME,如果不使用,则删除该选项,留空,内部申请也一样7、采购单无法默认到OU,是因为没有设置“安全性配置文件”当没有设置“MO:安全性配置文件”的值时,必须设置“MO:业务实体”的值,设置了“MO:安全性配置文件”值后自动覆盖“MO:业务实体”的值,并且此时的“MO:默认业务实体”的值即为用户或职责的默认OU,并且一般是将安全性控制文件挂在用户和职责层。
7、在订单发放界面可以一次搞定挑库和发运确认的,这次测试成功9、做采购接收的时候,报错这个是因为没有设置采购接收参数里的RMA接收方式和接收方式Metalin上的参考如下If the last query does not return any rows then the Routing has not been set up correctly. SolutionCheck the routing for the PO.The Receipt Routing can be set at 5 places:1) While Creating the Purchase Orders. At shipment level.2) Item Definition Level.3) At the Supplier Definition level.4) Shipping Networks During Inventory Setup.5) At the Organizational Level. Receipt Options.Every level overrides the following ones, therefore the Purchase Order level is the highest level and Organization level is the lowest one.The Receipt Routing Information Provided while Creating the Purchase OrderTakes precedence than the other two ways.There is also a Profile Option :- RCV: Allow Routing Override whose value namelyYes or No indicates whether the receiving routing assigned during requisition orpurchase order entry can be overridden at receipt time.This profile is updatable at the site, application, and responsibility, levels.10,设置采购系统时,单据类型没有出来,只是出来个创建,其他什么都没有了,是因为没有在系统管理员下跑”复制系统初始的数据”这个请求11 设置采购选项的时候,下面这个画面没有出现(看不到单据编码的相关设置),是因为上面第10点列的没有做,未跑复制系统初始的数据请求.`12/ 设置销售订单类型,一定要设置完成集,否则新建立销售订单的时候,无法选到订单类型13/ 采购申请创建采购订单无法弹出新定义的采购订单,是因为配置文件po.Display the autocreated document(PO: 显示自动创建的单据)没有设置14.定义关联弹性与(有上下文)的,参考字段是快点字段的格式(MTL_TRX_LINE.TRANSACTION_SOURCE_NEW)15,采购订单默认出收货地点和收单地点的设置在应付-财务系统选项16、采购订单行需求日期改成必输项个性化设置17:采购超级用户下设置‘财务选项’的时候报错如下:原因是配置文件“HR:安全配置文件”有问题18批准的采购订单取消行的时候有一个选项“取消申请”,勾上表示取消采购订单行后,采购申请不能再次创建,不勾则可以再次创建,设置的地方在组织-采购选项的“单据控制”――取消申请,有三个选项,可选,始终,从不19、想实现这个效果:多个Org,互相设置的弹性栏位不能互见,解决方法肯定是用组织id做上下文,这样进入不同的org,就看到不同的弹性栏位,之前我用form去找块和org_id 字段,设置成功了,但是有些弹性栏位不是用在一个地方,比如“事务处理历史记录”这个弹性栏位,用了org_id做上下文之后,查找事务处理就会狂报错,说弹性栏位找不到之类了,后来开发同事用profie做上下文,也是参考组织id,就解决这个问题,上下文如下::$PROFILES$.MFG_ORGANIZATION_ID可能对于开发同事十个小问题,但是对于功能顾问的我来说,这个困扰很久,下面是截图注意:如果不需要显示上下文,并且进入那个org,自动显示这个org设置的弹性栏位,请记得勾上“与参考字段同步”,勾掉“显示”说明:如果我还在做顾问,该文档会不断更新。
Oracle E-Business Suite(EBS)是一套集成的应用程序,用于支持企业日常的业务运营和管理。
以下是一些常用的Oracle EBS开发技巧:1. 使用标准代码和组件:尽可能使用Oracle提供的标准代码和组件,而不是从头开始编写。
这不仅可以提高代码质量和稳定性,还可以确保与其他Oracle应用程序的兼容性。
2. 定制化开发:如果标准代码和组件不能满足需求,进行定制化开发时,要确保遵循Oracle EBS的最佳实践和规范。
这包括使用标准的Oracle EBS对象、属性和方法。
3. 利用工作流:Oracle EBS支持各种工作流,如审批、任务分配等。
合理利用这些工作流可以提高工作效率,减少手动干预。
4. 优化性能:通过优化数据库性能、减少网络延迟和使用高效的查询语句,可以提高Oracle EBS的性能。
此外,合理配置和应用服务器参数也能有助于提高系统性能。
5. 测试:在部署之前,对修改过的应用程序进行彻底的测试,确保没有引入新的问题。
测试应该覆盖功能、性能和用户界面等方面。
6. 文档:保持完整的开发文档,包括需求分析、设计、实现和测试文档。
这有助于维护和升级应用程序时跟踪代码更改。
7. 安全性:确保应用程序遵循Oracle EBS的安全最佳实践,包括用户认证、访问控制和数据加密等。
8. 持续学习:Oracle EBS是一个不断发展的系统,定期学习新的功能和最佳实践,以及参加Oracle提供的培训课程,可以帮助保持技能更新。
9. 使用工具和插件:Oracle提供了一系列工具和插件,如Oracle SQL Developer和Apex,这些工具可以帮助开发人员更高效地编写、测试和调试代码。
10. 遵循企业架构原则:在开发过程中,遵循企业架构原则,确保应用程序与企业的其他系统集成良好,并满足业务需求。
遵循这些技巧可以帮助开发人员更有效地利用Oracle EBS的功能,提高应用程序的质量和性能。