API to create Application Job Catalog Entry & Template, before CL_APJ_DT_CREATE_CONTENT

In this blog post, I propose the code of a demo program to create Application Job Catalog Entries and Templates, which works in ABAP 7.52 SP04. In this version, the released API “CL_APJ_DT_CREATE_CONTENT” cannot be used as it doesn’t exist. There are lots of things missing in this demo program, like error management. To be used at your own risk.

One word about the Application Job framework: it’s the new way to schedule background jobs. It exists since ABAP 7.50, and it’s still used and developed in ABAP Cloud. The old job framework (JOB_OPEN, etc.) cannot be used with ABAP Cloud, so I recommend reading more about the Application Jobs, for instance here: Scheduling Application Jobs in SAP S/4HANA Cloud Public EditionApplication Jobs in BTP, ABAP Environment | SAP Help PortalWorking with Application Job Objects | SAP Help Portal. Also, this external blog post series is well written and short: BTP – Application Jobs (Introduction)BTP – Application Job (Creation)BTP – Application Job (v2).

Here’s the demo code below. Again, at your own risk!

Thanks for reading.

Sandra

 

REPORT zdemo_create_app_job_objects.

CLASS lcl_apj_helper DEFINITION FINAL
CREATE PRIVATE.

PUBLIC SECTION.
“! Call TR_TASK_SET like does the method SET_INTERNAL of ZCL_ABAPGIT_DEFAULT_TRANSPORT.
CLASS-METHODS set_default_transport
IMPORTING trkorr TYPE trkorr.

“! Call TR_TADIR_INTERFACE like does the method tadir_insert of ZCL_ABAPGIT_OBJECTS_SUPER.
CLASS-METHODS write_tadir_entry
IMPORTING !name TYPE apj_w_jce_root-job_catalog_entry_name
tadir_object_type TYPE trobjtype
devclass TYPE devclass.
ENDCLASS.

CLASS lcl_app DEFINITION FINAL
CREATE PRIVATE.

PUBLIC SECTION.
CLASS-METHODS create
RETURNING VALUE(result) TYPE REF TO lcl_app.

METHODS create_or_change_catalog_entry.
METHODS create_or_change_template.
METHODS delete_catalog_entry.
METHODS delete_template.
ENDCLASS.

CLASS lcl_jce DEFINITION FINAL
CREATE PRIVATE.

PUBLIC SECTION.
DATA data_accessor TYPE REF TO cl_apj_dt_job_cat_entry READ-ONLY.

CLASS-METHODS create
IMPORTING !name TYPE apj_w_jce_root-job_catalog_entry_name
RETURNING VALUE(result) TYPE REF TO lcl_jce.

CLASS-METHODS delete
IMPORTING !name TYPE apj_w_jce_root-job_catalog_entry_name
trkorr TYPE trkorr.

CLASS-METHODS get
IMPORTING !name TYPE apj_w_jce_root-job_catalog_entry_name
RETURNING VALUE(result) TYPE REF TO lcl_jce.

CLASS-METHODS exists
IMPORTING !name TYPE apj_w_jce_root-job_catalog_entry_name
RETURNING VALUE(result) TYPE abap_bool.

METHODS save_and_activate
IMPORTING devclass TYPE devclass
trkorr TYPE trkorr.

PRIVATE SECTION.
CONSTANTS entity_type TYPE apj_s_dt_dba-entity_type VALUE if_apj_dt_types=>cs_entity_type-job_catalog_entry.

DATA name TYPE apj_w_jce_root-job_catalog_entry_name.
DATA mode TYPE if_apj_dt_types=>ty_mode.
ENDCLASS.

CLASS lcl_jt DEFINITION FINAL
CREATE PRIVATE.

PUBLIC SECTION.
DATA data_accessor TYPE REF TO cl_apj_dt_job_template_entry READ-ONLY.

CLASS-METHODS create
IMPORTING !name TYPE apj_w_jt_root-job_template_name
RETURNING VALUE(result) TYPE REF TO lcl_jt.

CLASS-METHODS delete
IMPORTING !name TYPE apj_w_jt_root-job_template_name
trkorr TYPE trkorr.

CLASS-METHODS get
IMPORTING !name TYPE apj_w_jt_root-job_template_name
RETURNING VALUE(result) TYPE REF TO lcl_jt.

CLASS-METHODS exists
IMPORTING !name TYPE apj_w_jt_root-job_template_name
RETURNING VALUE(result) TYPE abap_bool.

METHODS save_and_activate
IMPORTING devclass TYPE devclass
trkorr TYPE trkorr.

PRIVATE SECTION.
CONSTANTS entity_type TYPE apj_s_dt_dba-entity_type VALUE if_apj_dt_types=>cs_entity_type-job_template.

DATA name TYPE apj_w_jt_root-job_template_name.
DATA mode TYPE if_apj_dt_types=>ty_mode.

ENDCLASS.

START-OF-SELECTION.
lcl_app=>create( )->create_or_change_catalog_entry( ).
* lcl_app=>create( )->create_or_change_template( ).
* lcl_app=>create( )->delete_template( ).
* lcl_app=>create( )->delete_catalog_entry( ).
ASSERT 1 = 1.

CLASS lcl_apj_helper IMPLEMENTATION.
METHOD set_default_transport.
CALL FUNCTION ‘TR_TASK_SET’
EXPORTING iv_order = trkorr
iv_validdays = 1
EXCEPTIONS invalid_username = 1
invalid_category = 2
invalid_client = 3
invalid_validdays = 4
invalid_order = 5
invalid_task = 6
OTHERS = 7.
IF sy-subrc <> 0.
” TODO
ENDIF.
ENDMETHOD.

METHOD write_tadir_entry.
TYPES: BEGIN OF ty_params,
wi_test_modus TYPE trpari-s_checked,
wi_tadir_pgmid TYPE tadir-pgmid,
wi_tadir_object TYPE tadir-object,
wi_tadir_obj_name TYPE tadir-obj_name,
wi_tadir_author TYPE tadir-author,
wi_tadir_devclass TYPE tadir-devclass,
wi_tadir_masterlang TYPE tadir-masterlang,
iv_delflag TYPE tadir-delflag,
END OF ty_params.

DATA(params) = VALUE ty_params( wi_test_modus = abap_false
wi_tadir_pgmid = ‘R3TR’
wi_tadir_object = tadir_object_type
wi_tadir_obj_name = name
wi_tadir_author = sy-uname
wi_tadir_devclass = devclass
wi_tadir_masterlang = sy-langu
iv_delflag = abap_false ).
CALL FUNCTION ‘TR_TADIR_INTERFACE’
EXPORTING wi_test_modus = params-wi_test_modus
wi_tadir_pgmid = params-wi_tadir_pgmid
wi_tadir_object = params-wi_tadir_object
wi_tadir_obj_name = params-wi_tadir_obj_name
wi_tadir_author = params-wi_tadir_author
wi_tadir_devclass = params-wi_tadir_devclass
wi_tadir_masterlang = params-wi_tadir_masterlang
iv_delflag = params-iv_delflag
EXCEPTIONS tadir_entry_not_existing = 1
tadir_entry_ill_type = 2
no_systemname = 3
no_systemtype = 4
original_system_conflict = 5
object_reserved_for_devclass = 6
object_exists_global = 7
object_exists_local = 8
object_is_distributed = 9
obj_specification_not_unique = 10
no_authorization_to_delete = 11
devclass_not_existing = 12
simultanious_set_remove_repair = 13
order_missing = 14
no_modification_of_head_syst = 15
pgmid_object_not_allowed = 16
masterlanguage_not_specified = 17
devclass_not_specified = 18
specify_owner_unique = 19
loc_priv_objs_no_repair = 20
gtadir_not_reached = 21
object_locked_for_order = 22
change_of_class_not_allowed = 23
no_change_from_sap_to_tmp = 24
OTHERS = 25.
IF sy-subrc <> 0.
” TODO
ENDIF.
ENDMETHOD.
ENDCLASS.

CLASS lcl_app IMPLEMENTATION.
METHOD create.
result = NEW lcl_app( ).
ENDMETHOD.

METHOD create_or_change_catalog_entry.
TYPES ty_jce TYPE REF TO lcl_jce.

DATA(jce_name) = EXACT apj_w_jce_root-job_catalog_entry_name( ‘ZZSRO’ ).
DATA(devclass) = EXACT devclass( ‘ZZSRO’ ).
DATA(trkorr) = EXACT trkorr( ‘NPLK900082’ ).

DATA(jce) = COND ty_jce( WHEN NOT lcl_jce=>exists( jce_name )
THEN lcl_jce=>create( jce_name )
ELSE lcl_jce=>get( jce_name ) ).

DATA(jce_basic_information) = jce->data_accessor->get_root( ).
DATA(jce_basic_information_update) = VALUE cl_apj_dt_job_cat_entry=>ty_set_root(
BASE CORRESPONDING #( jce_basic_information )
report_name = sy-repid
text = EXACT #( |{ sy-datum } – { sy-uzeit }| ) ).
jce->data_accessor->set_root( jce_basic_information_update ).

jce->save_and_activate( devclass = devclass
trkorr = trkorr ).
COMMIT WORK.
ENDMETHOD.

METHOD create_or_change_template.
TYPES ty_jt TYPE REF TO lcl_jt.

DATA(jt_name) = EXACT apj_w_jt_root-job_template_name( ‘ZZSRO_TEMPL’ ).
DATA(jce_name) = EXACT apj_w_jce_root-job_catalog_entry_name( ‘ZZSRO’ ).
DATA(devclass) = EXACT devclass( ‘ZZSRO’ ).
DATA(trkorr) = EXACT trkorr( ‘NPLK900082’ ).

DATA(jt) = COND ty_jt( WHEN NOT lcl_jt=>exists( jt_name )
THEN lcl_jt=>create( jt_name )
ELSE lcl_jt=>get( jt_name ) ).

DATA(jt_basic_information) = jt->data_accessor->get_root( ).
” TODO: variable is assigned but never used (ABAP cleaner)
DATA(jt_values) = jt->data_accessor->get_values( ).

jt_basic_information-job_catalog_entry_name = jce_name.
jt_basic_information-text = EXACT #( |{ sy-datum } – { sy-uzeit }| ).
jt->data_accessor->set_root( jt_basic_information ).

jt->save_and_activate( devclass = devclass
trkorr = trkorr ).
COMMIT WORK.
ENDMETHOD.

METHOD delete_catalog_entry.
TYPES ty_jce TYPE REF TO lcl_jce.

DATA(jce_name) = EXACT apj_w_jt_root-job_catalog_entry_name( ‘ZZSRO’ ).
DATA(trkorr) = EXACT trkorr( ‘NPLK900082’ ).

lcl_jce=>delete( name = jce_name
trkorr = trkorr ).
COMMIT WORK.
ENDMETHOD.

METHOD delete_template.
TYPES ty_jt TYPE REF TO lcl_jt.

DATA(jt_name) = EXACT apj_w_jt_root-job_template_name( ‘ZZSRO_TEMPL’ ).
DATA(trkorr) = EXACT trkorr( ‘NPLK900082’ ).

lcl_jt=>delete( name = jt_name
trkorr = trkorr ).
COMMIT WORK.
ENDMETHOD.
ENDCLASS.

CLASS lcl_jce IMPLEMENTATION.
METHOD create.
IF exists( name ).
” TODO raise exception
ENDIF.
result = NEW lcl_jce( ).
result->name = name.
result->mode = if_apj_dt_types=>cs_mode-create.
result->data_accessor = NEW cl_apj_dt_job_cat_entry( is_root = VALUE #( job_catalog_entry_name = name ) ).
ENDMETHOD.

METHOD delete.
IF NOT exists( name ).
” TODO raise exception
ENDIF.

IF trkorr IS NOT INITIAL.
lcl_apj_helper=>set_default_transport( trkorr ).
ENDIF.

DATA(lo_controller) = cl_apj_dt_controller=>get_instance( ).
lo_controller->delete_single( VALUE #( entity_type = entity_type
entity_name = name
entity_version = if_apj_dt_types=>cs_entity_version-active ) ).

” TODO: variable is assigned but never used (ABAP cleaner)
DATA(is_success) = lo_controller->save( ).
ENDMETHOD.

METHOD exists.
DATA(jce_dt_db_access) = cl_apj_dt_db_access_factory=>get_instance( )->get_db_access( entity_type ).
DATA(active_jce_existence_info) = jce_dt_db_access->exists(
it_name_version = VALUE #( ( entity_name = name
entity_version = if_apj_dt_types=>cs_entity_version-active ) ) ).
DATA(active_jce_exists) = xsdbool( line_exists( active_jce_existence_info[ KEY entity_name
entity_name = name
exists = abap_true ] ) ).
IF active_jce_exists = abap_true.
result = abap_true.
ELSE.
DATA(inactive_jce_existence_info) = jce_dt_db_access->exists(
it_name_version = VALUE #( ( entity_name = name
entity_version = if_apj_dt_types=>cs_entity_version-inactive ) ) ).
DATA(inactive_jce_exists) = xsdbool( line_exists( inactive_jce_existence_info[ KEY entity_name
entity_name = name
exists = abap_true ] ) ).
IF inactive_jce_exists = abap_true.
result = abap_true.
ELSE.
result = abap_false.
ENDIF.
ENDIF.
ENDMETHOD.

METHOD get.
IF NOT exists( name ).
” TODO raise exception
ENDIF.
DATA(lo_controller) = cl_apj_dt_controller=>get_instance( ).
DATA(li_entity) = lo_controller->if_apj_dt_controller~retrieve_single(
is_entity_type_name = VALUE #( entity_type = entity_type
entity_name = name
entity_version = 0 )
iv_edit_mode = if_apj_dt_types=>cs_edit_mode-exclusive ).
ASSERT li_entity IS BOUND.

result = NEW lcl_jce( ).
result->name = name.
result->mode = if_apj_dt_types=>cs_mode-update.
result->data_accessor = CAST #( li_entity ).
ENDMETHOD.

METHOD save_and_activate.
lcl_apj_helper=>write_tadir_entry( name = name
tadir_object_type = ‘SAJC’
devclass = devclass ).

IF trkorr IS NOT INITIAL.
lcl_apj_helper=>set_default_transport( trkorr ).
ENDIF.

IF mode = if_apj_dt_types=>cs_mode-create.
DATA(object_data) = NEW cl_apj_dt_gui_cat( ).
object_data->if_wb_object_data_model~generate_from_key( EXACT #( name ) ).

DATA(persist) = NEW cl_apj_wb_jce_persist( ).
persist->if_wb_object_persist~save( p_object_data = object_data
p_access_mode = if_wb_adt_rest_resource_co=>co_access_mode_insert ).
ENDIF.

DATA(lo_controller) = cl_apj_dt_controller=>get_instance( ).
lo_controller->modify_single( is_modify = VALUE #( mode = if_apj_dt_types=>cs_mode-update
entity_ref = data_accessor ) ).

” Save and activate
” TODO: variable is assigned but never used (ABAP cleaner)
DATA(is_success) = lo_controller->save( ).
lo_controller->activate( it_entity_type_and_name = VALUE #( ( entity_type = entity_type
entity_name = name ) ) ).
ENDMETHOD.
ENDCLASS.

CLASS lcl_jt IMPLEMENTATION.
METHOD create.
IF exists( name ).
” TODO raise exception
ENDIF.
result = NEW lcl_jt( ).
result->name = name.
result->mode = if_apj_dt_types=>cs_mode-create.
result->data_accessor = NEW cl_apj_dt_job_template_entry( is_root = VALUE #( job_template_name = name ) ).
ENDMETHOD.

METHOD delete.
IF NOT exists( name ).
” TODO raise exception
ENDIF.

IF trkorr IS NOT INITIAL.
lcl_apj_helper=>set_default_transport( trkorr ).
ENDIF.

DATA(lo_controller) = cl_apj_dt_controller=>get_instance( ).
lo_controller->delete_single( VALUE #( entity_type = entity_type
entity_name = name
entity_version = if_apj_dt_types=>cs_entity_version-active ) ).
” TODO: variable is assigned but never used (ABAP cleaner)
DATA(is_success) = lo_controller->save( ).
ENDMETHOD.

METHOD exists.
DATA(jt_dt_db_access) = cl_apj_dt_db_access_factory=>get_instance( )->get_db_access( entity_type ).
DATA(active_jt_existence_info) = jt_dt_db_access->exists(
it_name_version = VALUE #( ( entity_name = name
entity_version = if_apj_dt_types=>cs_entity_version-active ) ) ).
DATA(active_jt_exists) = xsdbool( line_exists( active_jt_existence_info[ KEY entity_name
entity_name = name
exists = abap_true ] ) ).
IF active_jt_exists = abap_true.
result = abap_true.
ELSE.
DATA(inactive_jt_existence_info) = jt_dt_db_access->exists(
it_name_version = VALUE #( ( entity_name = name
entity_version = if_apj_dt_types=>cs_entity_version-inactive ) ) ).
DATA(inactive_jt_exists) = xsdbool( line_exists( inactive_jt_existence_info[ KEY entity_name
entity_name = name
exists = abap_true ] ) ).
IF inactive_jt_exists = abap_true.
result = abap_true.
ELSE.
result = abap_false.
ENDIF.
ENDIF.
ENDMETHOD.

METHOD get.
IF NOT exists( name ).
” TODO raise exception
ENDIF.
DATA(lo_controller) = cl_apj_dt_controller=>get_instance( ).
DATA(li_entity) = lo_controller->if_apj_dt_controller~retrieve_single(
is_entity_type_name = VALUE #( entity_type = entity_type
entity_name = name
entity_version = 0 )
iv_edit_mode = if_apj_dt_types=>cs_edit_mode-exclusive ).
ASSERT li_entity IS BOUND.
result = NEW lcl_jt( ).
result->name = name.
result->mode = if_apj_dt_types=>cs_mode-update.
result->data_accessor = CAST #( li_entity ).
ENDMETHOD.

METHOD save_and_activate.
lcl_apj_helper=>write_tadir_entry( name = name
tadir_object_type = ‘SAJT’
devclass = devclass ).
IF trkorr IS NOT INITIAL.
lcl_apj_helper=>set_default_transport( trkorr ).
ENDIF.

IF mode = if_apj_dt_types=>cs_mode-create.
DATA(object_data) = NEW cl_apj_dt_gui_tmp( ).
object_data->if_wb_object_data_model~generate_from_key( EXACT #( name ) ).

DATA(persist) = NEW cl_apj_wb_jt_persist( ).
persist->if_wb_object_persist~save( p_object_data = object_data
p_access_mode = if_wb_adt_rest_resource_co=>co_access_mode_insert ).
ENDIF.

DATA(lo_controller) = cl_apj_dt_controller=>get_instance( ).
lo_controller->modify_single( is_modify = VALUE #( mode = if_apj_dt_types=>cs_mode-update
entity_ref = data_accessor ) ).

” Save and activate
” TODO: variable is assigned but never used (ABAP cleaner)
DATA(is_success) = lo_controller->save( ).
lo_controller->activate( it_entity_type_and_name = VALUE #( ( entity_type = entity_type
entity_name = name ) ) ).
ENDMETHOD.
ENDCLASS.

 

 

 

​ In this blog post, I propose the code of a demo program to create Application Job Catalog Entries and Templates, which works in ABAP 7.52 SP04. In this version, the released API “CL_APJ_DT_CREATE_CONTENT” cannot be used as it doesn’t exist. There are lots of things missing in this demo program, like error management. To be used at your own risk.One word about the Application Job framework: it’s the new way to schedule background jobs. It exists since ABAP 7.50, and it’s still used and developed in ABAP Cloud. The old job framework (JOB_OPEN, etc.) cannot be used with ABAP Cloud, so I recommend reading more about the Application Jobs, for instance here: Scheduling Application Jobs in SAP S/4HANA Cloud Public Edition, Application Jobs in BTP, ABAP Environment | SAP Help Portal, Working with Application Job Objects | SAP Help Portal. Also, this external blog post series is well written and short: BTP – Application Jobs (Introduction), BTP – Application Job (Creation), BTP – Application Job (v2).Here’s the demo code below. Again, at your own risk!Thanks for reading.Sandra REPORT zdemo_create_app_job_objects.

CLASS lcl_apj_helper DEFINITION FINAL
CREATE PRIVATE.

PUBLIC SECTION.
“! Call TR_TASK_SET like does the method SET_INTERNAL of ZCL_ABAPGIT_DEFAULT_TRANSPORT.
CLASS-METHODS set_default_transport
IMPORTING trkorr TYPE trkorr.

“! Call TR_TADIR_INTERFACE like does the method tadir_insert of ZCL_ABAPGIT_OBJECTS_SUPER.
CLASS-METHODS write_tadir_entry
IMPORTING !name TYPE apj_w_jce_root-job_catalog_entry_name
tadir_object_type TYPE trobjtype
devclass TYPE devclass.
ENDCLASS.

CLASS lcl_app DEFINITION FINAL
CREATE PRIVATE.

PUBLIC SECTION.
CLASS-METHODS create
RETURNING VALUE(result) TYPE REF TO lcl_app.

METHODS create_or_change_catalog_entry.
METHODS create_or_change_template.
METHODS delete_catalog_entry.
METHODS delete_template.
ENDCLASS.

CLASS lcl_jce DEFINITION FINAL
CREATE PRIVATE.

PUBLIC SECTION.
DATA data_accessor TYPE REF TO cl_apj_dt_job_cat_entry READ-ONLY.

CLASS-METHODS create
IMPORTING !name TYPE apj_w_jce_root-job_catalog_entry_name
RETURNING VALUE(result) TYPE REF TO lcl_jce.

CLASS-METHODS delete
IMPORTING !name TYPE apj_w_jce_root-job_catalog_entry_name
trkorr TYPE trkorr.

CLASS-METHODS get
IMPORTING !name TYPE apj_w_jce_root-job_catalog_entry_name
RETURNING VALUE(result) TYPE REF TO lcl_jce.

CLASS-METHODS exists
IMPORTING !name TYPE apj_w_jce_root-job_catalog_entry_name
RETURNING VALUE(result) TYPE abap_bool.

METHODS save_and_activate
IMPORTING devclass TYPE devclass
trkorr TYPE trkorr.

PRIVATE SECTION.
CONSTANTS entity_type TYPE apj_s_dt_dba-entity_type VALUE if_apj_dt_types=>cs_entity_type-job_catalog_entry.

DATA name TYPE apj_w_jce_root-job_catalog_entry_name.
DATA mode TYPE if_apj_dt_types=>ty_mode.
ENDCLASS.

CLASS lcl_jt DEFINITION FINAL
CREATE PRIVATE.

PUBLIC SECTION.
DATA data_accessor TYPE REF TO cl_apj_dt_job_template_entry READ-ONLY.

CLASS-METHODS create
IMPORTING !name TYPE apj_w_jt_root-job_template_name
RETURNING VALUE(result) TYPE REF TO lcl_jt.

CLASS-METHODS delete
IMPORTING !name TYPE apj_w_jt_root-job_template_name
trkorr TYPE trkorr.

CLASS-METHODS get
IMPORTING !name TYPE apj_w_jt_root-job_template_name
RETURNING VALUE(result) TYPE REF TO lcl_jt.

CLASS-METHODS exists
IMPORTING !name TYPE apj_w_jt_root-job_template_name
RETURNING VALUE(result) TYPE abap_bool.

METHODS save_and_activate
IMPORTING devclass TYPE devclass
trkorr TYPE trkorr.

PRIVATE SECTION.
CONSTANTS entity_type TYPE apj_s_dt_dba-entity_type VALUE if_apj_dt_types=>cs_entity_type-job_template.

DATA name TYPE apj_w_jt_root-job_template_name.
DATA mode TYPE if_apj_dt_types=>ty_mode.

ENDCLASS.

START-OF-SELECTION.
lcl_app=>create( )->create_or_change_catalog_entry( ).
* lcl_app=>create( )->create_or_change_template( ).
* lcl_app=>create( )->delete_template( ).
* lcl_app=>create( )->delete_catalog_entry( ).
ASSERT 1 = 1.

CLASS lcl_apj_helper IMPLEMENTATION.
METHOD set_default_transport.
CALL FUNCTION ‘TR_TASK_SET’
EXPORTING iv_order = trkorr
iv_validdays = 1
EXCEPTIONS invalid_username = 1
invalid_category = 2
invalid_client = 3
invalid_validdays = 4
invalid_order = 5
invalid_task = 6
OTHERS = 7.
IF sy-subrc <> 0.
” TODO
ENDIF.
ENDMETHOD.

METHOD write_tadir_entry.
TYPES: BEGIN OF ty_params,
wi_test_modus TYPE trpari-s_checked,
wi_tadir_pgmid TYPE tadir-pgmid,
wi_tadir_object TYPE tadir-object,
wi_tadir_obj_name TYPE tadir-obj_name,
wi_tadir_author TYPE tadir-author,
wi_tadir_devclass TYPE tadir-devclass,
wi_tadir_masterlang TYPE tadir-masterlang,
iv_delflag TYPE tadir-delflag,
END OF ty_params.

DATA(params) = VALUE ty_params( wi_test_modus = abap_false
wi_tadir_pgmid = ‘R3TR’
wi_tadir_object = tadir_object_type
wi_tadir_obj_name = name
wi_tadir_author = sy-uname
wi_tadir_devclass = devclass
wi_tadir_masterlang = sy-langu
iv_delflag = abap_false ).
CALL FUNCTION ‘TR_TADIR_INTERFACE’
EXPORTING wi_test_modus = params-wi_test_modus
wi_tadir_pgmid = params-wi_tadir_pgmid
wi_tadir_object = params-wi_tadir_object
wi_tadir_obj_name = params-wi_tadir_obj_name
wi_tadir_author = params-wi_tadir_author
wi_tadir_devclass = params-wi_tadir_devclass
wi_tadir_masterlang = params-wi_tadir_masterlang
iv_delflag = params-iv_delflag
EXCEPTIONS tadir_entry_not_existing = 1
tadir_entry_ill_type = 2
no_systemname = 3
no_systemtype = 4
original_system_conflict = 5
object_reserved_for_devclass = 6
object_exists_global = 7
object_exists_local = 8
object_is_distributed = 9
obj_specification_not_unique = 10
no_authorization_to_delete = 11
devclass_not_existing = 12
simultanious_set_remove_repair = 13
order_missing = 14
no_modification_of_head_syst = 15
pgmid_object_not_allowed = 16
masterlanguage_not_specified = 17
devclass_not_specified = 18
specify_owner_unique = 19
loc_priv_objs_no_repair = 20
gtadir_not_reached = 21
object_locked_for_order = 22
change_of_class_not_allowed = 23
no_change_from_sap_to_tmp = 24
OTHERS = 25.
IF sy-subrc <> 0.
” TODO
ENDIF.
ENDMETHOD.
ENDCLASS.

CLASS lcl_app IMPLEMENTATION.
METHOD create.
result = NEW lcl_app( ).
ENDMETHOD.

METHOD create_or_change_catalog_entry.
TYPES ty_jce TYPE REF TO lcl_jce.

DATA(jce_name) = EXACT apj_w_jce_root-job_catalog_entry_name( ‘ZZSRO’ ).
DATA(devclass) = EXACT devclass( ‘ZZSRO’ ).
DATA(trkorr) = EXACT trkorr( ‘NPLK900082’ ).

DATA(jce) = COND ty_jce( WHEN NOT lcl_jce=>exists( jce_name )
THEN lcl_jce=>create( jce_name )
ELSE lcl_jce=>get( jce_name ) ).

DATA(jce_basic_information) = jce->data_accessor->get_root( ).
DATA(jce_basic_information_update) = VALUE cl_apj_dt_job_cat_entry=>ty_set_root(
BASE CORRESPONDING #( jce_basic_information )
report_name = sy-repid
text = EXACT #( |{ sy-datum } – { sy-uzeit }| ) ).
jce->data_accessor->set_root( jce_basic_information_update ).

jce->save_and_activate( devclass = devclass
trkorr = trkorr ).
COMMIT WORK.
ENDMETHOD.

METHOD create_or_change_template.
TYPES ty_jt TYPE REF TO lcl_jt.

DATA(jt_name) = EXACT apj_w_jt_root-job_template_name( ‘ZZSRO_TEMPL’ ).
DATA(jce_name) = EXACT apj_w_jce_root-job_catalog_entry_name( ‘ZZSRO’ ).
DATA(devclass) = EXACT devclass( ‘ZZSRO’ ).
DATA(trkorr) = EXACT trkorr( ‘NPLK900082’ ).

DATA(jt) = COND ty_jt( WHEN NOT lcl_jt=>exists( jt_name )
THEN lcl_jt=>create( jt_name )
ELSE lcl_jt=>get( jt_name ) ).

DATA(jt_basic_information) = jt->data_accessor->get_root( ).
” TODO: variable is assigned but never used (ABAP cleaner)
DATA(jt_values) = jt->data_accessor->get_values( ).

jt_basic_information-job_catalog_entry_name = jce_name.
jt_basic_information-text = EXACT #( |{ sy-datum } – { sy-uzeit }| ).
jt->data_accessor->set_root( jt_basic_information ).

jt->save_and_activate( devclass = devclass
trkorr = trkorr ).
COMMIT WORK.
ENDMETHOD.

METHOD delete_catalog_entry.
TYPES ty_jce TYPE REF TO lcl_jce.

DATA(jce_name) = EXACT apj_w_jt_root-job_catalog_entry_name( ‘ZZSRO’ ).
DATA(trkorr) = EXACT trkorr( ‘NPLK900082’ ).

lcl_jce=>delete( name = jce_name
trkorr = trkorr ).
COMMIT WORK.
ENDMETHOD.

METHOD delete_template.
TYPES ty_jt TYPE REF TO lcl_jt.

DATA(jt_name) = EXACT apj_w_jt_root-job_template_name( ‘ZZSRO_TEMPL’ ).
DATA(trkorr) = EXACT trkorr( ‘NPLK900082’ ).

lcl_jt=>delete( name = jt_name
trkorr = trkorr ).
COMMIT WORK.
ENDMETHOD.
ENDCLASS.

CLASS lcl_jce IMPLEMENTATION.
METHOD create.
IF exists( name ).
” TODO raise exception
ENDIF.
result = NEW lcl_jce( ).
result->name = name.
result->mode = if_apj_dt_types=>cs_mode-create.
result->data_accessor = NEW cl_apj_dt_job_cat_entry( is_root = VALUE #( job_catalog_entry_name = name ) ).
ENDMETHOD.

METHOD delete.
IF NOT exists( name ).
” TODO raise exception
ENDIF.

IF trkorr IS NOT INITIAL.
lcl_apj_helper=>set_default_transport( trkorr ).
ENDIF.

DATA(lo_controller) = cl_apj_dt_controller=>get_instance( ).
lo_controller->delete_single( VALUE #( entity_type = entity_type
entity_name = name
entity_version = if_apj_dt_types=>cs_entity_version-active ) ).

” TODO: variable is assigned but never used (ABAP cleaner)
DATA(is_success) = lo_controller->save( ).
ENDMETHOD.

METHOD exists.
DATA(jce_dt_db_access) = cl_apj_dt_db_access_factory=>get_instance( )->get_db_access( entity_type ).
DATA(active_jce_existence_info) = jce_dt_db_access->exists(
it_name_version = VALUE #( ( entity_name = name
entity_version = if_apj_dt_types=>cs_entity_version-active ) ) ).
DATA(active_jce_exists) = xsdbool( line_exists( active_jce_existence_info[ KEY entity_name
entity_name = name
exists = abap_true ] ) ).
IF active_jce_exists = abap_true.
result = abap_true.
ELSE.
DATA(inactive_jce_existence_info) = jce_dt_db_access->exists(
it_name_version = VALUE #( ( entity_name = name
entity_version = if_apj_dt_types=>cs_entity_version-inactive ) ) ).
DATA(inactive_jce_exists) = xsdbool( line_exists( inactive_jce_existence_info[ KEY entity_name
entity_name = name
exists = abap_true ] ) ).
IF inactive_jce_exists = abap_true.
result = abap_true.
ELSE.
result = abap_false.
ENDIF.
ENDIF.
ENDMETHOD.

METHOD get.
IF NOT exists( name ).
” TODO raise exception
ENDIF.
DATA(lo_controller) = cl_apj_dt_controller=>get_instance( ).
DATA(li_entity) = lo_controller->if_apj_dt_controller~retrieve_single(
is_entity_type_name = VALUE #( entity_type = entity_type
entity_name = name
entity_version = 0 )
iv_edit_mode = if_apj_dt_types=>cs_edit_mode-exclusive ).
ASSERT li_entity IS BOUND.

result = NEW lcl_jce( ).
result->name = name.
result->mode = if_apj_dt_types=>cs_mode-update.
result->data_accessor = CAST #( li_entity ).
ENDMETHOD.

METHOD save_and_activate.
lcl_apj_helper=>write_tadir_entry( name = name
tadir_object_type = ‘SAJC’
devclass = devclass ).

IF trkorr IS NOT INITIAL.
lcl_apj_helper=>set_default_transport( trkorr ).
ENDIF.

IF mode = if_apj_dt_types=>cs_mode-create.
DATA(object_data) = NEW cl_apj_dt_gui_cat( ).
object_data->if_wb_object_data_model~generate_from_key( EXACT #( name ) ).

DATA(persist) = NEW cl_apj_wb_jce_persist( ).
persist->if_wb_object_persist~save( p_object_data = object_data
p_access_mode = if_wb_adt_rest_resource_co=>co_access_mode_insert ).
ENDIF.

DATA(lo_controller) = cl_apj_dt_controller=>get_instance( ).
lo_controller->modify_single( is_modify = VALUE #( mode = if_apj_dt_types=>cs_mode-update
entity_ref = data_accessor ) ).

” Save and activate
” TODO: variable is assigned but never used (ABAP cleaner)
DATA(is_success) = lo_controller->save( ).
lo_controller->activate( it_entity_type_and_name = VALUE #( ( entity_type = entity_type
entity_name = name ) ) ).
ENDMETHOD.
ENDCLASS.

CLASS lcl_jt IMPLEMENTATION.
METHOD create.
IF exists( name ).
” TODO raise exception
ENDIF.
result = NEW lcl_jt( ).
result->name = name.
result->mode = if_apj_dt_types=>cs_mode-create.
result->data_accessor = NEW cl_apj_dt_job_template_entry( is_root = VALUE #( job_template_name = name ) ).
ENDMETHOD.

METHOD delete.
IF NOT exists( name ).
” TODO raise exception
ENDIF.

IF trkorr IS NOT INITIAL.
lcl_apj_helper=>set_default_transport( trkorr ).
ENDIF.

DATA(lo_controller) = cl_apj_dt_controller=>get_instance( ).
lo_controller->delete_single( VALUE #( entity_type = entity_type
entity_name = name
entity_version = if_apj_dt_types=>cs_entity_version-active ) ).
” TODO: variable is assigned but never used (ABAP cleaner)
DATA(is_success) = lo_controller->save( ).
ENDMETHOD.

METHOD exists.
DATA(jt_dt_db_access) = cl_apj_dt_db_access_factory=>get_instance( )->get_db_access( entity_type ).
DATA(active_jt_existence_info) = jt_dt_db_access->exists(
it_name_version = VALUE #( ( entity_name = name
entity_version = if_apj_dt_types=>cs_entity_version-active ) ) ).
DATA(active_jt_exists) = xsdbool( line_exists( active_jt_existence_info[ KEY entity_name
entity_name = name
exists = abap_true ] ) ).
IF active_jt_exists = abap_true.
result = abap_true.
ELSE.
DATA(inactive_jt_existence_info) = jt_dt_db_access->exists(
it_name_version = VALUE #( ( entity_name = name
entity_version = if_apj_dt_types=>cs_entity_version-inactive ) ) ).
DATA(inactive_jt_exists) = xsdbool( line_exists( inactive_jt_existence_info[ KEY entity_name
entity_name = name
exists = abap_true ] ) ).
IF inactive_jt_exists = abap_true.
result = abap_true.
ELSE.
result = abap_false.
ENDIF.
ENDIF.
ENDMETHOD.

METHOD get.
IF NOT exists( name ).
” TODO raise exception
ENDIF.
DATA(lo_controller) = cl_apj_dt_controller=>get_instance( ).
DATA(li_entity) = lo_controller->if_apj_dt_controller~retrieve_single(
is_entity_type_name = VALUE #( entity_type = entity_type
entity_name = name
entity_version = 0 )
iv_edit_mode = if_apj_dt_types=>cs_edit_mode-exclusive ).
ASSERT li_entity IS BOUND.
result = NEW lcl_jt( ).
result->name = name.
result->mode = if_apj_dt_types=>cs_mode-update.
result->data_accessor = CAST #( li_entity ).
ENDMETHOD.

METHOD save_and_activate.
lcl_apj_helper=>write_tadir_entry( name = name
tadir_object_type = ‘SAJT’
devclass = devclass ).
IF trkorr IS NOT INITIAL.
lcl_apj_helper=>set_default_transport( trkorr ).
ENDIF.

IF mode = if_apj_dt_types=>cs_mode-create.
DATA(object_data) = NEW cl_apj_dt_gui_tmp( ).
object_data->if_wb_object_data_model~generate_from_key( EXACT #( name ) ).

DATA(persist) = NEW cl_apj_wb_jt_persist( ).
persist->if_wb_object_persist~save( p_object_data = object_data
p_access_mode = if_wb_adt_rest_resource_co=>co_access_mode_insert ).
ENDIF.

DATA(lo_controller) = cl_apj_dt_controller=>get_instance( ).
lo_controller->modify_single( is_modify = VALUE #( mode = if_apj_dt_types=>cs_mode-update
entity_ref = data_accessor ) ).

” Save and activate
” TODO: variable is assigned but never used (ABAP cleaner)
DATA(is_success) = lo_controller->save( ).
lo_controller->activate( it_entity_type_and_name = VALUE #( ( entity_type = entity_type
entity_name = name ) ) ).
ENDMETHOD.
ENDCLASS.     Read More Technology Blogs by Members articles 

#SAP

#SAPTechnologyblog

You May Also Like

More From Author