加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 04:39:43 所属栏目:百科 来源:网络整理
导读:在Oracle Forms客户化开发中,如果遇到有在Form上提供关键性弹性域(以下简称“键弹性域”)功能支持的时候,我们可以利用FND_KEY_FLEX.DEFINE函数来轻松完成所有的初始化工作。其中也包括键弹性域的组合描述字段的显示的初始化:只要在FND_KEY_FLEX.DEFINE

在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 的参数很多,对于获取物料类别组合字段我们仅需要其中的五个参数,如下:
[html] view plain copy print ?
  1. fnd_flex_keyval.validate_segs(??
  2. ??????????operation????????=>?<OPERATIONS>??
  3. ????????,?appl_short_name??=>?<Application?Short?Name>??
  4. ????????,?key_flex_code????=>?<Key?Flex?Code>??
  5. ????????,?structure_number?=>?<ID_FLEX_NUM>??
  6. ????????,?concat_segments??=>?<CONCATENATED_SEGMENTS>??
  7. );??


参数说明:

- 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()来得到了。
完整代码如下:
?
?
[html] view plain copy print ?
  1. <PRE>FUNCTION?get_concat_descriptions(p_concat_segs?IN?VARCHAR2)?RETURN?VARCHAR2??
  2. ????IS??
  3. ????BEGIN??
  4. ??????IF?fnd_flex_keyval.validate_segs(??
  5. ??????????operation????????=>?'FIND_COMBINATION'?--?请根据情况自行修改??
  6. ????????,?appl_short_name??=>?'INV'?--?请根据情况自行修改??
  7. ????????,?key_flex_code????=>?'MCAT'?--?请根据情况自行修改??
  8. ????????,?structure_number?=>?101?--?请根据情况自行修改??
  9. ????????,?concat_segments??=>?p_concat_segs)?THEN??
  10. ??????????
  11. ????????RETURN?(fnd_flex_keyval.concatenated_descriptions());??
  12. ??????ELSE??
  13. ????????RETURN?'';??
  14. ??????END?IF;??
  15. ????END;??
  16. </PRE>??
  17. <PRE></PRE>??
  18. <PRE></PRE>??

获取货位的描述:

[html] view plain copy print ?
  1. --Get?Stock?Locators(MTLL)?库存货位的组合与描述??
  2. ?--SELECT?cux_flex_pkg.get_mtll_flexfields(p_locator_id?=>?3950,?p_organization_id?=>?7890,?p_return?=>?'S')?locator_name?FROM?dual;??
  3. ?FUNCTION?get_mtll_flexfields(p_locator_id??????NUMBER,??
  4. ??????????????????????????????p_organization_id?NUMBER,??
  5. ??????????????????????????????p_return??????????VARCHAR2?DEFAULT?'S')?RETURN?VARCHAR2?IS??
  6. ???l_concatenated_descriptions?VARCHAR2(2000);??
  7. ???l_success???????????????????BOOLEAN;??
  8. ???l_concatenated_segments?????VARCHAR2(2000);??
  9. ???c_structure_number??????????NUMBER;??
  10. ???c_key_flex_code?????????????VARCHAR2(20);??
  11. ???c_appl_short_name???????????VARCHAR2(20);??
  12. ???l_application_id????????????NUMBER;??
  13. ???--?Keeps?track?of?the?current?delimiter??
  14. ???l_delim?????????VARCHAR2(1)?:=?'';??
  15. ???l_error_message?VARCHAR2(1000);??
  16. ?BEGIN??
  17. ???--??
  18. ???--Bug:?Value?&VALUE?for?the?flexfield?segment?Subinventory?does?not?exist?in?the?value?set?@VALUE_SET.??
  19. ???--如果在健弹性域定义的值集中使用了PROFILE,需要初始化赋值之后才行,否则会出现以上错误??
  20. ???--SELECT?FND_PROFILE.VALUE_WNPS('MFG_ORGANIZATION_ID')?FROM?DUAL;??
  21. ???--fnd_global.apps_initialize(resp_appl_id?=>?401,?resp_id?=>?65780,?user_id?=>?1013436);??
  22. ???IF?FND_PROFILE.VALUE_WNPS('MFG_ORGANIZATION_ID')?IS?NULL?THEN??
  23. ?????fnd_profile.put('MFG_ORGANIZATION_ID',?p_organization_id);??
  24. ???END?IF;??
  25. ???c_key_flex_code????:=?'MTLL';??
  26. ???c_appl_short_name??:=?'INV';??
  27. ???c_structure_number?:=?101;??
  28. ???
  29. ???SELECT?application_id??
  30. ?????INTO?l_application_id??
  31. ?????FROM?fnd_application_vl?a??
  32. ????WHERE?a.application_short_name?=?c_appl_short_name;??
  33. ???
  34. ???--?Get?the?delimiter??
  35. ???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);??
  36. ???--参数DATA_SET一定要设置,和物料的键弹性域定义的原理一样:因为INVENTORY_LOCATION_ID在数据库的基表中不是唯一的值??
  37. ???--SELECT?set_defining_column_name,unique_id_column_name,application_table_name?FROM?fnd_id_flexs?WHERE?id_flex_code?IN?('MTLL',?'MSTK');??
  38. ???l_success?:=?fnd_flex_keyval.validate_ccid(appl_short_name??=>?c_appl_short_name,??
  39. ??????????????????????????????????????????????key_flex_code????=>?c_key_flex_code,??
  40. ??????????????????????????????????????????????structure_number?=>?c_structure_number,??
  41. ??????????????????????????????????????????????data_set?????????=>?to_char(p_organization_id),?--?Requied??
  42. ??????????????????????????????????????????????combination_id???=>?p_locator_id);??
  43. ???dbms_output.put_line('l_success?=?'?||?to_char(sys.diutil.bool_to_int(l_success)));??
  44. ???l_error_message?:=?fnd_flex_keyval.error_message;??
  45. ???IF?l_success?THEN??
  46. ?????l_concatenated_descriptions?:=?fnd_flex_keyval.concatenated_descriptions;??
  47. ?????--dbms_output.put_line('Concatenated?Descriptions?:?'?||?l_concatenated_descriptions);??
  48. ?????
  49. ?????l_concatenated_segments?:=?fnd_flex_keyval.concatenated_values;??
  50. ?????--dbms_output.put_line('Concatenated?Segments?:?'?||?l_concatenated_segments);??
  51. ???ELSE??
  52. ?????l_concatenated_segments?????:=?NULL;??
  53. ?????l_concatenated_descriptions?:=?NULL;??
  54. ?????fnd_message.set_name('FND',?'FLEX-SSV?EXCEPTION');??
  55. ?????fnd_message.set_token('MSG',?l_error_message);??
  56. ?????dbms_output.put_line(fnd_message.get);??
  57. ?????RAISE?app_exceptions.application_exception;??
  58. ???END?IF;??
  59. ???IF?p_return?=?'S'?THEN??
  60. ?????RETURN(l_concatenated_segments);??
  61. ???ELSIF?p_return?=?'D'?THEN??
  62. ?????RETURN(l_concatenated_descriptions);??
  63. ???ELSE??
  64. ?????RETURN(l_concatenated_segments);??
  65. ???END?IF;??
  66. ???
  67. ?EXCEPTION??
  68. ???WHEN?OTHERS?THEN??
  69. ?????RETURN?NULL;??
  70. ?????app_exception.raise_exception;??
  71. ?END?get_mtll_flexfields;??


库存物料的组合与描述库存物料的组合与描述:

[html] view plain copy print ?
  1. FUNCTION?get_mstk_flexfields(p_item_id??????NUMBER,??
  2. ?????????????????????????????p_organization_id?NUMBER,??
  3. ?????????????????????????????p_return??????????VARCHAR2?DEFAULT?'S')?RETURN?VARCHAR2?IS??
  4. ??l_concatenated_descriptions?VARCHAR2(2000);??
  5. ??l_success???????????????????BOOLEAN;??
  6. ??l_concatenated_segments?????VARCHAR2(2000);??
  7. ??c_structure_number??????????NUMBER;??
  8. ??c_key_flex_code?????????????VARCHAR2(20);??
  9. ??c_appl_short_name???????????VARCHAR2(20);??
  10. ??l_application_id????????????NUMBER;??
  11. ??--?Keeps?track?of?the?current?delimiter??
  12. ??l_delim?????????VARCHAR2(1)?:=?'';??
  13. ??l_error_message?VARCHAR2(1000);??
  14. BEGIN??
  15. ??--??
  16. ??--如果在健弹性域定义的值集中使用了PROFILE,需要初始化赋值之后才行,否则会出现以上错误??
  17. ??--SELECT?FND_PROFILE.VALUE_WNPS('MFG_ORGANIZATION_ID')?FROM?DUAL;??
  18. ??--fnd_global.apps_initialize(resp_appl_id?=>?401,?user_id?=>?1013436);??
  19. ??IF?FND_PROFILE.VALUE_WNPS('MFG_ORGANIZATION_ID')?IS?NULL?THEN??
  20. ????fnd_profile.put('MFG_ORGANIZATION_ID',?p_organization_id);??
  21. ??END?IF;??
  22. ??c_key_flex_code????:=?'MSTK';??
  23. ??c_appl_short_name??:=?'INV';??
  24. ??c_structure_number?:=?101;??
  25. ??
  26. ??SELECT?application_id??
  27. ????INTO?l_application_id??
  28. ????FROM?fnd_application_vl?a??
  29. ???WHERE?a.application_short_name?=?c_appl_short_name;??
  30. ??
  31. ??--?Get?the?delimiter??
  32. ??l_delim?:=?fnd_flex_apis.get_segment_delimiter(x_application_id?=>?l_application_id,?x_id_flex_num?=>?c_structure_number);??
  33. ??--参数DATA_SET一定要设置,和物料的键弹性域定义的原理一样:因为INVENTORY_LOCATION_ID在数据库的基表中不是唯一的值??
  34. ??--SELECT?set_defining_column_name,?'MSTK');??
  35. ??l_success?:=?fnd_flex_keyval.validate_ccid(appl_short_name??=>?c_appl_short_name,??
  36. ?????????????????????????????????????????????key_flex_code????=>?c_key_flex_code,??
  37. ?????????????????????????????????????????????structure_number?=>?c_structure_number,??
  38. ?????????????????????????????????????????????data_set?????????=>?to_char(p_organization_id),?--?Requied??
  39. ?????????????????????????????????????????????combination_id???=>?p_item_id);??
  40. ??dbms_output.put_line('l_success?=?'?||?to_char(sys.diutil.bool_to_int(l_success)));??
  41. ??l_error_message?:=?fnd_flex_keyval.error_message;??
  42. ??IF?l_success?THEN??
  43. ????l_concatenated_descriptions?:=?fnd_flex_keyval.concatenated_descriptions;??
  44. ????--dbms_output.put_line('Concatenated?Descriptions?:?'?||?l_concatenated_descriptions);??
  45. ????
  46. ????l_concatenated_segments?:=?fnd_flex_keyval.concatenated_values;??
  47. ????--dbms_output.put_line('Concatenated?Segments?:?'?||?l_concatenated_segments);??
  48. ??ELSE??
  49. ????l_concatenated_segments?????:=?NULL;??
  50. ????l_concatenated_descriptions?:=?NULL;??
  51. ????fnd_message.set_name('FND',?'FLEX-SSV?EXCEPTION');??
  52. ????fnd_message.set_token('MSG',?l_error_message);??
  53. ????dbms_output.put_line(fnd_message.get);??
  54. ????RAISE?app_exceptions.application_exception;??
  55. ??END?IF;??
  56. ??IF?p_return?=?'S'?THEN??
  57. ????RETURN(l_concatenated_segments);??
  58. ??ELSIF?p_return?=?'D'?THEN??
  59. ????RETURN(l_concatenated_descriptions);??
  60. ??ELSE??
  61. ????RETURN(l_concatenated_segments);??
  62. ??END?IF;??
  63. ??
  64. EXCEPTION??
  65. ??WHEN?OTHERS?THEN??
  66. ????RETURN?NULL;??
  67. ????app_exception.raise_exception;??
  68. END?get_mstk_flexfields;??

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读