You are on page 1of 2

FUNCTION zfmcbfunc.

*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(CB_FNAME) TYPE FIELDNAME DEFAULT 'CB'
*" REFERENCE(OPERATION) TYPE ZDECBOP DEFAULT '$SAI'
*" REFERENCE(TABIX) TYPE SY-TABIX DEFAULT 0
*" EXPORTING
*" REFERENCE(CHANGED) TYPE SY-TABIX
*" TABLES
*" T_DISPTAB TYPE STANDARD TABLE
*" EXCEPTIONS
*" INVALID_OPERATION
*" INDEX_ERROR
*" FIELD_NOT_FOUND
*"----------------------------------------------------------------------

*======================================================================*
**_________________C H E C K B O X F U N C A L V____________________*
**=====================================================================*
** Author : AJITH K E *
** Created On : 28.06.2012 *
** Objective : Checkbox functions for any table *
** Version no. : 1V01 (Change this if required) *
** Comments : *
** Liscence : GPLv3 *
**=====================================================================*
**Data element ZDECBOP using a domain with single values *
** *
** $SSI Invert single row *
** $SSD Deselect single row *
** $SSS Select single row *
** $SAI Invert all rows *
** $SAD Deselect all rows *
** $SAS Select all rows *
** *
** *
** *
**=====================================================================*

FIELD-SYMBOLS : <wa_disptab>,
<w_cb>.
CONSTANTS : c_prefnam TYPE fieldname VALUE '<WA_DISPTAB>'.
DATA : w_fname(60),
w_cbval,
w_tablines TYPE sy-tabix..

CLEAR : changed.
IF operation(2) NE '$S'.
RAISE invalid_operation.
ENDIF.
CASE operation+3(1).
WHEN 'S'.
w_cbval = 'X'.
WHEN 'D'.
w_cbval = space.
WHEN 'I'.
WHEN OTHERS.
RAISE unknown_operation.
ENDCASE.
CONCATENATE c_prefnam cb_fname INTO w_fname SEPARATED BY '-'.
IF operation+2(1) EQ 'A'. "Table operation
LOOP AT t_disptab ASSIGNING <wa_disptab>.
ASSIGN (w_fname) TO <w_cb>.
IF sy-subrc EQ 0.
PERFORM change_cb USING operation+3(1) w_cbval CHANGING <w_cb>.
ELSE.
RAISE field_not_found.
ENDIF.
ENDLOOP.
ELSEIF operation+2(1) EQ 'S'. "Single row operation
DESCRIBE TABLE t_disptab LINES w_tablines.
IF tabix BETWEEN 1 AND w_tablines.
READ TABLE t_disptab ASSIGNING <wa_disptab> INDEX tabix.
IF sy-subrc EQ 0.
ASSIGN (w_fname) TO <w_cb>.
IF sy-subrc EQ 0.
PERFORM change_cb USING operation+3(1) w_cbval CHANGING <w_cb>.
ELSE.
RAISE field_not_found.
ENDIF.
ENDIF.
ELSE.
RAISE index_error.
ENDIF.
ELSE.
RAISE invalid_operation.
ENDIF.
ENDFUNCTION.

*&---------------------------------------------------------------------*
*& Form CHANGE_CB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM change_cb USING p_operation
p_cbval
CHANGING p_cb.
CASE p_operation.
WHEN 'I'.
IF p_cb EQ 'X'.
CLEAR : p_cb.
ELSE.
p_cb = 'X'.
ENDIF.
WHEN OTHERS.
p_cb = p_cbval.
ENDCASE.
ENDFORM. " CHANGE_CB

You might also like