Oracle Form开发常用技巧
1 手动提交 Request
在 Form 里面,我们可以用 APPS.FND_REQUEST.SUBMIT_REQUEST 提交一个 Request 到 Oracle Request Manager。 如果提交成功,该函数返回 Request ID,否则,返回 0。
1.1 初始化
在提交一个 Request 之前, 我们会调用 Ora
cle Standard 的 Procedure 对这个 Request 做一些基本的参数的初始化。 APPS.FND_GLOBAL.apps_initialize ( user_id resp_id resp_appl_id ); =>APPS.FND_GLOBAL.user_id, =>APPS.FND_GLOBAL.resp_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 Oracle General Ledger ……> OFA ……> SQLGL
Oracle Inventory Oracle Order Management Oracle Payables Oracle Pricing Oracle Purchasing Oracle Receivables 这个 Short Name 我们可以在
……>INV ……>ONT ……SQLAP ……QP ……PO ……AR
System Administrator -> Application -> Register 里面查到。
1.3.2 PROGRAM 必需参数 Short Name of concurrent program,not zhe executable Application -> Concurrent -> Program
2
1.3.3 DESCRIPTION 可选参数
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 里面,另外一个是
3
在 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
2.1.2 得到 Application 的 Short Name
用 Examine 可以得到 Application ID,然后用 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.
5
Request Parameter: Language 和 Application 必须和你定义 Message 时选择的一致。
在上面的参数的前提下,当我们跑完 Request 之后,该 Message 的信息就会被写入文件: /disk/DEV/devappl/bqe/11.5.0/mesg/US.msb
6
这里共有四种 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 里面调用了。 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');
7
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;
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
8
if FND_MESSAGE.warn then fnd_message.debug('True'); else 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 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; in varchar2 default 'question')
9
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. <7>、Clear 、 Clears the message stack <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 the retrieved message
10
Returns TRUE if user accepts. <12>、Question 、 Displays a message and up to three buttons in a forms modal window. <13>、Hint 、 Displays a message in the forms status line. <14>、Erase 、 Clears the forms status line. Similar to a Forms Alert.
3 Stacked Canvas
Stached Canvas 最终实现的效果如下:
滚动条可以自由拖动
11
3.1 新建 Window、Canvas、Block 、 、
按照正常的步骤增加 Window、Canvas、Block 各一个 为了便于理解和识别,我把 Window、Canvas、Block 的 Name 属性都设置成为 CANVAS_TEST 并且设置其属性分别如下 3.1.1 Window 属性 Property Name Subclass Information Title Primary Canvas Value CANVAS_TEST Window Adio Canvas Test CANVAS_TEST
3.1.2 Canvas 属性 Property Name Subclass Information Window Value CANVAS_TEST Canvas CANVAS_TEST
3.1.3 Block 属性 Property Name Subclass Information Query Data Source Name Number of Records Displayed Show Scroll Bar Scroll Bar Canvas Value CANVAS_TEST Block XXGL_JOURNAL_V 5 Yes CANVAS_TEST
3.2 新建一个 Stacked Canvas
对于一般的 Form,Stacked Canvas 都是基于另外一个 Canvas 上面。 在这里,我们以 CANVAS_TEST 为主
3.2.1 画 Stacked Canvas 打开 CANVAS_TEST 排版界面如下:
12
1、选中工具 Stacked Canvas 、
2、在 Canvas 上面按下鼠标左键拖动 、
这里,你会发现 Objects Navigator 里面的 Canvas 下面会多出一个 Canvas 来。
3.2.2 设置 Stacked Canvas 属性 Property Name Canvas Type Subclass Information Window Show Horizontal Scroll Bar Value CANVAS_TEST_STACKED Stacked Canvas Stacked CANVAS_TEST 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 都按照你需要的格式排版好。 注意两个问题:
13
1、 所有的 Item 必须都包括在 Canvas 上,不能超出 Canvas 的范围 2、 View 的大小这里可以不用调整,到下一步的时候在按照实际大小去拖动
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) , 就会出现一个问题:
14
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,然后把其位置尽量在最左边。
4 Form Folder 的实现
在客制的 Form 里面实现 Oracle Folder 的功能,最终效果如下:
15
栏位可以拖动
【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 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 及其相关的对象移至我们自己客制的 Form 为我们所用。
STANDARD_FOLDER
16
所以我们的操作是在同一窗口打开标准的 Form 和我们自己客制的 Form, 并且选择 APPSTAND.FMB 的 Object Groups STANDARD_FOLDER
然后用鼠标拖动至我们自己的 Form 的 Object Groups。 标准 Form:APPSTAND.fmb :
用鼠标选择后拖动 至我们自己的 Form
我们客制的 Form
此时会弹出对话框:
请选择仅仅是 Copy 对象还是连带其属性设置一起移动。 如果我们选择 Subclass,那么下一步骤 下一步骤(3.3)我们可以直接跳过 直接跳过。 下一步骤 直接跳过 如果我们现在 Copy,那么需要再次手动设置一些 Folder 对象的属性。 无论选择 Subclass 或者 Copy,你会发现,Form Builder 都会在你的 Form 里面自动添加很多对象。
17
做完这一步后, 会没有办法进行。 做完这一步后,请不要关闭 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 Object Name : STANDARD_OBJECTS : FOLDER_CONTROL
4.4 增加 Attached Libraries
做完上面的步骤后,可以看看你的 Attached libraries 里面有没有 APPFLDR 如果没有,我们需要手工添加进去
18
选中 Attached libraries 点击 Create
会弹出
选择打开之后再点击 山上图中的 Attach 会弹出
19
选择 YES 即可。
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 里面拖动 即可。
1、选择工具:Stacked Canvas 、选择工具:
2、在 Canvas MY_FOLDER 里面拖动 、
4.5.2 设置 Stacked Canvas 属性 修改 Name 为 FOLDER_STACK
20
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 的属性
Property Name Item Type Subclass Information Canvas Column Name
Value BRAND_TYPE、BRAND_TYPE_DESC、CATEGORY_SET_ID Text Item Text Item FOLDER_STACK(这个属性不能设错,必须是你的 Stacked Canvas) 这个属性不能设错, 这个属性不能设错 BRAND_TYPE、BRAND_TYPE_DESC、CATEGORY_SET_ID (各自对应 View XXIN_BRAND_TYPE_V 的栏位)
Data Type Maximum Length Prompt
和 View 一致 和 View 一致 保持为空
4.7 创建 Block MY_FOLDER_PROMPT
这个 Block 里面将会设置 3.5 里面添加的 Item 的 Prompt 信息以及 Folder 的其他的一些相关 Item Property Name Subclass Information Number of Records Displayed Value MY_FOLDER_PROMPT Block 1
4.7.1 增加三个 Item BRAND_TYPE、BRAND_TYPE_DESC、CATEGORY_SET_ID 、 、 增加这三个 Item,Name 必须和 Block MY_FOLDER 中的三个 Item 保持一致 , 设置其属性: Property Name Item Type Subclass Information Canvas Initial Value Value BRAND_TYPE、BRAND_TYPE_DESC、CATEGORY_SET_ID Display Item FOLDER_PROMPT_MULTIROW FOLDER_STACK(这个属性不能设错,必须是你的 Stacked Canvas) 这个属性不能设错, 这个属性不能设错 Brand Type、Brand Desc,Category (这个初始值就是在 Form 上面你将会看到的 prompt 值) Prompt 保持为空
21
4.7.2 增加其他相关 Item 我们还需要增加其他的一些 Item,都是和 Folder 的功能有关的。 Item ORDER_BY1 ORDER_BY2 ORDER_BY3 Property Item Type Subclass Information Canvas X Position Y Position Width Height 备注 Value Push Button FOLDER_ORDERBY MY_FOLDER 0 0 0 0
后面的四个 0 是这是这个 Item 不需要显示出来,是因为目前我们不需要利用几个 Button.
Item FOLDER_OPEN
Property Item Type Subclass Information Canvas Trigger WHEN-BUTTON_PRESSED
Value Push Button FOLDER_OPEN MY_FOLDER copy('OPEN', 'global.folder_action'); execute_trigger('folder_action');
Item FOLDER_TITLE
Property Item Type Subclass Information Canvas X Position Y Position Width Height
Value Display Item DYNAMIC TITLE MY_FOLDER 0 0 0 0
备注
后面的四个 0 是这是这个 Item 不需要显示出来,是因为目前我们不需要利用这个 Item.
Item FOLDER_DUMMY
Property Item Type Subclass Information Canvas X Position Y Position Width Height
Value Text Item FOLDER_DUMMY TOOLBAR 0 0 0 0
22
4.8 增加 Trigger
Level Form Object XXPOM400N Trigger FOLDER_ACTION WHEN-NEW-FORM-INSTANCE Event app_folder.event(:global.folder_action); app_folder.define_folder_block ( 'MY_FOLDER', 'MY_FOLDER', --'ObjectName' --'folder_block',
'MY_FOLDER_PROMPT', --'prompt_block', 'FOLDER_STACK', 'MY_FOLDER', --'stacked_canvas',
--'window',
NULL --'disabledfunctions'; ); Block MY_FOLDER PRE-BLOCK POST-BLOCK WHEN-NEW-BLOCK-INSTANCE PRE-QUERY KEY-EXEQRY KEY-NEXT-ITEM KEY-PREV-ITEM 备注 app_folder.event('PRE-BLOCK'); app_folder.event('POST-BLOCK'); app_folder.event('WHEN-NEW-BLOCK-INSTANCE'); app_folder.event('PRE-QUERY'); app_folder.event('KEY-EXEQRY'); app_folder.event('KEY-NEXT-ITEM'); app_folder.event('KEY-PREV-ITEM');
最简单的方式是直接把标准 Form ‘APPSTAND.fmb’ 中的 Block ‘SAMPLE_FOLDER’ 中 的各个 Triger 复制过来
到此,基本的 Folder 功能已经实现。 上面我们额外的增加了那么多的 Button、Text Item 等都有自己的用处, 其功能以及更完备的 Folder 功能需要各位在今后的工作、学习中去继续探索。
5 FlexField 的客制
5.1 Item Category
最终实现的效果如下图: 当我们点击你这个 Item 时,就会弹出和 Oracle Standard 一样的 LOV 去实现 Category 的选择。
23
点击后弹出下面的 Object
5.1.1 增加相关 Item 增加相关 设置其相关属性: Property Name Item Type Subclass Information List Of Values Validate form list Value CATEGORY(自己定义) Text Item Text Item ENABLE_LIST_LAMP No
Property Name Item Type Subclass Information
Value CATEGORY_ID(自己定义) Text Item Text Item
Property Name Item Type Subclass Information
Value CATEGORY_DESC(自己定义) Text Item 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
24
FND_KEY_FLEX.Define ( BLOCK FIELD ID description APPL_SHORT_NAME CODE NUM REQUIRED UPDATEABLE VALIDATE USEDBFLDS DINSERT ); 其中红色部分为必选参数,其他的都是可选参数 => ' FLEXFIELD_TEST', => ' CATEGORY', => 'CATEGORY_ID', => 'CATEGORY_DESC', => 'INV', => 'MCAT', => '50230',--STRUCTURE Number => 'N', =>NULL, => 'FULL', => 'N', => 'Y'
5.1.3 参数 APPL_SHORT_NAME 你的 Key Flex Field 是在哪个 Application 下面设置的,这里就需要提供那个 Application 的 Short Name。 可以从:System Administrator->Application->Register 这里得到
5.1.4 参数 CODE 指的是 Key Flex Field 的 ID Code。Category 是在 INV 模组设置的。
25
……Flexfields->Key->Segments …… 下面搜索: Application:Oracle Inventory Flexfield Title:Item Categories
5.1.5 参数 NUM 这个参数是我们当前使用的 Item Category 的 Structure ID。
不同的 Category 类型都有不同的 Structure ID。
Inventory->Setup->Items->Categories->Category Sets
26
公司当前使用的 Category Sets
5.2 Account
其实就是调用 Oracle Standard 的标准的 API 来实现这个功能。 点击后弹出下面的 Object
27
5.2.1 增加相关 Item 增加相关 设置其相关属性: Property Name Item Type Subclass Information List Of Values Validate form list Value ACCOUNT(自己定义) Text Item Text Item ENABLE_LIST_LAMP No
Property Name Item Type Subclass Information
Value ACCOUNT_ID(自己定义) Text Item Text Item
Property Name Item Type Subclass Information
Value ACCOUNT_DESC(自己定义) Text Item Text Item
5.2.2 FND_KEY_FLEX.Define 和 Category 的用法基本上一致,就是几个必要的参数不同。 FND_KEY_FLEX.Define 28
( BLOCK FIELD ID description APPL_SHORT_NAME CODE NUM REQUIRED UPDATEABLE VALIDATE USEDBFLDS DINSERT ); => ' FLEXFIELD_TEST', => ' ACCOUNT ', => ' ACCOUNT _ID', => ' ACCOUNT _DESC', => ' SQLGL', => ' GL#', => '50221',--STRUCTURE Number => 'N', =>NULL, => 'FULL', => 'N', => 'Y'
5.2.3 参数 APPL_SHORT_NAME 和 Category 里面得到的方法一样。
5.2.4 参数 CODE 指的是 Key Flex Field 的 ID Code。Account 是在 GL 模组设置的。 ……Flexfields->Key->Segments …… 下面搜索: Application:Oracle General Ledger Flexfield Title:Accounting Flexfield
29
5.2.5 参数 NUM 这个参数是我们当前使用的 SOB 的 Chart Of Accounts ID。 每个 SOB 都有自己的 Chart Of Accounts ID Oracle General Ledger->Setup->Books->Define
30
5.3 可能会遇到的问题
5.3.1 不能返回 ID 【问题描述】 问题描述】 也就是在 Form 上面,我们使用这个 FlexField 时,能够正确的得到该 Flexfield 以及其 Description,但是其 ID 这个 Item 我们确得不到任何值。
没有返回值 【问题原因】 问题原因】 Profile 设置所致 System Administrator 下面的 System Profile 设置 Application:Oracle General Ledger Profie:Flexfields:Validate On Server DEV 里面设置 Site 的 Value 是 Yes。也就是我们所作的动作需要提交 Server 端验证。 【解决办法】 解决办法】 有两个办法 1、 设置不用到 Server 端验证,就直接在客户端验证(设其值为 No) (推荐)
31
System Administrator->Profile->System
设为 No 或者 Null
2、在代码里面强制提交 Server 验证。 在 Account 的 WHEN-VALIDATE-ITEM 事件里面加上:fnd_flex.event('WHEN-VALIDATE-ITEM'); 但是这样做有一个后果: 如果我们的 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.
32
Level Site Application
Visible Allow Update Yes Yes Yes Yes Yes Yes
Responsibility Yes User Yes
The internal name for this profile option is FLEXFIELDS:VALIDATE_ON_SERVER.
33