千家信息网

利用fnd_flex_keyval包轻松获取关键性弹性域组合描述字段

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,转自: https://blog.csdn.net/rfb0204421/article/details/8204103在Oracle Forms客户化开发中,如果遇到有在Form上提供关键性弹性域(
千家信息网最后更新 2025年01月20日利用fnd_flex_keyval包轻松获取关键性弹性域组合描述字段

转自: 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 -- --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安全错误 数据库的锁怎样保障安全 无备份误删除sql数据库 长沙sever服务器散热器供应 软件开发苹果笔记本哪款好 河南app软件开发定制费用 长春高性能服务器什么价格 万仁堂医药科技互联网中心 服务器2012进安全模式 网络安全手抄报画话语 泰拉1.4版本服务器国际服 梦幻号忘记哪个服务器怎么查找 南开区应用软件开发服务技术规范 最简单的软件开发模型 网络安全的朗读内容 深圳自主可控软件开发批发价格 网络安全知识68个字 主从数据库如何读写锁 我与网络安全儿童画 华为重启服务器失败解决方法 奥美外汇有没有数据库 移动办公怎么查看服务器地址 长春理工网络安全法实施4周年 什么叫数据库实例 程序员软件开发与系统维护 软件开发负责人职责 经贸学院计算机网络技术 全商品的软件开发 肇庆聊天软件开发咨询 db2数据库版本升级 盛立军计算机网络技术基础视频 计算机三级网络技术英语简称
0