`

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, 什么办法可以控制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设置Item-level和Item-instance-level属性时需特别的注意,
Item-level属性影响所有的记录,而Item-instance-level属性只影响特定的记录(当前行)。
11   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取得服务器端的时间环境
4 . 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.
5.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
6.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)
7.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);
8. 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
9.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',ARAMETER.ORG_CODE);
其中ADJ_RECEIVE是window 的名字,用于设置window的title
4.常用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.
5. 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个栏位赋新的值
6.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。
7.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);
8.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",button2为"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;
9.提交请示
关于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),     '','','',
'','','','','','','','','','','','','','','','','','','','',
'','','','','','','','','','','','','','','','','','','','',
'','','','','','','','','','','','','','','','','','','','',
'','','','','','','','','','','','','','','','','','','','',
'','','','','','','','','','','','','','','');

10. 程式中如何设置才能在点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(’<LOV Name>’) ;
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;

 

 

分享到:
评论

相关推荐

    oralce ebs form 开发教程

    二、Oracle EBS Form开发环境 1. Forms Builder:这是Oracle提供的图形化开发工具,用于设计和编写Forms。你可以通过拖放控件、设置属性、编写逻辑代码来创建Form。 2. PL/SQL:Forms的业务逻辑主要由PL/SQL编写,这...

    ORACLE ebs FORM开发中form个性化处理

    在Oracle E-Business Suite (EBS) 中,Form开发是一个核心部分,用于构建企业级的业务应用程序。在实际应用中,往往需要根据不同用户或部门的需求进行定制化,以提高工作效率和用户体验。"ORACLE ebs FORM开发中form...

    Oracle Form开发基础知识

    适用于ORACLE EBS FORM技术开发初学者,入门级开发技术文档。

    Oracle EBS Form开发

    ### Oracle EBS Form开发知识点详解 #### 一、FormBuilder的简介 FormBuilder是Oracle E-Business Suite (EBS)中用于创建用户界面的一种工具,主要用于构建与数据库交互的前端表单应用程序。它允许开发者使用图形...

    Oracle Form 开发基础

    ### Oracle Form 开发基础知识点详解 #### 一、Oracle Form 开发环境搭建 ...通过上述详细步骤与注意事项,开发者能够顺利搭建Oracle Form开发环境,掌握基础开发流程,有效提升Oracle EBS Form的开发效率与质量。

    Oracle Form开发常用技巧

    适用于ORACLE EBS FORM开发深入技巧,有利于深入了解FORM开发技术。

    ORACLE EBS FORM开发

    ORACLE EBS FORM开发是一种基于Oracle E-Business Suite(EBS)的FORM开发技术,用于构建企业级应用程序。本文档将详细介绍Oracle EBS FORM的基本开发技能,包括画布、公式、小技巧等。 一、基本上传步骤 在开始...

    FORM开发的基本步骤

    在本文中,我们将详细讨论FORM开发的基本步骤,以及相关的工具和技术。 首先,FORM开发的框架由前端开发工具、应用服务器(APPLICATION(FORM)SERVER)和数据库服务器组成。前端开发工具包括FORM BUILDER、REPORT ...

    .net FORM插件开发

    在.NET Framework中,插件开发是一种常见的技术,它允许开发者创建可扩展的应用程序,这些应用程序能够根据需要加载和卸载功能模块。在".NET FORM插件开发"的场景中,我们主要探讨的是如何在Windows Forms应用程序中...

    eclipse插件开发form编辑器

    ### Eclipse插件开发Form编辑器的关键知识点 #### 一、Eclipse Forms简介 Eclipse Forms是一种用于创建丰富客户端界面的技术,它可以让你的应用程序在不使用Web浏览器的情况下展现出类似Web的效果。这种技术允许...

    Oracle EBS Form开发小技巧汇总

    Oracle EBS Form 开发涉及到许多复杂的技术和策略,这些技巧可以帮助开发者提高效率并优化用户体验。以下是一些关键知识点的详细说明: 1. **Form 中的 Block 重新查询**: 当用户更改了某个字段的值时,可能需要...

    Oracle Form 开发

    本文将详细介绍Oracle EBS Form开发的相关知识,包括其主要功能、开发步骤以及如何进行Menu开发等内容。 #### 二、系统规格及软件安装 ##### 1. Oracle Client 安装 目前常用的Oracle客户端版本为9iClient,安装...

    EBSForm个性化详解及开发实例word原版.doc

    在本文档中,我们将详细介绍 EBS Form 个性化的基础知识、开发实例和相关技术细节。 1. 个性化基础 EBS Form 个性化的基础是 Form 自己的元数据,包括 Form 的结构、字段、按钮、表单等元素。通过自定义这些元素,...

    ORACLE EBS APS_FORM_库存组织选择LOV实现

    这涉及到APS_FORM相关的技术实现细节。 #### 描述解析 描述部分与标题内容一致,再次强调了文章的主题——“ORACLE EBS APS_FORM_库存组织选择LOV实现”。这表明文章将深入探讨如何在Oracle EBS中利用APS_FORM实现...

    Oracle Form开发介绍详细文档

    Oracle Form开发是构建企业级应用的重要组成部分,尤其在金融、制造业等行业的信息系统中广泛应用。Oracle Form基于Oracle Forms Services,提供了一种图形化界面来创建、修改和管理数据库交互的业务应用。以下是对...

    SQL * FORM与软件开发的研究.pdf

    SQL*FORM的特点是采用原型法为开发方法,使用软件自动生成技术、重用技术、面向对象技术、动态定义技术等现代计算机软件发展的高新技术。 SQL*FORM的重要性在于它可以帮助开发者快速生成应用软件,减少编程人员的...

    C# Form程序地图开发

    在C# Form程序中开发地图功能,主要是利用WebBrowser控件来嵌入地图服务,例如百度地图API。本文将深入探讨这一技术,并提供详细的步骤和关键知识点。 首先,C# Form是.NET Framework中的Windows应用程序开发界面,...

    Form2调用Form1控件的解决方案

    ### Form2调用Form1控件的解决方案 #### 背景与问题描述 在Windows Forms应用程序开发过程中,经常会遇到需要在不同的窗体之间进行交互的情况。...不过,在实际开发中还需要根据具体需求选择最适合的技术方案。

    Form开发小技巧.pdf

    以上所述只是Oracle EBS Form开发的一些基本技巧,实际开发中可能需要根据业务需求进行更复杂的定制和优化。熟悉并掌握这些技巧能帮助开发者更高效地构建和维护Form应用。在实践中不断探索和学习,可以进一步提升...

Global site tag (gtag.js) - Google Analytics