Created
May 23, 2015 09:10
-
-
Save JouryJonkergouw/852a869780288c0ea7f9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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