FORM 相关技巧,copy from 余军明

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

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

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

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

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

3当form 启动时,在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.INSTANTIATE(block或者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',ENABLED,PROPERTY_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 返回一个被选中的button的number
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-level和Item-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-level的Post-query trigger和Item-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—>Override,fire in enter-query mode—>No。

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

原文地址:https://www.cnblogs.com/SanFrans/p/3346194.html