利用fnd_flex_keyval包轻松获取关键性弹性域组合描述字段
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,转自: https://blog.csdn.net/rfb0204421/article/details/8204103在Oracle Forms客户化开发中,如果遇到有在Form上提供关键性弹性域(
千家信息网最后更新 2025年11月07日利用fnd_flex_keyval包轻松获取关键性弹性域组合描述字段
参数说明: - operation 可选值有:
参数说明: - operation 可选值有:
获取货位的描述: --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 -- --Bug: Value &VALUE for the flexfield segment Subinventory does not exist in the value set @VALUE_SET. --如果在健弹性域定义的值集中使用了PROFILE,需要初始化赋值之后才行,否则会出现以上错误 --SELECT FND_PROFILE.VALUE_WNPS('MFG_ORGANIZATION_ID') FROM DUAL; --fnd_global.apps_initialize(resp_appl_id => 401, resp_id => 65780, user_id => 1013436); IF FND_PROFILE.VALUE_WNPS('MFG_ORGANIZATION_ID') IS NULL THEN fnd_profile.put('MFG_ORGANIZATION_ID', p_organization_id); END IF; c_key_flex_code := 'MTLL'; c_appl_short_name := 'INV'; c_structure_number := 101; SELECT application_id INTO l_application_id FROM fnd_application_vl a WHERE a.application_short_name = c_appl_short_name; -- Get the delimiter l_delim := fnd_flex_apis.get_segment_delimiter(x_application_id => l_application_id, x_id_flex_code => c_key_flex_code, x_id_flex_num => c_structure_number); --参数DATA_SET一定要设置,和物料的键弹性域定义的原理一样:因为INVENTORY_LOCATION_ID在数据库的基表中不是唯一的值 --SELECT set_defining_column_name,unique_id_column_name,application_table_name FROM fnd_id_flexs WHERE id_flex_code IN ('MTLL', 'MSTK'); l_success := fnd_flex_keyval.validate_ccid(appl_short_name => c_appl_short_name, key_flex_code => c_key_flex_code, structure_number => c_structure_number, data_set => to_char(p_organization_id), -- Requied combination_id => p_locator_id); dbms_output.put_line('l_success = ' || to_char(sys.diutil.bool_to_int(l_success))); l_error_message := fnd_flex_keyval.error_message; IF l_success THEN l_concatenated_descriptions := fnd_flex_keyval.concatenated_descriptions; --dbms_output.put_line('Concatenated Descriptions : ' || l_concatenated_descriptions); l_concatenated_segments := fnd_flex_keyval.concatenated_values; --dbms_output.put_line('Concatenated Segments : ' || l_concatenated_segments); ELSE l_concatenated_segments := NULL; l_concatenated_descriptions := NULL; fnd_message.set_name('FND', 'FLEX-SSV EXCEPTION'); fnd_message.set_token('MSG', l_error_message); dbms_output.put_line(fnd_message.get); RAISE app_exceptions.application_exception; END IF; IF p_return = 'S' THEN RETURN(l_concatenated_segments); ELSIF p_return = 'D' THEN RETURN(l_concatenated_descriptions); ELSE RETURN(l_concatenated_segments); END IF; EXCEPTION WHEN OTHERS THEN RETURN NULL; app_exception.raise_exception; END get_mtll_flexfields;
库存物料的组合与描述库存物料的组合与描述: FUNCTION get_mstk_flexfields(p_item_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 -- --如果在健弹性域定义的值集中使用了PROFILE,需要初始化赋值之后才行,否则会出现以上错误 --SELECT FND_PROFILE.VALUE_WNPS('MFG_ORGANIZATION_ID') FROM DUAL; --fnd_global.apps_initialize(resp_appl_id => 401, resp_id => 65780, user_id => 1013436); IF FND_PROFILE.VALUE_WNPS('MFG_ORGANIZATION_ID') IS NULL THEN fnd_profile.put('MFG_ORGANIZATION_ID', p_organization_id); END IF; c_key_flex_code := 'MSTK'; c_appl_short_name := 'INV'; c_structure_number := 101; SELECT application_id INTO l_application_id FROM fnd_application_vl a WHERE a.application_short_name = c_appl_short_name; -- Get the delimiter l_delim := fnd_flex_apis.get_segment_delimiter(x_application_id => l_application_id, x_id_flex_code => c_key_flex_code, x_id_flex_num => c_structure_number); --参数DATA_SET一定要设置,和物料的键弹性域定义的原理一样:因为INVENTORY_LOCATION_ID在数据库的基表中不是唯一的值 --SELECT set_defining_column_name,unique_id_column_name,application_table_name FROM fnd_id_flexs WHERE id_flex_code IN ('MTLL', 'MSTK'); l_success := fnd_flex_keyval.validate_ccid(appl_short_name => c_appl_short_name, key_flex_code => c_key_flex_code, structure_number => c_structure_number, data_set => to_char(p_organization_id), -- Requied combination_id => p_item_id); dbms_output.put_line('l_success = ' || to_char(sys.diutil.bool_to_int(l_success))); l_error_message := fnd_flex_keyval.error_message; IF l_success THEN l_concatenated_descriptions := fnd_flex_keyval.concatenated_descriptions; --dbms_output.put_line('Concatenated Descriptions : ' || l_concatenated_descriptions); l_concatenated_segments := fnd_flex_keyval.concatenated_values; --dbms_output.put_line('Concatenated Segments : ' || l_concatenated_segments); ELSE l_concatenated_segments := NULL; l_concatenated_descriptions := NULL; fnd_message.set_name('FND', 'FLEX-SSV EXCEPTION'); fnd_message.set_token('MSG', l_error_message); dbms_output.put_line(fnd_message.get); RAISE app_exceptions.application_exception; END IF; IF p_return = 'S' THEN RETURN(l_concatenated_segments); ELSIF p_return = 'D' THEN RETURN(l_concatenated_descriptions); ELSE RETURN(l_concatenated_segments); END IF; EXCEPTION WHEN OTHERS THEN RETURN NULL; app_exception.raise_exception; END get_mstk_flexfields;
转自: 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()
参数说明: - operation 可选值有:
- FIND_COMBINATION - 所给定的组合字段必须在系统中已经被定义
- CREATE_COMBINATION - 如果组合字段不存在,则在系统中创建该组合
- CREATE_COMB_NO_AT - 功能和CREATE_COMBINATION相同,只是不像前者要使用相对独立的子事务autonomous transaction
- CHECK_COMBINATION - 只是检查一下给定的组合字段是否合法,不管检查结果如何,都不创建新的组合
- DEFAULT_COMBINATION - 返回默认的最小组合(这个参数值我也没太搞懂,呵呵)
- CHECK_SEGMENTS - 分别验证字段(这个也很糊涂~)
参数说明: - operation 可选值有:
- FIND_COMBINATION - 所给定的组合字段必须在系统中已经被定义
- CREATE_COMBINATION - 如果组合字段不存在,则在系统中创建该组合
- CREATE_COMB_NO_AT - 功能和CREATE_COMBINATION相同,只是不像前者要使用相对独立的子事务autonomous transaction
- CHECK_COMBINATION - 只是检查一下给定的组合字段是否合法,不管检查结果如何,都不创建新的组合
- DEFAULT_COMBINATION - 返回默认的最小组合(这个参数值我也没太搞懂,呵呵)
- CHECK_SEGMENTS - 分别验证字段(这个也很糊涂~)
获取货位的描述: --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 -- --Bug: Value &VALUE for the flexfield segment Subinventory does not exist in the value set @VALUE_SET. --如果在健弹性域定义的值集中使用了PROFILE,需要初始化赋值之后才行,否则会出现以上错误 --SELECT FND_PROFILE.VALUE_WNPS('MFG_ORGANIZATION_ID') FROM DUAL; --fnd_global.apps_initialize(resp_appl_id => 401, resp_id => 65780, user_id => 1013436); IF FND_PROFILE.VALUE_WNPS('MFG_ORGANIZATION_ID') IS NULL THEN fnd_profile.put('MFG_ORGANIZATION_ID', p_organization_id); END IF; c_key_flex_code := 'MTLL'; c_appl_short_name := 'INV'; c_structure_number := 101; SELECT application_id INTO l_application_id FROM fnd_application_vl a WHERE a.application_short_name = c_appl_short_name; -- Get the delimiter l_delim := fnd_flex_apis.get_segment_delimiter(x_application_id => l_application_id, x_id_flex_code => c_key_flex_code, x_id_flex_num => c_structure_number); --参数DATA_SET一定要设置,和物料的键弹性域定义的原理一样:因为INVENTORY_LOCATION_ID在数据库的基表中不是唯一的值 --SELECT set_defining_column_name,unique_id_column_name,application_table_name FROM fnd_id_flexs WHERE id_flex_code IN ('MTLL', 'MSTK'); l_success := fnd_flex_keyval.validate_ccid(appl_short_name => c_appl_short_name, key_flex_code => c_key_flex_code, structure_number => c_structure_number, data_set => to_char(p_organization_id), -- Requied combination_id => p_locator_id); dbms_output.put_line('l_success = ' || to_char(sys.diutil.bool_to_int(l_success))); l_error_message := fnd_flex_keyval.error_message; IF l_success THEN l_concatenated_descriptions := fnd_flex_keyval.concatenated_descriptions; --dbms_output.put_line('Concatenated Descriptions : ' || l_concatenated_descriptions); l_concatenated_segments := fnd_flex_keyval.concatenated_values; --dbms_output.put_line('Concatenated Segments : ' || l_concatenated_segments); ELSE l_concatenated_segments := NULL; l_concatenated_descriptions := NULL; fnd_message.set_name('FND', 'FLEX-SSV EXCEPTION'); fnd_message.set_token('MSG', l_error_message); dbms_output.put_line(fnd_message.get); RAISE app_exceptions.application_exception; END IF; IF p_return = 'S' THEN RETURN(l_concatenated_segments); ELSIF p_return = 'D' THEN RETURN(l_concatenated_descriptions); ELSE RETURN(l_concatenated_segments); END IF; EXCEPTION WHEN OTHERS THEN RETURN NULL; app_exception.raise_exception; END get_mtll_flexfields;
库存物料的组合与描述库存物料的组合与描述: FUNCTION get_mstk_flexfields(p_item_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 -- --如果在健弹性域定义的值集中使用了PROFILE,需要初始化赋值之后才行,否则会出现以上错误 --SELECT FND_PROFILE.VALUE_WNPS('MFG_ORGANIZATION_ID') FROM DUAL; --fnd_global.apps_initialize(resp_appl_id => 401, resp_id => 65780, user_id => 1013436); IF FND_PROFILE.VALUE_WNPS('MFG_ORGANIZATION_ID') IS NULL THEN fnd_profile.put('MFG_ORGANIZATION_ID', p_organization_id); END IF; c_key_flex_code := 'MSTK'; c_appl_short_name := 'INV'; c_structure_number := 101; SELECT application_id INTO l_application_id FROM fnd_application_vl a WHERE a.application_short_name = c_appl_short_name; -- Get the delimiter l_delim := fnd_flex_apis.get_segment_delimiter(x_application_id => l_application_id, x_id_flex_code => c_key_flex_code, x_id_flex_num => c_structure_number); --参数DATA_SET一定要设置,和物料的键弹性域定义的原理一样:因为INVENTORY_LOCATION_ID在数据库的基表中不是唯一的值 --SELECT set_defining_column_name,unique_id_column_name,application_table_name FROM fnd_id_flexs WHERE id_flex_code IN ('MTLL', 'MSTK'); l_success := fnd_flex_keyval.validate_ccid(appl_short_name => c_appl_short_name, key_flex_code => c_key_flex_code, structure_number => c_structure_number, data_set => to_char(p_organization_id), -- Requied combination_id => p_item_id); dbms_output.put_line('l_success = ' || to_char(sys.diutil.bool_to_int(l_success))); l_error_message := fnd_flex_keyval.error_message; IF l_success THEN l_concatenated_descriptions := fnd_flex_keyval.concatenated_descriptions; --dbms_output.put_line('Concatenated Descriptions : ' || l_concatenated_descriptions); l_concatenated_segments := fnd_flex_keyval.concatenated_values; --dbms_output.put_line('Concatenated Segments : ' || l_concatenated_segments); ELSE l_concatenated_segments := NULL; l_concatenated_descriptions := NULL; fnd_message.set_name('FND', 'FLEX-SSV EXCEPTION'); fnd_message.set_token('MSG', l_error_message); dbms_output.put_line(fnd_message.get); RAISE app_exceptions.application_exception; END IF; IF p_return = 'S' THEN RETURN(l_concatenated_segments); ELSIF p_return = 'D' THEN RETURN(l_concatenated_descriptions); ELSE RETURN(l_concatenated_segments); END IF; EXCEPTION WHEN OTHERS THEN RETURN NULL; app_exception.raise_exception; END get_mstk_flexfields;
组合
字段
弹性
参数
情况
物料
库存
代码
功能
只是
界面
系统
应用
检查
验证
方法
类别
合法
最小
相同
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发需求不明确
吉林智能软件开发生产厂家
小学生学网络安全
服务器网页登录后连接被重置
金融网络安全知识手册
数据库软件自己电脑可以安装吗
网络技术转让协议
网络技术可以提高工作效率吗
mc908gz60数据库
数据库时区是哪的
网络安全的ip过滤器
天水市财政局 网络安全
计算机国考三级网络技术
db2数据库连接linux
广西计算机网络技术大学
数据链软件开发厂家直销
大逃杀服务器在哪
政府网络安全演练项目账务处理
哪个大学的网络安全专业好
大众点评软件开发加班
软件开发工作需要出差吗
安卓专业软件开发
数据库传输加密
什么是代理服务器的地址和端口
怎么选择软件开发项目
资深软件开发平台
鸿蒙js 关系数据库
软件工程方向网络技术
数据库用书
怎么样命令行登录数据库