在客制form时常常会遇到弹性栏位,如下图所示,其实就是调用标准API来实现的。
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()
这里使用到前两个
在form的when-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'
);
如有必要,一般在form和block的pre-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-form或when-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;
这里注意,如果直接赋值给item,form默认进入insert模式,不允许使用F11查询,因此可以使用参数赋值,将item的Initial Value设置为该参数:PARAMETER.EXPENSE_ACCOUNT_DSP.
另外在POST-QUERY中,也要添加该函数,不然按CTRL+F11查询后该栏位会为空白.
转载于:https://blog.51cto.com/thomaszhou/1227097