Enterprise Resource Planning Blogs by SAP
Get insights and updates about cloud ERP and RISE with SAP, SAP S/4HANA and SAP S/4HANA Cloud, and more enterprise management capabilities with SAP blog posts.
cancel
Showing results for 
Search instead for 
Did you mean: 
Bunny
Advisor
Advisor

In this Blog Post, we will see how to create Application Logs and attach to an Application Job. Application Logs is a reuse library and can be used with other applications as well. This reuse library gives you a clearly structured overview of all errors that might have occurred during runtime.


In your Fiori Launchpad search for application :- Application Logs

Key Features


You can use this reuse library to:






  • view application log details

  • filter the logs by severity

  • search for message texts

  • display the message details


Steps Involved:-

  1. Create Application log Object, Subobject and External reference in ADT.

  2. Create Job Catalog entry.

  3. Create Application Job template.

  4. Writing code in job template class using provided interfaces- IF_APJ_DT_EXEC_OBJECT, IF_APJ_RT_EXEC_OBJECT.

  5. Writing code for Application Logs

  6. Execute Job.



Details:

Log Object, SubObject in ADT.

New Object > Others > Application Log Object.

Add your object and Subobject like below code
{
"formatVersion": "1",
"header": {
"description": "new log",
"originalLanguage": "en",
"abapLanguageVersion": "cloudDevelopment"
},
"subobjects": [
{
"name": "ZSUBOBJECT1",
"description": "Subobject 1"
}
]
}



Create Job Catalog

New > Others > Application Job Catalog Entry 

Here add a custom class


Application Log Catalog Entry




Create Application Job Template

New > Others > Application Job Template

Here provide your created catalog


Application Job Template


Now let's add very simple required code in the class

Interfaces: The two interfaces used are related to job execution, one gets parameters for the job other executes the code, If_oo_adt_classrun is just a reuse interface to run code as an ABAP application to debug or test.

With cl_bali_log=>create_with_header, cl_bali_header_setter=>, Provide your Object and subobject to initiate log object.

Then with cl_bali_message_setter,cl_bali_freetext_setter,cl_bali_exception_setter we have formed all type of logging type messages.

l_log->add_item, adds item to logs.

Then method save_log will write the logs in database.

it may require COMMIT WORK.

Also notice in the code we have a parameter assign_to_current_appl_job, This will attach the logs to the running Application Job itself.
CLASS z_new_job_class_ec DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .

PUBLIC SECTION.
INTERFACES if_apj_dt_exec_object.
INTERFACES if_apj_rt_exec_object.
INTERFACES if_oo_adt_classrun.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.

CLASS z_new_job_class_ec IMPLEMENTATION.

METHOD if_apj_dt_exec_object~get_parameters.
* You can Insert code here for getting Job parameters
ENDMETHOD.


METHOD if_apj_rt_exec_object~execute.
DATA(l_log) = cl_bali_log=>create_with_header( cl_bali_header_setter=>create( object =
'ZNEWLOG' subobject = 'ZSUBOBJECT1' ) ).

"Add a message as item to the log
DATA(l_message) = cl_bali_message_setter=>create( severity =
if_bali_constants=>c_severity_error
id = 'PO'
number = '000' ).
l_log->add_item( item = l_message ).

"Add a second message, this time from system fields SY-MSGID, ...
MESSAGE ID 'ZTEST' TYPE 'S' NUMBER '058' INTO DATA(l_text).

l_log->add_item( item = cl_bali_message_setter=>create_from_sy( ) ).

"Add a free text to the log

DATA(l_free_text) = cl_bali_free_text_setter=>create( severity =
if_bali_constants=>c_severity_error
text = 'Some Error Text' ).

l_log->add_item( item = l_free_text ).

" Add an exception to the log
DATA: i TYPE i.
TRY.
i = 1 / 0.
CATCH cx_sy_zerodivide INTO DATA(l_ref).
ENDTRY.

DATA(l_exception) = cl_bali_exception_setter=>create( severity =
if_bali_constants=>c_severity_error
exception = l_ref ).
l_log->add_item( item = l_exception ).

"Save the log into the database
cl_bali_log_db=>get_instance( )->save_log( log = l_log assign_to_current_appl_job = abap_true ).
COMMIT WORK.

CATCH cx_bali_runtime INTO DATA(l_runtime_exception).
ENDTRY.


ENDMETHOD.

Let's Test it now.

Create Job from Job template in application:- Application Job


Create Job


Select your template here via job template description.


Check Scheduling Options


Parameters coming from code in interface:

IF_APJ_DT_EXEC_OBJECT.

Hit Schedule


Log Generated. Click on it.


Job logs:


Summary:

Here you can find some documentation:

https://help.sap.com/docs/btp/sap-business-technology-platform/application-logs?q=Application%20Los

This short blog can help ABAP devs create Application logs and attach it to the Application Jobs with newer approach. Also since this is a reuse logging mechanism this can leveraged in other applications as well.

Since i am also new to ABAP cloud , Expert suggestions & feedbacks are much appreciated.

If you like this blog post you can follow me for more blogs i will try to make in coming future specifically related to ABAP in cloud.
15 Comments