EBS的form开发中实现查询功能的各种方法总结... 13
新装电脑在第一次使用form build时,在用模板进行开发时要做的... 15
修改注冊表改變form build等oralce devlop 工具的語言。... 16
2009/8/22 星期六 晴
系统中成为采购员的方法
用户如果想在EBS中做采购订单的话,首先要注册自己成为采购员,否则没法输入采购单的,如果让上级来审批采购订单的话还要设置自己的上下级职位结构,否则输入的采购单没法被审批的
以下是设置用户TESTUSER自己采购,自己审批的步骤:
1、以系统管理员身体登录EBS设置TESTUSER用户关联某一员工,操作就不多说
2、设置自己成为采购员。以PO SUPERUSER身份登录EBS,路径为:设置/人事/采购员,在弹出窗口中的采购员处,选择第1步已关联TESTUSER的员工姓名,然后保存完成设置
3、设置审批分配。以PO SUPERUSER身份登录EBS,路径为:设置/审批/审批分配,选择关联TESTUSER用户的员工的职位,在弹出的窗口中的单据类型处选择“标准采购订单”,然后在审批组选择“无限审批”,最后保存退出。
4、设置单据类型可以自己审批,以PO SUPERUSER身份登录EBS,路径为:设置/采购管理系统/单据类型,选择标准采购订单,在弹出的窗口中的属性的“责任人可以审批”处打勾就完成了“标准采购订单”自己能审批了。
5、最后以TESTUSER用户登录EBS,在采购订单窗口的采购员处就可以选择TESTUSER用户关联的员工,输完采购单成后可以自己审批
如果要让员工的上级来审批的话要设置多一步:
进入路径:全局超级HRMS管理器/工作结构/职位/层次结构,在弹出的职位层次结构窗口输入“测试结构”然后保存,在职位处选择要设置的用户的主管职位,然后在下属中选择关联用户的员工,最后保存退出。注意在保存后,要运行“员工层次结构”请求才能使刚才的设置生效
分类的设置
1、定义键值弹性域
庫存管理超級用戶à彈性域à定義鍵彈性域à進入如下畫面,
應用模組是:庫存管理系統,找到代碼為ITEM_CATEGORIES,標題改為物料分類,把“凍結彈性欄位定義”勾去掉,然後點擊“節段”出現如下圖所示,
把SEGMENT1,SEGMENT2,SEGMENT3分別設為大、中、小類,顯示、啟用都打勾,點保存,點中上面每一類分別點“值集”設置如下圖所示,
在此之前要先新增值集;點中每一類分別點“開啟“,設置如下:
表間的關系如下
--彈性域節注冊表
select *
from FND_ID_FLEXS
where
application_id=401
and id_flex_code='MCAT'
and id_flex_name='Item Categories';
--彈性域基本表
select *
from FND_ID_FLEX_STRUCTURES_VL
where application_id=401
and id_flex_code='MCAT'
and id_flex_num='101';
--彈性域節段
SELECT *
FROM FND_ID_FLEX_SEGMENTS_VL
WHERE
ID_FLEX_CODE = 'MCAT'
and APPLICATION_ID = 401
and ID_FLEX_NUM = 101;
--彈性域值清單
SELECT *
FROM FND_FLEX_VALUES_VL
where flex_value_set_id='1013769';
--物料組表 (這裡面有彈性域字段如segmentN)
select *
from MTL_CATEGORIES_B;
2、定义分类集
庫存管理超級用戶à分類à分類集,出现如下图:
设置如上所示后保存。
3、预设分类集
庫存管理超級用戶à分類à预设分类集
把存货指派给Invertory,这样设置后,物料的分类的默认就为Inventory了。
2009/09/07 晴
原物料交易表和入库交易表的关系transaction_id ß> rcv_transaction_id
select *
from inv.mtl_material_transactions b,
rcv_transactions a
where a.transaction_id = b.rcv_transaction_id
2009/10/09
多重游标定义
declare
cursor st(s varchar2) is
select * from mtl_system_items_b where segment1 like s||'%';
cursor st1(s varchar2) is
select * from mtl_system_items_b where segment1 like s||'%';
v_item varchar2(100);
begin
for r in st('AA') loop
dbms_output.put_line(r.segment1);
v_item:=r.segment1;
for r in st1(v_item) loop
dbms_output.put_line(' '||r.segment1);
end loop;
end loop;
end;
2009/10/10 星期六 晴
包的定义
定义包的某个过程时此过程一定要带两个系统缺省参数,如下
(ERRBUF OUT VARCHAR2,RETCODE OUT NUMBER)
名称和类型要全完参昭上面。
示例如下:
create or replace package CUX_WIP_HOUSPROPORTION_PKG
is
/*
-- Author : fxj
-- Created : 2009/10/09 20:47:33
-- Purpose :
此包用于工时回报的分摊
*/
procedure WIP_HOUSPROPORTION_PKG(ERRBUF OUT VARCHAR2,RETCODE OUT NUMBER);
end CUX_WIP_HOUSPROPORTION_PKG;
create or replace package body CUX_WIP_HOUSPROPORTION_PKG is
procedure WIP_HOUSPROPORTION_PKG(ERRBUF OUT VARCHAR2,RETCODE OUT NUMBER)
is
end CUX_WIP_HOUSPROPORTION_PKG;
2009/10/19 星期一 陰
Pl/sql中如何實現某些and語句跟參數啟作用和不啟作用示例
declare c number;
v number;
begin
v:=1;
select count(*) c
into c
from (
select 1 a,2 b,'y' y,'n' y1,'y' y2
from dual
union all
select 2 a,3 b,'y' y,'n' y1,'y' y2
from dual
union all
select 3 a,4 b,'n' y,'n' y1,'y' y2
from dual
union all
select 3 a,4 b,'n' y,'n' y1,'y' y2
from dual
)
where 1=1
and ((v=1) or (1=1 and not( y='n')));
dbms_output.put_line(to_char(c));
end;
2009/10/29 晴
如何讓值集參數的一下個參數值設為上一參數的值
把預設型態設為:SQL陳述式,在預設值中輸入下面內容
SELECT :$FLEX$.CUX_BOM_DEPARTMENT FROM DUAL
CUX_BOM_DEPARTMENT它是上一參數的值集
2009/11/05
給日期類型的ITEM賦初始值方法:在init處寫入$$DATE$$
2009/11/9 晴
如何用代碼實現執行系統函數和請求,示例如下
下面是執行函數,一般用于form,procedure...
fnd_function.execute(FUNCTION_NAME=>'FND_FNDFLUPL',
OPEN_FLAG => 'Y',
SESSION_FLAG => 'Y',
OTHER_PARAMS =>ls_parameter);
下面是用来提交一个请求的,它返回一个NUMBER值
Ln_Request_Id := Fnd_Request.Submit_Request('XXCPQ',
'XXOMPO012',
:P_CONC_REQUEST_ID,
'',
FALSE,
'OTHER',
'o'||To_Char(:P_CONC_REQUEST_ID)||'.out',
'SCJOQ_'||:P_OU||'_'||:P_DATE_TYPE||'.txt',
Chr(0),'',
'','','','','','','','','','',
'','','','','','','','','','',
'','','','','','','','','','',
'','','','','','','','','','',
'','','','','','','','','','',
'','','','','','','','','','',
'','','','','','','','','','',
'','','','','','','','','','',
'','','','','','','','','','',
'','','','',''
);
COMMIT;
Srw.message(100,'Ln_Request_Id = '||Ln_Request_Id);
2009/11/11 晴
如何使用分析函數來生成排序行
示例如下
row_number() over(partition by pah.object_id||pah.action_code order by pah.object_id) r_num
2009/11/12 雨
PL/SQL異常處理代碼
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE Form_Trigger_Failure;
PL/SQL調試方法
fnd_message.debug(‘’);
數據驗證代碼
declare
v_dep varchar2(10);
begin
if :system.mode <> 'QUERY' then
if :APPROVED.DEPT_DES is not NULL THEN
begin
SELECT F.FLEX_VALUE
INTO v_dep
FROM FND_FLEX_VALUE_SETS S, CUX.CUX_FND_FLEX_VALUES_V F
WHERE S.FLEX_VALUE_SET_NAME = '3G_IPD_REPORT_DEPT'
AND S.FLEX_VALUE_SET_ID = F.FLEX_VALUE_SET_ID
AND F.DESCRIPTION = :APPROVED.DEPT_DES;
EXCEPTION
WHEN NO_DATA_FOUND THEN
fnd_message.set_string('對不起,沒有此部門!');
fnd_message.error;
:APPROVED.DEPT_DES := null;
RAISE Form_Trigger_Failure;
end;
END IF;
end if;
end;
2009/11/23 晴
實現查詢的方法
app_folder.event('PRE-QUERY');--此處是標准
if :parameter.g_query_find = 'TRUE' then --此處是標准(我的理解為有點類似如按F11)
app_find.query_range(:ORDERS_QF.order_number_from,:ORDERS_QF.order_number_to,'QF_ORDERS_HEADERS.order_number');--此處是查詢范圍的方法,想當於between and
copy(:ORDERS_QF.CUSTOMER_ID,'QF_ORDERS_HEADERS.CUSTOMER_ID');
copy(:ORDERS_QF.AGENT_ID,'QF_ORDERS_HEADERS.AGENT_ID');
copy(:ORDERS_QF.ORDER_TYPE_ID,'QF_ORDERS_HEADERS.ORDER_TYPE_ID');
copy(:ORDERS_QF.DEMAND_SOURCE,'QF_ORDERS_HEADERS.DEMAND_SOURCE');
copy(:ORDERS_QF.ZONE_CODE,'QF_ORDERS_HEADERS.ZONE_CODE');
copy(:ORDERS_QF.CUSTOMER_LEVEL,'QF_ORDERS_HEADERS.CUSTOMER_LEVEL');
copy(:ORDERS_QF.SALESREP,'QF_ORDERS_HEADERS.SALESREP');
copy(:ORDERS_QF.BRAND_CODE,'QF_ORDERS_HEADERS.BRAND_CODE');
copy(:ORDERS_QF.CUSTOMER_STYLE,'QF_ORDERS_HEADERS.CUSTOMER_STYLE');
copy(:ORDERS_QF.FACTORY_STYLE,'QF_ORDERS_HEADERS.FACTORY_STYLE');
copy(:ORDERS_QF.FACTORY_STYLE_MIR,'QF_ORDERS_HEADERS.FACTORY_STYLE_MIR');
copy(:ORDERS_QF.FACTORY_STYLE_MIR_DESC,'QF_ORDERS.FACTORY_STYLE_MIR_DESC');
copy(:ORDERS_QF.LAST_CODE,'QF_ORDERS_HEADERS.LAST_CODE');
copy(:ORDERS_QF.HEEL,'QF_ORDERS_HEADERS.HEEL');
copy(:ORDERS_QF.SHOE_LATHE,'QF_ORDERS_HEADERS.SHOE_LATHE');
copy(:ORDERS_QF.SOLE,'QF_ORDERS_HEADERS.SOLE');
copy(:ORDERS_QF.DEPARTMENT_CODE,'QF_ORDERS_HEADERS.DEPARTMENT_CODE');
copy(:ORDERS_QF.AREA_CODE,'QF_ORDERS_HEADERS.AREA_CODE');
app_find.query_range(:ORDERS_QF.ORDERED_DATE_FROM,:ORDERS_QF.ORDERED_DATE_TO,'QF_ORDERS_HEADERS.ORDERED_DATE');
copy(:ORDERS_QF.ORDER_STATUS,'QF_ORDERS_HEADERS.ORDER_STATUS');
:parameter.g_query_find := 'FALSE'; --此處是標准
end if;
如何取得標簽頁的當前頁面的頁面名
declare
curr_tab VARCHAR2(30) := get_canvas_property('ORDER_REGIONS',
topmost_tab_page);
如何讀取配置文件的置
fnd_profile.value('CUX_DEMAND_ORDER')='Y'
注:首先要在設定檔中定義CUX_DEMAND_ORDER.
2009/12/03 陰
生成表查詢的方法
CREATE TABLE CUX.CUX_IPD_RECIPE_CONFIG AS
SELECT * FROM CUX.CUX_IPD_RECIPE_CONFIG@dev.US.ORACLE.COM S
用此法可以從一個數據庫的表遷移到另一數據庫,可以把索引一起移過去,但觸發器移不過去。
2009/11/23 晴
如何實現是查詢職責時,對數據塊進行唯讀
如下:
if upper(:Parameter.QUERY_ONLY)='YES' THEN--用於查詢職責時實現只能查詢。
SET_BLOCK_PROPERTY('HEADER', DELETE_ALLOWED , PROPERTY_FALSE);
SET_BLOCK_PROPERTY('HEADER', UPDATE_ALLOWED , PROPERTY_FALSE);
SET_BLOCK_PROPERTY('HEADER', INSERT_ALLOWED , PROPERTY_FALSE);
SET_BLOCK_PROPERTY('ROUTE', DELETE_ALLOWED , PROPERTY_FALSE);
SET_BLOCK_PROPERTY('ROUTE', UPDATE_ALLOWED , PROPERTY_FALSE);
SET_BLOCK_PROPERTY('ROUTE', INSERT_ALLOWED , PROPERTY_FALSE);
SET_BLOCK_PROPERTY('APPROVED', DELETE_ALLOWED , PROPERTY_FALSE);
SET_BLOCK_PROPERTY('APPROVED', UPDATE_ALLOWED , PROPERTY_FALSE);
SET_BLOCK_PROPERTY('APPROVED', INSERT_ALLOWED , PROPERTY_FALSE);
END IF;
其中Parameter.QUERY_ONLY是系統標准功能,此參數通過定義表單時定義。
2010/01/10
增加設置檔文件方法
進入應用開發管理-->設定檔,設置內容如下
SQL驗證代碼如下:
SQL="SELECT MEANING /"Installed/", LOOKUP_CODE
into :visible_option_value,
:profile_option_value
from fnd_lookups
where lookup_type = 'YES_NO'"
COLUMN="/"Installed/"(10)"
2010/01/11 晴
FORM中”是/否”消息窗口實現方法
在form中的 中,加T_LOVELOAD,然後設置T_OVERLOAD的屬性如下:
示例代碼:
al_id := Find_Alert('T_OVERLOAD');
al_button := Show_Alert(al_id);
IF al_button = ALERT_BUTTON2 THEN
return;
END IF;
2010/01/20 阴
EBS的form开发中实现查询功能的各种方法总结
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);
2010/01/21 阴
Form初始设置代码解析
打开组织选择窗口
FND_ORG.CHOOSE_ORG;
窗口显示位置
app_window.set_window_position('query_find', 'FIRST_WINDOW');
显示窗口
SHOW_VIEW('QUERY_FIND');
设置窗口属性(设title)
SET_WINDOW_PROPERTY('QUERY_FIND', TITLE ,:PARAMETER.ORG_NAME);
在EBS中取保存人的方法
SELECT p.LAST_NAME||p.FIRST_NAME --REPLACE(MAX(p.full_name), ',', '')
INTO p_name
FROM per_people_f p, fnd_user u
WHERE u.employee_id = p.person_id
AND u.user_id = fnd_profile.VALUE('USER_ID');
在form中用代碼修改數據塊的記錄狀態
SET_RECORD_PROPERTY(1,'HEADER',STATUS,CHANGED_STATUS);
在form中用代碼提交數據的方法
COMMIT_FORM;
新装电脑在第一次使用form build时,在用模板进行开发时要做的
1 进入注册表
“我的电脑/HKEY_LOCAL_JACHINE/SOFTWARE/ORACLE/KEY_DevSuiteHome1”,(或用 FORM_PATH进行搜索)下的FORM_PATH中,加入C:/sysERP/resource,此路径代表模板源,打开模板时要调用到里面的一些文件,不然会报错。
2 要设置数据库链结字符串
用记事本打开/DevSuiteHome_1/NETWORK/ADMIN/tnsnames
在其中添加连结字符串,如下:
erp_test =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.9)(PORT = 1601))
)
(CONNECT_DATA =
(SERVICE_NAME = test)
)
)
erp_dev =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = testerp.topgloria.com)(PORT = 1571))
)
(CONNECT_DATA =
(SERVICE_NAME = dev)
)
)
修改注冊表改變form build等oralce devlop 工具的語言。
路徑:“我的电脑/HKEY_LOCAL_JACHINE/SOFTWARE/ORACLE/KEY_DevSuiteHome1”
鍵值:NLS_LANG
TRADITIONAL CHINESE_TAIWAN.ZHT16MSWIN950(繁體)
AMERICAN_AMERICA.UTF8(英語)
在PL/SQL中如何用语言
LANGUAGE = USERENV('LANG');
如何定義一個查詢權限的功能表
第一步:定義表單
應用模組開發員>>应用模组>>表單(注意:表單名不能隨意寫,要和form名一致)
第二步:定義功能函數
應用模組開發員>>應用模組>>函數,參數處要輸入QUERY_ONLY="YES"
第三步:尋找職責所對應的功能表
系統管理員>>安全性>>職責>>定義,查詢職責所對應的功能表如下圖所示
第四步:在功能表中添加子菜單
系統管理員>>應用模組>>功能表
数据块的循环和如何运用数组示例
PROCEDURE check_packing_file is
type v_line_record is record
(
item_id integer,
packing_file_id integer
);
type v_line_table IS TABLE OF v_line_record INDEX BY BINARY_INTEGER;
p_lines_tbl v_line_table;
i integer;
j integer;
v_item_id integer;
v_file_id integer;
BEGIN
Go_Block('LINES');
First_Record;
i:=0;
loop
i:=p_lines_tbl.count + 1;
p_lines_tbl(i).item_id:= :LINES.ITEM_ID;
p_lines_tbl(i).packing_file_id:= :LINES.packing_file_id;
EXIT WHEN :system.last_record = 'TRUE';
Next_Record;
END loop;
for i in 1 .. p_lines_tbl.count loop
v_item_id:= p_lines_tbl(i).item_id;
v_file_id:= p_lines_tbl(i).packing_file_id;
for j in 1 .. p_lines_tbl.count loop
if i<>j and v_item_id=p_lines_tbl(j).item_id and v_file_id<>p_lines_tbl(j).packing_file_id then
fnd_message.set_string('第'||i||'行和第'||j||'行成品料號相同,不可以有不同的包裝編號,請修改');
fnd_message.error;
RAISE form_trigger_failure;
end if;
end loop;
end loop;
END check_packing_file;
在Form的开发中如何让手电筒不变灰的方法
在数据块的WHEN_NEW_RECORD_INSTANCE中,添加如下代码
app_standard.synchronize;