EBS常用开发整理

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(: FLEX .cux_sob_id,set_of_books_id) 或者 set_of_books_id=nvl(: FLEX .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模板,找到那一列属性——添加帮助文字——

猜你喜欢

转载自blog.csdn.net/suixufeng/article/details/46812071