在客制form时常常会遇到弹性栏位,如下图所示,其实就是调用标准API来实现的。

175539993.jpg

1、添加相关item:下列名称都可以自己定义

account_segment_values:会计科目节段,也就是上图中显示的费用科目,非database 

Property

Value

Name

account_segment_values

Item Type

Text Item

Subclass Information

Text Item

List Of Values

ENABLE_LIST_LAMP

Validate form list

No

Database item

No

account_id:科目ID,这个一般写入Database

Property

Value

Name

ACCOUNT_ID

Item Type

Text Item

Subclass Information

Text Item

Database item

Yes

account_desc:科目描述

Property

Value

Name

ACCOUNT_DESC

Item Type

Text Item

Subclass Information

Text Item

2、使用到的函数

FND_KEY_FLEX.Define() 定义弹性域

FND_FLEX_EXT.GET_SEGS() 获取科目节段组合

fnd_flex_ext.get_ccid() 获取ID

FND_FLEX_KEYVAL.validate_ccid验证ccid的有效性

FND_FLEX_KEYVAL.concatenated_descriptions 得到ccid的描述

FND_KEY_FLEX.Update_Definition()

这里使用到前两个

formwhen-new-form-instance中定义弹性域:

FND_KEY_FLEX.Define

(

BLOCK=> 'SFC_MTL_SYSTEM_ITEM_CUSV',

FIELD=> 'EXPENSE_ACCOUNT_DSP',

ID=> 'EXPENSE_ACCOUNT',

APPL_SHORT_NAME=> 'SQLGL',

CODE=> 'GL#',

NUM=> :PARAMETER.CHART_OF_ACCOUNTS_ID,--STRUCTURE Number(CHART_OF_ACCOUNTS_ID')

REQUIRED=>'N',

VALIDATE=>'FULL',

USEDBFLDS=>'N',

VRULE=>'\\nSUMMARY_FLAG\\nI\\nAPPL=SQLGL;NAME=FLEX-Parent not allowed\\nN\\0GL_GLOBAL\\nDETAIL_POSTING_ALLOWED\\nE\\nAPPL=SQLGL;NAME=INV_VRULE_POSTING\\nN'

);

如有必要,一般在formblockpre-query,post-query,pre-insert,pre-upadte,when-validate-record,when-new-item-instance这些trigger中添加如下标准函数:

FND_FLEX.EVENT('PRE-UPDATE');

FND_FLEX.EVENT('PRE-INSERT');

FND_FLEX.EVENT('POST-QUERY');

FND_FLEX.EVENT('PRE-QUERY');

FND_FLEX.EVENT('WHEN-VALIDATE-RECORD');

FND_FLEX.EVENT('WHEN-NEW-ITEM-INSTANCE');

3、如果要在开启form时带出会计科目组合,则需用到FND_FLEX_EXT.GET_SEGS()函数.

可在pre-formwhen-new-form-instance中添加:

l_concat_segs :=

fnd_flex_ext.get_segs(

application_short_name => 'SQLGL',

key_flex_code => 'GL#',

structure_number =>:PARAMETER.CHART_OF_ACCOUNTS_ID,

combination_id => :PARAMETER.ORG_EXPENSE_ACCOUNT);

if l_concat_segs is null then

FND_MESSAGE.RETRIEVE;

FND_MESSAGE.ERROR;

RAISE FORM_TRIGGER_FAILURE;

else

--:SFC_MTL_SYSTEM_ITEM_CUSV.expense_account_dsp := l_concat_segs;

:PARAMETER.EXPENSE_ACCOUNT_DSP :=l_concat_segs;

这里注意,如果直接赋值给itemform默认进入insert模式,不允许使用F11查询,因此可以使用参数赋值,将itemInitial Value设置为该参数:PARAMETER.EXPENSE_ACCOUNT_DSP.

另外在POST-QUERY中,也要添加该函数,不然按CTRL+F11查询后该栏位会为空白.