FORM开发
来源:互联网 发布:淘宝开店简介 编辑:程序博客网 时间:2024/04/28 02:22
一、修改FORM级触发器
1.PRE-FORM
app_window.set_window_position('CUXCRVAS', 'FIRST_WINDOW');
2.WHEN-NEW-FORM-INSTANCE
FDRCSID('$Header: TEMPLATE.fmb 115.12 level:6 2013/11/05 10:00:48 pkm ship $');APP_STANDARD.EVENT('WHEN-NEW-FORM-INSTANCE');---- app_folder.define_folder_block('template test', 'folder_block', 'prompt_block', 'stacked_canvas', 'window', 'disabled functions');-- app_folder.event('VERIFY');--cux_control.botton_control('when-new-form');
二、创建数据块1.为QFIND快添加项
设置块和项的属性:
QFIND画布
修改块级触发器KEY-NXTBLK:
:parameter.G_query_find := 'TRUE';app_find.find('CUX_CRVAL');:parameter.G_query_find := 'FALSE';
分别编写以下触发器:
app_find.clear;
app_find.new('CUX_CRVAL');
:parameter.G_query_find := 'TRUE';app_find.find('CUX_CRVAL');:parameter.G_query_find := 'FALSE';
三、创建CUXCRVAS块
画布CUXCRVAS效果:
设置块和项属性
修改ITEM级触发器WHEN_CHECKBOX_CHANGED
BEGIN IF :CUX_CRVAL.ATTRIBUTE1 IS NULL THEN :CUX_CRVAL.END_DATE := NULL; app_item_property.set_property('CUX_CRVAL.END_DATE',INSERT_ALLOWED,PROPERTY_FALSE); app_item_property.set_property('CUX_CRVAL.END_DATE',UPDATE_ALLOWED,PROPERTY_FALSE); ELSE app_item_property.set_property('CUX_CRVAL.END_DATE',INSERT_ALLOWED,PROPERTY_TRUE); app_item_property.set_property('CUX_CRVAL.END_DATE',UPDATE_ALLOWED,PROPERTY_TRUE); END IF;END;
修改块级触发器:
1、QUERY_FIND
NULL;APP_FIND.QUERY_FIND('CUXCRVAS','QFIND','QFIND');
2、PRE_INSERT
cux_private.per_insert;
3、PRE_UPDATE
cux_private.per_update;
4、PRE_DELETE
cux_private.per_delete;
5、PRE_QUERY
NULL;IF :Parameter.G_query_find='TRUE' THEN:CUX_CRVAL.CUSTOMER_ID:=:QFIND.CUSTOMER_ID;--:CUX_CRVAL.CUSTOMER_NUMBER:=:QFIND.CUSTOMER_NUMBER;--:CUX_CRVAL.CUSTOMER_NAME:=:QFIND.CUSTOMER_NAME;:CUX_CRVAL.STATUS:=:QFIND.STATUS;:Parameter.G_query_find:='FALSE';END IF;
6、WHEN_NEW_RECORD_INSTANCE
APP_STANDARD.EVENT('WHEN-NEW-RECORD-INSTANCE');cux_control.record_control;
四、LOV设置
五、修改程序单元
修改APP_CUSTOM包
package body app_custom isprocedure close_window(wnd in varchar2) is /* This procedure is called whenever the user closes a window, as a result of the WHEN-WINDOW-CLOSED trigger firing. You are responsible for supplying unqiue code that addresses the needs of each window, such as deferring master-detail relations, or closing related windows. Other windows that will be referenced into your form rely on the default code at the beginning and end of this procedure - under no circumstances should you modify that code. */begin /* THE FOLLOWING CODE MUST NOT BE MODIFIED. It prevents windows from closing while in enter-query mode. */ if (name_in('system.mode') = 'ENTER-QUERY') then app_exception.disabled; return; end if; /* YOU MUST MODIFY THE FOLLOWING CODE to account for specific behaviors of your form, including: 1. identifying the 'first window' of the form and treating a close window on that window like a close form. 2. deferring master-detail relations for detail blocks that exist in other windows. 3. closing other related windows. The default code at the end of this procedure actually closes the window. If you do that yourself in this code, issue a 'return;' at the end of your logic for your specific windows. */ if (wnd = 'CUXCRVAS') then app_window.close_first_window; elsif (wnd = '<another window>') then --defer relations --close related windows null; elsif (wnd = '<yet another window>') then --defer relations --close related windows null; end if; /* THE FOLLOWING CODE MUST NOT BE MODIFIED. It ensures the cursor is not in the window that will be closed (by moving it to the previous block if needed), and actually closes the specified window. */ if (wnd = get_view_property(get_item_property(:SYSTEM.CURSOR_ITEM, ITEM_CANVAS), WINDOW_NAME)) then do_key('PREVIOUS_BLOCK'); end if; hide_window(wnd);end close_window;procedure open_window(wnd in varchar2) is /* This procedure should be called from any code that could result in a non-modal window being opened. */begin /* YOU MUST MODIFY THE FOLLOWING CODE to account for specific behaviors of your form, including: 1. Positioning the window to be opened 2. Resetting master-detail relations for blocks in the window 3. navigation to a block in that window */ if (wnd = '<a window>') then --position the window --reset master-detail relations --navigate to a block in the window null; elsif (wnd = '<another window>') then --position the window --reset master-detail relations --navigate to a block in the window null; elsif (wnd = '<yet another window>') then --position the window --reset master-detail relations --navigate to a block in the window null; end if;end open_window;end app_custom;
编写CUX_CONTROL包
PACKAGE BODY cux_control IS procedure summit is begin if :CUX_CRVAL.credit_values is null then FND_MESSAGE.SET_STRING('信用额度不能为空!'); FND_MESSAGE.ERROR; RAISE Form_Trigger_Failure; elsif :CUX_CRVAL.ATTRIBUTE1 ='Y' and :CUX_CRVAL.END_DATE IS NULL then FND_MESSAGE.SET_STRING('请输入截至日期!'); FND_MESSAGE.ERROR; RAISE Form_Trigger_Failure; elsif :CUX_CRVAL.ATTRIBUTE1 ='Y' and :CUX_CRVAL.credit_values = 0 then FND_MESSAGE.SET_STRING('临时信用额度不能为0!'); FND_MESSAGE.ERROR; RAISE Form_Trigger_Failure; ELSE if :CUX_CRVAL.STATUS='已输入' then :CUX_CRVAL.STATUS:='处理中'; if :CUX_CRVAL.ATTRIBUTE1 is null then --FND_MESSAGE.DEBUG(:CUX_CRVAL.CREDIT_ID); --FND_MESSAGE.DEBUG(:CUX_CRVAL.CUSTOMER_ID); update cux_credit_control_all a set a.STATUS='失效',a.active_flag='N',a.end_date=trunc(sysdate) where (a.credit_id!=:CUX_CRVAL.CREDIT_ID or :CUX_CRVAL.CREDIT_ID is null) and a.customer_id=:CUX_CRVAL.CUSTOMER_ID and a.group_number=:CUX_CRVAL.group_number and a.STATUS='处理中' and a.ATTRIBUTE1 is null ; commit; end if; else FND_MESSAGE.SET_STRING('当前记录不能提交!'); FND_MESSAGE.ERROR; RAISE Form_Trigger_Failure; end if; END IF; /* set_block_property('CUX_CRVAL',UPDATE_ALLOWED,property_false); set_block_property('CUX_CRVAL',DELETE_ALLOWED,property_false);*/ end summit; procedure approve is begin if :CUX_CRVAL.STATUS='处理中' then :CUX_CRVAL.STATUS:='生效'; :CUX_CRVAL.START_DATE:=trunc(sysdate); :CUX_CRVAL.ATTRIBUTE2 := TO_CHAR(sysdate,'YYYY-MM-DD HH24:MI:SS'); if :CUX_CRVAL.ATTRIBUTE1 is null then update cux_credit_control_all a set a.STATUS='失效',a.active_flag='N',a.end_date=trunc(sysdate) where a.credit_id!=:CUX_CRVAL.CREDIT_ID and a.customer_id=:CUX_CRVAL.CUSTOMER_ID and a.group_number=:CUX_CRVAL.group_number and a.STATUS='生效' and a.ATTRIBUTE1 is null ; end if; else FND_MESSAGE.SET_STRING('当前记录不能审批!'); FND_MESSAGE.ERROR; RAISE Form_Trigger_Failure; end if; end approve; procedure reject is begin if :CUX_CRVAL.STATUS='处理中' then :CUX_CRVAL.STATUS:='拒绝'; :CUX_CRVAL.ATTRIBUTE2 := TO_CHAR(sysdate,'YYYY-MM-DD HH24:MI:SS'); else FND_MESSAGE.SET_STRING('当前记录不能拒绝!'); FND_MESSAGE.ERROR; RAISE Form_Trigger_Failure; end if; end reject; procedure botton_control(p_event in varchar2) is v_user_id number; v_approve_user_id number; begin if (p_event='when-new-form') then :PARAMETER.P_USER_ID:=FND_GLOBAL.USER_ID; v_approve_user_id:=fnd_profile.value('CUX_CREDIT_APPROVE_USER'); if :PARAMETER.P_USER_ID=v_approve_user_id then app_item_property.set_property('BOTTON_CONTROL.SUMMIT',ENABLED,PROPERTY_FALSE); app_item_property.set_property('BOTTON_CONTROL.APPROVE',ENABLED,PROPERTY_TRUE); app_item_property.set_property('BOTTON_CONTROL.REJECT',ENABLED,PROPERTY_TRUE); app_item_property.set_property('CUX_CRVAL.ACTIVE_FLAG',INSERT_ALLOWED,PROPERTY_TRUE); app_item_property.set_property('CUX_CRVAL.ACTIVE_FLAG',UPDATE_ALLOWED,PROPERTY_TRUE); else app_item_property.set_property('BOTTON_CONTROL.SUMMIT',ENABLED,PROPERTY_TRUE); app_item_property.set_property('BOTTON_CONTROL.APPROVE',ENABLED,PROPERTY_FALSE); app_item_property.set_property('BOTTON_CONTROL.REJECT',ENABLED,PROPERTY_FALSE); app_item_property.set_property('CUX_CRVAL.ACTIVE_FLAG',INSERT_ALLOWED,PROPERTY_FALSE); app_item_property.set_property('CUX_CRVAL.ACTIVE_FLAG',UPDATE_ALLOWED,PROPERTY_FALSE); end if; end if; end botton_control; procedure record_control is begin if :CUX_CRVAL.STATUS='已输入' then /* app_item_property.set_property('CUX_CRVAL.CUSTOMER_NUMBER', ENTERABLE,PROPERTY_ON); -- app_item_property.set_property('CUX_CRVAL.CUSTOMER_NUMBER',UPDATE_ALLOWED,PROPERTY_TRUE); app_item_property.set_property('CUX_CRVAL.CUSTOMER_NAME',ENTERABLE,PROPERTY_TRUE); app_item_property.set_property('CUX_CRVAL.CREDIT_VALUES',ENTERABLE,PROPERTY_TRUE); --set_block_property('CUX_CRVAL',UPDATE_ALLOWED,PROPERTY_TRUE); */ set_block_property('CUX_CRVAL',DELETE_ALLOWED,PROPERTY_TRUE); if :CUX_CRVAL.ATTRIBUTE1 = 'Y' then app_item_property.set_property('CUX_CRVAL.END_DATE',INSERT_ALLOWED,PROPERTY_TRUE); app_item_property.set_property('CUX_CRVAL.END_DATE',UPDATE_ALLOWED,PROPERTY_TRUE); ELSE app_item_property.set_property('CUX_CRVAL.END_DATE',INSERT_ALLOWED,PROPERTY_FALSE); app_item_property.set_property('CUX_CRVAL.END_DATE',UPDATE_ALLOWED,PROPERTY_FALSE); END IF; null; else --set_block_property('CUX_CRVAL',UPDATE_ALLOWED,PROPERTY_FALSE); app_item_property.set_property('CUX_CRVAL.CUSTOMER_NUMBER',UPDATE_ALLOWED,PROPERTY_FALSE); app_item_property.set_property('CUX_CRVAL.CUSTOMER_NAME',UPDATE_ALLOWED,PROPERTY_FALSE); app_item_property.set_property('CUX_CRVAL.CREDIT_VALUES',UPDATE_ALLOWED,PROPERTY_FALSE); app_item_property.set_property('CUX_CRVAL.END_DATE',UPDATE_ALLOWED,PROPERTY_FALSE); app_item_property.set_property('CUX_CRVAL.ATTRIBUTE1',UPDATE_ALLOWED,PROPERTY_FALSE); set_block_property('CUX_CRVAL',DELETE_ALLOWED,PROPERTY_FALSE); end if; end ;END cux_control;
编写CUX_EVENT包
PACKAGE BODY CUX_EVENT IS PROCEDURE SUM_TRX_QTY IS BEGIN :BOTTON_CONTROL.SUM_TRX_QTY := 0; GO_BLOCK('CUX_CRVAL'); first_record; LOOP if :CUX_CRVAL.STATUS='生效' and :CUX_CRVAL.ACTIVE_FLAG='Y' then :BOTTON_CONTROL.SUM_TRX_QTY := :BOTTON_CONTROL.SUM_TRX_QTY + nvl(:CUX_CRVAL.CREDIT_VALUES, 0); end if; IF :system.last_record = 'FALSE' THEN ----判断当前记录是否为最后一条 next_record; ELSE EXIT; END IF; END LOOP; first_record; END SUM_TRX_QTY; END;
编写CUX_PRIVATE包
PACKAGE BODY cux_private IS procedure per_insert is begin select cux_credit_control_all_s.NEXTVAL into :CUX_CRVAL.CREDIT_ID from dual; FND_STANDARD.SET_WHO; end per_insert; procedure per_update is begin /* if :CUX_CRVAL.STATUS='生效' then FND_MESSAGE.SET_STRING('当前记录不允许修改!'); FND_MESSAGE.ERROR; RAISE Form_Trigger_Failure; else FND_STANDARD.SET_WHO; end if; */ FND_STANDARD.SET_WHO; end per_update; procedure per_delete is begin /* if :CUX_CRVAL.STATUS='生效' then FND_MESSAGE.SET_STRING('当前记录不允许删除!'); FND_MESSAGE.ERROR; RAISE Form_Trigger_Failure; end if; */ null; end per_delete;END;
- FORM开发
- EBS Form开发整理
- form开发技巧
- Oracle Form Folder开发
- Query_Find Form开发入门
- FORM 开发环境设置
- Form开发小技巧
- 开发随笔8 - Form
- Form 开发步骤
- Form 开发规范
- FORM开发小问题
- FORM的基础开发
- Form Builder开发中TEMPLATE Form
- Form开发中的图片存储
- 开发 FORM 身份验证 Web 应用程序
- 开发 FORM 身份验证 Web 应用程序
- Form Builder开发基础-1
- FORM开发指南.PDF之一
- 员工对谷歌有哪些不满
- ubuntu/linux系统如何设置IP地址,网关,DNS
- C++之类与对象(1)
- 2013-11-5 Linux 命令(cd ls )
- 安装mysql Install/Remove of the Service Denied!错误的解决办法
- FORM开发
- 利用JAVA操作Redis
- Direct UI 介绍,优缺点,实现的关键技术
- Oracle数据库移植到MySQL实战
- 把后台窗口调至前台显示
- C++之类与对象(2)
- 自定义Flex的Loading界面(源码)
- 黑马程序员_学习笔记_Java基础_集合(三)
- 【Android】android的基本UI操作(1)