Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Edit Checkbox within ALV

Former Member
0 Likes
1,021

Hi all.

I have a strange problem:

I'm using REUSE_ALV_LIST_DISPLAY to display an internal table.

Although I had defined the checkbox field at the catalog as edit = X, checkbox = 'X' and the layout had been defiend with gs_layout-edit = 'X' the checkbox is locked for editon.

Why's that ? Iv'e must forgotten somthing..

Thanks a lot,

Rebeka

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
957

have you populated ALV Layout structure?


  wa_layout-box_fieldname = 'BOX'.  " field name which will be as checkbox
  wa_layout-box_tabname = 'I_MARA'.   " Internal table name

Hi all.

I have a strange problem:

I'm using REUSE_ALV_LIST_DISPLAY to display an internal table.

Although I had defined the checkbox field at the catalog as edit = X, checkbox = 'X' and the layout had been defiend with gs_layout-edit = 'X' the checkbox is locked for editon.

Why's that ? Iv'e must forgotten somthing..

Thanks a lot,

Rebeka

5 REPLIES 5
Read only

Former Member
0 Likes
957

Hi,

Checkbox field must be the 1st field in the internal table.

Best regards,

Prashant

Read only

Former Member
0 Likes
958

have you populated ALV Layout structure?


  wa_layout-box_fieldname = 'BOX'.  " field name which will be as checkbox
  wa_layout-box_tabname = 'I_MARA'.   " Internal table name

Read only

Former Member
0 Likes
957

Check this program which will help u

REPORT ztest.

CONSTANTS :

c_typdia VALUE 'A', " Dialog users

c_typbatch VALUE 'B', " Batch users

c_typcpic VALUE 'C', " System users

c_typsim VALUE 'S', " Service users

c_yulock TYPE x VALUE '80'," Incorrect logons.

c_yusloc TYPE x VALUE '40'," Administrator lock

c_yugloc TYPE x VALUE '20'," Global lock

c_x VALUE 'X',

c_refresh TYPE syucomm VALUE '&REFRESH'.

----


TYPE-POOLS :

icon, " Icons

slis. " ALV Global types

----


TYPES :

BEGIN OF ty_s_usr02.

INCLUDE TYPE usr02. " Logon data

TYPES :

name_text TYPE ad_namtext,

icon_pwd(30),

icon_lock(30),

text_lock(40),

icon_con(40),

checkbox(1),

END OF ty_s_usr02.

----


DATA:

gs_usr02 TYPE usr02,

gt_data TYPE TABLE OF ty_s_usr02.

----


FIELD-SYMBOLS :

<data> TYPE ty_s_usr02.

----


SELECTION-SCREEN BEGIN OF BLOCK main WITH FRAME TITLE text_021.

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN COMMENT 1(31) text_100 FOR FIELD s_mandt.

SELECT-OPTIONS s_mandt FOR gs_usr02-mandt DEFAULT sy-mandt

MATCHCODE OBJECT ddsef4clnt.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN COMMENT 1(31) text_101 FOR FIELD s_bname.

SELECT-OPTIONS s_bname FOR gs_usr02-bname MATCHCODE OBJECT user_comp.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN COMMENT 1(31) text_102 FOR FIELD s_class.

SELECT-OPTIONS s_class FOR gs_usr02-class.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN COMMENT 1(34) text_103 FOR FIELD p_dtrdat.

PARAMETER p_dtrdat TYPE i.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN COMMENT 1(34) text_104 FOR FIELD p_dbcda1.

PARAMETER p_dbcda1 TYPE i.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN END OF BLOCK main.

SELECTION-SCREEN BEGIN OF BLOCK validity WITH FRAME TITLE text_036.

SELECTION-SCREEN BEGIN OF LINE.

PARAMETER p_valid AS CHECKBOX DEFAULT c_x.

SELECTION-SCREEN COMMENT 2(40) text_034 FOR FIELD p_valid.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.

PARAMETER notvalid AS CHECKBOX DEFAULT c_x.

SELECTION-SCREEN COMMENT 2(40) text_035 FOR FIELD notvalid.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN END OF BLOCK validity.

SELECTION-SCREEN BEGIN OF BLOCK activity WITH FRAME TITLE text_022.

SELECTION-SCREEN BEGIN OF LINE.

PARAMETER unlocked AS CHECKBOX DEFAULT c_x.

SELECTION-SCREEN COMMENT 2(40) text_009 FOR FIELD unlocked.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.

PARAMETER locked AS CHECKBOX DEFAULT c_x.

SELECTION-SCREEN COMMENT 2(40) text_020 FOR FIELD locked.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.

PARAMETER faillog AS CHECKBOX DEFAULT c_x.

SELECTION-SCREEN COMMENT 2(40) text_019 FOR FIELD faillog.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN END OF BLOCK activity.

SELECTION-SCREEN BEGIN OF BLOCK type WITH FRAME TITLE text_023.

SELECTION-SCREEN BEGIN OF LINE.

PARAMETER diaguser AS CHECKBOX DEFAULT c_x.

SELECTION-SCREEN COMMENT 2(40) text_015 FOR FIELD diaguser.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.

PARAMETER commuser AS CHECKBOX DEFAULT c_x.

SELECTION-SCREEN COMMENT 2(40) text_030 FOR FIELD commuser.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.

PARAMETER sysuser AS CHECKBOX DEFAULT c_x.

SELECTION-SCREEN COMMENT 2(40) text_029 FOR FIELD sysuser.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.

PARAMETER servuser AS CHECKBOX DEFAULT c_x.

SELECTION-SCREEN COMMENT 2(40) text_032 FOR FIELD servuser.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN END OF BLOCK type.

SELECTION-SCREEN BEGIN OF BLOCK pass WITH FRAME TITLE text_024.

SELECTION-SCREEN BEGIN OF LINE.

PARAMETER defpass AS CHECKBOX DEFAULT c_x.

SELECTION-SCREEN COMMENT 2(40) text_033 FOR FIELD defpass.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.

PARAMETER initpass AS CHECKBOX DEFAULT c_x.

SELECTION-SCREEN COMMENT 2(40) text_008 FOR FIELD initpass.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN END OF BLOCK pass.

----


AT SELECTION-SCREEN.

IF ( unlocked IS INITIAL

AND locked IS INITIAL

AND faillog IS INITIAL )

OR

( p_valid IS INITIAL

AND notvalid IS INITIAL )

OR

( diaguser IS INITIAL

AND commuser IS INITIAL

AND sysuser IS INITIAL

AND servuser IS INITIAL )

OR

( initpass IS INITIAL

AND defpass IS INITIAL ).

  • Please make a selection

MESSAGE e609(00).

ENDIF.

----


INITIALIZATION.

text_008 = 'Users with initial password '(008).

text_009 = 'Not locked users '(009).

text_015 = 'Dialog users '(015).

text_019 = 'Users with failed logon '(019).

text_020 = 'Locked users '(020).

text_021 = 'Standard selection '(021).

text_022 = 'Selection by users status '(022).

text_023 = 'Selection by user type '(023).

text_024 = 'Selection by password status '(024).

text_029 = 'System users '(029).

text_030 = 'Communication users '(030).

text_032 = 'Service users '(032).

text_033 = 'Users with defined password '(033).

text_034 = 'Users valid today '(034).

text_035 = 'Users not valid today '(035).

text_036 = 'Users Validity '(036).

text_100 = 'Client '(100).

text_101 = 'User '(101).

text_102 = 'Users group '(102).

text_103 = 'No. days since last logon '(103).

text_104 = 'No. days since password change '(104).

----


START-OF-SELECTION.

  • Check authorization

AUTHORITY-CHECK OBJECT 'S_USER_GRP'

ID 'CLASS' DUMMY

ID 'ACTVT' FIELD '03'. " Display

IF sy-subrc NE 0.

  • You are not authorized to use function &

MESSAGE e150(00) WITH 'Display user'(014).

ENDIF.

PERFORM f_read_data.

----


END-OF-SELECTION.

PERFORM f_display_data.

----


  • Form f_read_data

----


FORM f_read_data.

DATA :

l_usr02flag TYPE x,

lt_uinfo TYPE TABLE OF uinfo.

gs_usr02-trdat = sy-datum - p_dtrdat.

gs_usr02-bcda1 = sy-datum - p_dbcda1.

  • Read data

SELECT umandt ubname gltgb gltgv class trdat bcda1 ltime locnt

uflag ustyp aname erdat name_text

INTO CORRESPONDING FIELDS OF TABLE gt_data

FROM usr02 AS u

JOIN usr21 AS s

ON umandt = smandt

AND ubname = sbname

JOIN adrp AS a

ON aclient = smandt

AND apersnumber = spersnumber

CLIENT SPECIFIED

WHERE u~mandt IN s_mandt

AND u~bname IN s_bname

AND class IN s_class

AND trdat LE gs_usr02-trdat

AND bcda1 LE gs_usr02-bcda1.

  • Get connected users

PERFORM get_users CHANGING lt_uinfo.

LOOP AT gt_data ASSIGNING <data>.

l_usr02flag = <data>-uflag.

  • Valid users

IF ( NOT p_valid IS INITIAL

AND ( ( <data>-gltgb GE sy-datum

AND <data>-gltgv LE sy-datum )

OR ( <data>-gltgv IS INITIAL

AND <data>-gltgb IS INITIAL )

OR ( <data>-gltgv LE sy-datum

AND <data>-gltgb IS INITIAL ) ) )

  • Not valid users

OR

( NOT notvalid IS INITIAL

AND ( <data>-gltgv GT sy-datum

OR

( <data>-gltgb LT sy-datum

AND NOT <data>-gltgb IS INITIAL ) ) ).

ELSE.

DELETE gt_data.

CONTINUE.

ENDIF.

  • Active users

IF ( NOT unlocked IS INITIAL

AND NOT ( l_usr02flag O c_yulock

OR l_usr02flag O c_yusloc

OR l_usr02flag O c_yugloc ) )

OR

  • Locked users

( NOT locked IS INITIAL

AND ( l_usr02flag O c_yulock

OR l_usr02flag O c_yusloc

OR l_usr02flag O c_yugloc ) )

  • Users with failed logon

OR

( NOT faillog IS INITIAL

AND <data>-locnt GT 0 ).

ELSE.

DELETE gt_data.

CONTINUE.

ENDIF.

  • Dialog users

IF ( NOT diaguser IS INITIAL

AND <data>-ustyp EQ c_typdia )

OR

  • System users

( NOT sysuser IS INITIAL

AND <data>-ustyp EQ c_typbatch )

OR

  • Communication users

( NOT commuser IS INITIAL

AND <data>-ustyp EQ c_typcpic )

OR

  • Service users

( NOT servuser IS INITIAL

AND <data>-ustyp EQ c_typsim ).

ELSE.

DELETE gt_data.

CONTINUE.

ENDIF.

  • Users with initial password

IF ( NOT initpass IS INITIAL

AND <data>-ltime IS INITIAL )

  • Users with defined password

OR

( NOT defpass IS INITIAL

AND <data>-codvn NE c_x

AND NOT <data>-ltime IS INITIAL ).

ELSE.

DELETE gt_data.

CONTINUE.

ENDIF.

IF <data>-codvn = c_x.

<data>-icon_pwd = icon_deactivate.

ELSE.

IF <data>-ltime IS INITIAL.

<data>-icon_pwd = icon_cancel.

ELSE.

<data>-icon_pwd = icon_checked.

ENDIF.

ENDIF.

  • Type of lock

IF l_usr02flag O c_yulock OR l_usr02flag O c_yusloc OR

l_usr02flag O c_yugloc.

<data>-icon_lock = icon_locked.

ENDIF.

  • Message lock

IF l_usr02flag O c_yulock.

<data>-text_lock = 'Incorrect logons'(011).

ELSEIF l_usr02flag O c_yusloc.

<data>-text_lock = 'Administrator'(012).

ELSEIF l_usr02flag O c_yugloc.

<data>-text_lock = 'Global lock'(017).

ELSEIF <data>-locnt GT 0.

WRITE: <data>-locnt NO-SIGN LEFT-JUSTIFIED TO <data>-text_lock.

CONCATENATE 'No. of Incorrect Logons:'(018)

<data>-text_lock INTO <data>-text_lock.

ENDIF.

READ TABLE lt_uinfo WITH KEY mandt = <data>-mandt

bname = <data>-bname

TRANSPORTING NO FIELDS.

IF sy-subrc EQ 0.

<data>-icon_con = icon_dimension.

ENDIF.

ENDLOOP.

ENDFORM. " F_READ_DATA

----


  • Form f_display_data

----


FORM f_display_data.

  • Macro definition

DEFINE m_sort.

add 1 to ls_sort-spos.

ls_sort-fieldname = &1.

ls_sort-up = &2.

ls_sort-down = &3.

ls_sort-group = &4.

append ls_sort to lt_sort.

END-OF-DEFINITION.

  • Macro definition

DEFINE m_fieldcat.

clear ls_fieldcat.

add 1 to l_pos.

ls_fieldcat-col_pos = l_pos.

ls_fieldcat-fieldname = &1.

ls_fieldcat-ref_tabname = &2.

append ls_fieldcat to lt_fieldcat.

END-OF-DEFINITION.

DATA:

l_pos TYPE i,

ls_print TYPE slis_print_alv,

ls_layout TYPE slis_layout_alv,

ls_filter TYPE slis_filter_alv,

lt_filter TYPE slis_t_filter_alv,

ls_sort TYPE slis_sortinfo_alv,

lt_sort TYPE slis_t_sortinfo_alv,

ls_fieldcat TYPE slis_fieldcat_alv,

lt_fieldcat TYPE slis_t_fieldcat_alv,

ls_event_exit TYPE slis_event_exit,

lt_event_exit TYPE slis_t_event_exit.

  • Layout

ls_layout-zebra = c_x.

ls_layout-cell_merge = c_x.

ls_layout-colwidth_optimize = c_x.

ls_layout-group_change_edit = c_x.

ls_layout-box_fieldname = 'CHECKBOX'.

  • Build sort table

m_sort 'TRDAT' '' c_x 'UL'.

m_sort 'LTIME' '' c_x ''.

  • Build field catalog table

CLEAR ls_fieldcat.

ADD 1 TO l_pos.

ls_fieldcat-col_pos = l_pos.

ls_fieldcat-fieldname = 'ICON_CON'.

ls_fieldcat-icon = c_x.

ls_fieldcat-seltext_s = 'C'.

ls_fieldcat-seltext_l = 'Connected'.

APPEND ls_fieldcat TO lt_fieldcat.

m_fieldcat 'MANDT' 'USR02'.

m_fieldcat 'BNAME' 'USR02'.

m_fieldcat 'NAME_TEXT' 'ADDR3_DATA'.

m_fieldcat 'CLASS' 'USR02'.

m_fieldcat 'USTYP' 'USR02'.

m_fieldcat 'ANAME' 'USR02'.

m_fieldcat 'ERDAT' 'USR02'.

m_fieldcat 'TRDAT' 'USR02'.

m_fieldcat 'LTIME' 'USR02'.

m_fieldcat 'GLTGB' 'USR02'.

CLEAR ls_fieldcat.

ADD 1 TO l_pos.

ls_fieldcat-col_pos = l_pos.

ls_fieldcat-fieldname = 'ICON_PWD'.

ls_fieldcat-icon = c_x.

ls_fieldcat-seltext_s = 'P.'.

ls_fieldcat-seltext_l = 'icon password'.

APPEND ls_fieldcat TO lt_fieldcat.

m_fieldcat 'BCDA1' 'USR02'.

CLEAR ls_fieldcat.

ADD 1 TO l_pos.

ls_fieldcat-col_pos = l_pos.

ls_fieldcat-fieldname = 'ICON_LOCK'.

ls_fieldcat-icon = c_x.

ls_fieldcat-seltext_s = 'L.'.

ls_fieldcat-seltext_l = 'icon lock'.

APPEND ls_fieldcat TO lt_fieldcat.

m_fieldcat 'TEXT_LOCK' ''.

ls_fieldcat-seltext_s = 'Creat.date'. "#EC NOTEXT

MODIFY lt_fieldcat FROM ls_fieldcat

TRANSPORTING seltext_s WHERE fieldname EQ 'ERDAT'.

ls_fieldcat-seltext_s = 'Logon date'. "#EC NOTEXT

MODIFY lt_fieldcat FROM ls_fieldcat

TRANSPORTING seltext_s WHERE fieldname EQ 'TRDAT'.

ls_fieldcat-seltext_s = 'Log.time'. "#EC NOTEXT

MODIFY lt_fieldcat FROM ls_fieldcat

TRANSPORTING seltext_s WHERE fieldname EQ 'LTIME'.

ls_fieldcat-seltext_m = 'Message lock'. "#EC NOTEXT

MODIFY lt_fieldcat FROM ls_fieldcat

TRANSPORTING seltext_m WHERE fieldname EQ 'TEXT_LOCK'.

  • Activate refresh button

CLEAR ls_event_exit.

ls_event_exit-ucomm = c_refresh. " Refresh

ls_event_exit-after = c_x.

APPEND ls_event_exit TO lt_event_exit.

  • Print options

ls_print-no_print_selinfos = c_x. " Display no selection infos

ls_print-no_print_listinfos = c_x. " Display no listinfos

  • Filter

CLEAR ls_filter.

ls_filter-fieldname = 'TRDAT'.

ls_filter-valuf_int = sy-datum.

ls_filter-sign0 = 'I'.

ls_filter-optio = 'EQ'.

APPEND ls_filter TO lt_filter.

  • Display data

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

i_callback_program = sy-cprog

i_callback_user_command = 'USER_COMMAND'

i_callback_pf_status_set = 'PF_STATUS_SET'

is_layout = ls_layout

is_print = ls_print

it_fieldcat = lt_fieldcat

it_sort = lt_sort

it_filter = lt_filter

it_event_exit = lt_event_exit

i_save = 'A'

TABLES

t_outtab = gt_data.

ENDFORM. " F_DISPLAY_DATA

----


  • FORM USER_COMMAND *

----


FORM user_command USING u_ucomm TYPE syucomm

us_selfield TYPE slis_selfield. "#EC CALLED

CASE u_ucomm.

WHEN '&IC1'. " Pick

READ TABLE gt_data INDEX us_selfield-tabindex ASSIGNING <data>.

CHECK sy-subrc EQ 0.

IF NOT <data>-bname IS INITIAL AND <data>-mandt = sy-mandt.

CALL FUNCTION 'AUTHORITY_CHECK_TCODE'

EXPORTING

tcode = 'SU01D'

EXCEPTIONS

ok = 1

not_ok = 2

OTHERS = 3.

IF sy-subrc NE 1.

  • You are not authorized to use Transaction &

MESSAGE e172(00) WITH 'SU01D'.

ENDIF.

  • User name

SET PARAMETER ID 'XUS' FIELD <data>-bname.

CALL TRANSACTION 'SU01D'.

ENDIF.

WHEN c_refresh.

PERFORM f_read_data.

us_selfield-refresh = c_x.

ENDCASE.

ENDFORM. " USER_COMMAND

----


  • FORM PF_STATUS_SET *

----


FORM pf_status_set USING ut_extab TYPE slis_t_extab. "#EC CALLED

  • Display refresh button

DELETE ut_extab WHERE fcode = c_refresh.

SET PF-STATUS 'STANDARD_FULLSCREEN' OF PROGRAM 'SAPLKKBL'

EXCLUDING ut_extab.

ENDFORM. " PF_STATUS_SET

----


  • FORM get_users *

----


FORM get_users CHANGING ut_uinfo TYPE table.

DATA :

l_msg(80) TYPE c, "#EC NEEDED

ls_desti TYPE rfchosts,

lt_uinfo TYPE TABLE OF uinfo,

lt_desti TYPE TABLE OF rfchosts.

CALL FUNCTION 'RFC_GET_LOCAL_DESTINATIONS'

TABLES

localdest = lt_desti.

LOOP AT lt_desti INTO ls_desti.

REFRESH lt_uinfo.

CALL FUNCTION 'THUSRINFO' DESTINATION ls_desti

TABLES

usr_tabl = lt_uinfo

EXCEPTIONS

communication_failure = 17 MESSAGE l_msg

system_failure = 17 MESSAGE l_msg.

IF sy-subrc = 0.

APPEND LINES OF lt_uinfo TO ut_uinfo.

ENDIF.

ENDLOOP.

ENDFORM. "get_users

Read only

tarangini_katta
Active Contributor
0 Likes
957

Hi Rebka,

Have you written like this.

clear ls_fcat.

ls_fcat-fieldname = 'CHECKBOX'.

  • Essential: declare field as checkbox and

  • mark it as editable field:

ls_fcat-checkbox = 'X'.

ls_fcat-edit = 'X'.

Thanks,

Read only

Former Member
0 Likes
957

Hi Rekha,

U can edit the standard program with name BCAL* u will one program with checkbox editing.

did u create one emplty column?