在ALV输出,或者SE16N显示时,对于有域值范围的字段,用户常用需要看到域值,还需要看到值描述,这样可能需求要两个字段来显示,但其实可以设置域的例程,在AVL显示时,直接同时显示 域值 及域值描述。如下图

图中的”领料类型“定义的是CHAR1,当使用了例程,在显示时把域值C的描述也一起显示出来了,这样在这个域名值的任何地方,自动的就会这样显示出来,可以省得每一个程序的去修改。
1.通用域值 输入,输出转换类
SE24创建一个类ZCL_LM_DOMAIN_CONV
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |
class ZCL_LM_DOMAIN_CONV definition public final create private . public section. class-methods GET_INSTANCE importing !IV_DOMAIN type DD01D-DOMNAME returning value(EO_INSTANCE) type ref to ZCL_LM_DOMAIN_CONV . methods CONV_INPUT importing !IV_INPUT type DATA exporting value(EV_OUTPUT) type DATA . methods CONV_OUTPUT importing !IV_INPUT type DATA exporting value(EV_OUTPUT) type DATA . protected section. PRIVATE SECTION. TYPES: BEGIN OF tp_inst, domain TYPE dd01d-domname, inst TYPE REF TO zcl_lm_domain_conv, END OF tp_inst . TYPES: tp_t_inst TYPE STANDARD TABLE OF tp_inst . TYPES tp_dd07v TYPE dd07v . TYPES: tp_t_dd07v TYPE STANDARD TABLE OF tp_dd07v . CLASS-DATA _gt_inst TYPE tp_t_inst . DATA _gt_dd07v TYPE tp_t_dd07v . METHODS constructor IMPORTING !iv_domain TYPE dd01d-domname . ENDCLASS. CLASS ZCL_LM_DOMAIN_CONV IMPLEMENTATION. * <SIGNATURE>---------------------------------------------------------------------------------------+ * | Instance Private Method ZCL_LM_DOMAIN_CONV->CONSTRUCTOR * +-------------------------------------------------------------------------------------------------+ * | [--->] IV_DOMAIN TYPE DD01D-DOMNAME * +--------------------------------------------------------------------------------------</SIGNATURE> METHOD constructor. CALL FUNCTION 'GET_DOMAIN_VALUES' EXPORTING domname = iv_domain text = 'X' * FILL_DD07L_TAB = ' ' TABLES values_tab = _gt_dd07v * VALUES_DD07L = EXCEPTIONS no_values_found = 1 OTHERS = 2. IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. ENDMETHOD. * <SIGNATURE>---------------------------------------------------------------------------------------+ * | Instance Public Method ZCL_LM_DOMAIN_CONV->CONV_INPUT * +-------------------------------------------------------------------------------------------------+ * | [--->] IV_INPUT TYPE DATA * | [<---] EV_OUTPUT TYPE DATA * +--------------------------------------------------------------------------------------</SIGNATURE> METHOD conv_input. DATA: ls_dd07v TYPE tp_dd07v. DATA: lv_key TYPE dd07v-domvalue_l, lv_text TYPE dd07v-ddtext. SPLIT iv_input AT '-' INTO lv_key lv_text. READ TABLE _gt_dd07v INTO ls_dd07v WITH KEY domvalue_l = lv_key. IF sy-subrc = 0. ev_output = lv_key. ELSE. ev_output = iv_input. ENDIF. ENDMETHOD. * <SIGNATURE>---------------------------------------------------------------------------------------+ * | Instance Public Method ZCL_LM_DOMAIN_CONV->CONV_OUTPUT * +-------------------------------------------------------------------------------------------------+ * | [--->] IV_INPUT TYPE DATA * | [<---] EV_OUTPUT TYPE DATA * +--------------------------------------------------------------------------------------</SIGNATURE> METHOD conv_output. DATA: ls_dd07v TYPE tp_dd07v. READ TABLE _gt_dd07v INTO ls_dd07v WITH KEY domvalue_l = iv_input. IF sy-subrc = 0. IF iv_input IS NOT INITIAL. ev_output = iv_input && '-' && ls_dd07v-ddtext. ELSE. ev_output = ls_dd07v-ddtext. ENDIF. ELSE. ev_output = iv_input. ENDIF. ENDMETHOD. * <SIGNATURE>---------------------------------------------------------------------------------------+ * | Static Public Method ZCL_LM_DOMAIN_CONV=>GET_INSTANCE * +-------------------------------------------------------------------------------------------------+ * | [--->] IV_DOMAIN TYPE DD01D-DOMNAME * | [<-()] EO_INSTANCE TYPE REF TO ZCL_LM_DOMAIN_CONV * +--------------------------------------------------------------------------------------</SIGNATURE> METHOD get_instance. DATA: ls_inst TYPE tp_inst, lv_tabix TYPE sy-tabix. READ TABLE _gt_inst INTO ls_inst WITH KEY domain = iv_domain BINARY SEARCH. IF sy-subrc = 0. eo_instance = ls_inst-inst. RETURN. ENDIF. lv_tabix = sy-tabix. ls_inst-domain = iv_domain. CREATE OBJECT ls_inst-inst EXPORTING iv_domain = iv_domain. INSERT ls_inst INTO _gt_inst INDEX lv_tabix. eo_instance = ls_inst-inst. ENDMETHOD. ENDCLASS. |
2.创建域时使用例程
比如例程ZLLFS输入函数参考如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
FUNCTION CONVERSION_EXIT_ZLLFS_INPUT. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" REFERENCE(INPUT) *" EXPORTING *" REFERENCE(OUTPUT) *"---------------------------------------------------------------------- DATA: lo_conv TYPE REF TO zcl_lm_domain_conv. DATA: lv_input TYPE char30. CALL METHOD zcl_lm_domain_conv=>get_instance EXPORTING iv_domain = 'ZLMLLFS' RECEIVING eo_instance = lo_conv. lv_input = input. REPLACE ALL OCCURRENCES OF | | IN lv_input WITH '-' IGNORING CASE IN CHARACTER MODE. CALL METHOD lo_conv->conv_input EXPORTING iv_input = lv_input IMPORTING ev_output = output. ENDFUNCTION. |
输出例程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
FUNCTION conversion_exit_zllfs_output. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" REFERENCE(INPUT) *" EXPORTING *" REFERENCE(OUTPUT) *"---------------------------------------------------------------------- DATA: lo_conv TYPE REF TO zcl_lm_domain_conv. DATA: lv_output TYPE char30. CALL METHOD zcl_lm_domain_conv=>get_instance EXPORTING iv_domain = 'ZLMLLFS' RECEIVING eo_instance = lo_conv. CALL METHOD lo_conv->conv_output EXPORTING iv_input = input IMPORTING ev_output = lv_output. REPLACE ALL OCCURRENCES OF '-' IN lv_output WITH | | IGNORING CASE IN CHARACTER MODE. output = lv_output. ENDFUNCTION. |