oracle+二次开发-FORM篇

更新时间:2023-10-13 17:14:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

oracle 二次开发----form篇

1.一进页面就能看到表中已生成数据,而不用按ctrl+f11进行查询的语句: 在form级的触发器when-new-form-instance中, 写如下代码: go_block('XXXX'); execute_query; 要查询的数据块的名称 说明:

当使用基于表建立的块时,可使用块里的任何项的GO_BLOCK或者GO_ITEM找到那个块

当查询数据到一个块里去,可通过execute_query进行处理

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

------------------------------------------------------------------

有什么办法可以控制form中File菜单中的Export吗?使其失效 答:

在FORM中,在FORM级的触发器EXPORT中,

将其中的代码app_standard.event('EXPORT');屏蔽掉,改为null;试一试 ------------------------------------------------------------------

菜单与函数安全性 1.子函数命名的标准:

--子函数命名如下

_ 例如: PO_POXPOMPO_DELETE

--用户函数命名如下: 例如:PURCHASE ORDERS:DELETE

------------------------------------------------------------------

2.添加选择到指定的菜单中

添加15个指定的form-specific entries到每一个指定的菜单中:tools,reports,actions

Create a Form-level, User-named Trigger for Each Entry

-- The form-level user-named trigger must be called SPECIALn, where n is a number from 1 to 45

-- Tools menu includes SPECIAL1 to SPECIAL15

-- Reports menu includes SPECIAL16 to SPECIAL30, and the menu name Reports can be changed

-- Actions menu includes SPECIAL31 to SPECIAL45, and the menu name Actions can be changed

当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’,’&Print Order’,’PRINTORD’);

在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;

----------------------------------------------

在你在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);

------------------------------------------------------------------

编辑鼠标右键菜单

调用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'); d) PRE-QUERY

--If you don't do this, whatever query criteria you may enter in -- the concatenated flex field, it is not taken into account. FND_FLEX.EVENT('PRE-QUERY' ); e)

KEY-LISTVAL

APP_STANDARD.EVENT('KEY-LISTVAL'); FND_FLEX.EVENT('KEY-LISTVAL' );

------------------------------------------------------------------ 关于 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 启动时测试函数的可用性,

对于‘INIT’的理解:

Examine current conditions and reset defaults and dynamic attributes as necessary.

Usually called by other handlers that affect this item.

validate(参数); 使form执行基于参数范围的有效的过程.参数为: default_scope,form_scope,record_scope,item_scope

------------------------------------------------------------------ 弹性域(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’); )

----------------------------------------------------------

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

弹性域说明: /*这里是原来的

FND_KEY_FLEX.DEFINE( BLOCK=>'LINES',

FIELD=>'ACCTG_FLEX_VALUES', ID=>'GL_ACCOUNT_CC_ID', APPL_SHORT_NAME=>'SQLGL', CODE=>'GL#', NUM=>'101'); */

/*按以下顺序*/

1.先创建一个外键字段, id(指‘Unique_ID_field’)

2.修改联合字段的LOV, database item , class properties属性.(指 description_field_name) 3.WHEN-NEW-FORM-INSTANCE

cursor get_cao is

select to_char(id_flex_num) from fnd_id_flex_structures

where id_flex_structure_code = 'ACCOUNTING_FLEXFIELD' and id_flex_code = 'GL#';

v_cao varchar2(1000);

...................

open get_cao;

fetch get_cao into v_cao; if get_cao%notfound then v_cao := '101'; end if;

close get_cao;

app_standard.event('WHEN-NEW-FORM-INSTANCE');

fnd_key_flex.define( BLOCK=>'COMBO',

FIELD=>'ACCOUNT_FLEXFIELD', APPL_SHORT_NAME=>'SQLGL', CODE=>'GL#', NUM=>v_cao,

ID=>'CODE_COMBINATION_ID', DESCRIPTION=>'', TITLE=>' OK ', VALIDATE=>'FULL', QBE_IN=>'Y',

DERIVE_ALWAYS=>'Y', updateable => '',

VRULE=>'\\\\nSUMMARY_FLAG\\\\nI\\\\nAPPL=SQLGL;NAME=GL_NO_PARENT_SEGMENT_ALLOWED\\\\nN',

where_clause => 'summary_flag != ''Y''', QUERY_SECURITY =>'Y');

4.在其他触发器中按如下处理 ‘WHEN-VALIDATE-ITEM’ ‘WHEN-NEW-ITEM-INSTANCE’ ‘POST-QUERY’ ‘PRE-QUERY ’ ‘KEY-LISTVAL’ a)

WHEN-VALIDATE-ITEM

if ( :system.mode = 'NORMAL' ) then

fnd_flex.event( 'WHEN-VALIDATE-ITEM' ); end if; b)

WHEN-NEW-ITEM-INSTANCE

app_standard.event('WHEN-NEW-ITEM-INSTANCE'); fnd_flex.event('WHEN-NEW-ITEM-INSTANCE' ); c)

POST-QUERY

FND_FLEX.EVENT('POST-QUERY');

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:= ;

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信息

设置Item-level和Item-instance-level属性时需特别的注意,

Item-level属性影响所有的记录,而Item-instance-level属性只影响特定的记录(当前行)。

------------------------------------------------------------------------------------

使用APP_ITEM_PROPERTY.SET_VISUAL_ATTRIBUTE设置属性

--------------------------------------------------------------------------

使用app_item_property.get_property取得item的属性 Use APP_ITEM_PROPERTY.GET_PROPERTY to get Oracle Applicationsspecific properties – DISPLAYED – ENABLED – ENTERABLE

– ALTERABLE (item instance level) – ALTERABLE_PLUS (item level) – REQUIRED

? APP_ITEM_PROPERTY.GET_PROPERTY returns PROPERTY_ON or PROPERTY_OFF

Use GET_ITEM_PROPERTY for Most Oracle Forms Properties Use native Oracle Forms GET_ITEM_PROPERTY for native properties that return a number value or character string

----------------------------------------------------------------------

Call user profiles routines at form startup to determine profiles settings.

procedure FND_PROFILE.GET (name IN varchar2,value OUT varchar2); fotmatting 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(:ORDE

RS.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取得服务器端的时间环境

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: ? WHEN–VALIDATE–ITEM on the master field

? WHEN–VALIDATE–ITEM on the field(s) the condition is based on or in event INIT

on the dependent field ? PRE–RECORD

? POST–QUERY (required only when the dependent item is in a multi–record 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 items—they 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 Items—one 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:

– WHEN-VALIDATE-ITEM for each inclusive item

– PRE-RECORD on the items’ block (Fire in Enter-Query Mode: No)

4.APP_FIELD.SET_REQUIRED_FIELD

用途:Conditionally Mandatory items—use APP_FIELD.SET_REQUIRED_FIELD to

require certain items only if a certain condition is met.

--APP_FIELD.SET_REQUIRED_FIELD(EVENT,(CONDITION),’block.item’);

通常在以下的trigger中调用Dependencies控制逻辑:PRE-RECORD,

when-create-record,

when-validate-item,when-checkbox-changed, when-radio-changed,when-list-changed

和‘INIT’事件。PRE-RECORD和INIT是在操作数据前初始化这些逻辑,而其他是在item发生变化后验证这些逻辑,满足条件则进行后续的动作。 ------------------------------------------------------------------------------

使用APP_ITEM_PROPERTY.SET_PROPERTY代替SET_ITEM_PROPERTY设置item属性

APP_ITEM_PROPERTY.SET_PROPERTY modifies the following properties: ? DISPLAYED ? ENABLED ? ENTERABLE

? ALTERABLE (item instance level) ? ALTERABLE_PLUS (item level) ? REQUIRED 注意:

在APP_ITEM_PROPERTY.SET_PROPERTY使用 item id 或者 block.item_name 语法:

item_id := Find_item(’block_name.item_name’);

app_item_property.set_property(item_id,property_name,setting); 等同于

app_item_property.set_property(’block_name.item_name’,property_name,setting); Tab Related Code

Tab-related Variables 与Tab-related相关的变量 ? :SYSTEM.TAB_NEW_PAGE

– name of the tab page the user clicked on(取得用户点击后的tab 页)

? :SYSTEM.EVENT_CANVAS

– name of canvas that owns the newly-selected tab page(取得用户新点击的画布)

? :SYSTEM.TAB_PREVIOUS_PAGE

– name of the tab page that was topmost before the user clicked on the new one(取得在用户点击新的页面前的tab页)

Dynamically Changing Tabs

? Dynamically hide tabs only at form startup. – set_tab_page_property(...VISIBLE) ? Dynamically enabling/disabling tabs. – set_tab_page_property(...ENABLED...)

Tab-related Trigger ? WHEN-TAB-PAGE-CHANGED

– fires only when user clicks on a tab – cannot be fired programmatically – can only exist at the form level

target_canvas_name VARCHAR2(30) := :system.tab_new_page;--取得当前用户点击的tab页

curr_canvas_name VARCHAR2(30) :=

get_item_property(:system.cursor_item,item_canvas);--返回当前画布的名称

current_tab VARCHAR2(30) :=

get_canvas_property('TAB_LINES_REGIONS',topmost_tab_page);

--返回在tab画布上的顶层的tab页的名字

set_canvas_property('TAB_LINES_REGIONS', topmost_tab_page, curr_canvas_name); --将当前的画布设为可交换页顶层的tab

-------------------------------------------------------------- Window 与Region Behavior 编程:

WINDOW的控制:(使用app_window 包来取得标准的窗口控制动作) 1.打开windows

--修改PER-FORM触发器中调用第一个form

--修改app_custo.open_window中调用windows的名字,打开窗口 (用键盘切换当前Block或用button打开窗体时,需使用

APP_CUSTOM.OPEN_WINDOW函数,语法为APP_CUSTOM.OPEN_WINDOW(‘block_name’)

APP_CUSTOM.OPEN_WINDOW 中又会调用

app_window.set_window_position。如果是Master-Detail Block需要建立coordination关系的,在APP_CUSTOM.OPEN_WINDOW('LINES')时,调用APP_WINDOW.SET_COORDINATION) --对于每一个window而言,

--用app_window.set_coordination 来设置必要的关系( procedure APP_WINDOW.SET_COORDINATION(event

varchar2,coordination varchar2,relation_name varchar2); --其中event

The name of the trigger event (either

WHEN-CHECKBOX-CHANGED,WHEN-WINDOW-CLOSED, or OPEN-WINDOW) --coordination

IMMEDIATE or DEFERRED. Defaults to IMMEDIATE --relation_name

Name of the relation, which is listed in the Oracle Forms Designer under the Block object in the

Relation object)

--设置窗体的位子使用app_window.set_window_position(位子包括(CASCADE, RIGHT, BELOW, OVERLAP or CENTER).) --COORDINATION,重设 2.关闭windows

--与打开form相对,用APP_CUSTOM.CLOSE_WINDOW函数调用windows的名字关闭窗口

--对于每一个窗口,用app_window.set_coordination 来设置必要的关系

--当第一个窗口关闭时,使用APP_WINDOW.CLOSE_FIRST_WINDOW关闭form --避免关闭查询中的windows

--将光标从一个关闭的窗口移到前一个数据库上 --用hide_window隐藏制定窗口, 3.设置window title

--用app_windows.set_title来设置context-dependent 信息 --在PRE-RECORD中调用title

------------------------------------------------------------------------------------------------------------------- 当用键盘切换当前Block或用button打开窗体时,需使用APP_CUSTOM.OPEN_WINDOW函数 可以使用下面的procedure

PROCEDURE LINES(EVENT VARCHAR2) IS BEGIN

IF (EVENT IN ('WHEN-BUTTON-PRESSED', 'KEY-NXTBLK')) THEN APP_CUSTOM.OPEN_WINDOW('LINES'); ELSE

FND_MESSAGE.DEBUG('Invalid event passed to orders.lines: '|| EVENT); END IF; END LINES;

修改APP_CUSTOM.OPEN_WINDOW函数,打开windows的规则:

1.设置windows位置;用app_window.set_window_position('你要打开的界面','打开模式--CASCADE, RIGHT, BELOW, OVERLAP or CENTER','前一个页面')

2 重置master-detail 关系(如有需要的话);如果是Master-Detail Block,则需要建立coordination关系,

APP_WINDOW.SET_COORDINATION(event varchar2,coordination varchar2,relation_name varchar2);如

APP_WINDOW.SET_COORDINATION('OPEN-WINDOW'--触发事件(包括‘WHEN–CHECKBOX–CHANGED, WHEN–WINDOW–CLOSED, or

OPEN–WINDOW)’),:control.orders_lines--需要调用coordination的

数据块(IMMEDIATE or DEFERRED. Defaults to IMMEDIATE),'ORDERS_LINES'--主从关系的名字Name of the relation,); 3导航到window中的一个block。go_block('block') 4 必要时需要设置窗体属

性 SET_WINDOW_PROPERTY('LINES',VISIBLE,PROPERTY_TRUE); ----------------------------------------------------

对于APP_WINDOW.SET_COORDINATION的进一步理解:(用于主从关系中) This call sets the deferred coordination attribute of a relation to ON or

OFF based on the state of the coordination check box. The check box is

either ”DEFERRED” or ”IMMEDIATE.”For a closed window, the relation is always ”DEFERRED.”

When coordination is set to ”DEFERRED,” AutoQuery is turned on.

coordination check box选中与否决定其取值是‘IMMEDIATE’ 还是‘DEFERRED’。如果coordination check box选中的话, 即使焦点在Master window时,Detail window中数据会于Master window同步;如果coordination check box没有选中, Detail window的内容不会于Master window同步,直到焦点落在Detail window时,系统才会执行查询更新数据。 这个过程自己试验一下会非常的清楚。 使用coordination check box 必须在其WHEN-CHECKBOX-CHANGED trigger中重置Master-Detail windows的同步关系。 ------------------------------------------

设置上下文相关联的windows的标题:

动态设置相关联的窗体标题依靠APP_WINDOW.SET_TITLE函数,

注意在两类trigger中需要调用它。一类是Block-level的pre-record和on-insert trigger,

另一类是相关联字段的when-validate-item trigger

APP_WINDOW.SET_TITLE函数用法:

APP_WINDOW.SET_TITLE('ADJ_RECEIVE',PARAMETER.ORG_CODE); 其中ADJ_RECEIVE是window 的名字,用于设置window的title 常用item 事件包括:

when_validate_item : 调用一个item的验证并且设置动态的item 属性 when_new_record_unstance :重置item属性到默认状态给一个新的纪录。

init:测试当前条件,必要时重置默认属性和动态属性 对于‘INIT’的理解:

Examine current conditions and reset defaults and dynamic

attributes as necessary. Usually called by other handlers that

affect this item.

EBS中客户化表结构的设计原则:

1)必须包括一个主键,并建立相应的序列; 2)建立5个WHO字段,也就是

CREATED_BY NUMBER CREATION_DATE DATE LAST_UPDATED_BY NUMBER LAST_UPDATE_DATE DATE LAST_UPDATE_LOGIN NUMBER

在FORM中使用属性类:CREATION_OR_LAST_UPDATE_DATE,WHO字段并不会自动地被赋值,必须自己在FORM中编写代码来完成这项工作。 EBS中提供了一个函数FND_STANDARD.SET_WHO,大家只要在FORM的BLOCK级触发器PRE-INSERT/PRE-UPDATE中进行调用即可。 对于记录的PRE-INSERT,PRE-UPDATE Trigger中加入了fnd_standard.set_who后, 程序自动会对CREATE

_BY,CREATION_DATE,LAST_UPDATE_BY,LSAT_UPDATE_DATE,LAST_UPDATE_LOGIN这5个栏位赋新的值

--------------------------------------------------------------------------------------------------------- form 编程规则:

*引用字段时,使用 :BlockName.ItemName的形式;

*使用亚元直接用dual,不要用sys.dual和system.dual; *使用object IDs获得更好的性能; declare x_id item; begin

x_id := find_item(’block.item’); /* your code here */ end;

*总是使用显式游标;

*使用FND_MESSAGE程序显示信息

*使用FND_MESSAGE.DEBUG拉显示debugging信息, 典型用法: ELSE

fnd_message.debug(’Invalid event passed to control.orders_lines: ’ || EVENT); END IF;

*使用RAISE FORM_TIGGER_FAILURE来终止应用层的运行

*使用APP_EXCEPTION.RAISE_EXCEPTION 来终止数据库层的运行 *用fnd_fuction.execute代替open_form *不要使用CALL_FORM

*用do_key(‘exit_form’)代替exit_form To exit the Oracle Applications suite:

copy (’Y’, ’GLOBAL.APPCORE_EXIT_FLAG’); do_key(’exit_form’);

*用do_key(‘clear_form’)代替clear_form *用do_key('COMMIT_form')代替commit

*用do_key(‘edit_field’)代替EDIT_FIELD/EDIT_TEXTITEM

触发器编程规则

*Post-Query trigger说明:

.用带有LOVS的items使用lov来验证是否正确,当他们在无意识的情况下被要求保存changes会使用户感到混淆,

这种情况下,在你的post-query 触发器里面重置记录状态 :(设置当前块的属性为查询状态)

set_record_property(:system.trigger_record,:system.trigger_block, STATUS,QUERY_STATUS);

*必须设置为Before的trigger有WHEN-NEW-RECORD-INSTANCE, WHEN-NEW-BLOCK-INSTANCE,WHEN-NEW-ITEM-INSTANCE;

可以设置为Override的trigger有KEY-DUPREC,KEY-MENU,KEY-LISTVAL,QUERY_FIND, ACCEPT。 FND_Function 用法:

FND_Function.Execute 可使用 Procedure--过程

Executes the specified Form 指定的form

Only accessible from Client-side PL/SQL 可连接form的客户端的pl/sql

Should be used in place of Oracle Forms built-ins OPEN_FORM and NEW_FORM 应该在form级触发器OPEN_FORM与NEW_FORM Usage:--使用例子

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); fnd_message.set_name用法:

一般情况下在FORM中显示出错信息使用以下代码:

FND_MESSAGE.SET_NAME( APPL_SHORT_NAME,MESSAGE_NAME) ; FND_MESSAGE.ERROR ;

在PACKAGE中显示出错信息一般使用以下代码:

FND_MESSAGE.SET_NAME( APPL_SHORT_NAME,MESSAGE_NAME) ; APP_EXCEPTION.RAISE_EXCEPTION ;

例 fnd_message.set_name('FND','是否删除该记录?');

fnd_message.question 用法:

例 在删除某条记录之前提示是否删除该如何实现?即在删除某条记录之前提示用户是否删除,

如何用户选择删除则删除,如果选择否则不删除的实现? 1。首先新建Alter 'DELETE_ALERT',更改其属性button1为\为\

2。在Block level Trigger: key-delrec中增加如下代码即可: declare

return_value number; begin

set_alert_property('DELETE_ALERT',alert_message_text,'Are You Sure Delete This Record ?');

return_value := show_alert('DELETE_ALERT'); if return_value = alert_button1 then delete_record; end if; end;

1 关于f60gen不能編譯Form ,f60gen XXXX.fmb app/apps 時不能通過提示bash f60gen command not found 的解决方法: 答:

指定完整的f60gen的路径就可以了.

格式为:完整的f60gen的路径+编译的form文件,+用户名/密码 例如:/data1/porcli/porduct/806/bin/f60gen person.form apps/apps 其中,data1为安装EBS的目录

2如何查找指定完整的f60gen的路径? 答

可以通过find / -name 'f60gen*' -print查找路径 取安装EBS的目录 注意,查抄文件名用单引号 在根目录下查找

fnd_request.submit_request('AR',--应用模块的名称缩写,可以在System Administrator -> Application -> Register 里面查到

'SVAINEX_P',--应用程序的名称缩写 Application -> Concurrent -> Program '', '',

FALSE,--默认为 FALSE

:parameter.invoice_store,输入参数,需为字符型

chr(0), '','','',

'','','','','','','','','','','','','','','','','','','','',

'','','','','','','','','','','','','','','','','','','','',

'','','','','','','','','','','','','','','','','','','','',

'','','','','','','','','','','','','','','','','','','','',

'','','','','','','','','','','','','','',''); 1 关于f60gen不能編譯Form ,f60gen XXXX.fmb app/apps 時不能通過提示bash f60gen command not found 的解决方法: 答:

指定完整的f60gen的路径就可以了.

格式为:完整的f60gen的路径+编译的form文件,+用户名/密码 例如:/data1/porcli/porduct/806/bin/f60gen person.form apps/apps 其中,data1为安装EBS的目录

2如何查找指定完整的f60gen的路径? 答

可以通过find / -name 'f60gen*' -print查找路径 取安装EBS的目录 注意,查抄文件名用单引号 在根目录下查找

关于fnd_request.submit_request的用法:

FND_REQUEST.SUBMIT_REQUEST 函數是用來提交一個請求的,它返回一個NUMBER值.具體調用如下

:result := fnd_request.submit_request(application CHAR, --AP模快

program CHAR, --應用程式

description CHAR, --請求說明(可選)

start_time CHAR, --RUN 時間(可選)

sub_request BOOLEAN, --立刻提交請求

argument1 CHAR, --參數1

argument2 CHAR, --參數2

** Cursor for highest efficiency. */

OPEN lookup_area; FETCH lookup_area INTO :Employee.Area_Desc_Nondb; CLOSE lookup_area; END;

FORM如何在PLSQL中取出开始选定的组织ID

(1):首先在parameter中加上CHART_OF_ACCOUNTS_ID,ORG_NAME,ORG_CODE,ORG_ID四个参数 (2):在form level 的trigger中的pre_form中加上FND_ORG.CHOOSE_ORG; 显示ORG在Window Title上面

(3):在form level 的trigger中的when_new_form_instance中加上 APP_WINDOW.SET_TITLE('ADJ_RECEIVE',

ARAMETER.ORG_CODE);其中

ADJ_RECEIVE是window 的名字, 用于设置window的title

oracle 内置函数汇总

--------------------------------------------------------------------------------------------------------

ADD_LIST_ELEMENT :Adds a single element to a list item. 为一个列表项增加一个元素, Syntax

PROCEDURE ADD_LIST_ELEMENT (list_name VARCHAR2, list_index, NUMBER

list_label VARCHAR2, list_value NUMBER); PROCEDURE ADD_LIST_ELEMENT (list_id ITEM,

list_index VARCHAR2, list_label VARCHAR2, list_value NUMBER);

POPULATE_GROUP和POPULATE_LIST

group_id:=POPULATE_GROUP('VENDOR_RG');

POPULATE_LIST('QUERY_TEST.LIST_RECORD_GROUP','VENDOR_RG');

FND_MESSAGE

1 FND_MESSAGE.show 与 FND_MESSAGE.debug 效果相同,用于把信息以最基本的方式显示给用户。 2. FND_MESSAGE.hint

这种方式不会弹出对话框给用户,而是显示在左下脚的状态栏上面 3. FND_MESSAGE.error 以Error信息的方式显示给用户 4. FND_MESSAGE.warn

以选择信息的方式显示给用户,可以选择Ok或者Cancel,返回值分别是TRUE和FALSE

if FND_MESSAGE.warn then

fnd_message.debug('True'); else

fnd_message.debug('False'); end if;

执行效果如下:

点击OK会弹出 True 点击Cancel会弹出 False

5. FND_MESSAGE.question

function 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

调用: declare

v_result number; begin

APPS.XXFORM_ADIO_TEST_PKG.RETURN_MESSAGE; FND_MESSAGE.retrieve;

v_result:=FND_MESSAGE.QUESTION('Yes','No','Cancel',null,null,'Question');

fnd_message.debug(v_result); end;

本文来源:https://www.bwwdw.com/article/n34f.html

微信扫码分享

《oracle+二次开发-FORM篇.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档
下载全文
范文搜索
下载文档
Top