OracleForms开发常用技巧.docx
- 文档编号:6134192
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:45
- 大小:2.86MB
OracleForms开发常用技巧.docx
《OracleForms开发常用技巧.docx》由会员分享,可在线阅读,更多相关《OracleForms开发常用技巧.docx(45页珍藏版)》请在冰点文库上搜索。
OracleForms开发常用技巧
1手动提交Request
在Form里面,我们可以用
APPS.FND_REQUEST.SUBMIT_REQUEST
提交一个Request到OracleRequestManager。
如果提交成功,该函数返回RequestID,否则,返回0。
1.1初始化
在提交一个Request之前,我们会调用OracleStandard的Procedure对这个Request做一些基本的参数的初始化。
APPS.FND_GLOBAL.apps_initialize
(
user_id=>APPS.FND_GLOBAL.user_id,
resp_id=>APPS.FND_GLOBAL.resp_id,
resp_appl_id=>APPS.FND_GLOBAL.resp_appl_id
);
1.2FND_REQUEST.SUBMIT_REQUEST
函数APPS.FND_REQUEST.SUBMIT_REQUEST有105个参数:
APPS.FND_REQUEST.SUBMIT_REQUEST
(
APPLICATIONINVARCHAR2DEFAULTNULL,
PROGRAMINVARCHAR2DEFAULTNULL,
DESCRIPTIONINVARCHAR2DEFAULTNULL,
START_TIMEINVARCHAR2DEFAULTNULL,
SUB_REQUESTINBOOLEANDEFAULTFALSE,
chr(0),'','','','','','','','','','','','','','','','','','','',
'','','','','','','','','','','','','','','','','','','','',
'','','','','','','','','','','','','','','','','','','','',
'','','','','','','','','','','','','','','','','','','','',
'','','','','','','','','','','','','','','','','','','',''
)
RETURNNUMBER;
1.3参数详解
1.3.1APPLICATION
必需参数
Shortnameoftheapplicationassociatedwiththeconcurrentrequesttobesubmitted.
应用程序的名称缩写。
一般我们可能会用到下面的几个:
OracleAssets……>OFA
OracleGeneralLedger……>SQLGL
OracleInventory……>INV
OracleOrderManagement……>ONT
OraclePayables……SQLAP
OraclePricing……QP
OraclePurchasing……PO
OracleReceivables……AR
这个ShortName我们可以在
SystemAdministrator->Application->Register
里面查到。
1.3.2PROGRAM
必需参数
ShortNameofconcurrentprogram,notzheexecutable
Application->Concurrent->Program
1.3.3DESCRIPTION
可选参数
2FND_MESSAGE
•ManipulatemessagesdefinedintheMessageDictionary
•ClientandServer-sideproceduresplacemessagesonthemessagestackorintheglobalarea
•Client-sideproceduresretrievemessagesfromthestackanddisplaythemfromthecurrentlyrunningform
需要注意的是,Oracle有两个FND_MESSAGEPackage,一个是在Server端的DataBase里面,另外一个是在Form里面(AttachedLibraries->FNDSQF),也就是Client端了。
就其用法基本上都是差不多的,但是Client和Server端提供的少数函数是有一些区别的。
参考文档:
\\hi4-sv11\Oracle\PDF\DEV-PDF\115devg.pdf
2.1AP里面定义Message
ApplicationDeveloper->Application->Message
2.1.1定义Message
需要注意的是:
CurrentMessageText的内容,可以直接写一段话
或者&MESSAGE,这样写是可以在程序中用你需要的字符替换这里的参数MESSAGE
注意蓝色部分是作为一个变量,可以在代码中传入的
2.1.2得到Application的ShortName
用Examine可以得到ApplicationID,然后用
SELECTAPPLICATION_SHORT_NAME
FROMFND_APPLICATION
WHEREAPPLICATION_ID=20003
就可以得到Message所在的Application的ShortName,这个Shortname将会在你设置Message时会用到
2.1.3RunRequest
定义message仅仅是把其存入数据库表fnd_new_messages中,但是不能立即为我们使用。
所以我们必须在ApplicationDeveloper下面RunRequest:
GenerateMessages.
RequestParameter:
Language和Application必须和你定义Message时选择的一致。
在上面的参数的前提下,当我们跑完Request之后,该Message的信息就会被写入文件:
/disk/DEV/devappl/bqe/11.5.0/mesg/US.msb
这里共有四种Mode:
DB_TO_RUNTIME
DB_TO_SCRIPT、
SCRIPT_TO_DB
SCRIPT_TO_RUNTIME
后面三种我们不会用到。
在目前的设置下,选择后面的几种Mode,Request都会出错,错误信息是:
Thespecifiedgeneratormode
DB_TO_SCRIPT/SCRIPT_TO_DB/SCRIPT_TO_RUNTIME
isnotsupported.
2.1.4重新启动客户端AP
注意:
此时必须和编译Custom文件一样,重新启动客户端AP才能使Message起作用。
2.2Message的调用
定义好了Message,我们需要的就是在Package+Form或者单独在Form里面调用了。
2.2.1Package+Form的调用方式
【ExampleForm】/disk/DEV/devappl/au/11.5.0/forms/US/XXPOM200N.fmb
【ExamplePackage】DEV/XXFORM_ADIO_TEST_PKG
ButtonFND_MESSAGE
Package(ProcedureRETURN_MESSAGE):
FND_MESSAGE.set_name('BQE','XXADIO_050224');
FND_MESSAGE.set_token('MESSAGE','ADIOHUANG2005-02-23');
Form:
BEGIN
APPS.XXFORM_ADIO_TEST_PKG.RETURN_MESSAGE;
FND_MESSAGE.retrieve;
FND_MESSAGE.SHOW;
EXCEPTION
WHENOTHERSTHEN
FND_MESSAGE.DEBUG(SQLERRM);
RAISEFORM_TRIGGER_FAILURE;
END;
2.2.2单独Form的调用方式
【ExampleForm】/disk/DEV/devappl/au/11.5.0/forms/US/XXPOM200N.fmb
ButtonFORM_FND_MESSAGE
begin
FND_MESSAGE.set_name('BQE','XXADIO_050224');
FND_MESSAGE.set_token('MESSAGE','ADIOHUANG2005-02-23');
FND_MESSAGE.show;
exception
whenothersthen
fnd_message.debug(sqlerrm);
raiseform_trigger_failure;
end;
2.3Message显示的几种方式
2.3.1FND_MESSAGE.show
这是一个Procedure
把信息以最基本的方式显示给用户,和FND_MESSAGE.DEBUG一样的效果。
2.3.2FND_MESSAGE.hint
这是一个Procedure
这种方式不会弹出对话框给用户,而是显示在左下脚的状态栏上面。
2.3.3FND_MESSAGE.error
这是一个Procedure
以Error信息的方式显示给用户
2.3.4FND_MESSAGE.warn
这是一个Function
以选择信息的方式显示给用户,可以选择Ok或者Cancel,返回值分别是TRUE和FALSE
ifFND_MESSAGE.warnthen
fnd_message.debug('True');
else
fnd_message.debug('False');
endif;
执行效果如下:
点击OK会弹出True
点击Cancel会弹出False
2.3.5FND_MESSAGE.question
这是一个Function
functionQUESTION(BUTTON1invarchar2default'YES',
BUTTON2invarchar2default'NO',
BUTTON3invarchar2default'CANCEL',
DEFAULT_BTNinnumberdefault1,
CANCEL_BTNinnumberdefault3,
ICONinvarchar2default'question')
returnnumber
调用:
declare
v_resultnumber;
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;
2.4Client端常用的几个方法、函数
<1>、Debug
Usedfordebugging.Displaythespecifiedstring.
【Example】FND_Message.Debug(‘DisplayThis’);
<2>、Set_Name
RetrievesmessagefromMessageDictionaryandsetsitonthestack
<3>、Set_String
Takesandinputstringandsetsitonthestack
<4>、Set_Token
Substitutestokenwithspecifiedvalue
<5>、Retrieve
Retrievesamessagefromtheserver-sidebuffer,translatesandsubstitutestokens,andsetsmessageonthestack
<6>、Get(function)
Retrievesamessagefromthestack.Returnstheretrievedmessage
<7>、Clear
Clearsthemessagestack
<8>、Error
Displaysanerrormessageinaformsmodalwindow
<9>、Show
Displaysaninformationalmessageinaformsmodalwindow.
<10>、Warn(function)
Displaysawarningmessageinaformsmodalwindow.Allowsusertoacceptorcanceltheoperation.ReturnsTRUEifuseraccepts.
<12>、Question
Displaysamessageanduptothreebuttonsinaformsmodalwindow.SimilartoaFormsAlert.
<13>、Hint
Displaysamessageintheformsstatusline.
<14>、Erase
Clearstheformsstatusline.
3StackedCanvas
StachedCanvas最终实现的效果如下:
滚动条可以自由拖动
3.1新建Window、Canvas、Block
按照正常的步骤增加Window、Canvas、Block各一个
为了便于理解和识别,我把Window、Canvas、Block的Name属性都设置成为CANVAS_TEST
并且设置其属性分别如下
3.1.1Window属性
Property
Value
Name
CANVAS_TEST
SubclassInformation
Window
Title
AdioCanvasTest
PrimaryCanvas
CANVAS_TEST
3.1.2Canvas属性
Property
Value
Name
CANVAS_TEST
SubclassInformation
Canvas
Window
CANVAS_TEST
3.1.3Block属性
Property
Value
Name
CANVAS_TEST
SubclassInformation
Block
QueryDataSourceName
XXGL_JOURNAL_V
NumberofRecordsDisplayed
5
ShowScrollBar
Yes
ScrollBarCanvas
CANVAS_TEST
3.2新建一个StackedCanvas
对于一般的Form,StackedCanvas都是基于另外一个Canvas上面。
在这里,我们以CANVAS_TEST为主
3.2.1画StackedCanvas
打开CANVAS_TEST排版界面如下:
2、在Canvas上面按下鼠标左键拖动
1、选中工具StackedCanvas
这里,你会发现ObjectsNavigator里面的Canvas下面会多出一个Canvas来。
3.2.2设置StackedCanvas属性
Property
Value
Name
CANVAS_TEST_STACKED
CanvasType
Stacked
SubclassInformation
CanvasStacked
Window
CANVAS_TEST
ShowHorizontalScrollBar
Yes
3.3Block下面增加Item
在BlockCANVAS_TEST我们增加一些Item:
JE_SOURCE、JE_CATEGORY、DOC_SEQUENCE_VALUE、CURRENCY_CODE2、ENTERED_DR、ENTERED_CR、ACCOUNTED_DR、ACCOUNTED_CR、DEFAULT_EFFECTIVE_DATE、ACCT_DESC
其自行设置Item的属性,包括Name、SubClassInformtion、Prompt、DataType等。
其中最重要的属性就是Canvas了
我们设置JE_SOURCE和JE_CATEGORY在CanvasCANVAS_TEST上,其余的八个Item在CanvasCANVAS_TEST_STACKED上面
3.4Canvas排版
3.4.1StackedCanvas排版
如图,我们把放在StackedCanvas上面的Item都按照你需要的格式排版好。
注意两个问题:
1、所有的Item必须都包括在Canvas上,不能超出Canvas的范围
2、View的大小这里可以不用调整,到下一步的时候在按照实际大小去拖动
3.4.2
CanvasCANVAS_TEST排版
交界的地方不能有重叠
这个主Canvas可以看到你全部的Item,也就是你最终会在Form上面看到效果。
可以按照需求排版,但是注意一点,Canvas上的Item和StackedCanvas不能有重叠的部分。
如果出现有重叠的部分,最终的Form就会出现StackedCanvas消失的现象,后面会有提及。
3.5StackedCanvas会突然消失的处理
3.5.1现象
在我们自己客制的Form里面,如果排版处理的不好,会出现如下情况:
鼠标点击进去
这个Form,看起来一切正常,StackedCanvas的水平滚动条也能拖动。
但是有一个地方,如果我们去点击Category这个Item(紧挨着StackedCanvas的一个Item),
就会出现一个问题:
按Tab键又会显示出来
StackedCanvas不见了
这个时候,StackedCanvas以及上面的Item都消失了,但是我们按Tab键的时候,其又会显示出来的。
3.5.2产生的原因
CanvasCANVAS_TEST_STACKED和CANVAS_TEST有重叠的部分。
对于StackedCanvas,任何部分被不在画布内的ITEM覆盖,StackedCanvas就会整个被遮盖
3.5.3解决办法
当然是调整最后一个Item和StackedCanvas的位子了,使之不出现重叠的部分。
小提示:
在StackedCanvas上面,可以选中所有的Item,然后把其位置尽量在最左边。
4FormFolder的实现
在客制的Form里面实现OracleFolder的功能,最终效果如下:
栏位可以拖动
【ExampleForm】/disk/DEV/devappl/au/11.5.0/forms/US/XXPOM400N.FMB
【ObjectView】DEV/XXIN_BRAND_TYPE_V
在这里,我按照完全新建一个Form的步骤来给大家示范:
再一次友情提醒:
我们自己新建Form都要从Template.fmb开始,以避免出现未知的异常。
4.1新建FormXXPOM400N
按照在FormBuilder基础开发(FormBuilderBasicDevelopment.doc)里面讲的步骤,我们新建一个FormXXPOM400N。
4.1.1添加FormObjects
包括一个Window,MY_FOLDER
一个Canvas,MY_FOLDER
一个Block,MY_FOLDER
4.1.2修改Trigger和ProgramUnits
FormLevelTrigger:
PRE-FORM
ProgramUnits:
APP_CUSTOM
4.1.3修改其他属性设置
Form的ConsoleWindow,MY_FOLDER
Form的FirstNavigationDataBlock,MY_FOLDER
Window的PrimaryCanvas,MY_FOLDER
BlockMY_FOLDER的QueryDataSourceName,XXIN_BRAND_TYPE_V
BlockMY_FOLDER的NumberofRecordsDisplayed,5
……
4.2添加Folder相关的Objects
这些相关的Window、Canvas、Block、Item…等都包含在OracleStandardFormAPPSTAND.FMB,所以我们需要下载并且在同一个FormBuilder窗口里面打开这个标准Form。
在这步操作里面,我们需要把APPSTAND.FMB的ObjectGroupsSTANDARD_FOLDER
及其相关的对象移至我们自己客制的Form为我们所用。
所以我们的操作是在同一窗口打开标准的Form和我们自己客制的Form,并且选择APPSTAND.FMB的ObjectGroupsSTANDARD_FOLDER
然后用鼠标拖动至我们自己的Form的ObjectGroups。
用鼠标选择后拖动
至我们自己的Form
我们客制的Form
标准Form:
APPSTAND.fmb
此时会弹出对话框:
请选择仅仅是Copy对象还是连带其属性设置一起移动。
如果我们选择Subclass,那么下一步骤(3.3)我们可以直接跳过。
如果我们现在Copy,那么需要再次手动设置一些Folder对象的属性。
无论选择Subclass或者Copy,你会发现,FormBuilder都会在你的Form里面自动添加很多对象。
做完这一步后,请不要关闭APPSTAND.FMB,否则,步骤3.3会没有办法进行。
4.3设FLODERBLOCKS的属性
在3.2里面如果我们选择的是Copy,那么需要进行这
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- OracleForms 开发 常用 技巧
![提示](https://static.bingdoc.com/images/bang_tan.gif)