zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Flask17 Flask_Script插件的使用
    python导入模块被加横线
    MYSQL中replace into的用法
    flask通过nginx代理后base_url拿不到正确的url_scheme2016-04-14 12:31
    nginx+Gunicorn部署你的Flask项目
    浅谈flask源码之请求过程
    浅谈Flask 中的 线程局部变量 request 原理
    flask基础之jijia2模板语言进阶(三)
    Redis在windows下安装过程
    如何打开Intellij IDEA的代码提示功能/联想/自动联想
  • 原文地址:https://www.cnblogs.com/toowang/p/2837838.html
Copyright © 2011-2022 走看看