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等资料!注意多结合流程来进行。

  • 相关阅读:
    第一次留下自己的随笔
    NSOperation多线程方式
    NSThread多线程方式
    GCD多线程机制
    GCD创建单例常用的两种方法
    线程锁
    使用KVO模式,设置应用角标数字
    keyChain RSA加密 KVO
    NSURLConnection网络处理和NSURLSession网络处理
    UIAlertView和UIAlertViewController
  • 原文地址:https://www.cnblogs.com/liuweicong39/p/2534738.html
Copyright © 2011-2022 走看看