TEC1303.Form个性化技术总结 - 第四部分 Custom.pll个性化开发实例
2016-12-29 13:48
477 查看
第四部分
Custom.pll个性化开发实例
1) Custom.pll常用代码示例
Item属性修改
i. 获取当前Form和Block的名称PROCEDUREevent(event_nameVARCHAR2)IS
form_nameVARCHAR2(30)
:= name_in('system.current_form');
block_nameVARCHAR2(30)
:= name_in('system.cursor_block');
BEGIN
NULL;
END;
ii. 强制字段大写
app_item_property2.set_property('vendor.name', case_restriction,uppercase);
iii. 更改字段提示
app_item_property2.set_property('vendor.name', PROMPT_TEXT,'Supplier
Name');
iv. 更改按钮标签
app_item_property2.set_property('vendors.details', LABEL,'More
Details');
v. 更改字段背景颜色
app_item_property2.set_property('vendor.note',BACKGROUND_COLOR, 'r255g255b0');--
bright yellow
vi. 隐藏字段
app_item_property2.set_property('vendor.note', DISPLAYED,PROPERTY_OFF);--
hide Notes field
vii. 设置不可更新和输入
set_block_property(block_name,insert_allowed, property_false);
--不可插入
set_block_property(block_name,update_allowed, property_false);
--不可更新
viii. 添加菜单
app_special2.instantiate('SPECIAL15','Print
Order &Again', '',TRUE,'LINE');
ix. 菜单项是否可用
app_special2.enable('SPECIAL15',PROPERTY_ON);--菜单项可用app_special2.enable('SPECIAL15',PROPERTY_OFF);--菜单项不可用
小案例
为菜单添加逻辑BEGIN
IF(event_name
='SPECIAL15')THEN
IF(form_name
='DEMXXEOR'ANDblock_name
='ORDERS')THEN
/* Add your Print Order
logic here */
RAISEform_trigger_failure;
END IF;
END IF;
END;
复选框菜单
BEGIN
IF(event_name
='WHEN-NEW-FORM-INSTANCE')THEN
--普通菜单
app_special2.instantiate('SPECIAL30', '供应商历史采购cust',NULL,TRUE);
app_special2.enable('SPECIAL30',
property_on);
--带复选框菜单
app_special2.instantiate('SPECIAL4_CHECKBOX', 'TEST_CHECKBOX','',TRUE,'LINE');
--设置复选框勾选
app_special2.set_checkbox('SPECIAL4_CHECKBOX','TRUE');
--获取复选框状态
IFapp_special.get_checkbox('SPECIAL4_CHECKBOX')='TRUE'THEN
fnd_message.debug('Special
4 is True!');
ELSE
fnd_message.debug('Special
4 is False!');
END IF;
END IF;
END;
测试函数或功能是否定义
BEGIN
IF(event_name
='WHEN-NEW-FORM-INSTANCE')THEN
IF(form_name
='DEMXXEOR')THEN
IF(fnd_function.test('DEM_DEMXXEOR_AUTHORIZED'))THEN
/* Add your logic here */
END IF;
END IF;
END IF;
END;
在Event事件中调用外部库的方法
BEGIN
IFfnd_profile.value('USERNAME')
= 'CUST01'THEN
custom01.event(event_name);
ELSIFfnd_profile.value('USERNAME')
= 'CUST2'THEN
custom2.event(event_name);
END IF;
END;
给字段赋值
PROCEDUREevent(event_nameVARCHAR2)IS
l_block_nameVARCHAR2(35)
:= name_in('SYSTEM.CURSOR_BLOCK');
--采购单位
l_ordered_uomVARCHAR2(30)
:= name_in('RCV_TRANSACTION.ORDERED_UOM_TL');
--接收数量
l_quantityVARCHAR2(50)
:= name_in('RCV_TRANSACTION.TRANSACTION_QUANTITY');
BEGIN
IFevent
='WHEN-VALIDATE-RECORD'THEN
IFl_block_name
='RCV_TRANSACTION'THEN
copy(l_ordered_uom,'RCV_TRANSACTION.ATTRIBUTE1');
copy(l_quantity,'RCV_TRANSACTION.ATTRIBUTE2');--清空数量
copy(NULL,'RCV_TRANSACTION.ATTRIBUTE3');
END IF;
END IF;
ENDevent;
属性综合应用
PROCEDUREevent(event_nameVARCHAR)IS
form_nameVARCHAR(0)
:= name_in('system.current_form');
block_nameVARCHAR(0)
:= name_in('system.cursor_block');
BEGIN
IF(event_name
='WHEN-NEW-FORM-INSTANCE')THEN
IF(form_name
='FNDSCAUS')THEN
-- hide the Fax field
app_item_property.set_property('user.fax', displayed,
property_off);
-- force E-Mail field to
uppercase
app_item_property.set_property('user.email_address', case_restriction,uppercase);
-- make Description field
required
app_item_property.set_property('user.description', required,
property_on);
-- make Person field magenta
app_item_property.set_property('user.employee_name', background_color,'rg0b');
-- change prompt of Supplier
field
app_item_property.set_property('user.supplier_name', prompt_text,'Vendor
Name');
END IF;
END IF;
ENDevent;
2) 调用并发请求并弹出请求Form界面
案例需求:采购接收界面直接打印采购入库单,并需要直接调出请求查看界面,查看当前请求。
在Custom.pll中编写代码
--注意:代码中用到了app_special2,所以需要加载APPCORE2.pll库PROCEDURE event(event_nameVARCHAR2)IS form_name VARCHAR2(30):= name_in('system.current_form'); block_name VARCHAR2(30):= name_in('system.cursor_block'); BEGIN /* start个性化调用请求打印入库单*/ IF event_name='WHEN-NEW-FORM-INSTANCE'THEN IF form_name='RCVTXERT'THEN app_special2.instantiate('SPECIAL45','打印入库单',NULL,TRUE); app_special2.enable('SPECIAL45', property_on); ENDIF; ENDIF; IF event_name='SPECIAL45'THEN IF(form_name='RCVTXERT'AND block_name='RCV_TRANSACTION')THEN DECLARE ln_person_id NUMBER; lb_boolean BOOLEANDEFAULTFALSE; l_org_id NUMBER; ln_request_id NUMBER; BEGIN --根据库存组织id反求OU l_org_id := name_in('PARAMETER.ORG_ID'); BEGIN SELECT ood.operating_unit INTO l_org_id FROM org_organization_definitions ood WHERE ood.organization_id= l_org_id; EXCEPTION WHENOTHERSTHEN l_org_id :=NULL; END; lb_boolean := fnd_request.add_layout(template_appl_name=>'HDSP', template_code =>'HDSP0025', template_language =>'zh', template_territory =>'CN', output_format =>'PDF'); IF lb_booleanTHEN --给并发请求的业务实体赋值 fnd_request.set_org_id(l_org_id); --调用报表 ln_request_id := fnd_request.submit_request('HDSP', 'HDSP0025', NULL, to_char(SYSDATE,'YYYY/MM/DD HH24:MI:SS'), FALSE, 'VENDOR', name_in('PARAMETER.ORG_ID'), '', name_in('OVERFLOW_AREA.RECEIPT_NUM'), name_in('OVERFLOW_AREA.RECEIPT_NUM'), '', '', '', '', name_in('RCV_TRANSACTION.TRANSACTION_DATE_NB'), name_in('RCV_TRANSACTION.TRANSACTION_DATE_NB'), fnd_global.user_id, 7); COMMIT; --弹出请求窗口 fnd_function.execute(function_name=>'FND_FNDRSRUN', open_flag =>'Y', session_flag =>'Y', other_params =>'CONCURRENT_PROGRAM_NAME="HDSP0025" PROGRAM_APPL_SHORT_NAME="HDSP" DODT_REQ_ID="'|| to_char(ln_request_id)||'"'); ENDIF; END; ENDIF; ENDIF; /* end个性化调用请求打印入库单*/ END event;
编译Custom,pll
把custom.pll上传到au目录下面的resource路径中;工作目录切换到$AU_TOP/resource下编译:
frmcmp_batch Module=$AU_TOP/resource/CUSTOM.pll Userid=apps/apps Module_Type=LIBRARY output_file=$AU_TOP/resource/CUSTOM.plx