zoukankan      html  css  js  c++  java
  • Oracle EBS开发习惯(转载)

         发现很多开发人员对一些概念或者程序的写法不是很清楚,这也包括一些高级的开发人员也会犯一些基本的错误,因此我就整理一下大家容易犯的错误,希望大家能够在写程序的时候养成良好习惯。

    一、例外处理问题

    有很多人喜欢在处理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等资料!注意多结合流程来进行。

  • 相关阅读:
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第50章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第49章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第48章 读书笔记(待更新)
    Spring Boot 中使用 Quartz 实现任务调度
    实战 FastDFS Java 客户端上传文件
    分布式文件系统之 FastDFS
    Java 持久层框架之 MyBatis
    C语言实现贪吃蛇
    [转载]分享三篇非常好的学习心得
    selenium加载cookie报错问题:selenium.common.exceptions.InvalidCookieDomainException: Message: invalid cookie domain
  • 原文地址:https://www.cnblogs.com/liuweicong39/p/2534738.html
Copyright © 2011-2022 走看看