EBS开发常见问题及学习方向总结

本文总结了EBS开发中的常见问题与最佳实践,包括异常处理、并发请求管理、表结构设计、注册表及列的方法等。同时提供了ERP开发与实施人员所需掌握的关键技能和参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、例外处理问题
有很多人喜欢在处理exception时置为'null',应该说这是一个很不好的习惯,如果没有定义特定的exception,最起码应该把数据库的错误信息完整的报出来。
        错误的写法:
               EXCEPTION
               WHEN OTHERS THEN
               NULL;
               END;
        正确的写法:
             EXCEPTION
             WHEN OTHERS THEN
             FND_FILE.PUT_LINE(FND_FILE.OUTPUT, SQLCODE);
             FND_FILE.PUT_LINE(FND_FILE.OUTPUT, SQLERRM);
             END;
 
二、并发请求的OUTPUT和LOG不分
       输出到请求的输出:FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'XXXXXXX');
       输出到请求的日志:FND_FILE.PUT_LINE(FND_FILE.LOG, 'XXXXXX');
       一般情况是把报表的内容输出到OUTPUT,把报表中间的debug逻辑输出到log中。
三、在EBS环境之外运行EBS程序的初始化问题
我们经常会遇到在pl/sql中运行某个视图,不能显示出数据,但是在界面上确有数据,这主要是因为视图是OU屏蔽的,因此需要你在pl/sql中初始化你的身份,初始化的程序如下,这样你就可以在任何pl/sql环境中运行EBS的视图了,例如PO_HEADERS,PO_LINES等.
        BEGIN
        FND_GLOBAL.APPS_INITIALIZE(USER_ID => ,RESP_ID => ,RESP_APPL_ID => );
        END;
 
四、消息的使用
我经常看到有的喜欢在FORM中直接使用FND_MESSAGE.DEBUG('xxxxx');来显示错误或提示信息,实际上这是非常不正确的做法。
顾名思及DEBUG是用来调试的,并不是用来进行人机交互的友好的方式,也不符合Oracle的标准用法。
Oracle的标准用法是使用FND_MESSAGE.SET_NAME( APPL_SHORT_NAME,MESSAGE_NAME) ;
一般情况下在FORM中显示出错信息使用以下代码:
        FND_MESSAGE.SET_NAME( APPL_SHORT_NAME,MESSAGE_NAME) ;
        FND_MESSAGE.ERROR ;
       在PACKAGE中显示出错信息一般使用以下代码:
        FND_MESSAGE.SET_NAME( APPL_SHORT_NAME,MESSAGE_NAME) ;
        APP_EXCEPTION.RAISE_EXCEPTION ;
        然后在EBS的应用开发者下定义中文和英文消息,然后提交请求"生成信息"来生成消息,使用这种方式可以适用于多语言和修改人机界面的提示信息,而不用去修改源程序。
        五、EBS中客户化表结构的设计原则
1.必须包括一个主键,并建立相应的序列;
2.建立5个WHO字段,也就是:
              CREATED_BY NUMBER
              CREATION_DATE DATE
              LAST_UPDATED_BY NUMBER
              LAST_UPDATE_DATE DATE
              LAST_UPDATE_LOGIN NUMBER
在FORM中使用属性类:CREATION_OR_LAST_UPDATE_DATE,WHO字段并不会自动地被赋值,必须自己在FORM中编写代码来完成这项工作。
        EBS中提供了一个函数FND_STANDARD.SET_WHO,大家只要在FORM的BLOCK级触发器PRE-INSERT/PRE-UPDATE中进行调用即可。
3.对于业务数据表,要考虑建立15个弹性域字段;
4.如果对于需要并发请求处理过的数据表,则需要增加跟踪请求的4个字段;
             REQUEST_ID NUMBER
             PROGRAM_APPLICATION_ID NUMBER
             PROGRAM_ID NUMBER
             PROGRAM_UPDATE_DATE DATE
        5.要考虑这个表是否区分OU和库存组织;
 
六、在FORM开发中不管是FORM级还是BLOCK级或者ITEM级的TRIGGER,不要把代码直接写到TRIGGER中,要使用PROGRAM UNIT来创建相应的TRIGGER。
举例如下:
      FORM级和BLOCK级可以按照下面格式在PROGRAM UNIT中创建PACKAGE:
      PACKAGE BODY FORM_NAME/BLOCK_NAME IS
      PROCEDURE EVENT_HANDLER( EVENT IN VARCHAR2)
      IS
      BEGIN
      IF EVENT = 'WHEN-NEW-FORM-INSTANCE' THEN
      XXXXXXXX;
      ELSIF EVENT = 'PRE-FORM' THEN
      XXXXXXXX;
      ELSE
      APP_EXCEPTION.INVALID_ARGUMENT('EVENT_HANDLER', 'EVENT', EVENT);
      END IF;
      END EVENT_HANDLER;
      END FORM_NAME/BLOCK_NAME;
ITEM级的可以按照下面的格式:
      PACKAGE BODY BLOCK_NAME IS
      PROCEDURE ITEM_NAME( EVENT IN VARCHAR2)
      IS
      BEGIN
      IF EVENT = 'WHEN-NEW-ITEM-INSTANCE' THEN
      XXXXXXXX;
      ELSE
      APP_EXCEPTION.INVALID_ARGUMENT('ITEM_NAME', 'EVENT', EVENT);
      END IF;
      END ITEM_NAME;
      END BLOCK_NAME;
 
七、在EBS如果要使用弹性域或预警等,则必须在EBS注册TABLE及COLUMN。
    
此注册功能是通过调用AD_DD函数包来实现的:
          AD_DD.REGISTER_TABLE 注册TABLE
          AD_DD.REGISTER_COLUMN 注册COLUMN
          AD_DD.DELETE_TABLE 取消注册TABLE
          AD_DD.DELETE_COLUMN 取消注册COLUMN
 
下面是两条路线所需掌握的专业技能与参考资料
1.ERP开发人员
(1)关于Oracle ERP开发的话的一般要求掌握SOL、PL/SQL、 JDeveloper、workflow builder,report,form,discover等等!以及Oracle、DB2等相关数据库知识;(SAP的开发采用ABAP语言)
        (2)ERP企业级别的开发,最好能对企业的业务流程非常熟悉,这样开发才会得心应手!
        (3)Oracle ERP二次开发书籍集锦
 
PL/SQL部分
ü        (中文) oracle sql function.ppt
ü        (中文) PLSQL程序设计.pdf
ü        (中文) oracle_sql性能优化.doc
ü        (中文) SQL Performance Tuning.doc
Form. 部分
ü        (中文)Form_Builder_Basic_Development.doc
ü        (中文) Form. Builder Develop.doc
ü        (英文) Oracle Applications Developer’’s Guide.pdf
ü        (中文) PPT Form开发入门教程.ppt
ü        (中文) FlexField.ppt
ü        (中文) open_form,call_form,new_form的详细讲解及区别
ü        (中文) Oracle Applications 11i 二次开发经验总结.PDF
ü        (英文) extend_apps_forms.pdf
ü        (中文) form. builder内置函数说明.pdf
ü        (英文) Trigger Execution Sequence in Oracle Forms
Report 部分
ü        (中文) CrystalReport.chm
ü        (英文) Crystal Enterprise.pdf
ü        (中文) Iss Report Builder Basic Development.doc
ü        (英文) ReportBuilder_ReferenceManual.pdf
ü        (英文) Report Training Material(PPT)
Workflow 部分
ü        (英文) workflow_student_guide.pdf
ü        (中文) OracleERPworkflow.ppt
ü        (英文) Oracle Workflow and Approval Hierarchies.ppt
ü        (英文) Oracle WorkFlow Developer’’s Guide.pdf
ü        (中文) 工作流使用说明.doc
2.ERP应用实施与咨询人员
(1)一般最好能够掌握SOL及简单PL/SQL语句。
(2)必须对企业的业务流程非常熟悉!需求分析、业务流程优化、方案设计、系统测试和上线等环节中都贯穿着我们对流程的深刻理解!
(3)对于Oracle ERP建议先看总结性的精品培训课件,而后可以参看中文联机帮助及user gudie、student guide等资料!注意多结合流程来进行。
### EBS开发中的常见触发器类型及应用案例 在EBS(企业业务系统)开发中,触发器是一种重要的数据库对象,用于自动执行特定操作以响应某些事件的发生。这些触发器可以增强数据的一致性和完整性。 #### 1. 数据库级触发器 这类触发器主要用于维护表之间的关系以及强制实施复杂的商业逻辑。当对表进行插入、更新或删除操作时会激活此类触发器[^1]。 ```sql CREATE OR REPLACE TRIGGER before_insert_employee BEFORE INSERT ON employees FOR EACH ROW BEGIN :new.hire_date := SYSDATE; END; / ``` 此代码展示了如何创建一个`before insert`类型的触发器,在向employees表中添加新记录之前设置雇员的雇佣日期为当前时间。 #### 2. 应用程序级触发器 应用程序级别的触发器通常是在Oracle Forms或其他前端工具内实现的功能。它们可以在用户交互过程中捕获并处理各种动作,比如验证输入字段的有效性或者控制界面组件的行为。 例如,“启动SRS表单”的功能可以通过定义并发请求界面上的动作来实现,这属于应用程序层面的操作,虽然这不是严格意义上的SQL/PL-SQL触发器,但在整个系统的上下文中同样重要[^2]。 #### 3. 审计跟踪触发器 为了满足合规性和安全性的需求,审计追踪触发器被用来记录谁做了什么更改以及何时发生的细节。每当敏感信息发生变化时就会触发日志写入过程。 ```sql CREATE OR REPLACE TRIGGER log_salary_changes AFTER UPDATE OF salary ON employees FOR EACH ROW BEGIN INSERT INTO emp_audit (emp_id, old_sal, new_sal, change_time) VALUES (:old.employee_id, :old.salary, :new.salary, SYSTIMESTAMP); END; / ``` 上述脚本说明了一个典型的审计触发器例子,它会在员工薪资发生变动后立即保存旧值和新值到专门的日志表里。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值