Form. 相关技巧

来源:互联网 发布:网络优化怎么做 编辑:程序博客网 时间:2024/04/27 04:41

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

在form级的触发器when-new-form-instance中,
l N7OQM0写如下代码:ITPUB个人空间S9Q[+yz,lx }
go_block('XXXX');
){ j%@7a3YC*aT0execute_query;
W,Aa A5s"h7RK0要查询的数据块的名称

说明:ITPUB个人空间/gm%z+z1[C:W f
当使用基于表建立的块时,可使用块里的任何项的GO_BLOCK或者GO_ITEM找到那个块
Er3Z3Q l(AY0当查询数据到一个块里去,可通过execute_query进行处理

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

 

2, 什么办法可以控制form中File菜单中的Export吗?使其失效ITPUB个人空间1d4|#N2k8o?*A-Kf
答:
L"F i(}| EL&R0在FORM中,在FORM级的触发器EXPORT中,
"I s/a_ g ]9A5JYH0将其中的代码app_standard.event('EXPORT');屏蔽掉,改为null;试一试

3当form. 启动时,在pre-form触发器中instantiate你特定的菜单items
$o6DF8EM5v*n0调用 app_special.instantiate包
!A)y'ZQX @%Nt0procedure APP_SPECIAL.INSTANTIATE(ITPUB个人空间"B*fgcE _Nf3m
option_name varchar2, --定义tigger 名字ITPUB个人空间Lx8m_0X6Hb
hint varchar2 default null,--定义菜单实体的名字,使用&来定义菜单实体的键盘快捷键ITPUB个人空间Pu_(^l'rB4oY
icon varchar2 default null,--
}kz FQ"r&EOt-yr0initially_enabledboolean default true,
V-p+dS.U0D0separator varchar2 default null);--定义'LINE'为separatorITPUB个人空间z&`aO0{4YL:m
例子ITPUB个人空间8ic0S U+e4m)D}1~7wY
app_special.instantiate(’SPECIAL1’,’&rint Order’,’PRINTORD’);

ITPUB个人空间:s,n s6sD*~T3V
4, 在tool 菜单中的check boxes
`$g0RD[C0--option_name 与trigger_name 包括关键字CHECKBOX(例如:SPECIAL3_CHECKBOX)
FgE!Q5~J3]$r6C"w0app_special.instantiate(’SPECIAL3_CHECKBOX’,’Spe&cial 3 Box w Line’, ’’,TRUE,’LINE’);

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

--在SPECIALn_CHECKBOX函数中和相应的逻辑代码中测试check box
wgLf9l$PH0app_special.get_checkboxITPUB个人空间6}3elAtsJ |,h
if (app_special.get_checkbox(’SPECIAL3_CHECKBOX’)=’TRUE’) thenITPUB个人空间2Jjz(OkjO)Lx z;N%T
fnd_message.debug(’Special 3 is True!’);
WdvU)l&P-G9r5I7Wv0else
4s+h8g[m]Q8rt0fnd_message.debug(’Special 3 is False!’);ITPUB个人空间KsV1S^8wF0[
end if;

5, 在你在pre-form. 中instantiate实体, 随意将指定的菜单实体设置为可用或不可用(基于数据块),ITPUB个人空间 A`*Y-LHg{
调用APP_SPECIAL.ENABLE
.j5fi4_:|8YU$p0procedure APP_SPECIAL.ENABLE(option_name varchar2,
.N;X/X m%]Eg0state);
)J-uZBT0在form-level 中的pre-block trigger里面,将你的special 菜单的item 定义为disable
3S7pjXH/~$B0app_special.enable(’SPECIAL1’,PROPERTY_OFF);
i5j.yP7X^2N.Zz;o0在form-level 中的pre-block trigger里面,将你的special 菜单的item 定义为ableITPUB个人空间,W"X2Uaj}
app_special.enable(’SPECIAL1’,PROPERTY_on);
O+p%}K z0将所有的special 菜单设置为 disable
FJ]1Z{)B0app_special.enable(’SPECIAL’,PROPERTY_OFF);

6, 编辑鼠标右键菜单
eQ_RO;H$]D+Y u*op0调用APP_POPUP.INSTANTIATE(block或者item层的PRE-POPUPMENU Trigger)ITPUB个人空间w Dw-N c'G
procedure APP_POPUP.INSTANTIATE(ITPUB个人空间9m yK].GcO
option_name varchar2,ITPUB个人空间+IVN+ou/{%`YlG
txt varchar2,
S{t"I-wA0initially_enabled boolean default true,ITPUB个人空间4y5w@YV?m9`d4`
separator varchar2 default null);
C*]/!QrR0与app_special.instantiate类似
:{5N8Ua7p;Hm }x"o#Ul0例如:ITPUB个人空间 n;g/m2O7m-C
APP_POPUP.INSTANTIATE('POPUP1','First Entry');

7, 关于 Implementing Zoom Use the Custom Library的学习
hd]#|3G/PLda+u01. .pll文件可以用form. builder 打开,修改,创建
[,@4L-R8X,L02. .pll文件的编译方法:
0Pjc9sm+{ N0f60gen module=CUTOM.PLL userid=apps/apps module_type=LIBRARY
[#gib3Kk(e:x03. 当系统不自动激活菜单上的图标时,可以在数据块的 block-level 的 when-new-block-instance trigger中ITPUB个人空间*wu$I)Xa8D5nR
添加如下代码:ITPUB个人空间$_(s;E+`7Ery
以zoom为例子:set_menu_item_property('VIEW.ZOOM',ENABLED,PROPERTY_TURE)
%tY`aR-X$wK G/`,Qr0在form-level 的相应的trigger(比如zoom trigger)中改写下列代码:
/g)O;x w,~;m0custom.event('ZOOM')
jPzDk Q04. fnd_function.exrcute语法:ITPUB个人空间2}6[ K3f(v[:n
procedure FND_FUNCTION.EXECUTE
njW1c;^K*^ G0(function_name IN varchar2,
(~p l b-dYz*Tm(/0open_flag IN varchar2 default ’Y’,
f9kriJj[0session_flag IN varchar2 default ’SESSION’,ITPUB个人空间'a|?:/ ? U.R
other_params IN varchar2 default NULL,
O1F.z8C a0activate IN varchar2 default ’ACTIVATE’,
w ofp!?4{3L/F2Ez0browser_target IN varchar2 default NULL);ITPUB个人空间V6E |z%G;G
5.FND_FUNCTION.TEST(function_name IN varchar2)
SFlT ^8X(/0测试指定的函数是否可以连接,该函数用于form. 启动时测试函数的可用性,

ITPUB个人空间kG(vD8b
8, 弹性域(Flexfields)的总结:

使用 FND_KEY_FLEX.DEFINE 在item handler 中设定key弹性域的定义ITPUB个人空间l jy,gO4DK|
procedure flexfield_item_name(event varchar2)
o0_tz@1_0is
X!} t-d2S K[S0beginITPUB个人空间8r0j8Pb[;n9wPx)R
fnd_key_flex.define(
t pg(/ } kc0block=>'block_name',ITPUB个人空间)O;P8W/'P4K
field=>'concatenated_segements_field_name',ITPUB个人空间Z-J4hKSM)e6?
id=>'ccid_field_name',ITPUB个人空间ae*qn5| V7P!m4}&jRQ
appl_short_name=>'shortname_of_application_used_to_register_flexfield',ITPUB个人空间;VjB(}t~
code=>'flexfield_code',
?c)yN3L0NUM=>'structure_number',
gP!i~5R+jNFL6V ~&r0any_other_auguments);
'HL+b0t1rs,SL0)

例:
Rq)U9U Xe0FND_KEY_FLEX.DEFINE(
D;K:b6V/W+OG|0BLOCK=>’LINES’,ITPUB个人空间2/}0r x8kf$pt%g
FIELD=>’ACCTG_FLEX_VALUES’,ITPUB个人空间@r/X5` r5r[
ID=>’GL_ACCOUNT_CC_ID’,--Your ID field is the GL_ACCOUNT_CC_ID item
naj[ Wq's0H0APPL_SHORT_NAME=>’SQLGL’,
;z0pX`w0CODE=>’GL#’,
L%d^3?TE0NUM=>’101’--可以使用GL_SET_OF_BOOKS_ID 作为structure idITPUB个人空间 a?[T"co4ec_
);
n%y,O+o3W x"p$J7h0----------------------------------------------------------------------------------ITPUB个人空间J&tm+Y$gd
使用FND_DESCR_FLEX.DEFINE 在item handler 中设定描述性弹性域的定义ITPUB个人空间/F F]J Y5H+U6L
定义ITPUB个人空间5p1h x1Pu2?Z,t.TE!u
FND_DESCR_FLEX.DEFINE(ITPUB个人空间#T1fZ_H
BLOCK=>'BLOCK_NAME',ITPUB个人空间`f,/6`#q
FIELD=>'DISPLAYED_FLEXFIELD_FIELD_NAME',ITPUB个人空间H-/;{lZW
APPL_SHORT_NAME=>'SHORTNAME_OF_APPLICATION_USED_TO_REGISTER_FLEXFIELD',ITPUB个人空间|VZ8W6K"P2m*g
DESC_FLEX_NAME=>'FLEXFIELD_NAME',ITPUB个人空间*~JzTy b(X
ANY_OTHER_ARGUMNTS);ITPUB个人空间MjyT9^&?+{6b
ITPUB个人空间-kq3y7NkM uR*P
FND_DESCR_FLEX.DEFINE(
-~4X@;f6?/{B(A0BLOCK=>’ORDERS’,ITPUB个人空间s.gcJ4UrF
FIELD=>’DESC_FLEX’,
:rs)Ss'Q%`%w o0APPL_SHORT_NAME=>’DEM’,
$t)A%/uf6k B0DESC_FLEX_NAME=>’DEM_ORDERS’);

)


h@DaN7F+^09, COPY 命令ITPUB个人空间,kl5t J7W3}no
Copies a value from one item or variable into another item or global variable.
/kZ qw!FR`7J0i0SyntaxITPUB个人空间`-N$V3ADg
PROCEDURE COPY(source VARCHAR2, destination VARCHAR2)

Parameters
h"Fe-{$p)P$x/Ld0source: The source is a literal value.

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

例:
/XIlK0s0COPY( 'Yes', 'GLOBAL.'||global_var_name );
^+_-S!rZ5Hf&D0将‘YES’付值给 变量global_var_name

ITPUB个人空间5j8`$Vm"ISs:B IM
10, message 用法总结:

1.设置信息:
lN6N7A,` i9cC0--FND_MESSAGE.SET_NAME 语法:
;R0[+Hh8Y@0procedure FND_MESSAGE.SET_NAME(application_shortnameIN varchar2,message_name IN varchar2);
Bbg$d?Sa$v-V0作用:
nM?%zx1SL.gq0从Message Dictionary获取一条信息
;F#N/5~q3alG:o}0一般情况下在FORM中显示出错信息使用以下代码:ITPUB个人空间){?D B j8y
FND_MESSAGE.SET_NAME( APPL_SHORT_NAME,MESSAGE_NAME) ;ITPUB个人空间nZd'?k_VM)Ua
FND_MESSAGE.ERROR ;

--FND_MESSAGE.RETRIEVE
_.GUb9E0L0作用:
~L+u%|ET-u)v0取得一条数据库中的等待信息
&qoXqU0--FND_MESSAGE.SET_STRING (value IN varchar2)
$~:C @D7R,z {s0@'B2t0作用:
q#N5M RL Z/`P0将字符串放到消息栈中,

--FND_MESSAGE.SET_TOKEN
1g8|?*EB Is q vk0作用:用值替换message的信息中的变量ITPUB个人空间7a!E l5t8T^+FP6q
语法:ITPUB个人空间5Q,s*`(P!fU?
procedure FND_MESSAGE.SET_TOKEN(token_name IN VARCHAR2,value IN VARCHAR2ITPUB个人空间*N)x6J,DY+QTv5L1R
translate IN boolean default FALSE);

--在form用于显示信息的函数
*VIGl0c L w01.FND_MESSAGE.ERROR
;_$xG6h"L02.FND_MESSAGE.WARNITPUB个人空间y1uy*Xp,c0a%g7I
例子
1yH2U(OP^0Example:ITPUB个人空间 d*z3b"z6E Z/sze
FND_MESSAGE.SET_NAME(’SQLAP’,’AP_PAY_MULTI_PAY_VOID’);
;V T0sO c }HNm#j0REC_COUNT:= <NUMBER OF PAYMENTS>;
db jX@;a9@ lB0FND_MESSAGE.SET_TOKEN(’NUM_OF_RECS’,REC_COUNT);
3HR5MG!rlB0IF (NOT FND_MESSAGE.WARN) THEN
c!uJ)C U(d:K0Raise FORM_TRIGGER_FAILURE;
#TSUSOy/ag0END IF;

3.FND_MESSAGE.QUESTIONITPUB个人空间zhxt?7x L} q
语法:ITPUB个人空间R y#]&K fdC
FND_MESSAGE.QUESTION(
v7IdUdufW0button1 IN varchar2 default ‘YES’,
1_,E&_Oe~(a3}+ngo0button2 IN varchar2 default ‘NO’,ITPUB个人空间sx~X*h5hPrs
button3 IN varchar2 default ‘CANCEL’;ITPUB个人空间 }'c D4k6//x%S
default_btn IN number default 1,
D9w"sIFcH0cancel_btn IN number default 3,
R+[y4U3Dw5g$vG0icon IN varchar2 default ‘question’) return number;ITPUB个人空间(~NxN-p1N_#Y
说明:
7`)yF$/5})nOx%~0FND_MESSAGE.QUESTION 返回一个被选中的button的number
4O@X~M7i&I0Example:ITPUB个人空间8Y_lNp:{dR!t
FND_MESSAGE.SET_NAME(’FND’,’ATCHMT-COMMIT BEFORE INVOKING’);
$l#M;pz'I7Ih#DS0IF FND_MESSAGE.QUESTION
5FI%J4Oxf Bu0(’YES’,’CANCEL’,NULL,1,2,NULL) = 2 THENITPUB个人空间-/MQ}K+j'O
RAISE FORM_TRIGGER_FAILURE;
Qs+xoJ'yU `0END IF;
`@A!L7ZaF*H#/04.FND_MESSAGE.SHOW
E2/Q1?}Y ki0作用:显示信息
dUa;k;m!m'V05.FND_MESSAGE.DEBUGITPUB个人空间Oy,J~+gM
6.FND_MESSAGE.GET
%_q Ur.K_ q6~T0作用:
mo4Q~ W1K)V AAJ0取得在message中设置好的message信息

ITPUB个人空间xu4k1m.y
11 设置Item-level和Item-instance-level属性时需特别的注意,
-g9Ms!Z S0Item-level属性影响所有的记录,而Item-instance-level属性只影响特定的记录(当前行)。

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

FND_CURRENCY:The Dynamic Currency feature allows different values in arbitrary currencies to be displayed in
p [y0RF#wYc0the same report or form, each shown with appropriate formatting.
|,v;EkqYc4t?0FND_CURRENCY.GET_FORMAT_MASK(:ORDERS.CURRENCY_CODE,GET_ITEM_PROPERTY('LINES.PRICE',MAX_LENGTH));ITPUB个人空间0lDd v6m? ^-F(F
1.取得需对应的货币
a"if7Q] b(E_}0其中:GET_ITEM_PROPERTY('LINES.PRICE',MAX_LENGTH)为返回一个该item的最大长度,ITPUB个人空间 @8K5}/^!Q_e
FND_CURRENCY.GET_FORMAT_MASK(currency_code IN varchar2,field_length IN number)return varchar2;

 

2.格式化(需要的话进行汇率转换)item的货币类型
A qj Qc,{+~9^3R m0APP_ITEM_PROPERTY.SET_PROPERTY('LINES.PRICE',FORMAT_MASK,
R Z$hb j^0FND_CURRENCY.GET_FORMAT_MASK(:ORDERS.CURRENCY_CODE,
:M2Jx$^ Y2n!^+Jd5h N0GET_ITEM_PROPERTY('LINES.PRICE',MAX_LENGTH) ))
W:vr#V2HL03.动态控制item的显示格式的触发范围
z%W9y5u%taT2` Sd0在Block-level的Post-query trigger和Item-level的 when-validate-item trigger调用handler,控制显示格式。


eqU1~ W6T3}x0CALENDAR 日历ITPUB个人空间#_-OnzU0Y
如何实现在form中弹出calendar并返回所选日期的功能?
*fX-@R1G)`01.设text item为日期型, LOV属性为:ENABLE_LIST_LAMP并且Validate from List LOV—>No
X"Yf8])~~ _&t02.在该text item 的KE_LISTVAL下加入如下代码:calendar.show;
*m'`l;l z0x+`Gb0N0trigger属性Execution Hierarchy—>Override,fire in enter-query mode—>No。

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

13 , Dependencies item的编程ITPUB个人空间2r*h&f}AG
语法:ITPUB个人空间Y,UNWT@O
1.APP_FIELD.SET_DEPENDENT_FIELD(EVENT,:block.master_item = CONDITION,
mm!]1~e1Y a j0‘block.dependent_item’);
nJt7_(gK!c!?0用途:A conditionally-dependent item changes validation when the value in the master
lpG@ N0item changes. Specify the condition rather than the master item name.

This procedure makes an item enterable or not enterable based on whether the master itemITPUB个人空间2ck7e3lV
is NULL or a specified condition is TRUE, and clears the field. The dependent item can beITPUB个人空间 D;D(y9kF+Qv#W-f
a text item, check box, or poplist.
Hg5Q,f$W*D0You typically call this procedure in the following triggers:
&H,`J H%p6K0? WHEN–VALIDATE–ITEM on the master field
9` gO oZq)Y G|)Y0? WHEN–VALIDATE–ITEM on the field(s) the condition is based on or in event INITITPUB个人空间:{`;]W@Hw
on the dependent field
/6q:o?&R-tIS]0? PRE–RECORDITPUB个人空间P)M$T*K!Jy#G
? POST–QUERY (required only when the dependent item is in aITPUB个人空间b)dAaU#E/
multi–record block)

:block.master_item = CONDITION包括:
C(UX"O$g*N G*u$g0--APP_FIELD.SET_DEPENDENT_FIELD(EVENT,(:block.master_item IS NOT NULL),
!BTF'nUd(wX1vrl d0’block.dependent_item’);用于Multiple items may depend on a single master.

--APP_FIELD.SET_DEPENDENT_FIELD(EVENT,((:block.master_item1 IS NOT NULL) ANDITPUB个人空间#E2u/bcL e6x
(:block.master_item2 IS NOT NULL)),’block.dependent_item’);ITPUB个人空间g-q9{p CT
用于Two master items may share a dependent item.

--APP_FIELD.SET_DEPENDENT_FIELD(EVENT,’block.master_item,’block.dependent_item’);
y2RS/S:{&O`0用于Cascading dependence - an item can be both master and dependent.

2.APP_FIELD.SET_EXCLUSIVE_FIELDITPUB个人空间 Qy5S]5V
用途Mutually exclusive items—they look like two items, but behave as one. UseITPUB个人空间Z| X#x$b q:^"b5D)oa
APP_FIELD.SET_EXCLUSIVE_FIELD to code.
]_2fx4I,UU0--APP_FIELD.SET_EXCLUSIVE_FIELD(EVENT,’block.item1’,’block.item2’,’block.item3’);ITPUB个人空间&o%y3rck
Call item handler procedures in:
b0i/E+b1z,Y]0– WHEN-VALIDATE-ITEM for each exclusive itemITPUB个人空间no'Z!@NY;~AF
– PRE-RECORD on the items’ block (Fire in Enter-Query Mode: No)
W0pjzw0– WHEN-CREATE-RECORD on the items’ block

3.APP_FIELD.SET_INCLUSIVE_FIELD
g)@iD0vCEz0用途Mutually Inclusive Items—one for all and all for one!
4l&`v cL e+w)A:|0Use APP_FIELD.SET_INCLUSIVE_FIELD to code a set of items where, if any
TF6F d-/-xZ-]0of the items is not null, all items are required.

--APP_FIELD.SET_INCLUSIVE_FIELD(EVENT,’block.item1’,’block.item2’);
-}&Z+s|g m-U0? Call item handler procedures in:
r&]x0GYz%l Q0– WHEN-VALIDATE-ITEM for each inclusive itemITPUB个人空间4c:I`-xEd6a.H2yi;D3l
– PRE-RECORD on the items’ block (Fire in Enter-Query Mode: No)

4.APP_FIELD.SET_REQUIRED_FIELDITPUB个人空间5`hmY h pu9|p_
用途:Conditionally Mandatory items—use APP_FIELD.SET_REQUIRED_FIELD to
*zYSa`|Nj4D0require certain items only if a certain condition is met.

--APP_FIELD.SET_REQUIRED_FIELD(EVENT,(CONDITION),’block.item’);ITPUB个人空间!U@O V]|-V u.L
通常在以下的trigger中调用Dependencies控制逻辑:PRE-RECORD,when-create-record,ITPUB个人空间 Yw;l k}@.r*U
when-validate-item,when-checkbox-changed, when-radio-changed,when-list-changed
9TZ!|)GZi2?0和‘INIT’事件。PRE-RECORD和INIT是在操作数据前初始化这些逻辑,而其他是在item发生变化后验证这些逻辑,满足条件则进行后续的动作。ITPUB个人空间QL5Xa3v1eE*R
------------------------------------------------------------------------------ITPUB个人空间p.D#[d J~
使用APP_ITEM_PROPERTY.SET_PROPERTY代替SET_ITEM_PROPERTY设置item属性

APP_ITEM_PROPERTY.SET_PROPERTY modifies the following properties:ITPUB个人空间l*L'D3/%i)v^
? DISPLAYED
t Q;}w J%LVi XW!D0? ENABLED
B!Xy|7Q;e8e%X%I:M*S N0? ENTERABLEITPUB个人空间-z.r2],Pq%K"[
? ALTERABLE (item instance level)ITPUB个人空间c u"ny,F3D7d
? ALTERABLE_PLUS (item level)ITPUB个人空间 P.[mB h6[
? REQUIRED
f)npV o@x(_IkX0注意:
g.IV.} l3I.K$Z,Y;s)L0在APP_ITEM_PROPERTY.SET_PROPERTY使用 item id 或者 block.item_name
RzVA4?jZz0语法:ITPUB个人空间t NR,uI%y~#J
item_id := Find_item(’block_name.item_name’);ITPUB个人空间$C#Y!B DGc x.V1F)R
app_item_property.set_property(item_id,property_name,setting);ITPUB个人空间Z G'xlA7xmaG
等同于ITPUB个人空间 v M2RRc r1`
app_item_property.set_property(’block_name.item_name’,property_name,setting);

 

14 , Tab Related Code
6]Z;EZ(FWz:Y0Tab-related Variables 与Tab-related相关的变量
8v^ V)kq$uf0? :SYSTEM.TAB_NEW_PAGEITPUB个人空间7|gL#zi#i(x#jL
– name of the tab page the user clicked on(取得用户点击后的tab 页)ITPUB个人空间#GY l'A6rd Brf
? :SYSTEM.EVENT_CANVAS
`$a/M*hIP/Ul"M0– name of canvas that owns the newly-selected tab page(取得用户新点击的画布)
L Ye({bL0? :SYSTEM.TAB_PREVIOUS_PAGE
t(^ [s m!m*{lI;Sh0– name of the tab page that was topmost before the user
f"~ V]/CQ]H0clicked on the new one(取得在用户点击新的页面前的tab页)

Dynamically Changing TabsITPUB个人空间/F7V I-u:om!{ d&M
? Dynamically hide tabs only at form. startup.
:k Ck@#CUi]2J0– set_tab_page_property(...VISIBLE)
,ae vY.Q0? Dynamically enabling/disabling tabs.
"rh(m&G+?!?B0– set_tab_page_property(...ENABLED...)

Tab-related Trigger
x5a9R3BiY6z0? WHEN-TAB-PAGE-CHANGEDITPUB个人空间6@M:a(|3C}'W
– fires only when user clicks on a tabITPUB个人空间R{V7R$HP
– cannot be fired programmatically
r4z-fEAD.V R0– can only exist at the form. level


?jS*Y4N9F'p%p0target_canvas_name VARCHAR2(30) := :system.tab_new_page;--取得当前用户点击的tab页ITPUB个人空间Kl/~ v8_ZD]nW
curr_canvas_name VARCHAR2(30) := get_item_property(:system.cursor_item,item_canvas);--返回当前画布的名称
Ff"K i2h&b ]W2g0current_tab VARCHAR2(30) := get_canvas_property('TAB_LINES_REGIONS',topmost_tab_page);
NR~)R:S}4u#U0Qg0--返回在tab画布上的顶层的tab页的名字

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

ITPUB个人空间/`f e&U8Fd
15, Window 与Region Behavior. 编程:ITPUB个人空间5Pij,zy$~d`:n)Qz
WINDOW的控制:(使用app_window 包来取得标准的窗口控制动作)ITPUB个人空间|Te-R!Y`"N@6l
1.打开windows
` G9C-N{7D(c0--修改PER-FORM触发器中调用第一个formITPUB个人空间9_ }7?qM5O WcB;t
--修改app_custo.open_window中调用windows的名字,打开窗口ITPUB个人空间L2yw2K dMQ2K
(用键盘切换当前Block或用button打开窗体时,需使用APP_CUSTOM.OPEN_WINDOW函数,语法为APP_CUSTOM.OPEN_WINDOW(‘block_name’)
X:e4sCK6TR@0APP_CUSTOM.OPEN_WINDOW 中又会调用app_window.set_window_position。如果是Master-Detail Block需要建立coordination关系的,在APP_CUSTOM.OPEN_WINDOW('LINES')时,调用 APP_WINDOW.SET_COORDINATION)ITPUB个人空间;Bt c3?H,F }
--对于每一个window而言,ITPUB个人空间b5u-i1]3L}#`4S
--用app_window.set_coordination 来设置必要的关系(
&D|7v1[r4/J*U0procedure APP_WINDOW.SET_COORDINATION(event varchar2,coordination varchar2,relation_name varchar2);
n1{u!K6[ CyFR0--其中event
d ?7Wu7}h$HT0The name of the trigger event (either WHEN-CHECKBOX-CHANGED,WHEN-WINDOW-CLOSED, or OPEN-WINDOW)ITPUB个人空间)kJ j)`:eeD
--coordination
W!`7v P/2_0IMMEDIATE or DEFERRED. Defaults to IMMEDIATEITPUB个人空间/P/:T i+}4{.u5Acd1D1`
--relation_nameITPUB个人空间g4oi4yw x(uf
Name of the relation, which is listed in the Oracle Forms Designer under the Block object in theITPUB个人空间:r'a%_VX-zd Y[.W6N
Relation object)ITPUB个人空间-d)vL1mU^$|o"/
--设置窗体的位子使用app_window.set_window_position(位子包括(CASCADE, RIGHT, BELOW, OVERLAP or CENTER).)
l;p)Fp.ovcw~![0--COORDINATION,重设
:^U$Yy {3z/`$JAW/02.关闭windows
2Tj V*A {$K#j0{ uA8I0--与打开form相对,用APP_CUSTOM.CLOSE_WINDOW函数调用windows的名字关闭窗口
W CueK/S"O0--对于每一个窗口,用app_window.set_coordination 来设置必要的关系
Z3a Z1p{{0--当第一个窗口关闭时,使用APP_WINDOW.CLOSE_FIRST_WINDOW关闭form
1/$@*pk)cs;[0--避免关闭查询中的windowsITPUB个人空间IkA1G8R;q h
--将光标从一个关闭的窗口移到前一个数据库上ITPUB个人空间IBN#l:e.h q
--用hide_window隐藏制定窗口,
;sKA"p@0P!@8y@ d{7Hw03.设置window titleITPUB个人空间au8Q,z*E
--用app_windows.set_title来设置context-dependent 信息
gI"eUdRo0--在PRE-RECORD中调用title

-------------------------------------------------------------------------------------------------------------------ITPUB个人空间:a? ^FB:oV}+V
当用键盘切换当前Block或用button打开窗体时,需使用APP_CUSTOM.OPEN_WINDOW函数ITPUB个人空间IP{|:Jde$K
可以使用下面的procedure
J%P:Ztm#]0PROCEDURE LINES(EVENT VARCHAR2) ISITPUB个人空间Sr9pw&s J5o;~
BEGIN
[|;Ru6U l0IF (EVENT IN ('WHEN-BUTTON-PRESSED', 'KEY-NXTBLK'))ITPUB个人空间1K@5zKw
THEN APP_CUSTOM.OPEN_WINDOW('LINES');
*k:A.m1j2hd:F+e0ELSEITPUB个人空间:g2G0L2mI'_B
FND_MESSAGE.DEBUG('Invalid event passed to orders.lines: '|| EVENT);ITPUB个人空间Q#Jj%LMewiNb
END IF;
9l ]Mf7pg&~!px0END LINES;
%Gf ab4h'J!H0修改APP_CUSTOM.OPEN_WINDOW函数,打开windows的规则:
ahT7D+z[eJ^01.设置windows位置;用app_window.set_window_position('你要打开的界面','打开模式--CASCADE, RIGHT, BELOW, OVERLAP or CENTER','前一个页面')

2 重置master-detail 关系(如有需要的话);如果是Master-Detail Block,则需要建立coordination关系,
7^B%OmHO(Za/R3?0APP_WINDOW.SET_COORDINATION(event varchar2,coordination varchar2,relation_name varchar2);如ITPUB个人空间 Vy0v XS B
APP_WINDOW.SET_COORDINATION('OPEN-WINDOW'--触发事件(包括‘WHEN–CHECKBOX–CHANGED,
S @2ziB-Q*I0WHEN–WINDOW–CLOSED, or OPEN–WINDOW)’),:control.orders_lines--需要调用coordination的数据块(IMMEDIATE or DEFERRED. Defaults to IMMEDIATE),'ORDERS_LINES'--主从关系的名字Name of the relation,);
eK0p7alO)uJ9A03导航到window中的一个block。go_block('block')ITPUB个人空间 h,O2@2x3Z2[+p
4 必要时需要设置窗体属性 SET_WINDOW_PROPERTY('LINES',VISIBLE,PROPERTY_TRUE);ITPUB个人空间3U#g3QG8{
----------------------------------------------------

对于APP_WINDOW.SET_COORDINATION的进一步理解:(用于主从关系中)
dc5W q;p2^(I0This call sets the deferred coordination attribute of a relation to ON orITPUB个人空间%k4g(E]k
OFF based on the state of the coordination check box. The check box isITPUB个人空间G"?d,l5O|
either ”DEFERRED” or ”IMMEDIATE.”For a closed window, the relation is always ”DEFERRED.”ITPUB个人空间)c]8f9i$a'~{_
When coordination is set to ”DEFERRED,” AutoQuery is turned on.

coordination check box选中与否决定其取值是‘IMMEDIATE’ 还是‘DEFERRED’。如果coordination check box选中的话,
R|7F/H@e!}N2K[0即使焦点在Master window时,Detail window中数据会于Master window同步;如果coordination check box没有选中,ITPUB个人空间t^5_HG
Detail window的内容不会于Master window同步,直到焦点落在Detail window时,系统才会执行查询更新数据。
5ad]h1N:dMu@0这个过程自己试验一下会非常的清楚。ITPUB个人空间uY(O:ml o
使用coordination check box 必须在其WHEN-CHECKBOX-CHANGED trigger中重置Master-Detail windows的同步关系。ITPUB个人空间hn a)N@*c:n0a(sB
------------------------------------------

设置上下文相关联的windows的标题:ITPUB个人空间-dx'@qa
动态设置相关联的窗体标题依靠APP_WINDOW.SET_TITLE函数,
+f3F1YaLlP0注意在两类trigger中需要调用它。一类是Block-level的pre-record和on-insert trigger,ITPUB个人空间F4o2/6A*s.|{X~6n X
另一类是相关联字段的when-validate-item trigger
2b{"bM?2g-lt!M&{0APP_WINDOW.SET_TITLE函数用法:ITPUB个人空间%? R-k6gD"Tl6R;k"j
APP_WINDOW.SET_TITLE('ADJ_RECEIVE',ARAMETER.ORG_CODE);
l2^ e#h6s&b0其中ADJ_RECEIVE是window 的名字,用于设置window的title

16, 常用item 事件包括:ITPUB个人空间#h j5HhQIJf`Ak?
when_validate_item : 调用一个item的验证并且设置动态的item 属性ITPUB个人空间T2Is1] ci.i
when_new_record_unstance :重置item属性到默认状态给一个新的纪录。ITPUB个人空间#it7s6K b./lt(Y
init:测试当前条件,必要时重置默认属性和动态属性ITPUB个人空间CM^:k/g)zv
对于‘INIT’的理解:
@+hi[o+?e+G4c0Examine current conditions and reset defaults and dynamic attributes as necessary. Usually called by other handlers that affect this item.

17 , EBS中客户化表结构的设计原则:ITPUB个人空间vX.}4SF!V.?g:jDe
1)必须包括一个主键,并建立相应的序列;ITPUB个人空间/ V&V z BQ0/.@&Qy
2)建立5个WHO字段,也就是
D{'/#? a3j4iF9Hu0CREATED_BY NUMBERITPUB个人空间NV(H'fJt4Q&T
CREATION_DATE DATE
,[ K*d]5w1B W0LAST_UPDATED_BY NUMBER
o7j;rmc D?g#dFq0LAST_UPDATE_DATE DATE
g.Q4b'F:`1a8x&r0LAST_UPDATE_LOGIN NUMBERITPUB个人空间[ W|$E4h
在FORM中使用属性类:CREATION_OR_LAST_UPDATE_DATE,WHO字段并不会自动地被赋值,必须自己在FORM中编写代码来完成这项工作。
5J$r(VQ.Up-l.d k;T8W0EBS中提供了一个函数FND_STANDARD.SET_WHO,大家只要在FORM的BLOCK级触发器PRE-INSERT/PRE-UPDATE中进行调用即可。ITPUB个人空间.K^x+E Pd`
对于记录的PRE-INSERT,PRE-UPDATE Trigger中加入了fnd_standard.set_who后,ITPUB个人空间$M4HEI'rW6u"L
程序自动会对CREATE _BY,CREATION_DATE,LAST_UPDATE_BY,LSAT_UPDATE_DATE,LAST_UPDATE_LOGIN这5个栏位赋新的值


8e)a/`9C8oiSz{018, form. 编程规则:
n4x&La4p6v N0*引用字段时,使用 :BlockName.ItemName的形式;
Y h1ps0c-A0a0*使用亚元直接用dual,不要用sys.dual和system.dual;ITPUB个人空间-ZgU} | r v$F8N zJ
*使用object IDs获得更好的性能;
9Jp-T/X"V~|0declare
;u/W.GtF!m7t0x_id item;ITPUB个人空间!~ A"_Gu
beginITPUB个人空间u2q{%o H
x_id := find_item(’block.item’);
Q)t4@zc.C^6Br0/* your code here */
n/m^.?M V e0end;
b{O9~/bJ,p0*总是使用显式游标;ITPUB个人空间MG5l0{KB*|;ki`
*使用FND_MESSAGE程序显示信息
?0CENf%_KI!w&X0*使用FND_MESSAGE.DEBUG拉显示debugging信息,ITPUB个人空间`$T |-I%aJ
典型用法:ITPUB个人空间 H4q8Yf4f+R$H7Z
ELSE
YP"B}H w0fnd_message.debug(’Invalid event passed to control.orders_lines: ’ || EVENT);ITPUB个人空间0n9FF%l8Y
END IF;
_];] H,X$O6JB t?0*使用RAISE FORM_TIGGER_FAILURE来终止应用层的运行ITPUB个人空间/|cn9PrVe/A6z
*使用APP_EXCEPTION.RAISE_EXCEPTION 来终止数据库层的运行
A-zU$D+W$_9V0*用fnd_fuction.execute代替open_formITPUB个人空间(N I W'^(Lw^` U&]
*不要使用CALL_FORMITPUB个人空间G*^/atL+c3b _
*用do_key(‘exit_form’)代替exit_formITPUB个人空间S@*P3fLQpt.u
To exit the Oracle Applications suite:
ky!Pl n3T8y*G0copy (’Y’, ’GLOBAL.APPCORE_EXIT_FLAG’);ITPUB个人空间E C7a-nM B[(P
do_key(’exit_form’);ITPUB个人空间o N3WUMe
*用do_key(‘clear_form’)代替clear_form
*F4dyyn&?0*用do_key('COMMIT_form')代替commit
SbT`!`%@(l!M V2}0*用do_key(‘edit_field’)代替EDIT_FIELD/EDIT_TEXTITEM

触发器编程规则
(L:/2~ eO4wh%kV0*Post-Query trigger说明:
(ai;]S~#H_0.用带有LOVS的items使用lov来验证是否正确,当他们在无意识的情况下被要求保存changes会使用户感到混淆,
M,{9o]N"q:r0这种情况下,在你的post-query 触发器里面重置记录状态 :(设置当前块的属性为查询状态)
:[QH%ynO0set_record_property(:system.trigger_record,:system.trigger_block, STATUS,QUERY_STATUS);


.~6SW-h%uMV1V7d6f)R0B8[+K0*必须设置为Before的trigger有WHEN-NEW-RECORD-INSTANCE, WHEN-NEW-BLOCK-INSTANCE,WHEN-NEW-ITEM-INSTANCE;ITPUB个人空间1K1SiHN%V
可以设置为Override的trigger有KEY-DUPREC,KEY-MENU,KEY-LISTVAL,QUERY_FIND, ACCEPT。

ITPUB个人空间*f;L|-L`D8d
19, FND_Function 用法:ITPUB个人空间a(}rs P:P:g(q0o
FND_Function.Execute 可使用ITPUB个人空间5G:rw Pc"O
Procedure--过程
*@{$Wjt*Q R0Executes the specified Form. 指定的form
uT` GwX0Only accessible from Client-side PL/SQL 可连接form的客户端的pl/sql
9@g#|.uzx"s0Should be used in place of Oracle Forms built-ins OPEN_FORM. and NEW_FORM. 应该在form级触发器OPEN_FORM与NEW_FORM
T` A/UU#H$y0Usage:--使用例子

procedure FND_FUNCTION.EXECUTE
4PP5G R/u0(function_name IN varchar2,
"} SQL1j2R2`0open_flag IN varchar2 default ’Y’,
g+P*e(N-|d p(f0session_flag IN varchar2 default ’SESSION’,ITPUB个人空间o,la!yY#w(K8O7~ t
other_params IN varchar2 default NULL,
V |:g3MH Y)z0activate IN varchar2 default ’ACTIVATE’,ITPUB个人空间#M.X2F"@!^]
browser_target IN varchar2 default NULL);


7p$DT$o!}#e1`r020,,fnd_message.set_name用法:
zBjv:`0一般情况下在FORM中显示出错信息使用以下代码:
(@ L$Bb7h)Kb)ic#Ed0FND_MESSAGE.SET_NAME( APPL_SHORT_NAME,MESSAGE_NAME) ;
/`SNk`0_^?0FND_MESSAGE.ERROR ;

在PACKAGE中显示出错信息一般使用以下代码:ITPUB个人空间$H I'H!Nb+[1h@/
FND_MESSAGE.SET_NAME( APPL_SHORT_NAME,MESSAGE_NAME) ;ITPUB个人空间hy8s k{ XP b
APP_EXCEPTION.RAISE_EXCEPTION ;

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

fnd_message.question 用法:
be"oN,[%^:y?0例 在删除某条记录之前提示是否删除该如何实现?即在删除某条记录之前提示用户是否删除,ITPUB个人空间,o Ou |%o
如何用户选择删除则删除,如果选择否则不删除的实现?
8^sV)iFu01。首先新建Alter 'DELETE_ALERT',更改其属性button1为"Yes",button2为"No"ITPUB个人空间 R(B!m MnA-iv({y
2。在Block level Trigger: key-delrec中增加如下代码即可:
^AH3@t+G](G0declare
r0j4}zt4n:B(k&cN0return_value number;ITPUB个人空间+e(MrP/z/4gzZ5m
beginITPUB个人空间"N3h"l-@@)/-h/ i8I2i
set_alert_property('DELETE_ALERT',alert_message_text,'Are You Sure Delete This Record ?');ITPUB个人空间1A,E9Z-@/^
return_value := show_alert('DELETE_ALERT');
#n~l)X%k^/L&~0if return_value = alert_button1 thenITPUB个人空间&h]vql-Y~A
delete_record;ITPUB个人空间-du$O6|GZZWto
end if;
m g z#O'D @;w"]0end;


ue%A w(H%x021,提交请示ITPUB个人空间._&lc2oc0q/|{:D%pM0}
关于fnd_request.submit_request的用法:
G3~7@ts B0FND_REQUEST.SUBMIT_REQUEST 函數是用來提交一個請求的,它返回一個NUMBER值.具體調用如下ITPUB个人空间]@5F /#hz0qGV3^ZV
:result := fnd_request.submit_request(application CHAR, --AP模快ITPUB个人空间 D2Y-sU9KK.ZV'x:N'EY
program CHAR, --應用程式ITPUB个人空间S7Z /#Ez8i&s
description CHAR, --請求說明(可選)
@O/G"U*o:Q0cHP ` j^0start_time CHAR, --RUN 時間(可選)ITPUB个人空间/R/q?&bQ&?vg$X
sub_request BOOLEAN, --立刻提交請求ITPUB个人空间)^iBOO?
argument1 CHAR, --參數1ITPUB个人空间^ nl#@?-qs D bdN
argument2 CHAR, --參數2
VV A'@:]$kv0argument3 CHAR, --參數3
+ih*js$X#Y5e0argument4 CHAR, --參數4ITPUB个人空间0kFqg)q j'Qx2}#E
argument5 CHAR, --參數5.......ITPUB个人空间H {&OMyv&X?
argument100 CHAR);ITPUB个人空间3F?X iI-t)^
英文說明(zt oracle) :
2I5PL'RF&/*?]o*Sg0Parameters are as follows:

application - Short name of the application associated with the concurrent
f'hm ln,KYKm0request to be submitted.

program - Short name of the concurrent program (not the executable) for whichITPUB个人空间Wj6aJ!T5c2c} X/_I%w
the request should be submitted.

description - Description of the request that is displayed in the Concurrent
p h rDyY r0Requests form. (Optional.)

start_time - Time at which the request should start running, formatted as HH24:
)a-b!U7z ^.z0MI or HH24:MI:SS (Optional.)

sub_request - Set to TRUE if the request is submitted from another request and
5}F"x,DP;R0should be treated as a sub-request.

argument1...100 - Arguments for the concurrent request; up to 100ITPUB个人空间7e[j { x.V1Rv.z
arguments are permitted. If submitted from Oracle Forms, you must specify allITPUB个人空间m0O:N5|5f*b&C
100 arguments.

补充说明:
/q0d"Ak0在用fnd_request.submit_request的时候,第五个参数用false,不要被参数名称误导;ITPUB个人空间M]w5x$}C-qc
这个函数有105个参数,前面五个定义请求本身,后面100个是传递给请求的具体参数,都是Char类型,ITPUB个人空间-jO9D,j y B
我们需要转换,默认值是chr(0),代表这个参数不用传递给调用的请求;
9C0A]JV"iJB]LR0在Package里面调用只需要传递需要的参数个数,因为它有默认值指示结束;
h'a*w8G)jP'Yu0在form里面则不行,要写满105个,而且我们参数结束之后要用一个chr(0)来表示结束


$v5z D.VH0fnd_request.submit_request('AR',
n)S@*Q(m&L*Q7C7k2R-X0'SVAINEX_P',ITPUB个人空间s;w5o1]Z:aP
'',ITPUB个人空间A6v5x#t {:W
'',
:}~R8h `|P|-/ G0FALSE,
G[ cr2sY`*I6~C&a0:parameter.invoice_store,ITPUB个人空间L7ny|&i
chr(0),ITPUB个人空间R9z9hp+}nNL
'','','',
g-]2Pt1FB+{)Ky-Uu0'','','','','','','','','','','','','','','','','','','','',ITPUB个人空间+P$ooP {1U!s
'','','','','','','','','','','','','','','','','','','','',
e)X R&F/W*wH0'','','','','','','','','','','','','','','','','','','','',ITPUB个人空间'n*Gm}}1x,D
'','','','','','','','','','','','','','','','','','','','',
M|Zi6qtF0'','','','','','','','','','','','','','','');

 

22, 程式中如何设置才能在点MENU上的FIND的图标时调出FIND WINDOW?(客制的ORACLE FORM中)?

在相应的QUERY_FIND里写的,最后调用到app_find.query_find

OA 中的查询可以通过2 种方法来实现:ITPUB个人空间e|`AO h"G5JV6b
l LOV 查询ITPUB个人空间2x;Y _,nX
l QUERY-WINDOW查询。
P`g/j4A2o0LOV 查询的实现比较简单,且适合单一条件的查询;相比来说QUERY-WINDOW 查
(}:zp*~H)z e8Z4]A0询的实现较繁琐,但它可以实现复杂的查询。ITPUB个人空间:x{0R jG
LOV 查询的实现ITPUB个人空间7~ RokDy
使用LOV 查询,需要按照以下步骤实现:ITPUB个人空间jto| n-g/p#VJ;N4m
l 创建PARAMETER,用于保存查询变量ITPUB个人空间v @6ak#md
l 创建LOV,其返回值赋予上面定义的参数ITPUB个人空间W%Z-zX)s)@pB
l 创建BLOCK 级的PRE-QUERY,将LOV 返回的值赋予BLOCK 中的对应字段
? C2^gLh%e{1A/DC0l 创建BLOCK 级的QUERY-FIND。添加如下代码:ITPUB个人空间-tTe/:k4{1Z
APP_FIND.QUERY_FIND(’<LOV Name>’) ;ITPUB个人空间Lv.KJo w1n
QUERY-WINDOW查询的实现ITPUB个人空间xjA7Xk
使用QUERY-WINDOW 查询,需要按照以下步骤实现:ITPUB个人空间v0M G S K)z
l 从APPSTAND 中拷贝QUERY-FIND 对象组,其中包括WIINDOW,BLOCK, CANVASITPUB个人空间J5/)s5Q/|!f]
l 更改WINDOW, BLOCK, CANVAS 的名字
#}x#N;jG v0l 更改按钮“NEW”的TRIGGER,编写如下代码:app_find.new(<块名> )ITPUB个人空间q&W9Pm-vhYJR)y
l 更改按钮“FIND”的TRIGGER,编写如下代码:app_find.find(<块名> )
v V2Mn vw-DR0l 设置导航属性。设置查询窗口的前导块为查询目标块,但查询窗口不能作为任何块的前导块或后续块
D P^jn6k0l 编辑KEY–NXTBLK,使之功能同按钮“FIND”ITPUB个人空间)C4C;?[K
l 设置查询窗口名
j*_-x X8fO6Q0l 创建PRE-QUERY 代码,例如填写查询值,用APP_FIND.QUERY_RANGE设置查询范围等ITPUB个人空间/dE x!~wQ
l 创建QUERY-FIND 代码,其中代码如下:ITPUB个人空间#h3_ ?I#X2k oN2s
APP_FIND.QUERY_FIND(’<块所在窗口名>’,’<查询窗口名>’,’<块名>’);

方法2
|w'? ti4b01要建一个查询的数据块 在这个数据块中,放置各个需要查询的数据项ITPUB个人空间 @R_&E a_By:W_
然后,在FORM级的触发器QUERY_FIND中,屏蔽掉标准的代码,而写为:go_block('你的查询数据块名称');ITPUB个人空间fgm"o gJLh
这样,当用户点“手电筒”图标时,系统就会自动转到那个查询数据块的界面了。ITPUB个人空间iKBH7RG4JG
2查询数据块应该单独放在一个画布中,并且单独放在一个WINDOWS中。ITPUB个人空间D q5Syk E G#?dQ
这样,就可以显示单独的查询窗口。

如果要实现"当点击那个手电筒,出现我要查询的数据的windows,当我选中后,他会自动显示在另外一张windows"
6z @]*/W6H7S6T0则要在查询数据块中放一个查询的按钮,在按钮中添加语句:go_block('要导向的结果数据块');ITPUB个人空间-ueb B|n#w
execute_query;ITPUB个人空间v!o8a{Rqe
这样,用户输入好条件之后,点击“查询”按钮,就可以转到结果集窗口了。ITPUB个人空间b8dr'`7_%]qC^+D
两句一起写在按钮事件下。ITPUB个人空间g:/n5}+n&e:u|3A m gU
在查询结果的数据块中,你可以在where条件那里直接引用查询数据块的各数据项的数据,ITPUB个人空间?3j5l%aynMu
写在where条件中限制结果集。
1AUdh'ut{Q$c0方法3
8gAs m.e u2a:hF01要建一个查询的数据块 在这个数据块中,放置各个需要查询的数据项ITPUB个人空间E,oDW?4a?.Q%m$s
然后,在FORM级的触发器QUERY_FIND中,屏蔽掉标准的代码,而写为如:ITPUB个人空间VF6y }Jqk
app_window.set_window_position('QUERY','CASCADE','MAIN' );--CASCADE',层叠的方式,就是把query窗口层叠在main之上ITPUB个人空间/Q'ca#KH#WuA&H AP
app_find.QUERY_FIND('MAIN','QUERY','QUERY');--APP_FIND.QUERY_FIND(’<块所在窗口名>’,’<查询窗口名>’,’<块名>’);ITPUB个人空间m]#Z/u)h5QwXb
2查询数据块应该单独放在一个画布中,并且单独放在一个WINDOWS中。
$l0ePu/?0]Ip/A0则要在查询数据块中放一个查询的按钮,在按钮中添加语句:go_block('要导向的结果数据块');
#a4lp0`%@%R J j0execute_query;

原创粉丝点击