Before calling the Floe API, it may be necessary to convert drop-down list values to descriptions for the purpose of variable substitution.
The following function shows how to re-run the FLM drop-down list logic to find the correct descriptions:
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: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: |
FUNCTION ZHR_FLM_REPLACE_F4_TEXTS. *"---------------------------------------------------------------------- *"*"Local Interface: *" IMPORTING *" REFERENCE(IM_FORMS_DATA) TYPE /FLM/XML_TAB_T *" REFERENCE(IM_FPE) TYPE /FLM/FPE *" REFERENCE(IM_FIELD_NAME) TYPE FIELDNAME OPTIONAL *" REFERENCE(IM_FIELD_VALUE) TYPE /FLM/FORM_DATA-VALUE OPTIONAL *" EXPORTING *" REFERENCE(EX_FORMS_DATA) TYPE /FLM/XML_TAB_T *" REFERENCE(EX_FIELD_TEXT) TYPE /FLM/FORM_DATA-VALUE *"---------------------------------------------------------------------- ***********Notes on Usage ********************************************** * If IM_FIELD_NAME and IM_FIELD_VALUE are supplied, EX_FIELD_TEXT will * contain the result. Otherwise ex_forms_data will be updated. ************************************************************************* DATA: l_cust_class TYPE string, l_node_name TYPE string, l_sfs TYPE REF TO object, l_name TYPE string VALUE 'FORM_DATA', l_tab_row TYPE /flm/form_data, l_tab_row2 TYPE /flm/form_data, l_routine TYPE string, l_f4_data TYPE /flm/sfs_form_data_t, l_f4_data_block TYPE /flm/sfs_form_data_t WITH HEADER LINE, l_message TYPE natxt, l_fver TYPE /flm/fver, l_field_name TYPE fieldname, l_sticky TYPE /flm/sticky, l_f4_db_data TYPE /flm/f4_data, l_vindex TYPE /flm/index, l_subrc TYPE sysubrc, l_v1 TYPE symsgv, l_v2 TYPE symsgv, l_doc10 TYPE char10, l_error TYPE REF TO cx_root, "295++ l_long_text TYPE string, "295++ l_f4_name TYPE text20, l_f4_value TYPE text60, l_f4_vindex TYPE numc3. * Data for manipulating form data DATA: lt_forms_data TYPE /flm/xml_tab_t, temp_data TYPE /flm/xml_tab_t, wa_forms_data TYPE /flm/xml_tab, l_form_data TYPE /flm/xml_tab, l_posnr TYPE plans, l_ok, l_msg TYPE symsgv, l_fpe TYPE /flm/fpe, lv_gsval TYPE gsval, lv_subrc TYPE sysubrc, it_f4_fields TYPE TABLE OF /flm/fdd_fld, wa_f4_field TYPE /flm/fdd_fld, l_get_values TYPE flag, l_field_string TYPE string, l_tabix TYPE sytabix, l_parent TYPE string, l_path TYPE string, l_offset TYPE i, l_result TYPE string, l_amrisid TYPE string, it_errors TYPE bapireturn_t, l_str TYPE string, l_plans TYPE plans, l_plvar TYPE plvar, l_stext TYPE stext, l_objid TYPE objid, l_scale TYPE scale_id, l_pstext TYPE profc_text, l_instance TYPE string. * Copy form data (helps when debugging) temp_data[] = lt_forms_data[] = im_forms_data[]. *Are we processing a whole form? IF im_field_name IS INITIAL. * Get all fields that are F4s SELECT * FROM /flm/fdd_fld INTO TABLE it_f4_fields WHERE ccode = im_fpe-ccode AND ftype = im_fpe-ftype AND flang = im_fpe-flang AND fver = im_fpe-fver AND f4_flag = 'X'. * Or just one field. ELSEIF im_field_value IS NOT INITIAL. * Get single field details SELECT * FROM /flm/fdd_fld INTO TABLE it_f4_fields WHERE ccode = im_fpe-ccode AND ftype = im_fpe-ftype AND flang = im_fpe-flang AND fver = im_fpe-fver AND field_name = im_field_name AND f4_flag = 'X'. *Otherwise not enough data to do anything, so stop. ELSE. RETURN. ENDIF. * Process 1 field at a time LOOP AT it_f4_fields INTO wa_f4_field. CLEAR l_get_values. REFRESH l_f4_data_block[]. * Are we doing whole form or single field? IF im_field_name IS INITIAL. * Check that there is an F4 Code in the data to replace, need to loop round as DD may be optional and on a repeating seciton LOOP AT temp_data INTO wa_forms_data WHERE name = wa_f4_field-field_name AND value IS NOT INITIAL. * Set the flag if we find one with a value. l_get_values = 'X'. EXIT. ENDLOOP. * Move onto next field if flag has not been set. IF l_get_values IS INITIAL. CONTINUE. ENDIF. * Single field, so set the flag. ELSE. l_get_values = 'X'. ENDIF. * Get the form class l_cust_class = /flm/core=>get_form_class( im_cust = im_fpe-ccode im_ftype = im_fpe-ftype ). *----------------------------------------------------------------------* l_fver = im_fpe-fver. l_field_string = wa_f4_field-field_name. * * Run F4 routines: * * * If it's a sticky field, see if there is any data already available: * CLEAR l_sticky. l_sticky = wa_f4_field-sticky. * IF l_sticky IS NOT INITIAL. * SELECT * FROM /flm/f4_data INTO l_f4_db_data WHERE ccode = im_fpe-ccode AND ftype = im_fpe-ftype AND flang = im_fpe-flang AND fver = im_fpe-fver AND fid = im_fpe-id AND field_name = l_field_string ORDER BY vindex ASCENDING. * CLEAR: l_tab_row2. l_tab_row2-name = l_f4_db_data-v_key. l_tab_row2-value = l_f4_db_data-v_value. APPEND l_tab_row2 TO l_f4_data_block. * ENDSELECT. * ELSE. * CONCATENATE 'F4_' im_fpe-ftype '_' wa_f4_field-field_name INTO l_routine. * * Check if userexit is activate * l_subrc = /flm/core=>check_userexit_active( im_ccode = im_fpe-ccode im_ftype = im_fpe-ftype im_flang = im_fpe-flang im_fver = im_fpe-fver im_name = l_field_string im_ue_typ = 'F4' ). IF l_subrc IS NOT INITIAL. DELETE temp_data WHERE name = l_field_string. CONTINUE. ENDIF. TRY. * * Get any F4 list entries: * SELECT name value vindex FROM /flm/f4_list INTO (l_f4_name, l_f4_value, l_f4_vindex) "295sp2+- Performance Improvement WHERE ccode = im_fpe-ccode AND ftype = im_fpe-ftype AND flang = im_fpe-flang AND fver = im_fpe-fver AND field_name = wa_f4_field-field_name ORDER BY vindex ASCENDING. * CHECK l_f4_name IS NOT INITIAL AND l_f4_value IS NOT INITIAL. * CLEAR: l_tab_row2. l_tab_row2-name = l_f4_name. l_tab_row2-value = l_f4_value. APPEND l_tab_row2 TO l_f4_data_block. * ENDSELECT. * CALL METHOD (l_cust_class)=>(l_routine) EXPORTING im_data = im_forms_data im_ccode = im_fpe-ccode im_ftype = im_fpe-ftype im_field = l_field_string im_document = im_fpe-document im_user = sy-uname IMPORTING ex_message = l_message CHANGING ch_form_data = l_f4_data_block[]. * CATCH cx_sy_dyn_call_illegal_method. * CATCH cx_dynamic_check cx_static_check. * ** ENDTRY. *-----------------------------------------------------* *If we find a message, bail out completely, otherwise onto next field: IF l_message IS NOT INITIAL. * RETURN. ENDIF. ENDIF. * Replace Value with text IF l_f4_data_block[] IS NOT INITIAL. * Whole form IF im_field_name IS INITIAL. LOOP AT lt_forms_data INTO l_form_data WHERE name = wa_f4_field-field_name. l_tabix = sy-tabix. READ TABLE l_f4_data_block WITH KEY name = l_form_data-value. IF sy-subrc = 0. l_form_data-value = l_f4_data_block-value. MODIFY lt_forms_data FROM l_form_data INDEX l_tabix. ENDIF. ENDLOOP. * Single Field ELSE. READ TABLE l_f4_data_block WITH KEY name = im_field_value. IF sy-subrc = 0. ex_field_text = l_f4_data_block-value. ENDIF. ENDIF. ENDIF. DELETE temp_data WHERE name = l_field_string. ENDLOOP. ex_forms_data = lt_forms_data. ENDFUNCTION. |