Form. 相关技巧

来源:互联网 发布:php财务管理 源码 编辑:程序博客网 时间:2024/04/20 11:34

Form. 相关技巧

1.一进页面就能看到表中已生成数据,而不用按ctrl+f11进行查询的语句:

form级的触发器when-new-form-instance中,
写如下代码:
go_block('XXXX');
execute_query;
要查询的数据块的名称

说明:
当使用基于表建立的块时,可使用块里的任何项的GO_BLOCK或者GO_ITEM找到那个块
当查询数据到一个块里去,可通过execute_query进行处理

补充:用DELETE_RECORD从块中删除当前记录,要改变数据库的记录,必须使用COMMIT_FORM

2, 什么办法可以控制formFile菜单中的Export吗?使其失效
答:
FORM中,在FORM级的触发器EXPORT中,
将其中的代码app_standard.event('EXPORT');屏蔽掉,改为null;试一试

3form. 启动时,在pre-form触发器中instantiate你特定的菜单items
调用 app_special.instantiate
procedure APP_SPECIAL.INSTANTIATE(
option_name varchar2, --定义tigger 名字
hint varchar2 default null,--定义菜单实体的名字,使用&来定义菜单实体的键盘快捷键
icon varchar2 default null,--
initially_enabledboolean default true,
separator varchar2 default null);--定义'LINE'separator
例子
app_special.instantiate(SPECIAL1,&rint Order,PRINTORD);


4, tool 菜单中的check boxes
--option_name trigger_name 包括关键字CHECKBOX(例如:SPECIAL3_CHECKBOX)
app_special.instantiate(SPECIAL3_CHECKBOX,Spe&cial 3 Box w Line’’,TRUE,LINE);

--调用app_special.set_checkbox 来初始化check box 的值
app_special.set_checkbox(SPECIAL3_CHECKBOX,TRUE);

--SPECIALn_CHECKBOX函数中和相应的逻辑代码中测试check box
app_special.get_checkbox
if (app_special.get_checkbox(SPECIAL3_CHECKBOX)=TRUE) then
fnd_message.debug(Special 3 is True!);
else
fnd_message.debug(Special 3 is False!);
end if;

5, 在你在pre-form. instantiate实体, 随意将指定的菜单实体设置为可用或不可用(基于数据块),
调用APP_SPECIAL.ENABLE
procedure APP_SPECIAL.ENABLE(option_name varchar2,
state);
form-level 中的pre-block trigger里面,将你的special 菜单的item 定义为disable
app_special.enable(SPECIAL1,PROPERTY_OFF);
form-level 中的pre-block trigger里面,将你的special 菜单的item 定义为able
app_special.enable(SPECIAL1,PROPERTY_on);
将所有的special 菜单设置为 disable
app_special.enable(SPECIAL,PROPERTY_OFF);

6, 编辑鼠标右键菜单
调用APP_POPUP.INSTANTIATEblock或者item层的PRE-POPUPMENU Trigger
procedure APP_POPUP.INSTANTIATE(
option_name varchar2,
txt varchar2,
initially_enabled boolean default true,
separator varchar2 default null);
app_special.instantiate类似
例如:
APP_POPUP.INSTANTIATE('POPUP1','First Entry');

7, 关于 Implementing Zoom Use the Custom Library学习
1. .pll文件可以用form. builder 打开,修改,创建
2. .pll文件的编译方法:
f60gen module=CUTOM.PLL userid=apps/apps module_type=LIBRARY
3. 当系统不自动激活菜单上的图标时,可以在数据块的 block-level 的 when-new-block-instance trigger
添加如下代码:
zoom为例子:set_menu_item_property('VIEW.ZOOM'ENABLEDPROPERTY_TURE)
form-level 的相应的trigger(比如zoom trigger)中改写下列代码:
custom.event'ZOOM'
4. fnd_function.exrcute语法:
procedure FND_FUNCTION.EXECUTE
(function_name IN varchar2,
open_flag IN varchar2 default Y,
session_flag IN varchar2 default SESSION,
other_params IN varchar2 default NULL,
activate IN varchar2 default ACTIVATE,
browser_target IN varchar2 default NULL);
5.FND_FUNCTION.TEST(function_name IN varchar2)
测试指定的函数是否可以连接,该函数用于form. 启动时测试函数的可用性,


8, 弹性域(Flexfields)的总结:

使用 FND_KEY_FLEX.DEFINE item handler 中设定key弹性域的定义
procedure flexfield_item_name(event varchar2)
is
begin
fnd_key_flex.define(
block=>'block_name',
field=>'concatenated_segements_field_name',
id=>'ccid_field_name',
appl_short_name=>'shortname_of_application_used_to_register_flexfield',
code=>'flexfield_code',
NUM=>'structure_number',
any_other_auguments);
)

:
FND_KEY_FLEX.DEFINE(
BLOCK=>LINES,
FIELD=>ACCTG_FLEX_VALUES,
ID=>GL_ACCOUNT_CC_ID,--Your ID field is the GL_ACCOUNT_CC_ID item
APPL_SHORT_NAME=>SQLGL,
CODE=>GL#,
NUM=>101--可以使用GL_SET_OF_BOOKS_ID 作为structure id
);
----------------------------------------------------------------------------------
使用FND_DESCR_FLEX.DEFINE item handler 中设定描述性弹性域的定义
定义
FND_DESCR_FLEX.DEFINE(
BLOCK=>'BLOCK_NAME',
FIELD=>'DISPLAYED_FLEXFIELD_FIELD_NAME',
APPL_SHORT_NAME=>'SHORTNAME_OF_APPLICATION_USED_TO_REGISTER_FLEXFIELD',
DESC_FLEX_NAME=>'FLEXFIELD_NAME',
ANY_OTHER_ARGUMNTS);

FND_DESCR_FLEX.DEFINE(
BLOCK=>ORDERS,
FIELD=>DESC_FLEX,
APPL_SHORT_NAME=>DEM,
DESC_FLEX_NAME=>DEM_ORDERS);

)


9, COPY 命令
Copies a value from one item or variable into another item or global variable.
Syntax
PROCEDURE COPY(source VARCHAR2, destination VARCHAR2)

Parameters
source: The source is a literal value.

destination: The destination can be either a text item or another global variable.

例:
COPY( 'Yes', 'GLOBAL.'||global_var_name );
YES付值给 变量global_var_name


10, message 用法总结:

1.设置信息:
--FND_MESSAGE.SET_NAME 语法:
procedure FND_MESSAGE.SET_NAME(application_shortnameIN varchar2,message_name IN varchar2);
作用:
Message Dictionary获取一条信息
一般情况下在FORM中显示出错信息使用以下代码:
FND_MESSAGE.SET_NAME( APPL_SHORT_NAME,MESSAGE_NAME) ;
FND_MESSAGE.ERROR ;

--FND_MESSAGE.RETRIEVE
作用:
取得一条数据库中的等待信息
--FND_MESSAGE.SET_STRING (value IN varchar2)
作用:
将字符串放到消息栈中,

--FND_MESSAGE.SET_TOKEN
作用:用值替换message的信息中的变量
语法:
procedure FND_MESSAGE.SET_TOKEN(token_name IN VARCHAR2,value IN VARCHAR2
translate IN boolean default FALSE);

--form用于显示信息的函数
1.FND_MESSAGE.ERROR
2.FND_MESSAGE.WARN
例子
Example:
FND_MESSAGE.SET_NAME(SQLAP,AP_PAY_MULTI_PAY_VOID);
REC_COUNT:= <NUMBER OF PAYMENTS>;
FND_MESSAGE.SET_TOKEN(NUM_OF_RECS,REC_COUNT);
IF (NOT FND_MESSAGE.WARN) THEN
Raise FORM_TRIGGER_FAILURE;
END IF;

3.FND_MESSAGE.QUESTION
语法:
FND_MESSAGE.QUESTION(
button1 IN varchar2 default YES,
button2 IN varchar2 default NO,
button3 IN varchar2 default CANCEL;
default_btn IN number default 1,
cancel_btn IN number default 3,
icon IN varchar2 default question) return number;
说明:
FND_MESSAGE.QUESTION 返回一个被选中的buttonnumber
Example:
FND_MESSAGE.SET_NAME(FND,ATCHMT-COMMIT BEFORE INVOKING);
IF FND_MESSAGE.QUESTION
(YES,CANCEL,NULL,1,2,NULL) = 2 THEN
RAISE FORM_TRIGGER_FAILURE;
END IF;
4.FND_MESSAGE.SHOW
作用:显示信息
5.FND_MESSAGE.DEBUG
6.FND_MESSAGE.GET
作用:
取得在message中设置好的message信息


11 设置Item-levelItem-instance-level属性时需特别的注意,
Item-level属性影响所有的记录,而Item-instance-level属性只影响特定的记录(当前行)。

12fotmatting currency fields( 货币的转换和格式化)

FND_CURRENCY:The Dynamic Currency feature allows different values in arbitrary currencies to be displayed in
the same report or form, each shown with appropriate formatting.
FND_CURRENCY.GET_FORMAT_MASK(:ORDERS.CURRENCY_CODE,GET_ITEM_PROPERTY('LINES.PRICE',MAX_LENGTH));
1.取得需对应的货币
其中:GET_ITEM_PROPERTY('LINES.PRICE',MAX_LENGTH)为返回一个该item的最大长度,
FND_CURRENCY.GET_FORMAT_MASK(currency_code IN varchar2,field_length IN number)return varchar2;

2.格式化(需要的话进行汇率转换)item的货币类型
APP_ITEM_PROPERTY.SET_PROPERTY('LINES.PRICE',FORMAT_MASK,
FND_CURRENCY.GET_FORMAT_MASK(:ORDERS.CURRENCY_CODE,
GET_ITEM_PROPERTY('LINES.PRICE',MAX_LENGTH) ))
3.动态控制item的显示格式的触发范围
Block-levelPost-query triggerItem-level的 when-validate-item trigger调用handler,控制显示格式。


CALENDAR 日历
如何实现在form中弹出calendar并返回所选日期的功能?
1.text item为日期型, LOV属性为:ENABLE_LIST_LAMP并且Validate from List LOV>No
2.在该text item KE_LISTVAL下加入如下代码:calendar.show;
trigger属性Execution Hierarchy>Overridefire in enter-query mode>No

使用APP_DATE.FND_DATE取得服务器端的时间环境

13 , Dependencies item的编程
语法:
1.APP_FIELD.SET_DEPENDENT_FIELD(EVENT,:block.master_item = CONDITION,
block.dependent_item);
用途:A conditionally-dependent item changes validation when the value in the master
item changes. Specify the condition rather than the master item name.

This procedure makes an item enterable or not enterable based on whether the master item
is NULL or a specified condition is TRUE, and clears the field. The dependent item can be
a text item, check box, or poplist.
You typically call this procedure in the following triggers:
? WHENVALIDATEITEM on the master field
? WHENVALIDATEITEM on the field(s) the condition is based on or in event INIT
on the dependent field
? PRERECORD
? POSTQUERY (required only when the dependent item is in a
multirecord block)

:block.master_item = CONDITION包括:
--APP_FIELD.SET_DEPENDENT_FIELD(EVENT,(:block.master_item IS NOT NULL),
block.dependent_item);用于Multiple items may depend on a single master.

--APP_FIELD.SET_DEPENDENT_FIELD(EVENT,((:block.master_item1 IS NOT NULL) AND
(:block.master_item2 IS NOT NULL)),block.dependent_item);
用于Two master items may share a dependent item.

--APP_FIELD.SET_DEPENDENT_FIELD(EVENT,block.master_item,block.dependent_item);
用于Cascading dependence - an item can be both master and dependent.

2.APP_FIELD.SET_EXCLUSIVE_FIELD
用途Mutually exclusive itemsthey look like two items, but behave as one. Use
APP_FIELD.SET_EXCLUSIVE_FIELD to code.
--APP_FIELD.SET_EXCLUSIVE_FIELD(EVENT,block.item1,block.item2,block.item3);
Call item handler procedures in:
– WHEN-VALIDATE-ITEM for each exclusive item
– PRE-RECORD on the items’ block (Fire in Enter-Query Mode: No)
– WHEN-CREATE-RECORD on the items’ block

3.APP_FIELD.SET_INCLUSIVE_FIELD
用途Mutually Inclusive Itemsone for all and all for one!
Use APP_FIELD.SET_INCLUSIVE_FIELD to code a set of items where, if any
of the items is not null, all items are required.

--APP_FIELD.SET_INCLUSIVE_FIELD(EVENT,block.item1,block.item2);
? Call item handler procedures in:
%2