;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 INVOKING’);
BEFORE
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(: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取得服务器端的时间环境
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 NULL),
IS NOT
’block.dependent_item’);用于Multiple items may depend on a single master.
--APP_FIELD.SET_DEPENDENT_FIELD(EVENT,((:block.master_item1 NULL) AND
IS NOT
(: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',
curr_canvas_name); --将当前的画布设为可交换页顶层的tab
topmost_tab_page,
--------------------------------------------------------------
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,relation_name varchar2);如
varchar2,coordination
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为\"Yes\为\"No\"
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
argument3 CHAR, --參數3
argument4 CHAR, --參數4
argument5 CHAR, --參數5.......
argument100 CHAR);
英文說明(zt oracle) :
Parameters are as follows:
application - Short name of the application associated with the concurrent
request to be submitted.
program - Short name of the concurrent program (not the executable) for which
the request should be submitted.
description - Description of the request that is displayed in the Concurrent
Requests form (Optional.)
start_time - Time at which the request should start running, formatted as HH24:
MI or HH24:MI:SS (Optional.)
sub_request - Set to TRUE if the request is submitted from another request and
should be treated as a sub-request.
argument1...100 - Arguments for the concurrent request; up to 100
arguments are permitted. If submitted from Oracle Forms, you must specify all
100 arguments.
补充说明:
在用fnd_request.submit_request的时候,第五个参数用false,不要被参数名称误导;
这个函数有105个参数,前面五个定义请求本身,后面100个是传递给请求的具体参数,都是Char类型,
我们需要转换,默认值是chr(0),代表这个参数不用传递给调用的请求;
在Package里面调用只需要传递需要的参数个数,因为它有默认值指示结束;
在form里面则不行,要写满105个,而且我们参数结束之后要用一个chr(0)来表示结束
例
fnd_request.submit_request('AR',
'SVAINEX_P',
'',
'',
FALSE,
:parameter.invoice_store,
chr(0),
'','','',
'','','','','','','','','','','','','','','','','','','','',
'','','','','','','','','','','','','','','','','','','','',
'','','','','','','','','','','','','','','','','','','','',
'','','','','','','','','','','','','','','','','','','','',
'','','','','','','','','','','','','','','');
程式中如何设置才能在点MENU上的FIND的图标时调出FIND WINDOW?(客制的ORACLE FORM中)?
在相应的QUERY_FIND里写的,最后调用到app_find.query_find
OA 中的查询可以通过2 种方法来实现:
l LOV 查询
l QUERY-WINDOW查询。
LOV 查询的实现比较简单,且适合单一条件的查询;相比来说QUERY-WINDOW 查
询的实现较繁琐,但它可以实现复杂的查询。
LOV 查询的实现
使用LOV 查询,需要按照以下步骤实现:
l 创建PARAMETER,用于保存查询变量
l 创建LOV,其返回值赋予上面定义的参数
l 创建BLOCK 级的PRE-QUERY,将LOV 返回的值赋予BLOCK 中的对应字段
l 创建BLOCK 级的QUERY-FIND。添加如下代码:
APP_FIND.QUERY_FIND(’’) ;QUERY-WINDOW查询的实现
使用QUERY-WINDOW 查询,需要按照以下步骤实现:
l 从APPSTAND 中拷贝QUERY-FIND 对象组,其中包括WIINDOW,BLOCK, CANVAS
l 更改WINDOW, BLOCK, CANVAS 的名字
l 更改按钮“NEW”的TRIGGER,编写如下代码:app_find.new(<块名> )
l 更改按钮“FIND”的TRIGGER,编写如下代码:app_find.find(<块名> )
l 设置导航属性。设置查询窗口的前导块为查询目标块,但查询窗口不能作为任何块的前导块或后续块
l 编辑KEY–NXTBLK,使之功能同按钮“FIND”
l 设置查询窗口名
l 创建PRE-QUERY 代码,例如填写查询值,用APP_FIND.QUERY_RANGE设置查询范围等
l 创建QUERY-FIND 代码,其中代码如下:
APP_FIND.QUERY_FIND(’<块所在窗口名>’,’<查询窗口名>’,’<块名>’);
方法2
1要建一个查询的数据块 在这个数据块中,放置各个需要查询的数据项
然后,在FORM级的触发器QUERY_FIND中,屏蔽掉标准的代码,而写为:go_block('你的查询数据块名称');
这样,当用户点“手电筒”图标时,系统就会自动转到那个查询数据块的界面了。
2查询数据块应该单独放在一个画布中,并且单独放在一个WINDOWS中。
这样,就可以显示单独的查询窗口。
如果要实现\"当点击那个手电筒,出现我要查询的数据的windows,当我选中后,他会自动显示在另外一张windows\"
则要在查询数据块中放一个查询的按钮,在按钮中添加语句:go_block('要导向的结果数据块'); execute_query;
这样,用户输入好条件之后,点击“查询”按钮,就可以转到结果集窗口了。
两句一起写在按钮事件下。
在查询结果的数据块中,你可以在where条件那里直接引用查询数据块的各数据项的
数据,
写在where条件中结果集。
方法3
1要建一个查询的数据块 在这个数据块中,放置各个需要查询的数据项
然后,在FORM级的触发器QUERY_FIND中,屏蔽掉标准的代码,而写为如:
app_window.set_window_position('QUERY','CASCADE','MAIN' );--CASCADE',层叠的方式,就是把query窗口层叠在main之上
app_find.QUERY_FIND('MAIN','QUERY','QUERY');--APP_FIND.QUERY_FIND(’<块所在窗口名>’,’<查询窗口名>’,’<块名>’);
2查询数据块应该单独放在一个画布中,并且单独放在一个WINDOWS中。
则要在查询数据块中放一个查询的按钮,在按钮中添加语句:go_block('要导向的结果数据块');
execute_query;
这个函数在写一些触发器,函数的时候非常有用处。
用法:
SYS_CONTEXT的详细用法
select
SYS_CONTEXT('USERENV','TERMINAL') terminal,
SYS_CONTEXT('USERENV','LANGUAGE') language,
SYS_CONTEXT('USERENV','SESSIONID') sessionid,
SYS_CONTEXT('USERENV','INSTANCE') instance,
SYS_CONTEXT('USERENV','ENTRYID') entryid,
SYS_CONTEXT('USERENV','ISDBA') isdba,
SYS_CONTEXT('USERENV','NLS_TERRITORY') nls_territory,
SYS_CONTEXT('USERENV','NLS_CURRENCY') nls_currency,
SYS_CONTEXT('USERENV','NLS_CALENDAR') nls_calendar,
SYS_CONTEXT('USERENV','NLS_DATE_FORMAT') nls_date_format,
SYS_CONTEXT('USERENV','NLS_DATE_LANGUAGE') nls_date_language,
SYS_CONTEXT('USERENV','NLS_SORT') nls_sort,
SYS_CONTEXT('USERENV','CURRENT_USER') current_user,
SYS_CONTEXT('USERENV','CURRENT_USERID') current_userid,
SYS_CONTEXT('USERENV','SESSION_USER') session_user,
SYS_CONTEXT('USERENV','SESSION_USERID') session_userid,
SYS_CONTEXT('USERENV','PROXY_USER') proxy_user,
SYS_CONTEXT('USERENV','PROXY_USERID') proxy_userid,
SYS_CONTEXT('USERENV','DB_DOMAIN') db_domain,
SYS_CONTEXT('USERENV','DB_NAME') db_name,
SYS_CONTEXT('USERENV','HOST') host,
SYS_CONTEXT('USERENV','OS_USER') os_user,
SYS_CONTEXT('USERENV','EXTERNAL_NAME') external_name,
SYS_CONTEXT('USERENV','IP_ADDRESS') ip_address,
SYS_CONTEXT('USERENV','NETWORK_PROTOCOL') network_protocol,
SYS_CONTEXT('USERENV','BG_JOB_ID') bg_job_id,
SYS_CONTEXT('USERENV','FG_JOB_ID') fg_job_id,
SYS_CONTEXT('USERENV','AUTHENTICATION_TYPE') authentication_type,
SYS_CONTEXT('USERENV','AUTHENTICATION_DATA') authentication_data
from dual
关于POST_QUERY的使用说明:
作用:
When a query is open in the block, the Post-Query trigger fires each time Form Builder
fetches a record into a block.
The trigger fires once for each record placed on the block's list of records.
Legal Commands
SELECT statements, unrestricted built-ins
Use a Post-Query trigger to perform the following tasks:
1,populate control items or items in other blocks
2,calculate statistics about the records retrieved by a query
3,calculate a running total
说明,post_query触发器 多数与不基于表的项相结合使用,将数据库中信息存放到不基于表的项中,
post_query至少包含一个游标,
例:
DECLARE
CURSOR lookup_payplan IS
SELECT Payplan_Desc
FROM Payplan
WHERE Payplan_Id = :Employee.Payplan_Id;
CURSOR lookup_area IS
SELECT Area_Name
FROM Zip_Code
WHERE Zip = :Employee.Zip;
BEGIN
/*
** Lookup the Payment Plan Description given the
** Payplan_Id in the Employee Record just fetched.
** Use Explicit Cursor for highest efficiency.
*/
OPEN lookup_payplan;
FETCH lookup_payplan INTO :Employee.Payplan_Desc_Nondb;
CLOSE lookup_payplan;
/*
** Lookup Area Descript given the Zipcode in
** the Employee Record just fetched. Use Explicit
** 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;