Dear all,
I have to meet the requirement of creating a data slice which should lock the data for values coming from a Bex query supplied by the user in the prompt.
Once the user has filled the prompt, I use the customer exit to populate the exit variables of the data slice, but is not woking.
I was reading some post and I found one which indicate that BI-IP must be filled in I-STEP 1, however if I fill only one of them in the I-STEP 2 the lock is working fine.
The summary of the requirement is:
- The user populate two fields in the Input template.
- The customer exist place in the memory the information of those two fields.
- A look up is done in a DSO with the previous values to determine if an specific version exists for each value passed from the prompt.
- The data Slice variables are filled with the values in memory
This is the code I am using:
WHEN 'ZVAR_PEF_EXIT_SEVERAL'. IF i_step = 2. ** Because the memory containers are different between BEx And IP we need a memory helper to become available he selected values. ** I move values from BEX to memory because I need them in the second variable move i_t_var_range[] to pefs_baseline[]. export pefs_baseline[] to MEMORY id 'PEF_BASELINE'. IMPORT pefs_list[] FROM MEMORY ID 'PEF_LIST'. IF pefs_list is not INITIAL. LOOP AT pefs_list INTO loc_var_range WHERE vnam = 'ZVAR_PEF_CMA_AUTH'. CLEAR l_s_range. "Variable local porque la de salida no tiene cabecera l_s_range-sign = 'I'. l_s_range-opt = 'EQ'. l_s_range-low = loc_var_range-low. APPEND l_s_range TO e_t_range. ENDLOOP. clear pefs_baseline[]. clear pefs_list[]. ENDIF. ENDIF. ** second variable to be filled. WHEN 'Z_VAR_VER_ADJ_TYPE'. DATA : i_ppc_cveradj TYPE STANDARD TABLE OF /BIC/AEHFI2O100, wa_ppc_cveradj TYPE /BIC/AEHFI2O100, l_s_range_PEF_BASELINE TYPE rrrangeexit. TYPES: BEGIN OF ty_vers, vVers type /BIC/AEHFI2O100-/BIC/EXFIVPPC, vPef type /BIC/AEHFI2O100-/BIC/ZZ_PEFPRO, END OF ty_vers. DATA: i_vers TYPE STANDARD TABLE OF ty_vers, wa_vers TYPE ty_vers. IF i_step = 2. ** Because the memory containers are different between BEx And IP we need a memory helper to become available he selected values. IMPORT pefs_baseline[] FROM MEMORY ID 'PEF_BASELINE'. move pefs_baseline[] to pefs_list[]. export pefs_list[] to MEMORY id 'PEF_LIST'. LOOP AT pefs_baseline into l_s_range_PEF_BASELINE WHERE VNAM = 'ZVAR_PEF_CMA_AUTH'. wa_vers-VPEF = l_s_range_PEF_BASELINE-low. READ TABLE pefs_baseline into l_s_range_PEF_BASELINE WITH KEY VNAM = 'ZVAR_KPI_VERS_RRI'. IF sy-subrc = 0. wa_vers-VVERS = l_s_range_PEF_BASELINE-low. ENDIF. APPEND wa_vers TO i_vers. ENDLOOP. *This DSO contais the version to be locked, these values are generated based in a input template, a planing sequence reload the DSO based in the IP cube. *For a given two filters values I need to determine if the "baseline" concept exists for each one, if so, I fill the Data Slice variables with this information. SELECT * FROM /BIC/AEHFI2O100 INTO CORRESPONDING FIELDS OF TABLE i_ppc_cveradj FOR ALL ENTRIES IN i_vers WHERE /BIC/ZZ_PEFPRO = i_vers-vPef AND /BIC/EXFIVPPC = i_vers-vVers AND /BIC/EHFITYP = 'BASELINE'. IF sy-subrc EQ 0. l_s_range-sign = 'I'. l_s_range-opt = 'EQ'. LOOP AT i_ppc_cveradj INTO wa_ppc_cveradj. l_s_range-low = wa_ppc_cveradj-/BIC/EHFITYP. APPEND l_s_range TO e_t_range. ENDLOOP. ELSE. ** no permitir guardar valores vacios l_s_range-sign = 'I'. l_s_range-opt = 'EQ'. l_s_range-low = ''. APPEND l_s_range TO e_t_range. ENDIF. ENDIF.
Sincerely I am stuck, if I put manually the values is working, At debug time, I was able to check that the differente values are passed to the different variables. Not sure what is happening.
Any suggestions? I know my ABAP may not be accurate, so suggestion will be welcomed.
Thanks in advance for your time,
Carlos.