您的位置:首页 > 其它

EBS常用开发整理

2015-07-09 08:56 387 查看
1、 通过值集code编号查询到值集的name名称

–取flex_value描述

FUNCTION get_flex_value_desc(p_flex_value_set_name IN VARCHAR2,–值集代码

p_flex_value IN VARCHAR2)

RETURN VARCHAR2 IS

v_flex_value_desc fnd_flex_values_vl.description%TYPE;

BEGIN

SELECT v.description

INTO v_flex_value_desc

FROM fnd_flex_values_vl v, fnd_flex_value_sets s

WHERE v.flex_value_set_id = s.flex_value_set_id

AND s.flex_value_set_name = p_flex_value_set_name

AND v.flex_value = p_flex_value;

RETURN v_flex_value_desc;


EXCEPTION

WHEN OTHERS THEN

RETURN NULL;

END get_flex_value_desc;

2、 公共代码维护的作为lov

select MEANING,DESCRIPTION

from fnd_lookup_values t

where t.lookup_type = ‘SSC_VENDOR_TYPE’

AND LANGUAGE=’ZHS’ AND ENABLED_FLAG=’Y’

3、 值集维护的作为lov

SELECT ffvv.FLEX_VALUE_MEANING, ffvv.description

FROM fnd_flex_value_sets ffvs, fnd_flex_values_vl ffvv

WHERE ffvs.flex_value_set_name = ‘SSC_EMPLOYEE_POST_STATUS’

AND ffvv.flex_value_set_id = ffvs.flex_value_set_id

4、 资产所属责任中心、机构等常用关联表

From

gl_code_combinations gcc,

fa_distribution_history fdh

where

AND gcc.code_combination_id=fdh.code_combination_id

AND (v_respon_from IS NULL OR TO_NUMBER(gcc.segment2) >= v_respon_from)

AND (v_respon_to IS NULL OR TO_NUMBER(gcc.segment2) <= v_respon_to)

5、 调用EBS 日期控件

首先将ITEM 的LOV 属性设置为“ENABLE_LIST_LAMP”、列表验证属性设置为“否”

在ITEM 的“KEY-LISTVAL”解发器下加入对下代码:

BEGIN

calendar.show();

END;

注意:ITEM 对应数据库类型必须是DATE 类型,

6、 涉及到资产的变动、报废、新增等操作的关联表

fa_transaction_headers

7、 获取资产小类名称,与资产大类关联

FUNCTION cux_get_flex_desc2(v_flex_set VARCHAR2,

v_flex_value VARCHAR2,

v_flex_value2 VARCHAR2) RETURN VARCHAR2 IS

v_description VARCHAR2(240);

BEGIN

SELECT ffvv.description

INTO v_description

FROM fnd_flex_value_sets ffvs, fnd_flex_values_vl ffvv

WHERE ffvs.flex_value_set_name = v_flex_set

AND ffvv.flex_value = v_flex_value

AND ffvv.flex_value_set_id = ffvs.flex_value_set_id

– AND FFVV.PARENT_FLEX_VALUE_LOW = v_flex_value2

AND FFVV.ENABLED_FLAG = ‘Y’;

RETURN v_description;

EXCEPTION

WHEN OTHERS THEN

RETURN NULL;

END cux_get_flex_desc2;

–调用 cux_get_flex_desc2(‘FA_MIN’, fc.segment2, fc.segment1) cate_small_desc

8、 设置有上下文关联关系的值集

set_of_books_id=nvl(:FLEXFLEX.cux_sob_id,set_of_books_id) 或者 set_of_books_id=nvl(:FLEXFLEX.cux_sob_id:NULL,set_of_books_id) 这样两个值集就关联起来了。 我们仔细看上面的2个语句,差别在于第二个语句多了一个(:NULL),他的作用是当用户不选择他的父参数时,可以先选择他自己,反之,如果没有:NULL则用户必须选择完其父参数

9、 自动生成编号补齐指定位数

select count(1)

into v_count

from SSC_EXPENSE_HEADER h

where to_char(h.creation_date, ‘yyyy-mm-dd’) =

to_char(sysdate, ‘yyyy-mm-dd’)

AND H.ORG_CODE=:EX_JC_H.ORG_CODE

and h.status not in (‘NEW’,’CANCEL_SUBMIT’);

if v_count > 0 then

select lpad((max(substr(h.expense_header_code, 12, 4)) + 1), 4, 0)

into v_sqe

from SSC_EXPENSE_HEADER h

where to_char(h.creation_date, ‘yyyy-mm-dd’) =

to_char(sysdate, ‘yyyy-mm-dd’)

AND H.ORG_CODE=:EX_JC_H.ORG_CODE

and h.status not in (‘NEW’,’CANCEL_SUBMIT’);

else

v_sqe := ‘0001’;

end if;

EXCEPTION

WHEN OTHERS THEN

v_sqe := ‘0001’;

END ;

10、 用于无提示框提交

PROCEDURE DO_COMMIT IS

OLD_LEVEL VARCHAR2(2);

BEGIN

OLD_LEVEL:=NAME_IN(‘SYSTEM.MESSAGE_LEVEL’);

COPY(‘5’,’SYSTEM.MESSAGE_LEVEL’);

COMMIT;

COPY(OLD_LEVEL,’SYSTEM.MESSAGE_LEVEL’);

END DO_COMMIT;

11、 Forms里客制的触发器里做完增删改后,需要加入commit;才会执行到数据库中。On-insert,on-update等系统form触发器里的增删改语句不需要

12、 Form-LOV 相互之间有引用相互关系的

SELECT 。。。。。 FROM 。。。。

WHERE FVV.FLEX_VALUE like nvl(substr(:QUERY_FIND.ASSET_CATEGORY_SEGMENT2,1,3), ‘%’)

13、 Pl/sql中输出异常语句

exception

when others then

insert into testinfo values(dbms_utility.format_error_backtrace);

commit;

或者

dbms_output.put_line(l_sql); –测试的时候可以输出

14、 PL/SQL测试的时候如果需要初始化参数

在PL、SQL的程序入口处begin敲入如下代码:

FND_GLOBAL.APPS_INITIALIZE(user_id =>1130 ,resp_id =>50724 ,resp_appl_id =>20003);

里面参数具体值,可以在form界面的诊断里查询出。

15、 根据职责配置功能权限控制

(1)新建职责,在 应用产品——功能,新建一个“权限”功能。这个功能是一个“虚功能”,也就是没有对应的form。

(2)在职责对应的菜单中,新增权限功能。注意:“提示”信息需要为空。

(3)form中通过FND_FUNCTION.TEST 就能判断出这个职责菜单下是否有某一权限功能(职责跟菜单是一 一对应的)。然后根据获得的功能,编写控制语句

例:

IF FND_FUNCTION.TEST(‘CUX_FA_QUERY’) THEN

—块控制

SET_BLOCK_PROPERTY(‘FEE_AVERAGE’,INSERT_ALLOWED,PROPERTY_FALSE) SET_BLOCK_PROPERTY(‘FEE_AVERAGE’,update_ALLOWED,PROPERTY_FALSE); SET_BLOCK_PROPERTY(‘FEE_AVERAGE’,delete_ALLOWED,PROPERTY_FALSE);

–按钮控制

Set_Item_Property(‘EDIT.BTN_OK’,ENABLED ,Property_false);–不可操作

Set_Item_Property(‘EDIT.BTN_OK’, DISPLAYED,Property_false);–不可见

根据配置文件设置功能权限
(1)新建配置文件,系统管理员——定义配置文件选项


SQL=”select DESCRIPTION NAME,lookup_code CODE

into :visible_option_value, :profile_option_value

from fnd_lookup_values t

where lookup_type=’SSC_VENDOR_RIGHT’

and t.language = ‘ZHS’

order by name”

COLUMN=”NAME(30)”

HEADING=”\”操作权限\”(30)”

(2)配置文件——系统

选择职责,配置文件,查询——然后配置相应权限

(3)代码中使用,例:

v_value := fnd_profile.value(‘SSC_VENDOR_RIGHT_PRO’);

if v_value=’CREATE_ONLY’ then –新增权限

16、 FORM 之间的调用

APP_NAVIGATE.EXECUTE 或FND_FUNCTION.EXECUTE

例:FND_FUNCTION.EXECUTE(‘CUXFEEAVERAGE’,’Y’,’N’,’EXPENSE_HEADER_ID=’||:EX_JC_H.EXPENSE_HEADER_ID||’ EXPENSE_LINE_ID=’||:EX_JC_L.EXPENSE_LINE_ID);

然后在被打开的form中,新增parameter参数。

在when-new-form-insstanse增加

IF :PARAMETER.vendor_id IS NOT NULL THEN

GO_BLOCK(‘SSC_VENDOR_INTERNAL_V’);

EXECUTE_QUERY;

在块的属性where中接收传入的参数(或者通过set_block_property(‘CUX_PO_HEADERS_ADD_MESSAGE’,DEFAULT_WHERE,’PO_HEADER_ID=’||lv_default);

)。

其中APP_NAVIGATE.EXECUTE 与FND_FUNCTION.EXECUTE 的区别:

APP_NAVIGATE.EXECUTE 只打一个FORM,而FND_FUNCTION.EXECUTE 调用多少次,就打开多少

个。

17、 遍历数据块

go_block(‘BLOCKNAME’);

first_record;

IF :SYSTEM.block_status <> ‘NEW ’ THEN

Loop

–do something

if :system.last_record = ‘TRUE’ then

exit;

else

next_record;

end if;

end loop;

end if;

18、

Fnd_Profile 的常用方法

begin

fnd_message.debug(‘user_id= ’ || fnd_profile.value(‘user_id’)); –取当前登录EBS 用户ID

fnd_message.debug(‘user_name= ‘||fnd_profile.value(‘USERNAME’)); –取当前登录EBS 用户名

fnd_message.debug(‘FND_Global.User_Name=’|| FND_Global.User_Name); –取当前登录EBS 用户名

fnd_message.set_string(‘GL_SET_OF_BKS_ID=’||fnd_profile.value(‘GL_SET_OF_BKS_ID’));

fnd_message.show; –取当前帐套

end;

19、 Ora-01403:no data found错误

Select 。。。into 为空置引起的,可以 select max(..) into

20、 Form界面用于数据项合计功能

条件:用于合计的字段项和重复行的项必须处于同一个block中。

Block的属性——查询所以记录——是。

合计项的属性——显示的项数——1;

项的计算模式设置为“概要”,设置汇总函数、汇总块、汇总项

21、 Block为视图时,需要增删改操作的两种做法

1、 设置视图触发器

2、 在form中做增删改操作。

22、 数据传传账流程

数据插入——分录表——取分录表数据插入“接口临时表”——插入接口表——插入日记账——自动过账。

23、 数据库为视图时,设置属性

查询所有记录:是

键模式:可更新

24、 新建并使用序列

新建序列:– Create sequence

create sequence SSC.SSC_EXPENSE_LINES_S

minvalue 1

maxvalue 9999999999999999999999999999

start with 2647

increment by 1

cache 20;

使用序列: select ssc_expense_lines_s.NEXTVAL into l_line_id from dual;

创建同义词:create public synonym table_name for user.table_name;

25、 FORM开发规范

1、 对form的item等赋值的操作不要放在when-new-form-instance里,这样会导致即使block是query状态也会出现提示保存窗口。

2、 如果需要使用序列作为插入表的唯一值,放在pre-insert里生成,不要在on-insert的同时生成值再插入。

3、 Post-query触发器里的逻辑,如果没有查询出数据是不执行的。

4、

26、 数字格式掩码设置:FM999,999,999,990.00

27、 判断数据块状态

if :System.Form_Status = ‘CHANGED’ then —NEW,QUERY

cuxapp.msgstop(‘当前记录未保存请先保存!’);

return;

end if;

判断记录状态::system.RECORD_STATUS

28、 Form触发器WHEN-WINDOW-ACTIVATED

当窗口切换时出发,可以用来作为关闭一个form后,出发另一个form事件的逻辑

29、 终止执行接下来的触发器

raise form_trigger_failure;

如果用retrun,仅仅是跳出当前逻辑,接下的触发器还是会执行。

30、 app_query里面的一些函数,做了如下笔记。

app_query.append (‘块名’,user_where_clause): 在form中,给数据块查询添加新的where语句。

where语句里面字节必须《2000,当大于这个字节数就会发生溢出。

31、 EBS常用查询方式

1、要在参数中定义G_Query_find参数,此参数是标准参数,只要用下面的代码就可以把数据块置为查询状态。

:parameter.G_query_find := ‘TRUE’;

app_find.find(‘CUXIPDCOLOR’);

:parameter.G_query_find := ‘FALSE’;

2、执行查询的方法有如下几种

A、app_find.find(‘CUXIPDCOLOR’);

B、execute_query;

用此方法时一定要指定当前数据块

C、app_find.query_find(‘WEIGHTS’,

‘QUERY_FIND’,

‘QUERY_FIND’);

3、添加查詢條件的方法。

A app_query.append(:system.trigger_block,’ITEM_NUMBER>=”’||NAME_IN(‘QUERY_FIND.P_ITEM_NUMBER_FROM’)||””);

函数解析:

参数一:要查询的数据块

参数二:查询语句

B

app_find.query_range(:ORDERS_QF.order_number_from,:ORDERS_QF.order_number_to,’QF_ORDERS.order_number’);

函数解析:

参数一:查询条件取值从

参数二:查询条件取值至

参数三:要查询的栏位

C

copy(:ORDERS_QF.AGENT_ID,’QF_ORDERS.AGENT_ID’);

函数解析:

参数1:复制来源

参数2:复制目的地

D

set_block_property(‘CUX_PACKING_HEADERS_ALL_V’,default_where,’FILE_ID =’|| :COPY.NEW_FILE_ID);

函数解析:

参数1:要查询的数据块

参数2:固定常量

参数3:语句

这个方法用之前和用完后要把default_where清空,如下

set_block_property(‘CUX_PACKING_HEADERS_ALL_V’,default_where,’’);

如果要多个条件,用中间变量叠加生成查询条件语句,如下:

v_where:=v_where +’’

set_block_property(‘CUX_PACKING_HEADERS_ALL_V’,default_where,v_where);

32、 安全性视图,取当前机构

CREATE OR REPLACE VIEW CUX_FND_ORG_V AS

SELECT DISTINCT FFVV.FLEX_VALUE AS org_code,

FFVV.DESCRIPTION AS org_name

FROM FND_FLEX_VALUES_VL FFVV, FND_FLEX_VALUE_SETS FFVS

WHERE FFVV.FLEX_VALUE_SET_ID = FFVS.FLEX_VALUE_SET_ID

AND FFVS.FLEX_VALUE_SET_NAME = CUX_GL_COMMON_PKG.get_flex_value_set_name(NULL,NULL,’SEGMENT1’)

AND FFVV.FLEX_VALUE <= ‘Z’

AND ((EXISTS (SELECT 1

FROM fnd_flex_value_rule_lines

WHERE flex_value_rule_id =

(SELECT flex_value_rule_id

FROM fnd_flex_value_rule_usages

WHERE responsibility_id = fnd_global.resp_id

AND flex_value_set_id = ffvs.flex_value_set_id)

AND include_exclude_indicator = ‘I’

AND flex_value_high >= flex_value

AND flex_value_low <= flex_value) AND NOT EXISTS

(SELECT 1

FROM fnd_flex_value_rule_lines

WHERE flex_value_rule_id =

(SELECT flex_value_rule_id

FROM fnd_flex_value_rule_usages

WHERE responsibility_id = fnd_global.resp_id

AND flex_value_set_id = ffvs.flex_value_set_id)

AND include_exclude_indicator = ‘E’

AND flex_value_high >= flex_value

AND flex_value_low <= flex_value)) OR NOT EXISTS

(SELECT 1

FROM fnd_flex_value_rule_lines

WHERE flex_value_rule_id =

(SELECT flex_value_rule_id

FROM fnd_flex_value_rule_usages

WHERE responsibility_id = fnd_global.resp_id

AND flex_value_set_id = ffvs.flex_value_set_id)))

order by FFVV.FLEX_VALUE;

33、 根据请求号查找日志文件和输出文件位置。(可根据存放位置从ftp下载,然后查看具体错误信息)

SELECT * FROM FND_CONCURRENT_REQUESTS WHERE REQUEST_ID=

输出到日志: fnd_file.put_line(fnd_file.LOG, p_string);

34、 报表问题综合

流程:1、PL/SQL里编写存储过程

3、 应用开发员——注册并发请求,(输出改成XML)可执行和程序,注册参数。注意简称要一致,且区分大小写。

4、 注册功能、程序、菜单。功能的表单选“运行报表”。

5、 参数为:

CONCURRENT_PROGRAM_NAME=”CUXFACATSUM” PROGRAM_APPL_SHORT_NAME=”CUX” SUBMIT_ONCE=”Y”

CONCURRENT_PROGRAM_NAME为之前注册的功能名。

6、 打开菜单,输出XML文件。

7、 新建word,加载XML,生成.rtf

8、 Xml publisher管理员——数据定义——创建模板

如果输出报表遇到问题,可以通过系统管理员——并发——经理——内部冲突管理器或输出处理等来查看日志。

(1) 解决数字太长,导致科学计数法:

在。Rtf模板,找到那一列属性——添加帮助文字——
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: