Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JouryJonkergouw/852a869780288c0ea7f9 to your computer and use it in GitHub Desktop.
Save JouryJonkergouw/852a869780288c0ea7f9 to your computer and use it in GitHub Desktop.
REPORT ZBW_CHANGE_BROADCAST_VARIABLE.
* Declaring structures
TYPES:
BEGIN OF t_param,
objnm TYPE c LENGTH 40,
varnm TYPE c LENGTH 40,
param_nm TYPE string,
param_val TYPE string,
END OF t_param,
* Structure for Input parameters
BEGIN OF t_broad_param,
broadcst TYPE string,
varnm TYPE string,
varv TYPE string,
varvh TYPE string,
sign TYPE string,
opt TYPE string,
varvext TYPE string,
varvexth TYPE string,
END OF t_broad_param,
* Structure for storing the parameter name and values from broadcast settings
BEGIN OF lt_param,
param_nm TYPE string,
param_val TYPE string,
END OF lt_param,
* Structure from storing the parameter string
BEGIN OF t_result,
result TYPE c LENGTH 100,
END OF t_result.
* Declaring Variables
DATA: lv_input_str TYPE string,
lv_output_str TYPE string,
lv_ind LIKE sy-tabix,
lv_out_tab_ind LIKE sy-tabix,
lv_out_str_len LIKE sy-tabix,
count(2) TYPE c,
lv_indx LIKE sy-tabix,
lv_indmax LIKE sy-tabix,
varo(2) TYPE c,
lv_var1 TYPE string,
lv_brdcst TYPE string.
* Declaring Internal tables
DATA: t_result_value TYPE STANDARD TABLE OF t_result,
wa_result_value TYPE t_result,
t_param_value TYPE STANDARD TABLE OF t_param,
wa_param_value TYPE t_param,
lt_param_value TYPE STANDARD TABLE OF lt_param,
w_param_value TYPE lt_param,
t_rsrd TYPE STANDARD TABLE OF rsrd_sett_node_a,
wa_rsrd TYPE rsrd_sett_node_a,
wa_broadcast TYPE t_broad_param.
* Input parameters Declaration
PARAMETERS: setting TYPE c LENGTH 20,
varname TYPE c LENGTH 20,
varval_l TYPE c LENGTH 20,
varval_h TYPE c LENGTH 20,
sign TYPE c LENGTH 20,
option TYPE c LENGTH 20,
varva_el TYPE c LENGTH 20,
varva_eh TYPE c LENGTH 20.
* Assigning variable values
lv_ind = 1.
lv_brdcst = setting.
wa_broadcast-broadcst = setting.
wa_broadcast-varnm = varname.
wa_broadcast-varv = varval_l.
wa_broadcast-varvh = varval_h.
wa_broadcast-sign = sign.
wa_broadcast-opt = option.
wa_broadcast-varvext = varva_el.
wa_broadcast-varvexth = varva_eh.
* Select Broadcast Settings parameters
SELECT * FROM rsrd_sett_node_a INTO TABLE t_rsrd WHERE setting_id = lv_brdcst AND id = 'PR_VARIABLE_STRING' AND objvers = 'A'.
DESCRIBE TABLE t_rsrd LINES lv_indmax.
* Get the variable values and its parameters into a variable
LOOP AT t_rsrd INTO wa_rsrd.
CONCATENATE lv_input_str wa_rsrd-value INTO lv_input_str.
ENDLOOP.
*Split the parameters into an internal table as rows
SPLIT lv_input_str AT '&' INTO TABLE t_result_value IN CHARACTER MODE.
* Split the parameters into an internal table as columns
LOOP AT t_result_value INTO wa_result_value.
SPLIT wa_result_value-result AT '=' INTO w_param_value-param_nm w_param_value-param_val.
APPEND w_param_value TO lt_param_value.
ENDLOOP.
* Loop at the variable that needs to be changed by reading the parameters from teh broadcast settings
READ TABLE lt_param_value INTO w_param_value WITH KEY param_val = wa_broadcast-varnm.
IF sy-subrc EQ 0.
count = w_param_value-param_nm+9.SHIFT count LEFT
DELETING LEADING '0'.
IF wa_broadcast-opt EQ ''.
* Update different parameters using the varo as indicator
varo = 'L'.CONCATENATE 'VAR_VALUE_' count INTO lv_var1.PERFORM change.
varo = 'EL'.CONCATENATE 'VAR_VALUE_EXT_' count INTO lv_var1.PERFORM change.
ELSE.
varo = 'L'.CONCATENATE 'VAR_VALUE_LOW_' count INTO lv_var1.PERFORM change.
varo = 'EL'.CONCATENATE 'VAR_VALUE_LOW_EXT_' count INTO lv_var1.PERFORM change.
varo = 'H'.CONCATENATE 'VAR_VALUE_HIGH_' count INTO lv_var1.PERFORM change.
varo = 'EH'.CONCATENATE 'VAR_VALUE_HIGH_EXT_' count INTO lv_var1.PERFORM change.
varo = 'O'.CONCATENATE 'VAR_OPERATOR_' count INTO lv_var1.PERFORM change.
ENDIF.
varo = 'S'.CONCATENATE 'VAR_SIGN_' count INTO lv_var1.PERFORM change.
ENDIF.
DESCRIBE TABLE lt_param_value LINES lv_indx.
LOOP AT lt_param_value INTO w_param_value.
IF lv_indx = sy-tabix.
CONCATENATE lv_output_str w_param_value-param_nm '=' w_param_value-param_val INTO lv_output_str.
ELSE.
CONCATENATE lv_output_str w_param_value-param_nm '=' w_param_value-param_val '&' INTO lv_output_str.
ENDIF.
ENDLOOP.
lv_out_str_len = 0.
lv_out_tab_ind = 0.
LOOP AT t_rsrd INTO wa_rsrd.
IF sy-tabix EQ lv_indmax.
wa_rsrd-value = lv_output_str+lv_out_str_len.
ELSE.
wa_rsrd-value = lv_output_str+lv_out_str_len(255).
ENDIF.
MODIFY t_rsrd FROM wa_rsrd TRANSPORTING value WHERE setting_id = lv_brdcst AND id = 'PR_VARIABLE_STRING' AND objvers = 'A' AND rsr_index = lv_out_tab_ind.
MODIFY rsrd_sett_node_a FROM TABLE t_rsrd.
lv_out_str_len = sy-tabix * 255.
lv_out_tab_ind = sy-tabix * 1000.
ENDLOOP.
* Generate status message
IF sy-subrc EQ 0.
MESSAGE 'Success' TYPE 'S'.
ELSE.
MESSAGE 'Failed' TYPE 'E'.
ENDIF.
Write 'Settings parameters'.
*&---------------------------------------------------------------------*
*& Form change
*&---------------------------------------------------------------------*
FORM change.
* Update variable values in internal table form change.
read table lt_param_value into w_param_value with key param_nm = lv_var1.
lv_ind = sy-tabix.
IF sy-subrc EQ 0.
IF varo = 'L' AND wa_broadcast-varv <> ''.
w_param_value-param_val = wa_broadcast-varv.PERFORM varchange.
ELSEIF varo = 'H' AND wa_broadcast-varvh <> ''.
w_param_value-param_val = wa_broadcast-varvh.PERFORM varchange.
ELSEIF varo = 'O' AND wa_broadcast-opt <> ''.
w_param_value-param_val = wa_broadcast-opt.PERFORM varchange.
ELSEIF varo = 'S' AND wa_broadcast-sign <> ''.
w_param_value-param_val = wa_broadcast-sign.PERFORM varchange.
ELSEIF varo = 'EL' AND wa_broadcast-varvext <> ''.
w_param_value-param_val = wa_broadcast-varvext.PERFORM varchange.
ELSEIF varo = 'EH' AND wa_broadcast-varvexth <> ''.
w_param_value-param_val = wa_broadcast-varvexth.PERFORM varchange.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form varchange
*&---------------------------------------------------------------------*
FORM varchange.
SHIFT w_param_value-param_val LEFT DELETING LEADING '0'.MODIFY lt_param_value INDEX lv_ind FROM w_param_value TRANSPORTING param_val.
ENDFORM. "varchange
*&---------------------------------------------------------------------*
*& Form readvar
*&---------------------------------------------------------------------*
FORM readvar.
READ TABLE lt_param_value INTO w_param_value with key param_nm = lv_var1.
IF sy-subrc EQ 0.
IF varo = 'L'.
wa_broadcast-varv = w_param_value-param_val.
ELSEIF varo = 'H'.
wa_broadcast-varvh = w_param_value-param_val.
ELSEIF varo = 'S'.
wa_broadcast-sign = w_param_value-param_val.
ELSEIF varo = 'O'.
wa_broadcast-opt = w_param_value-param_val.
ELSEIF varo = 'EL'.
wa_broadcast-varvext = w_param_value-param_val.
ELSEIF varo = 'EH'.
wa_broadcast-varvexth = w_param_value-param_val.
ENDIF.
ENDIF.
ENDFORM.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment