CLASS lhc_zr_todo_100 DEFINITION INHERITING FROM cl_abap_behavior_handler.
PRIVATE SECTION.
METHODS:
get_global_authorizations FOR GLOBAL AUTHORIZATION
IMPORTING
REQUEST requested_authorizations FOR zr_todo_100
RESULT result,
earlynumbering_create FOR NUMBERING
IMPORTING entities FOR CREATE zr_todo_100,
setdefaultstatus FOR DETERMINE ON MODIFY
IMPORTING keys FOR zr_todo_100~setdefaultstatus,
validatetitle FOR VALIDATE ON SAVE
IMPORTING keys FOR zr_todo_100~validatetitle.
ENDCLASS.
CLASS lhc_zr_todo_100 IMPLEMENTATION.
METHOD get_global_authorizations.
IF requested_authorizations-%create = if_abap_behv=>mk-on.
result-%create = if_abap_behv=>auth-allowed.
ENDIF.
IF requested_authorizations-%update = if_abap_behv=>mk-on.
result-%update = if_abap_behv=>auth-allowed.
ENDIF.
IF requested_authorizations-%delete = if_abap_behv=>mk-on.
result-%delete = if_abap_behv=>auth-allowed.
ENDIF.
ENDMETHOD.
METHOD earlynumbering_create.
LOOP AT entities INTO DATA(entity).
IF entity-TaskUUID IS INITIAL.
TRY.
DATA(lv_uuid) = cl_system_uuid=>create_uuid_x16_static( ).
APPEND VALUE #(
%cid = entity-%cid
%key = entity-%key
%is_draft = entity-%is_draft
TaskUUID = lv_uuid
) TO mapped-zr_todo_100.
CATCH cx_uuid_error INTO DATA(lx_uuid_error).
APPEND VALUE #(
%cid = entity-%cid
%key = entity-%key
%is_draft = entity-%is_draft
) TO failed-zr_todo_100.
APPEND VALUE #(
%cid = entity-%cid
%key = entity-%key
%is_draft = entity-%is_draft
%msg = new_message_with_text(
severity = if_abap_behv_message=>severity-error
text = lx_uuid_error->get_text( ) )
) TO reported-zr_todo_100.
ENDTRY.
ELSE.
" Important: also respond for instances that already have a UUID
APPEND VALUE #(
%cid = entity-%cid
%key = entity-%key
%is_draft = entity-%is_draft
TaskUUID = entity-TaskUUID
) TO mapped-zr_todo_100.
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD setDefaultStatus.
CONSTANTS lc_status_open TYPE string VALUE 'OPEN'.
READ ENTITIES OF zr_todo_100 IN LOCAL MODE
ENTITY zr_todo_100
FIELDS ( Status )
WITH CORRESPONDING #( keys )
RESULT DATA(todos).
DATA update_todos TYPE TABLE FOR UPDATE zr_todo_100.
LOOP AT todos INTO DATA(todo).
IF todo-Status IS INITIAL.
APPEND VALUE #(
%tky = todo-%tky
Status = lc_status_open
) TO update_todos.
ENDIF.
ENDLOOP.
IF update_todos IS NOT INITIAL.
MODIFY ENTITIES OF zr_todo_100 IN LOCAL MODE
ENTITY zr_todo_100
UPDATE FIELDS ( Status )
WITH update_todos.
ENDIF.
ENDMETHOD.
METHOD validateTitle.
READ ENTITIES OF zr_todo_100 IN LOCAL MODE
ENTITY zr_todo_100
FIELDS ( Title )
WITH CORRESPONDING #( keys )
RESULT DATA(todos).
LOOP AT todos INTO DATA(todo).
IF todo-Title IS INITIAL.
APPEND VALUE #(
%tky = todo-%tky
) TO failed-zr_todo_100.
APPEND VALUE #(
%tky = todo-%tky
%state_area = 'VALIDATE_TITLE'
%element-Title = if_abap_behv=>mk-on
%msg = new_message_with_text(
severity = if_abap_behv_message=>severity-error
text = 'Title must not be empty' )
) TO reported-zr_todo_100.
ENDIF.
ENDLOOP.
ENDMETHOD.
ENDCLASS.