转自: https://blog.csdn.net/rfb0204421/article/details/8204103在Oracle Forms客户化开发中,如果遇到有在Form上提供关键性弹性域(以下简称“键弹性域”)功能支持的时候,我们可以利用FND_KEY_FLEX.DEFINE函数来轻松完成所有的初始化工作。其中也包括键弹性域的组合描述字段的显示的初始化:只要在FND_KEY_FLEX.DEFINE调用时指定了DESCRIPTION参数即可。然而有时我们仅是想要显示这个描述组合字段,仅此而已。并不需要提供完整的键弹性域功能。那么我们有什么快速而有效的方法来得到这个描述组合字段呢?试试下面的fnd_flex_keyval包里的方法吧~实例:获取库存物料的物料类别集中的类别组合“描述”字段需要用到的方法:
fnd_flex_keyval.validate_segs() fnd_flex_keyval.concatenated_descriptions()fnd_flex_keyval.validate_segs 的参数很多,对于获取物料类别组合字段我们仅需要其中的五个参数,如下:
fnd_flex_keyval.validate_segs(
operation =>
<
OPERATIONS>
, appl_short_name =>
<
Application
Short
Name>
, key_flex_code =>
<
Key
Flex
Code>
, structure_number =>
<
ID_FLEX_NUM>
, concat_segments =>
<
CONCATENATED_SEGMENTS>
);
参数说明:
- operation 可选值有:
FIND_COMBINATION - 所给定的组合字段必须在系统中已经被定义
CREATE_COMBINATION - 如果组合字段不存在,则在系统中创建该组合
CREATE_COMB_NO_AT - 功能和CREATE_COMBINATION相同,只是不像前者要使用相对独立的子事务autonomous transaction
CHECK_COMBINATION - 只是检查一下给定的组合字段是否合法,不管检查结果如何,都不创建新的组合
DEFAULT_COMBINATION - 返回默认的最小组合(这个参数值我也没太搞懂,呵呵)
CHECK_SEGMENTS - 分别验证字段(这个也很糊涂~)
- appl_short_name 应用程序简称,例如库存模块对应的应用简称为INV
- key_flex_code 键弹性域代码,可以在键弹性域定义界面找到,例如MCAT, GL#等等
- structure_number 指定键弹性域下的某个结构NUM,可以在键弹性域定义界面找到,对应字段为ID_FLEX_NUM
- concat_segments 要获取组合描述字段的对应的“值“组合字段,例如: A.000.MISC
一旦初始化验证字段成功,那么描述组合字段便可以通过调用fnd_flex_keyval.concatenated_descriptions()来得到了。
完整代码如下:
FUNCTION get_concat_descriptions(p_concat_segs IN VARCHAR2) RETURN VARCHAR2
IS
BEGIN
IF fnd_flex_keyval.validate_segs(
operation => 'FIND_COMBINATION' -- 请根据情况自行修改
, appl_short_name => 'INV' -- 请根据情况自行修改
, key_flex_code => 'MCAT' -- 请根据情况自行修改
, structure_number => 101 -- 请根据情况自行修改
, concat_segments => p_concat_segs) THEN
RETURN (fnd_flex_keyval.concatenated_descriptions());
ELSE
RETURN '';
END IF;
END;
参数说明:
- operation 可选值有:
FIND_COMBINATION - 所给定的组合字段必须在系统中已经被定义
CREATE_COMBINATION - 如果组合字段不存在,则在系统中创建该组合
CREATE_COMB_NO_AT - 功能和CREATE_COMBINATION相同,只是不像前者要使用相对独立的子事务autonomous transaction
CHECK_COMBINATION - 只是检查一下给定的组合字段是否合法,不管检查结果如何,都不创建新的组合
DEFAULT_COMBINATION - 返回默认的最小组合(这个参数值我也没太搞懂,呵呵)
CHECK_SEGMENTS - 分别验证字段(这个也很糊涂~)
- appl_short_name 应用程序简称,例如库存模块对应的应用简称为INV
- key_flex_code 键弹性域代码,可以在键弹性域定义界面找到,例如MCAT, GL#等等
- structure_number 指定键弹性域下的某个结构NUM,可以在键弹性域定义界面找到,对应字段为ID_FLEX_NUM
- concat_segments 要获取组合描述字段的对应的“值“组合字段,例如: A.000.MISC
一旦初始化验证字段成功,那么描述组合字段便可以通过调用fnd_flex_keyval.concatenated_descriptions()来得到了。
完整代码如下:
FUNCTION get_concat_descriptions(p_concat_segs IN VARCHAR2) RETURN VARCHAR2
IS
BEGIN
IF fnd_flex_keyval.validate_segs(
operation => 'FIND_COMBINATION' -- 请根据情况自行修改
, appl_short_name => 'INV' -- 请根据情况自行修改
, key_flex_code => 'MCAT' -- 请根据情况自行修改
, structure_number => 101 -- 请根据情况自行修改
, concat_segments => p_concat_segs) THEN
RETURN (fnd_flex_keyval.concatenated_descriptions());
ELSE
RETURN '';
END IF;
END;
获取货位的描述:
--Get Stock Locators(MTLL) 库存货位的组合与描述
--SELECT cux_flex_pkg.get_mtll_flexfields(p_locator_id => 3950, p_organization_id => 7890, p_return => 'S') locator_name FROM dual;
FUNCTION get_mtll_flexfields(p_locator_id NUMBER,
p_organization_id NUMBER,
p_return VARCHAR2 DEFAULT 'S') RETURN VARCHAR2 IS
l_concatenated_descriptions VARCHAR2(2000);
l_success BOOLEAN;
l_concatenated_segments VARCHAR2(2000);
c_structure_number NUMBER;
c_key_flex_code VARCHAR2(20);
c_appl_short_name VARCHAR2(20);
l_application_id NUMBER;
-- Keeps track of the current delimiter
l_delim VARCHAR2(1) := '';
l_error_message VARCHAR2(1000);
BEGIN
--
