Professional Documents
Culture Documents
Form Builder Develop
Form Builder Develop
1 手动提交 Request
在 Form 里面,我们可以用
APPS.FND_REQUEST.SUBMIT_REQUEST
提交一个 Request 到 Oracle Request Manager。
如果提交成功,该函数返回 Request ID,否则,返回 0。
1.1 初始化
在提交一个 Request 之前,我们会调用 Oracle Standard 的 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.2 FND_REQUEST.SUBMIT_REQUEST
函数 APPS.FND_REQUEST.SUBMIT_REQUEST 有 105 个参数:
APPS.FND_REQUEST.SUBMIT_REQUEST
(
APPLICATION IN VARCHAR2 DEFAULT NULL,
PROGRAM IN VARCHAR2 DEFAULT NULL,
DESCRIPTION IN VARCHAR2 DEFAULT NULL,
START_TIME IN VARCHAR2 DEFAULT NULL,
SUB_REQUEST IN BOOLEAN DEFAULT FALSE,
chr(0),'','','','','','','','','','','','','','','','','','','',
'','','','','','','','','','', '','','','','','','','','','',
'','','','','','','','','','', '','','','','','','','','','',
'','','','','','','','','','', '','','','','','','','','','',
'','','','','','','','','','', '','','','','','','','','',''
)
RETURN NUMBER;
1.3 参数详解
1.3.1 APPLICATION
必需参数
Short name of the application associated with the concurrent request to be submitted.
应用程序的名称缩写。
一般我们可能会用到下面的几个:
Oracle Assets ……> OFA
System Specification
1.3.2 PROGRAM
必需参数
Short Name of concurrent program,not zhe executable
Application -> Concurrent -> Program
2
System Specification
1.3.3 DESCRIPTION
可选参数
3
System Specification
2 FND_MESSAGE
• Manipulate messages defined in the Message Dictionary
• Client and Server-side procedures place messages on the message stack or in the global area
• Client-side procedures retrieve messages from the stack and display them from the currently
running form
需要注意的是,Oracle 有两个 FND_MESSAGE Package,一个是在 Server 端的 DataBase 里面,另外一个是
在 Form 里面(Attached Libraries->FNDSQF),也就是 Client 端了。就其用法基本上都是差不多的,但是
Client 和 Server 端提供的少数函数是有一些区别的。
参考文档:\\hi4-sv11\Oracle\PDF\DEV-PDF\115devg.pdf
4
System Specification
注意蓝色部分是作为一个变
量,可以在代码中传入的
5
System Specification
SELECT APPLICATION_SHORT_NAME
FROM FND_APPLICATION
WHERE APPLICATION_ID=20003
就可以得到 Message 所在的 Application 的 Short Name,这个 Short name 将会在你设置 Message 时会用到
6
System Specification
Request Parameter:
Language 和 Application 必须和你定义 Message 时选择的一致。
这里共有四种 Mode:
DB_TO_RUNTIME
DB_TO_SCRIPT、
SCRIPT_TO_DB
SCRIPT_TO_RUNTIME
后面三种我们不会用到。
在目前的设置下,选择后面的几种 Mode,Request 都会出错,错误信息是:
The specified generator mode
DB_TO_SCRIPT/SCRIPT_TO_DB/SCRIPT_TO_RUNTIME
is not supported.
2.1.4 重新启动客户端 AP
注意:此时必须和编译 Custom 文件一样,重新启动客户端 AP 才能使 Message 起作用。
7
System Specification
8
System Specification
2.3.2 FND_MESSAGE.hint
这是一个 Procedure
这种方式不会弹出对话框给用户,而是显示在左下脚的状态栏上面。
2.3.3 FND_MESSAGE.error
这是一个 Procedure
以 Error 信息的方式显示给用户
2.3.4 FND_MESSAGE.warn
这是一个 Function
以选择信息的方式显示给用户,可以选择 Ok 或者 Cancel,返回值分别是 TRUE 和 FALSE
if FND_MESSAGE.warn then
fnd_message.debug('True');
else
9
System Specification
fnd_message.debug('False');
end if;
执行效果如下:
点击 OK 会弹出 True
点击 Cancel 会弹出 False
2.3.5 FND_MESSAGE.question
这是一个 Function
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;
10
System Specification
<2>、Set_Name
Retrieves message from Message Dictionary and sets it on the stack
<3>、Set_String
Takes and input string and sets it on the stack
<4>、Set_Token
Substitutes token with specified value
<5>、Retrieve
Retrieves a message from the server-side buffer, translates and substitutes tokens, and sets message
on the stack
<6>、Get (function)
Retrieves a message from the stack. Returns the retrieved message
<7>、Clear
Clears the message stack
11
System Specification
<8>、Error
Displays an error message in a forms modal window
<9>、Show
Displays an informational message in a forms modal window.
<10>、Warn (function)
Displays a warning message in a forms modal window. Allows user to accept or cancel the operation.
Returns TRUE if user accepts.
<12>、Question
Displays a message and up to three buttons in a forms modal window. Similar to a Forms Alert.
<13>、Hint
Displays a message in the forms status line.
<14>、Erase
Clears the forms status line.
12
System Specification
3 Stacked Canvas
Stached Canvas 最终实现的效果如下:
滚动条可以自由拖动
3.1 新建 Window、Canvas、Block
按照正常的步骤增加 Window、Canvas、Block 各一个
为了便于理解和识别,我把 Window、Canvas、Block 的 Name 属性都设置成为 CANVAS_TEST
并且设置其属性分别如下
3.1.1 Window 属性
Property Value
Name CANVAS_TEST
Subclass Information Window
Title Adio Canvas Test
Primary Canvas CANVAS_TEST
3.1.2 Canvas 属性
Property Value
Name CANVAS_TEST
Subclass Information Canvas
Window CANVAS_TEST
3.1.3 Block 属性
Property Value
Name CANVAS_TEST
Subclass Information Block
13
System Specification
14
System Specification
3.4 Canvas 排版
3.4.1 Stacked Canvas 排版
如图,我们把放在 Stacked Canvas 上面的 Item 都按照你需要的格式排版好。
注意两个问题:
1、 所有的 Item 必须都包括在 Canvas 上,不能超出 Canvas 的范围
2、 View 的大小这里可以不用调整,到下一步的时候在按照实际大小去拖动
15
System Specification
交界的地方不能有重叠
鼠标点击进去
16
System Specification
按 Tab 键又会显示出来
3.5.3 解决办法
当然是调整最后一个 Item 和 Stacked Canvas 的位子了,使之不出现重叠的部分。
小提示:
在 Stacked Canvas 上面,可以选中所有的 Item,然后把其位置尽量在最左边。
17
System Specification
栏位可以拖动
【Example Form】/disk/DEV/devappl/au/11.5.0/forms/US/XXPOM400N.FMB
【Object View】DEV/ XXIN_BRAND_TYPE_V
在这里,我按照完全新建一个 Form 的步骤来给大家示范:
再一次友情提醒:我们自己新建 Form 都要从 Template.fmb 开始,以避免出现未知的异常。
4.1.3 修改其他属性设置
Form 的 Console Window,MY_FOLDER
Form 的 First Navigation Data Block,MY_FOLDER
Window 的 Primary Canvas,MY_FOLDER
18
System Specification
19
System Specification
标准 Form:APPSTAND.fmb
用鼠标选择后拖动
至我们自己的 Form
我们客制的 Form
此时会弹出对话框:
20
System Specification
选择 Object
选择 Module:
STANDARD_OBJECTS
选择 Object Name:
FOLDER_TOOLS
21
System Specification
选中 Attached libraries
点击 Create
会弹出
22
System Specification
选择打开之后再点击
山上图中的 Attach 会弹出
选择 No 即可。
4.5 增加 Stacked Canvas FOLDER_STACK
这一步是必须的,而且你期望实现 Folder 拖动功能的那些 Item 都是放在这个 Canvas 里面,这个 Stacked
Canvas 又是放在前面我们建立的 Canvas:MY_FOLDER 上面的。
4.5.1 增加 Stacked Canvas
双击打开 Canvas MY_FOLDER,在左侧工具条里面选择 Stacked Canvas,然后在 Canvas MY_FOLDER 里面拖动
即可。
23
System Specification
1、选择工具:Stacked Canvas
24
System Specification
Property Value
Name BRAND_TYPE、BRAND_TYPE_DESC、CATEGORY_SET_ID
Item Type Text Item
Subclass Information Text Item
Canvas FOLDER_STACK(这个属性不能设错,必须是你的 Stacked Canvas)
Column Name BRAND_TYPE、BRAND_TYPE_DESC、CATEGORY_SET_ID
(各自对应 View XXIN_BRAND_TYPE_V 的栏位)
Data Type 和 View 一致
Maximum Length 和 View 一致
Prompt 保持为空
25
System Specification
26
System Specification
X Position 0
Y Position 0
Width 0
Height 0
4.8 增加 Trigger
Level Object Trigger Event
Form XXPOM400N FOLDER_ACTION app_folder.event(:global.folder_action);
WHEN-NEW-FORM-INSTANCE app_folder.define_folder_block
(
'MY_FOLDER', --'ObjectName'
'MY_FOLDER', --'folder_block',
'MY_FOLDER_PROMPT',
--'prompt_block',
'FOLDER_STACK', --'stacked_canvas',
'MY_FOLDER', --'window',
NULL --'disabledfunctions';
);
Block MY_FOLDER PRE-BLOCK app_folder.event('PRE-BLOCK');
POST-BLOCK app_folder.event('POST-BLOCK');
WHEN-NEW-BLOCK-INSTANCE app_folder.event('WHEN-NEW-BLOCK-INSTANCE');
PRE-QUERY app_folder.event('PRE-QUERY');
KEY-EXEQRY app_folder.event('KEY-EXEQRY');
KEY-NEXT-ITEM app_folder.event('KEY-NEXT-ITEM');
KEY-PREV-ITEM app_folder.event('KEY-PREV-ITEM');
备注 最简单的方式是直接把标准 Form ‘APPSTAND.fmb’ 中的 Block ‘SAMPLE_FOLDER’ 中
的各个 Triger 复制过来
27
System Specification
5 FlexField 的客制
5.1 Item Category
最终实现的效果如下图:
当我们点击你这个 Item 时,就会弹出和 Oracle Standard 一样的 LOV 去实现 Category 的选择。
点击后弹出下面的 Object
Property Value
Name CATEGORY_ID(自己定义)
Item Type Text Item
Subclass Information Text Item
28
System Specification
Property Value
Name CATEGORY_DESC(自己定义)
Item Type Text Item
Subclass Information Text Item
5.1.2 FND_KEY_FLEX.Define
增加在某一个 Trigger 里面,你可以自己随便放置。
一般情况,我们都放在 WHEN-NEW-FORM-INSTANCE 或者 WHEN-NEW-BLOCK-INSTANCE 里面。
该函数的详细参数请参考文档:
\\hi4-sv11\Oracle\PDF\DEV-PDF\115devg.pdf
FND_KEY_FLEX.Define
(
BLOCK => ' FLEXFIELD_TEST',
FIELD => ' CATEGORY',
ID => 'CATEGORY_ID',
description => 'CATEGORY_DESC',
APPL_SHORT_NAME => 'INV',
CODE => 'MCAT',
NUM => '50230',--STRUCTURE Number
REQUIRED => 'N',
UPDATEABLE =>NULL,
VALIDATE => 'FULL',
USEDBFLDS => 'N',
DINSERT => 'Y'
);
其中红色部分为必选参数,其他的都是可选参数
5.1.3 参数 APPL_SHORT_NAME
你的 Key Flex Field 是在哪个 Application 下面设置的,这里就需要提供那个 Application 的 Short Name。
可以从:System Administrator->Application->Register
这里得到
29
System Specification
5.1.4 参数 CODE
指的是 Key Flex Field 的 ID Code。Category 是在 INV 模组设置的。
……Flexfields->Key->Segments
下面搜索:
Application:Oracle Inventory
Flexfield Title:Item Categories
30
System Specification
5.1.5 参数 NUM
这个参数是我们当前使用的 Item Category 的 Structure ID。
不同的 Category 类型都有不同的 Structure ID。
Inventory->Setup->Items->Categories->Category Sets
31
System Specification
5.2 Account
其实就是调用 Oracle Standard 的标准的 API 来实现这个功能。
32
System Specification
点击后弹出下面的 Object
Property Value
Name ACCOUNT_ID(自己定义)
Item Type Text Item
Subclass Information Text Item
33
System Specification
Property Value
Name ACCOUNT_DESC(自己定义)
Item Type Text Item
Subclass Information Text Item
5.2.2 FND_KEY_FLEX.Define
和 Category 的用法基本上一致,就是几个必要的参数不同。
FND_KEY_FLEX.Define
(
BLOCK => ' FLEXFIELD_TEST',
FIELD => ' ACCOUNT ',
ID => ' ACCOUNT _ID',
description => ' ACCOUNT _DESC',
APPL_SHORT_NAME => ' SQLGL',
CODE => ' GL#',
NUM => '50221',--STRUCTURE Number
REQUIRED => 'N',
UPDATEABLE =>NULL,
VALIDATE => 'FULL',
USEDBFLDS => 'N',
DINSERT => 'Y'
);
5.2.3 参数 APPL_SHORT_NAME
和 Category 里面得到的方法一样。
5.2.4 参数 CODE
指的是 Key Flex Field 的 ID Code。Account 是在 GL 模组设置的。
……Flexfields->Key->Segments
34
System Specification
下面搜索:
Application:Oracle General Ledger
Flexfield Title:Accounting Flexfield
5.2.5 参数 NUM
这个参数是我们当前使用的 SOB 的 Chart Of Accounts ID。
每个 SOB 都有自己的 Chart Of Accounts ID
Oracle General Ledger->Setup->Books->Define
35
System Specification
5.3 可能会遇到的问题
5.3.1 不能返回 ID
【问题描述】
也就是在 Form 上面,我们使用这个 FlexField 时,能够正确的得到该 Flexfield 以及其 Description,但是其 ID 这个
Item 我们确得不到任何值。
没有返回值
【问题原因】
Profile 设置所致
36
System Specification
设为 No 或者 Null
37
System Specification
This profile option is set to "Yes" to enable server side, PL/SQL flexfields validation for Key
Flexfields. This improves performance when using Key Flexfields over a wide area network by
reducing the number of network round trips needed to validate the entered segment
combinations.
You may find, however, that your validation's performance is better with client side validation. In
this case, set this profile option to "No".
38