Download as pdf or txt
Download as pdf or txt
You are on page 1of 38

System Specification

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

Project Code: Project Name: Doc.No.: Page: 38

Oracle General Ledger ……> SQLGL


Oracle Inventory ……>INV
Oracle Order Management ……>ONT
Oracle Payables ……SQLAP
Oracle Pricing ……QP
Oracle Purchasing ……PO
Oracle Receivables ……AR
这个 Short Name 我们可以在
System Administrator -> Application -> Register
里面查到。

1.3.2 PROGRAM
必需参数
Short Name of concurrent program,not zhe executable
Application -> Concurrent -> Program

2
System Specification

Project Code: Project Name: Doc.No.: Page: 38

1.3.3 DESCRIPTION
可选参数

3
System Specification

Project Code: Project Name: Doc.No.: Page: 38

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

2.1 AP 里面定义 Message


Application Developer->Application->Message
2.1.1 定义 Message
需要注意的是:
Current Message Text 的内容,可以直接写一段话
或者 &MESSAGE,这样写是可以在程序中用你需要的字符替换这里的参数 MESSAGE

4
System Specification

Project Code: Project Name: Doc.No.: Page: 38

注意蓝色部分是作为一个变
量,可以在代码中传入的

2.1.2 得到 Application 的 Short Name

用 Examine 可以得到 Application ID,然后用

5
System Specification

Project Code: Project Name: Doc.No.: Page: 38

SELECT APPLICATION_SHORT_NAME
FROM FND_APPLICATION
WHERE APPLICATION_ID=20003
就可以得到 Message 所在的 Application 的 Short Name,这个 Short name 将会在你设置 Message 时会用到

2.1.3 Run Request


定义message仅仅是把其存入数据库表fnd_new_messages中,但是不能立即为我们使用。所以我们必须在
Application Developer下面Run Request:Generate Messages.

6
System Specification

Project Code: Project Name: Doc.No.: Page: 38

Request Parameter:
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 都会出错,错误信息是:
The specified generator mode
DB_TO_SCRIPT/SCRIPT_TO_DB/SCRIPT_TO_RUNTIME
is not supported.

2.1.4 重新启动客户端 AP
注意:此时必须和编译 Custom 文件一样,重新启动客户端 AP 才能使 Message 起作用。

2.2 Message 的调用


定义好了 Message,我们需要的就是在 Package+Form 或者单独在 Form 里面调用了。

7
System Specification

Project Code: Project Name: Doc.No.: Page: 38

2.2.1 Package+Form 的调用方式


【Example Form】/disk/DEV/devappl/au/11.5.0/forms/US/XXPOM200N.fmb
【Example Package】DEV/XXFORM_ADIO_TEST_PKG
Button FND_MESSAGE
Package(Procedure RETURN_MESSAGE):
FND_MESSAGE.set_name('BQE','XXADIO_050224');
FND_MESSAGE.set_token('MESSAGE',' ADIO HUANG 2005-02-23');
Form:
BEGIN
APPS.XXFORM_ADIO_TEST_PKG.RETURN_MESSAGE;
FND_MESSAGE.retrieve;
FND_MESSAGE.SHOW;
EXCEPTION
WHEN OTHERS THEN
FND_MESSAGE.DEBUG(SQLERRM);
RAISE FORM_TRIGGER_FAILURE;
END;
2.2.2 单独 Form 的调用方式
【Example Form】/disk/DEV/devappl/au/11.5.0/forms/US/XXPOM200N.fmb
Button FORM_FND_MESSAGE
begin
FND_MESSAGE.set_name('BQE','XXADIO_050224');
FND_MESSAGE.set_token('MESSAGE',' ADIO HUANG 2005-02-23');
FND_MESSAGE.show;
exception
when others then
fnd_message.debug(sqlerrm);
raise form_trigger_failure;
end;

8
System Specification

Project Code: Project Name: Doc.No.: Page: 38

2.3 Message 显示的几种方式


2.3.1 FND_MESSAGE.show
这是一个 Procedure
把信息以最基本的方式显示给用户,和 FND_MESSAGE.DEBUG 一样的效果。

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

Project Code: Project Name: Doc.No.: Page: 38

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

Project Code: Project Name: Doc.No.: Page: 38

2.4 Client 端常用的几个方法、函数


<1>、Debug
Used for debugging. Display the specified string.
【Example】 FND_Message.Debug(‘Display This’);

<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

Project Code: Project Name: Doc.No.: Page: 38

<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

Project Code: Project Name: Doc.No.: Page: 38

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

Project Code: Project Name: Doc.No.: Page: 38

Query Data Source Name XXGL_JOURNAL_V


Number of Records Displayed 5
Show Scroll Bar Yes
Scroll Bar Canvas CANVAS_TEST

3.2 新建一个 Stacked Canvas


对于一般的 Form,Stacked Canvas 都是基于另外一个 Canvas 上面。
在这里,我们以 CANVAS_TEST 为主

3.2.1 画 Stacked Canvas


打开 CANVAS_TEST 排版界面如下:

1、选中工具 Stacked Canvas

2、在 Canvas 上面按下鼠标左键拖动

这里,你会发现 Objects Navigator 里面的 Canvas 下面会多出一个 Canvas 来。

3.2.2 设置 Stacked Canvas 属性


Property Value
Name CANVAS_TEST_STACKED
Canvas Type Stacked

14
System Specification

Project Code: Project Name: Doc.No.: Page: 38

Subclass Information Canvas Stacked


Window CANVAS_TEST
Show Horizontal Scroll Bar Yes

3.3 Block 下面增加 Item


在 Block CANVAS_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、SubClass Informtion、Prompt、Data Type 等。
其中最重要的属性就是 Canvas 了
我们设置 JE_SOURCE 和 JE_CATEGORY 在 Canvas CANVAS_TEST 上,其余的八个 Item 在 Canvas
CANVAS_TEST_STACKED 上面

3.4 Canvas 排版
3.4.1 Stacked Canvas 排版
如图,我们把放在 Stacked Canvas 上面的 Item 都按照你需要的格式排版好。
注意两个问题:
1、 所有的 Item 必须都包括在 Canvas 上,不能超出 Canvas 的范围
2、 View 的大小这里可以不用调整,到下一步的时候在按照实际大小去拖动

15
System Specification

Project Code: Project Name: Doc.No.: Page: 38

3.4.2 Canvas CANVAS_TEST 排版

交界的地方不能有重叠

这个主 Canvas 可以看到你全部的 Item,也就是你最终会在 Form 上面看到效果。


可以按照需求排版,但是注意一点,Canvas 上的 Item 和 Stacked Canvas 不能有重叠的部分。
如果出现有重叠的部分,最终的 Form 就会出现 Stacked Canvas 消失的现象,后面会有提及。

3.5 Stacked Canvas 会突然消失的处理


3.5.1 现象
在我们自己客制的 Form 里面,如果排版处理的不好,会出现如下情况:

鼠标点击进去

这个 Form,看起来一切正常,Stacked Canvas 的水平滚动条也能拖动。


但是有一个地方,如果我们去点击 Category 这个 Item(紧挨着 Stacked Canvas 的一个 Item)

就会出现一个问题:

16
System Specification

Project Code: Project Name: Doc.No.: Page: 38

Stacked Canvas 不见了

按 Tab 键又会显示出来

这个时候,Stacked Canvas 以及上面的 Item 都消失了,但是我们按 Tab 键的时候,其又会显示出来的。


3.5.2 产生的原因
Canvas CANVAS_TEST_STACKED 和 CANVAS_TEST 有重叠的部分。
对于 Stacked Canvas,任何部分被不在画布内的 ITEM 覆盖,Stacked Canvas 就会整个被遮盖

3.5.3 解决办法
当然是调整最后一个 Item 和 Stacked Canvas 的位子了,使之不出现重叠的部分。
小提示:
在 Stacked Canvas 上面,可以选中所有的 Item,然后把其位置尽量在最左边。

17
System Specification

Project Code: Project Name: Doc.No.: Page: 38

4 Form Folder 的实现


在客制的 Form 里面实现 Oracle Folder 的功能,最终效果如下:

栏位可以拖动

【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 新建 Form XXPOM400N


按照在 Form Builder 基础开发(Form Builder Basic Development.doc)里面讲的步骤,我们新建一个 Form
XXPOM400N。
4.1.1 添加 Form Objects
包括一个 Window,MY_FOLDER
一个 Canvas, MY_FOLDER
一个 Block,MY_FOLDER
4.1.2 修改 Trigger 和 Program Units
Form Level Trigger: PRE-FORM
Program Units:APP_CUSTOM

4.1.3 修改其他属性设置
Form 的 Console Window,MY_FOLDER
Form 的 First Navigation Data Block,MY_FOLDER
Window 的 Primary Canvas,MY_FOLDER

18
System Specification

Project Code: Project Name: Doc.No.: Page: 38

Block MY_FOLDER的Query Data Source Name,XXIN_BRAND_TYPE_V


Block MY_FOLDER的Number of Records Displayed,5
……
4.2 添加 Folder 相关的 Objects
这些相关的 Window、Canvas、Block、Item…等都包含在 Oracle Standard Form APPSTAND.FMB,所以我们需
要下载并且在同一个 Form Builder 窗口里面打开这个标准 Form。

在这步操作里面,我们需要把 APPSTAND.FMB 的 Object Groups STANDARD_FOLDER


及其相关的对象移至我们自己客制的 Form 为我们所用。

所以我们的操作是在同一窗口打开标准的 Form 和我们自己客制的 Form,并且选择 APPSTAND.FMB 的 Object


Groups STANDARD_FOLDER
然后用鼠标拖动至我们自己的 Form 的 Object Groups。

19
System Specification

Project Code: Project Name: Doc.No.: Page: 38

标准 Form:APPSTAND.fmb

用鼠标选择后拖动
至我们自己的 Form

我们客制的 Form

此时会弹出对话框:

请选择仅仅是 Copy 对象还是连带其属性设置一起移动。


如果我们选择 Subclass,那么下一步骤(3.3)我们可以直接跳过。

20
System Specification

Project Code: Project Name: Doc.No.: Page: 38

如果我们现在 Copy,那么需要再次手动设置一些 Folder 对象的属性。


无论选择 Subclass 或者 Copy,你会发现,Form Builder 都会在你的 Form 里面自动添加很多对象。
做完这一步后,请不要关闭 APPSTAND.FMB,否则,步骤 3.3 会没有办法进行。
4.3 设 FLODER BLOCKS 的属性
在 3.2 里面如果我们选择的是 Copy,那么需要进行这一步设置,否则,可以直接跳过。
4.3.1 设置 Block FOLDER_TOOLS 的属性

选择 Object
选择 Module:
STANDARD_OBJECTS
选择 Object Name:
FOLDER_TOOLS

4.3.2 设置 Block FOLDER_CONTROL 的属性


类似上图的设置,只不过选择项不同:
Module : STANDARD_OBJECTS
Object Name : FOLDER_CONTROL
4.4 增加 Attached Libraries
做完上面的步骤后,可以看看你的 Attached libraries 里面有没有
APPFLDR
如果没有,我们需要手工添加进去

21
System Specification

Project Code: Project Name: Doc.No.: Page: 38

选中 Attached libraries
点击 Create

会弹出

22
System Specification

Project Code: Project Name: Doc.No.: Page: 38

选择打开之后再点击
山上图中的 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

Project Code: Project Name: Doc.No.: Page: 38

1、选择工具:Stacked Canvas

2、在 Canvas MY_FOLDER 里面拖动

4.5.2 设置 Stacked Canvas 属性


修改 Name 为 FOLDER_STACK

4.6 Block MY_FOLDER 增加 Item


4.6.1 主 Block 增加显示 Item
这里我们和 View 保持一致,增加三个 Item:
BRAND_TYPE
BRAND_TYPE_DESC
CATEGORY_SET_ID
4.6.2 设置 Item 的属性

24
System Specification

Project Code: Project Name: Doc.No.: Page: 38

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 保持为空

4.7 创建 Block MY_FOLDER_PROMPT


这个 Block 里面将会设置 3.5 里面添加的 Item 的 Prompt 信息以及 Folder 的其他的一些相关 Item
Property Value
Name MY_FOLDER_PROMPT
Subclass Information Block
Number of Records Displayed 1

4.7.1 增加三个 Item BRAND_TYPE、BRAND_TYPE_DESC、CATEGORY_SET_ID


增加这三个 Item,Name 必须和 Block MY_FOLDER 中的三个 Item 保持一致
设置其属性:
Property Value
Name BRAND_TYPE、BRAND_TYPE_DESC、CATEGORY_SET_ID
Item Type Display Item
Subclass Information FOLDER_PROMPT_MULTIROW
Canvas FOLDER_STACK(这个属性不能设错,必须是你的 Stacked Canvas)
Initial Value Brand Type、Brand Desc,Category
(这个初始值就是在 Form 上面你将会看到的 prompt 值)
Prompt 保持为空

4.7.2 增加其他相关 Item


我们还需要增加其他的一些 Item,都是和 Folder 的功能有关的。

25
System Specification

Project Code: Project Name: Doc.No.: Page: 38

Item Property Value


ORDER_BY1 Item Type Push Button
ORDER_BY2 Subclass Information FOLDER_ORDERBY
ORDER_BY3 Canvas MY_FOLDER
X Position 0
Y Position 0
Width 0
Height 0
备注 后面的四个 0 是这是这个 Item 不需要显示出来,是因为目前我们不需要利用几个 Button.

Item Property Value


FOLDER_OPEN Item Type Push Button
Subclass Information FOLDER_OPEN
Canvas MY_FOLDER
Trigger WHEN-BUTTON_PRESSED copy('OPEN', 'global.folder_action');
execute_trigger('folder_action');

Item Property Value


FOLDER_TITLE Item Type Display Item
Subclass Information DYNAMIC TITLE
Canvas MY_FOLDER
X Position 0
Y Position 0
Width 0
Height 0
备注 后面的四个 0 是这是这个 Item 不需要显示出来,是因为目前我们不需要利用这个 Item.

Item Property Value


FOLDER_DUMMY Item Type Text Item
Subclass Information FOLDER_DUMMY
Canvas TOOLBAR

26
System Specification

Project Code: Project Name: Doc.No.: Page: 38

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 复制过来

到此,基本的 Folder 功能已经实现。


上面我们额外的增加了那么多的 Button、Text Item 等都有自己的用处,
其功能以及更完备的 Folder 功能需要各位在今后的工作、学习中去继续探索。

27
System Specification

Project Code: Project Name: Doc.No.: Page: 38

5 FlexField 的客制
5.1 Item Category
最终实现的效果如下图:
当我们点击你这个 Item 时,就会弹出和 Oracle Standard 一样的 LOV 去实现 Category 的选择。

点击后弹出下面的 Object

5.1.1 增加相关 Item


设置其相关属性:
Property Value
Name CATEGORY(自己定义)
Item Type Text Item
Subclass Information Text Item
List Of Values ENABLE_LIST_LAMP
Validate form list No

Property Value
Name CATEGORY_ID(自己定义)
Item Type Text Item
Subclass Information Text Item

28
System Specification

Project Code: Project Name: Doc.No.: Page: 38

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

Project Code: Project Name: Doc.No.: Page: 38

5.1.4 参数 CODE
指的是 Key Flex Field 的 ID Code。Category 是在 INV 模组设置的。
……Flexfields->Key->Segments
下面搜索:
Application:Oracle Inventory
Flexfield Title:Item Categories

30
System Specification

Project Code: Project Name: Doc.No.: Page: 38

5.1.5 参数 NUM
这个参数是我们当前使用的 Item Category 的 Structure ID。
不同的 Category 类型都有不同的 Structure ID。

Inventory->Setup->Items->Categories->Category Sets

31
System Specification

Project Code: Project Name: Doc.No.: Page: 38

公司当前使用的 Category Sets

5.2 Account
其实就是调用 Oracle Standard 的标准的 API 来实现这个功能。

32
System Specification

Project Code: Project Name: Doc.No.: Page: 38

点击后弹出下面的 Object

5.2.1 增加相关 Item


设置其相关属性:
Property Value
Name ACCOUNT(自己定义)
Item Type Text Item
Subclass Information Text Item
List Of Values ENABLE_LIST_LAMP
Validate form list No

Property Value
Name ACCOUNT_ID(自己定义)
Item Type Text Item
Subclass Information Text Item

33
System Specification

Project Code: Project Name: Doc.No.: Page: 38

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

Project Code: Project Name: Doc.No.: Page: 38

下面搜索:
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

Project Code: Project Name: Doc.No.: Page: 38

5.3 可能会遇到的问题
5.3.1 不能返回 ID
【问题描述】
也就是在 Form 上面,我们使用这个 FlexField 时,能够正确的得到该 Flexfield 以及其 Description,但是其 ID 这个
Item 我们确得不到任何值。

没有返回值

【问题原因】
Profile 设置所致

36
System Specification

Project Code: Project Name: Doc.No.: Page: 38

System Administrator 下面的 System Profile 设置


Application:Oracle General Ledger
Profie:Flexfields:Validate On Server
DEV 里面设置 Site 的 Value 是 Yes。也就是我们所作的动作需要提交 Server 端验证。
【解决办法】
有两个办法
1、 设置不用到 Server 端验证,就直接在客户端验证(设其值为 No)(推荐)
System Administrator->Profile->System

设为 No 或者 Null

2、在代码里面强制提交 Server 验证。


在 Account 的 WHEN-VALIDATE-ITEM 事件里面加上:fnd_flex.event('WHEN-VALIDATE-ITEM');
但是这样做有一个后果:

37
System Specification

Project Code: Project Name: Doc.No.: Page: 38

如果我们的 Account 设置允许 Dynaymic Insert,那么在这个 Form,你每次选择到一个不存在的 Account,


也会返回一个 ID,这时就会在系统里面自动增加一个 Account。
【参考资料】

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".

Users can see and update this profile option.

This profile option is visible and updatable at all four levels.

Level Visible Allow Update

Site Yes Yes

Application Yes Yes

Responsibility Yes Yes

User Yes Yes

The internal name for this profile option is FLEXFIELDS:VALIDATE_ON_SERVER.

38

You might also like