现在的位置: 首页 > 综合 > 正文

EBS FORM開發總結

2013年02月16日 ⁄ 综合 ⁄ 共 3715字 ⁄ 字号 评论关闭

1. 系统的标准form在还没有获得组织参数时会先弹出更改组织的窗口,选取了组织后会继续弹出自己的form窗口,请问这是怎么实现的。

    增加Choose ORG功能:
(1):首先在parameter中加上CHART_OF_ACCOUNTS_ID,ORG_NAME,ORG_CODE,ORG_ID四个参数
(2):在form level 的trigger中的pre—form中加上FND_ORG.CHOOSE_ORG;
(3):在form level 的trigger中的when—new—form—instance中加上
APP_WINDOW.SET_TITLE('ADJ_RECEIVE',:PARAMETER.ORG_CODE);其中ADJ_RECEIVE是window 的名字,用于设置window的title

2.Oracle EBS—PL/SQL環境初始化之 fnd_global.apps_initialize

  我们经常会遇到在pl/sql中运行某个视图,不能显示出数据,但是在界面上确有数据,这主要是因为视图是OU屏蔽的,因此需要你在pl/sql中初始化你的身份,初始化的程序如下,这样你就可以在任何pl/sql环境中运行EBS的视图了,例如PO_HEADERS,PO_LINES等

   fnd_global.apps_initialize(user_ID, Responsibility_id,Responsibility_application_id);

   这条语句的作用简单地说就是在PL/SQL中假装已经登录了EBS,如下面的语句不使用fnd_global.apps_initialize会报错

     SELECT PAPF.Full_Name -----当前操作用户 
        INTO PRINTER
        FROM PER_ALL_PEOPLE_F PAPF,
             FND_USER         FU
       WHERE FU.EMPLOYEE_ID = PAPF.PERSON_ID
         AND FU.USER_ID = FND_GLOBAL.USER_ID
         AND SYSDATE BETWEEN EFFECTIVE_START_DATE AND EFFECTIVE_END_DATE;

参数user_ID:

用户ID,  (个人见解:若某用户是另一用户子用户,则选出的是母用户)

参数获得:
  参数一,用户ID 
    select user_id
    from fnd_user
    where user_name like '%OPERATIONS%'; -- ID of OPERATIONS:1318
 
  参数二,职责编号(responsibility id)
    select RESPONSIBILITY_ID, APPLICATION_ID, RESPONSIBILITY_KEY
    from fnd_responsibility
    --where APPLICATION_ID = 140
    where RESPONSIBILITY_KEY like '%ASSETS_VISION_OPERATIONS%';
 
  参数三,代表该职责所属的应用程序(application)的编号
    上面的SQL取得
 
  方便的方法:Help->Diagnostics->Examin, Block: $PROFILES$, Field: RESP_ID(以及其他)
 
运行:
BEGIN
  fnd_global.APPS_INITIALIZE(uesr_id, resp_id, resp_appl_id);
END;
 
测试:
  select fnd_profile.value('GL_SET_OF_BKS_ID') FROM DUAL;
  select fnd_profile.value('USER_ID') from dual; --对应刚才的user_id
或者 select  fnd_global.user_name from dual;
 
 
 
客制化工具栏(新建/保存/删除/清空)

例:失效保存按钮
1.在WHEN-NEW-FORM-INSTANCE中加入
set_menu_item_property('FILE.SAVE', enabled, property_off);

如果想在保存按钮失效后保存记录,可以在自己设计的按钮触发器中写DO_KEY('COMMIT_FORM');

注意:请失效保存快捷键Ctrl+S

KEY-COMMIT
NULL; 

2.与 此类似的还有。
set_menu_item_property('Edit.delete', enabled, property_off); 失效"Deletes Recode
set_menu_item_property('Edit.Clear', enabled, property_off); 失效"Clear Recode"

 

3.也可以隐藏掉

set_menu_item_property('Edit.delete', displayed, property_off);

set_menu_item_property('FILE.NEW', displayed, property_off);

 

从属值集的用法

目标
比如 值集省份中有
山东
甘肃
广东

值集城市中有
济南,青岛,淄博
兰州,天水,白银
广州,佛山,韶关,汕头

假设我们选择了 山东,那么值集城市中只能出现 济南,青岛,淄博。。。。
实现步骤
1\ 定义独立值集 CSG_HR_PROVINCE_1
  设置独立值集的值
山东
甘肃
广东
2\ 定义从事值集 CSG_HR_CITY_1
选择验证类型为 从属,然后点击编辑信息
选择独立值集 CSG_HR_PROVINCE_1,可以给个默认值,比如0,防止从属值集什么都没设置的时候还有个默认值
3\  应用 --> 验证 --> 值
  创建 从属值集 CSG_HR_CITY_1 的值 ,
   然后点击 独立值,选择 比如选择山东
  然后创建值 如图
4\ 把值集应用到
弹性域
或者并发程序等 各个用到值集的地方。

 

attribute字段

  问题:EBS中表的attribute的字段是有限的,那么如何在有限的字段尽可能地发挥这几个字段的最大作用呢?

  EBS中的attribute字段的使用是有技巧的,比如说在订单中如果新增8%类型的订单,需要在弹性域中设置配送商,之后在新增9%类型的订单也需要填写配送商(或备注),这时候是否新增使用attribute2呢?还是和8%类型订单一起使用attribute1呢?

  这时候就要考虑8%类型和9%类型的业务是否会重复,结论是不会重复的,8%和9%类型都使用同一个table,从单行来说:8%类型的attribute1和9%类型的attribute1是不会冲突的。

所以9%类型订单可以和8%类型订单共同使用attribute1字段。

 

有一些view用到org環境參數的,一般要如下設定後,才能select到記錄:
begin
dbms_application_info.set_client_info(:org_id);--如1,2,3之類的
end;

或者

BEGIN
fnd_client_info.set_org_context(82);
END;

 

例外处理问题

有很多人喜欢在处理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中

 

创建行记录时,自动创建连续的序列号

WHEN-NEW-RECORD-INSTANCE:

  IF NVL(:BLK_LINE.LINE_ID,0) = 0 and :BLK_LINE.ROW_NUM is null THEN
    :BLK_LINE.ROW_NUM := :SYSTEM.TRIGGER_RECORD;
    set_record_property(:system.trigger_record,:system.trigger_block ,STATUS,NEW_STATUS);
  END IF;

 

抱歉!评论已关闭.