Skip to content

Commit

Permalink
Add list and lock
Browse files Browse the repository at this point in the history
  • Loading branch information
mbtools committed Jun 2, 2024
1 parent 97f56cb commit 382000b
Show file tree
Hide file tree
Showing 3 changed files with 134 additions and 62 deletions.
80 changes: 73 additions & 7 deletions src/zcl_persist_apm.clas.abap
Original file line number Diff line number Diff line change
Expand Up @@ -13,42 +13,80 @@ CLASS zcl_persist_apm DEFINITION

INTERFACES zif_persist_apm.

CLASS-METHODS factory
CLASS-METHODS get_instance
RETURNING
VALUE(result) TYPE REF TO zif_persist_apm.

CLASS-METHODS injector
IMPORTING
!ii_mock TYPE REF TO zif_persist_apm.

CLASS-METHODS validate_key
IMPORTING
!iv_key TYPE zif_persist_apm=>ty_key
RETURNING
VALUE(result) TYPE abap_bool.

PROTECTED SECTION.
PRIVATE SECTION.

CLASS-DATA go_instance TYPE REF TO zif_persist_apm.

DATA mv_update_function TYPE funcname.

METHODS get_update_function
RETURNING
VALUE(rv_funcname) TYPE funcname.

ENDCLASS.



CLASS zcl_persist_apm IMPLEMENTATION.


METHOD factory.
METHOD get_instance.
IF go_instance IS INITIAL.
CREATE OBJECT go_instance TYPE zcl_persist_apm.
ENDIF.
result = go_instance.
ENDMETHOD.


METHOD get_update_function.
IF mv_update_function IS INITIAL.
mv_update_function = 'CALL_V1_PING'.
IF zcl_abapgit_factory=>get_function_module( )->function_exists( mv_update_function ) = abap_false.
mv_update_function = 'BANK_OBJ_WORKL_RELEASE_LOCKS'.
ENDIF.
ENDIF.
rv_funcname = mv_update_function.
ENDMETHOD.


METHOD injector.
go_instance = ii_mock.
ENDMETHOD.


METHOD validate_key.

DATA:
lv_key_type TYPE string,
lv_rest TYPE string.

SPLIT iv_key AT ':' INTO lv_key_type lv_rest.

result = boolc( sy-subrc = 0 AND
( lv_key_type = zif_persist_apm=>c_key_type-package OR
lv_key_type = zif_persist_apm=>c_key_type-settings ) ).

ENDMETHOD.


METHOD zif_persist_apm~delete.

DELETE FROM (zif_persist_apm=>c_tabname) WHERE key = iv_key.
DELETE FROM (zif_persist_apm=>c_tabname) WHERE keys = iv_key.
IF sy-subrc <> 0.
zcx_persist_apm=>raise( |Error deleting { iv_key }| ).
ENDIF.
Expand All @@ -57,27 +95,55 @@ CLASS zcl_persist_apm IMPLEMENTATION.


METHOD zif_persist_apm~list.
IF iv_key IS INITIAL.
IF iv_filter IS INITIAL.
SELECT * FROM (zif_persist_apm=>c_tabname) INTO TABLE result.
ELSE.
SELECT * FROM (zif_persist_apm=>c_tabname) INTO TABLE result WHERE key LIKE iv_key.
SELECT * FROM (zif_persist_apm=>c_tabname) INTO TABLE result WHERE keys LIKE iv_filter.
ENDIF.
ENDMETHOD.


METHOD zif_persist_apm~load.
SELECT SINGLE * FROM (zif_persist_apm=>c_tabname) INTO result WHERE key = iv_key.
SELECT SINGLE * FROM (zif_persist_apm=>c_tabname) INTO result WHERE keys = iv_key.
IF sy-subrc <> 0.
zcx_persist_apm=>raise( |Error loading { iv_key }| ).
ENDIF.
ENDMETHOD.


METHOD zif_persist_apm~lock.

DATA lv_dummy_update_function TYPE funcname.

CALL FUNCTION 'ENQUEUE_EZABAPPM'
EXPORTING
mode_zabappm = iv_mode
keys = iv_key
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
IF sy-subrc <> 0.
zcx_persist_apm=>raise_t100( ).
ENDIF.

lv_dummy_update_function = get_update_function( ).

" trigger dummy update task to automatically release locks at commit
CALL FUNCTION lv_dummy_update_function IN UPDATE TASK.

ENDMETHOD.


METHOD zif_persist_apm~save.

DATA ls_abappm TYPE zif_persist_apm=>ty_zabappm.

ls_abappm-key = iv_key.
IF validate_key( iv_key ) = abap_false.
zcx_persist_apm=>raise( |Invalid key { iv_key }| ).
ENDIF.

ls_abappm-keys = iv_key.
ls_abappm-value = replace(
val = iv_value
sub = cl_abap_char_utilities=>cr_lf
Expand Down
77 changes: 41 additions & 36 deletions src/zcl_persist_apm_setup.clas.abap
Original file line number Diff line number Diff line change
Expand Up @@ -161,9 +161,9 @@ CLASS zcl_persist_apm_setup IMPLEMENTATION.
APPEND INITIAL LINE TO lt_dd27p ASSIGNING <ls_dd27p>.
<ls_dd27p>-viewname = zif_persist_apm=>c_lock.
<ls_dd27p>-objpos = '0001'.
<ls_dd27p>-viewfield = 'KEY'.
<ls_dd27p>-viewfield = 'KEYS'.
<ls_dd27p>-tabname = zif_persist_apm=>c_tabname.
<ls_dd27p>-fieldname = 'KEY'.
<ls_dd27p>-fieldname = 'KEYS'.
<ls_dd27p>-keyflag = abap_true.

CALL FUNCTION 'DDIF_ENQU_PUT'
Expand Down Expand Up @@ -258,48 +258,53 @@ CLASS zcl_persist_apm_setup IMPLEMENTATION.
ls_dd09l-pufferung = 'P'.

APPEND INITIAL LINE TO lt_dd03p ASSIGNING <ls_dd03p>.
<ls_dd03p>-tabname = zif_persist_apm=>c_tabname.
<ls_dd03p>-fieldname = 'KEY'.
<ls_dd03p>-position = '0001'.
<ls_dd03p>-keyflag = 'X'.
<ls_dd03p>-rollname = 'DEVCLASS'.
<ls_dd03p>-datatype = 'CHAR'.
<ls_dd03p>-leng = '000255'.
<ls_dd03p>-ddtext = 'Key'.
<ls_dd03p>-tabname = zif_persist_apm=>c_tabname.
<ls_dd03p>-fieldname = 'KEYS'. "KEY is not allowed
<ls_dd03p>-position = '0001'.
<ls_dd03p>-keyflag = 'X'.
<ls_dd03p>-notnull = 'X'.
<ls_dd03p>-datatype = 'CHAR'.
<ls_dd03p>-leng = '000255'.
<ls_dd03p>-ddlanguage = zif_persist_apm=>c_english.
<ls_dd03p>-ddtext = 'Key'.

APPEND INITIAL LINE TO lt_dd03p ASSIGNING <ls_dd03p>.
<ls_dd03p>-tabname = zif_persist_apm=>c_tabname.
<ls_dd03p>-fieldname = 'VALUE'.
<ls_dd03p>-position = '0002'.
<ls_dd03p>-datatype = 'STRG'.
<ls_dd03p>-ddtext = 'Record Data'.
<ls_dd03p>-tabname = zif_persist_apm=>c_tabname.
<ls_dd03p>-fieldname = 'VALUE'.
<ls_dd03p>-position = '0002'.
<ls_dd03p>-datatype = 'STRG'.
<ls_dd03p>-ddlanguage = zif_persist_apm=>c_english.
<ls_dd03p>-ddtext = 'Value'.

APPEND INITIAL LINE TO lt_dd03p ASSIGNING <ls_dd03p>.
<ls_dd03p>-tabname = zif_persist_apm=>c_tabname.
<ls_dd03p>-fieldname = 'LUSER'.
<ls_dd03p>-position = '0003'.
<ls_dd03p>-rollname = 'AS4USER'.
<ls_dd03p>-datatype = 'CHAR'.
<ls_dd03p>-leng = '000012'.
<ls_dd03p>-ddtext = 'Last Changed By'.
<ls_dd03p>-tabname = zif_persist_apm=>c_tabname.
<ls_dd03p>-fieldname = 'LUSER'.
<ls_dd03p>-position = '0003'.
<ls_dd03p>-rollname = 'AS4USER'.
<ls_dd03p>-datatype = 'CHAR'.
<ls_dd03p>-leng = '000012'.
<ls_dd03p>-ddlanguage = zif_persist_apm=>c_english.
<ls_dd03p>-ddtext = 'Last Changed By'.

APPEND INITIAL LINE TO lt_dd03p ASSIGNING <ls_dd03p>.
<ls_dd03p>-tabname = zif_persist_apm=>c_tabname.
<ls_dd03p>-fieldname = 'LDATE'.
<ls_dd03p>-position = '0004'.
<ls_dd03p>-rollname = 'AS4DATE'.
<ls_dd03p>-datatype = 'DATS'.
<ls_dd03p>-leng = '000008'.
<ls_dd03p>-ddtext = 'Last Changed On'.
<ls_dd03p>-tabname = zif_persist_apm=>c_tabname.
<ls_dd03p>-fieldname = 'LDATE'.
<ls_dd03p>-position = '0004'.
<ls_dd03p>-rollname = 'AS4DATE'.
<ls_dd03p>-datatype = 'DATS'.
<ls_dd03p>-leng = '000008'.
<ls_dd03p>-ddlanguage = zif_persist_apm=>c_english.
<ls_dd03p>-ddtext = 'Last Changed On'.

APPEND INITIAL LINE TO lt_dd03p ASSIGNING <ls_dd03p>.
<ls_dd03p>-tabname = zif_persist_apm=>c_tabname.
<ls_dd03p>-fieldname = 'LTIME'.
<ls_dd03p>-position = '0005'.
<ls_dd03p>-rollname = 'AS4TIME'.
<ls_dd03p>-datatype = 'TIMS'.
<ls_dd03p>-leng = '000006'.
<ls_dd03p>-ddtext = 'Last Changed At'.
<ls_dd03p>-tabname = zif_persist_apm=>c_tabname.
<ls_dd03p>-fieldname = 'LTIME'.
<ls_dd03p>-position = '0005'.
<ls_dd03p>-rollname = 'AS4TIME'.
<ls_dd03p>-datatype = 'TIMS'.
<ls_dd03p>-leng = '000006'.
<ls_dd03p>-ddlanguage = zif_persist_apm=>c_english.
<ls_dd03p>-ddtext = 'Last Changed At'.

CALL FUNCTION 'DDIF_TABL_PUT'
EXPORTING
Expand Down
39 changes: 20 additions & 19 deletions src/zif_persist_apm.intf.abap
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@ INTERFACE zif_persist_apm PUBLIC.
TYPES:
ty_key TYPE c LENGTH 255,
BEGIN OF ty_zabappm,
key TYPE ty_key,
keys TYPE ty_key,
value TYPE string,
luser TYPE c LENGTH 12,
ldate TYPE d,
ltime TYPE t,
END OF ty_zabappm,
ty_list TYPE SORTED TABLE OF ty_zabappm WITH UNIQUE KEY key.
ty_list TYPE SORTED TABLE OF ty_zabappm WITH UNIQUE KEY keys.

CONSTANTS c_version TYPE string VALUE '1.0.0' ##NEEDED.

Expand All @@ -28,41 +28,42 @@ INTERFACE zif_persist_apm PUBLIC.
c_english TYPE c LENGTH 1 VALUE 'E'.

CONSTANTS:
BEGIN OF c_type,
package TYPE ty_zabappm-key VALUE 'PACKAGE',
json TYPE ty_zabappm-key VALUE 'JSON',
readme TYPE ty_zabappm-key VALUE 'README',
favicon TYPE ty_zabappm-key VALUE 'FAVICON', " FUTURE
user TYPE ty_zabappm-key VALUE 'USER',
settings TYPE ty_zabappm-key VALUE 'SETTINGS',
END OF c_type.
BEGIN OF c_key_type,
package TYPE ty_key VALUE 'PACKAGE',
settings TYPE ty_key VALUE 'SETTINGS',
END OF c_key_type.

METHODS list
IMPORTING
!iv_key TYPE zif_persist_apm=>ty_zabappm-key OPTIONAL
!iv_filter TYPE ty_key OPTIONAL
RETURNING
VALUE(result) TYPE zif_persist_apm=>ty_list
RAISING
zcx_persist_apm.
VALUE(result) TYPE ty_list.

METHODS load
IMPORTING
!iv_key TYPE zif_persist_apm=>ty_zabappm-key
!iv_key TYPE ty_key
RETURNING
VALUE(result) TYPE zif_persist_apm=>ty_zabappm
VALUE(result) TYPE ty_zabappm
RAISING
zcx_persist_apm.

METHODS save
IMPORTING
!iv_key TYPE zif_persist_apm=>ty_zabappm-key
!iv_value TYPE zif_persist_apm=>ty_zabappm-value
!iv_key TYPE ty_key
!iv_value TYPE ty_zabappm-value
RAISING
zcx_persist_apm.

METHODS delete
IMPORTING
!iv_key TYPE zif_persist_apm=>ty_zabappm-key
!iv_key TYPE ty_key
RAISING
zcx_persist_apm.

METHODS lock
IMPORTING
!iv_key TYPE ty_key
!iv_mode TYPE enqmode DEFAULT 'E'
RAISING
zcx_persist_apm.

Expand Down

0 comments on commit 382000b

Please sign in to comment.