Skip to content

ABAP Cloud Certification Practice ​

System-Based Assessment — C_ABAPD-style practice (2601)

Independent practice material

This is an independently written practice assessment, not an official SAP certification examination or a reproduction of its instructions. It follows the skills, task sequence, naming discipline, and practical assessment style of the C_ABAPD 2601 task instructions. It uses an SAP BTP, ABAP Environment trial rather than the dedicated certification system. Availability of trial features may change.

Certification prep overview · Prepare your system

Introduction ​

In this assessment, you will complete practical ABAP development tasks using an SAP system. The tasks cover packages, ABAP Objects, ABAP SQL, the ABAP RESTful Application Programming Model (RAP), CDS access controls, exception handling, and ABAP Dictionary types.

Working time: Allow three hours for Tasks 2–8, after completing the trial setup and the preparation described below. The time limit is for self-practice; no official grading service is provided.

Data Entry Accuracy ​

Repository object names, parameter names, data types, and literal values matter. Pay attention to:

  • Uppercase and lowercase letters where relevant.
  • Underscores, leading zeros, and other characters.
  • The exact names and signatures specified for repository objects.
  • Activating every object that can be activated. Packages and message classes do not use the same activation procedure as executable development objects.

For this practice assessment, use a four-character practice ID made up of your two initials, followed by the two-digit number of your attempt, starting at 01.

For example, a learner with the initials H.P. uses HP01 on the first attempt, HP02 on the second attempt, and HP03 on the third attempt. Write the initials in uppercase and always use two digits for the attempt number. Replace every occurrence of #### in an object name with your practice ID.

PlaceholderCorrect for HP01Incorrect
ZABAP_####ZABAP_HP01ZABAP_HP1
ZCL_####_FLIGHTZCL_HP01_FLIGHTZCL_FLIGHT_HP01
ZZ####TRAVELZZHP01TRAVELZHP01TRAVEL

Use a new attempt number each time you repeat the assessment. If learners with the same initials share an ABAP system, coordinate to avoid repository object name conflicts.

Task 1: Context ​

Working in your ABAP system ​

You will work in Eclipse with ABAP Development Tools (ADT), connected to an SAP BTP, ABAP Environment trial instance.

  1. Make sure your trial ABAP instance and developer user are available.
  2. Use a current Eclipse installation with ADT. For the closest match to the assessment environment, use Eclipse 2025-12 or newer and ADT 3.56.0 or newer, if these releases are available to you.
  3. In Eclipse, choose File → New → Other → ABAP Cloud Project. Enter the service URL of your trial ABAP instance and complete browser-based sign-in.
  4. Add ZLOCAL to your favorite packages. This is the parent package used for custom development in the trial tutorials.
  5. Check that the flight reference scenario is available. Inspect the database tables /DMO/FLIGHT, /DMO/CONNECTION, /DMO/AGENCY, and /DMO/CUSTOMER in ADT.
  6. Before starting the timed tasks, ensure that the Practice-system preparation at the end of this page has been completed.

Trial adaptation

The dedicated certification environment provides an exam group number, an exam service URL, a package ZSTUDENTS, and certain ready-made Z* repository objects. A normal BTP trial does not provide that assessment-specific setup automatically. In this practice, use your initials-and-attempt practice ID, ZLOCAL, and the starter objects described below. The standard /DMO/* flight tables are already part of the trial flight reference scenario and must not be recreated.

General instructions ​

  • Create all requested objects in package ZABAP_####, except for the supplied practice starter objects.
  • Use the types specified in the tasks rather than replacing them with generic built-in types.
  • Save and activate each object before proceeding.
  • You may consult SAP Help, SAP Learning, and the ABAP Keyword Documentation. Use of AI assistance is a personal practice choice; the availability of Joule in the real certification environment does not mean it is included in a trial account.
  • Unless a task specifically requests it, do not change the prepared starter objects.

Task 2: Create a Package ​

Before continuing, create a package for your development objects.

  1. Create an ABAP package named ZABAP_####.
  2. Assign it to superpackage ZLOCAL.
  3. Create a transport request, or select one according to the options offered by ADT.
  4. Use this transport request for the remaining development objects.
  5. Maintain meaningful descriptions and complete all mandatory fields.

Expected result: The package is visible in the Project Explorer and can hold your development objects.

Task 3: Create a Class Hierarchy ​

Create a general flight class and a subclass for passenger flights. You can inspect /DMO/FLIGHT and /DMO/CONNECTION to understand the data types and records.

3.1 General flight ​

In package ZABAP_####, create a global class ZCL_####_FLIGHT with the following instance attributes:

AttributeTypeRequired visibility
carrier_id/DMO/CARRIER_IDPublicly readable, not publicly changeable
connection_id/DMO/CONNECTION_IDPublicly readable, not publicly changeable
airport_from/DMO/AIRPORT_FROM_IDPublicly readable, not publicly changeable
airport_to/DMO/AIRPORT_TO_IDPublicly readable, not publicly changeable
plane_type/DMO/PLANE_TYPE_IDAccessible within the class and its subclasses, but not by external consumers

Provide an instance constructor with:

  • Importing parameters corresponding to carrier_id, connection_id, and plane_type, using the specified types.
  • A declared class-based exception ZCX_C_ABAPD_NO_CONNECTION.

Implement the constructor so that it:

  1. Assigns the supplied values to the relevant attributes.
  2. Looks up the matching record in /DMO/CONNECTION using the carrier and connection IDs.
  3. Uses that record to populate airport_from and airport_to.
  4. Raises ZCX_C_ABAPD_NO_CONNECTION if the requested connection does not exist.

3.2 Passenger flight ​

Create another global class ZCL_####_PASSENGER_FLIGHT as a subclass of ZCL_####_FLIGHT.

Add this instance attribute:

AttributeTypeRequired visibility
seats_max/DMO/PLANE_SEATS_MAXPrivate

Provide a constructor that imports the same three flight-related values and declares ZCX_C_ABAPD_NO_CONNECTION.

Implement it so that it:

  1. Calls the constructor of its superclass.
  2. Reads MaximumSeats from the prepared CDS view entity ZI_CABAPD_PASSENGER for the specified plane type.
  3. Assigns the result to seats_max.
  4. Raises ZCX_C_ABAPD_NO_CONNECTION if the required plane type cannot be found in the practice view.

Verification: Both global classes activate. A valid carrier/connection and supported plane type can be used to construct a passenger flight. An unknown connection raises the expected exception.

Test data

The original assessment suggests plane types A320-200, 737-800, and 747-400. Their availability in the prepared practice view depends on the records in your trial system. Use ADT Data Preview to confirm which plane types are present.

Task 4: Read a List of Flight Connections ​

Develop a method that returns all destinations reachable from one departure airport by either:

  • A direct connection; or
  • Exactly one change, using the same carrier for both legs.

A journey ending at the original departure airport is not an onward destination. A connection requiring a change of carrier is also excluded.

Example ​

Assume the following entries exist in /DMO/CONNECTION:

carrier_idconnection_idairport_from_idairport_to_id
LH400FRAJFK
LH2010EDIFRA
SQ299EDISIN
SQ300SINEDI
SQ30SINSYD
BA447EDILHR
AA12LHRBOS

For departure airport EDI, the method must produce these logical results (row order is not specified):

carrier_idairport_from_idairport_to_idairport_via_id
LHEDIFRA-
LHEDIJFKFRA
SQEDISIN-
SQEDISYDSIN
BAEDILHR-

This example defines the expected behavior; the actual data in your trial system may be different.

Development tasks ​

  1. Create a global class ZCL_####_CONNECTIONS in ZABAP_####.

  2. Add a public instance method get_connections with this exact signature:

    DirectionParameterType
    Importingi_departure/DMO/AIRPORT_FROM_ID
    Returningr_connectionsZCERT_CONNECTIONS
  3. Use one or more ABAP SQL SELECT statements on /DMO/CONNECTION to determine the required connections.

  4. For every returned row, populate carrier_id, airport_from_id, and airport_to_id.

  5. Set airport_via_id to '-' for a direct connection. For a one-change connection, set it to the transfer airport.

  6. Exclude connections that arrive back at i_departure, and do not include journeys involving more than two legs or different carriers.

Verification: The class activates. Your method returns correct direct and one-change results for the sample logic and for the data available in your own system.

Task 5: Create a RAP Business Object ​

In this task, you will generate an ABAP RESTful Application Programming Model (RAP) business object for travel data. Each row represents a travel instance and includes dates and a status. The Status field must not be editable directly; a determination must set the initial status when the instance is first saved.

  1. Copy the prepared database table ZABAPDTRAVEL to the name ZZ####TRAVEL. Assign the copy to package ZABAP_####. Keep the two leading Z characters, and activate the copied table.
  2. Open the context menu of ZZ####TRAVEL and choose Generate ABAP Repository Objects. Select the ABAP RESTful Application Programming Model: UI Service use case. Choose OData V4 – UI when prompted. Accept the naming proposals made by the wizard, and record the generated behavior definition and service binding names.
  3. In the generated behavior definition, make the Status field read-only.
  4. Declare a determination named setInitialStatus, triggered on save and only when an instance is created.
  5. Implement the determination so that every new travel instance receives the status value N during saving.
  6. Activate all affected RAP artifacts. Publish the generated service binding and select Preview to test the application, if the trial allows the preview to run.

Verification: Creating a new travel record results in Status = 'N'. Users cannot change Status themselves through the generated UI. The determination does not reset the status merely because an existing instance is updated.

RAP wizard names

The original assessment refers to a behavior definition such as ZR_Z####TRAVEL and an OData V4 binding such as ZUI_Z####TRAVEL_O4. Generator proposals can vary with the installed ABAP/ADT version. Do not rename generated objects just to match an example; use the actual wizard proposals and document them.

Task 6: Create a CDS Access Control ​

You will protect agency data using a CDS access control. This task contains the main potential BTP-trial limitation: the original assessment supplies the authorization object /LRN/AGCY, whereas the independent practice system does not.

  1. Copy the prepared CDS view entity ZC_ABAPD_AGENCY to Z####_AGENCY, assign it to package ZABAP_####, and activate it.
  2. Create a CDS access control with the name Z####_AGENCY for the new view entity.
  3. Use a PFCG authorization aspect to map view element agency_id to the agency authorization field, and require the authorization activity Display (03).
  4. Save and activate the access control.

For the trial adaptation, the instructor or learner must first supply an authorization object called ZAGC#### with an agency authorization field ZAGF#### and standard field ACTVT. Both names contain the student's four-character practice ID (for example, ZAGCHP01 and ZAGFHP01 on the first attempt). Use those objects in place of the assessment-only authorization object /LRN/AGCY.

Verification: Where the trial allows creation and assignment of authorization objects, confirm that the CDS role activates and that data access reflects the assigned authorization. Activation alone does not prove effective row-level authorization.

Trial boundary — check before treating Task 6 as complete

SAP documents the PFCG-aspect/CDS authorization workflow, but its full authorization model tutorial specifies a licensed ABAP environment. We have not verified that creating the custom authorization object, setting up the necessary IAM roles, and testing authorization restrictions end-to-end all work in every current BTP trial. If this is blocked, retain Task 6 as a design-and-syntax exercise and mark runtime authorization testing not completed. A hard-coded CDS WHERE clause is not an equivalent replacement for aspect pfcg_auth.

Task 7: Add Exception Handling to a Method ​

The prepared global class ZCL_AGENCY_MODEL reads an agency from /DMO/AGENCY, but it does not explicitly report the case in which the requested agency is missing. Your task is to add class-based exception handling.

  1. Copy ZCL_AGENCY_MODEL to ZCL_####_AGENCY_MODEL in package ZABAP_####.
  2. Create a global exception class ZCX_####_NO_AGENCY.
  3. In the exception class, provide a text/message identifier for message 002 from message class ZC_ABAPD. Message 002 contains placeholder &1 for the agency ID. Ensure the relevant agency ID is available to the exception object for message substitution.
  4. In ZCL_####_AGENCY_MODEL->GET_AGENCY( ), declare the exception in the method signature and raise it when the database query returns no record.
  5. Activate the modified class and exception class.

Verification: Calling GET_AGENCY( ) with an existing agency ID returns that agency. An ID not present in /DMO/AGENCY raises ZCX_####_NO_AGENCY; the message identifies the requested agency.

Task 8: Create ABAP Dictionary Types ​

You need a structure type and a table type for records held in /DMO/CUSTOMER. The customer ID is unique. Assume the application fills the internal table once and performs many lookups by customer ID.

  1. Create an ABAP Dictionary structure Z####_CUSTOMER in package ZABAP_####, with these components:

    ComponentRequired type
    CUSTOMER_IDSame data element as /DMO/CUSTOMER-CUSTOMER_ID
    FIRST_NAMESame data element as /DMO/CUSTOMER-FIRST_NAME
    LAST_NAMESame data element as /DMO/CUSTOMER-LAST_NAME
    STREETSame data element as /DMO/CUSTOMER-STREET
    POSTAL_CODESame data element as /DMO/CUSTOMER-POSTAL_CODE
    CITYSame data element as /DMO/CUSTOMER-CITY
    COUNTRY_CODESame data element as /DMO/CUSTOMER-COUNTRY_CODE
  2. Set the enhancement category to #EXTENSIBLE_CHARACTER_NUMERIC and activate the structure.

  3. Create an ABAP Dictionary table type Z####_T_CUST.

  4. Use Z####_CUSTOMER as the row type.

  5. Specify a hashed table with a unique primary key based on the field that uniquely identifies each customer.

  6. Activate the table type.

Verification: Both Dictionary objects activate. The table type allows efficient key-based lookup and does not accept duplicate customer IDs.

Completing Your Practice Assessment ​

There is no official submission button or SAP certification result for this independent practice.

Use the following checklist to verify your work:

If you have access to another learner's review or an instructor, compare object definitions, method signatures, and runtime behavior. A successful activation is necessary, but it is not proof that the required business behavior is correct.

Finished your attempt? Review the worked solutions and revisit the relevant lessons before trying again.


Practice-System Preparation (before the timed exercise) ​

This section is intended for instructors preparing a lab or individual learners building their own assessment practice environment. It is not part of the three-hour timed task. It creates the exam-like Z* dependencies missing from a standard trial system. None of these dependencies replaces /DMO/* flight reference tables.

Required before Task 3

The certification assessment provides special starter objects. In a trial account, check whether each of the following exists and create it if necessary. Keep the prepared objects separate from the objects students are expected to produce in Tasks 2–8. These examples are practice fixtures, not the original SAP assessment objects.

A. Flight constructor exception ​

Create a global exception class ZCX_C_ABAPD_NO_CONNECTION, derived from CX_STATIC_CHECK. It is used in Task 3. An exception text ID is optional for this particular practice fixture; the important part is that constructors can declare and raise this checked exception.

B. Passenger-capacity CDS view ​

Create CDS view entity ZI_CABAPD_PASSENGER. The original assessment supplies a view with a field named MaximumSeats; for trial practice, the following derived view uses the existing /DMO/FLIGHT data:

abap
@EndUserText.label: 'Practice: maximum seats by plane type'
@AccessControl.authorizationCheck: #NOT_REQUIRED
define view entity ZI_CABAPD_PASSENGER
  as select from /dmo/flight
{
  key plane_type_id as PlaneType,
      max( seats_max ) as MaximumSeats
}
group by plane_type_id

Important difference: This is an aggregate over flight records, not a dedicated plane-type master-data source. It is sufficient to practice lookup and exception handling when matching records exist, but it is not guaranteed to contain every plane type. Open Data Preview before the timed exercise.

C. Connection return type ​

Create an ABAP Dictionary structure ZCERT_CONNECTION with these fields and data elements:

FieldData element
carrier_id/DMO/CARRIER_ID
airport_from_id/DMO/AIRPORT_FROM_ID
airport_to_id/DMO/AIRPORT_TO_ID
airport_via_id/DMO/AIRPORT_ID

Then create an ABAP Dictionary table type ZCERT_CONNECTIONS with row type ZCERT_CONNECTION, access type Standard Table, and a non-unique key. This provides exactly the method return type requested in Task 4.

D. Travel table to be copied ​

Create and activate the practice database table ZABAPDTRAVEL. The following example includes the key, a status field, and the administrative fields used by the RAP repository object generator:

abap
@EndUserText.label : 'Practice travel template'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #A
@AbapCatalog.dataMaintenance : #RESTRICTED
define table zabapdtravel {
  key client             : abap.clnt not null;
  key travel_uuid        : sysuuid_x16 not null;
      travel_id          : /dmo/travel_id;
      agency_id          : /dmo/agency_id;
      customer_id        : /dmo/customer_id;
      begin_date         : /dmo/begin_date;
      end_date           : /dmo/end_date;
      status             : /dmo/overall_status;
      local_created_by   : abp_creation_user;
      local_created_at   : abp_creation_tstmpl;
      local_last_changed_by : abp_locinst_lastchange_user;
      local_last_changed_at : abp_locinst_lastchange_tstmpl;
      last_changed_at    : abp_lastchange_tstmpl;
}

If your system's RAP generator requires additional fields or annotations, adjust this starter table and verify that you can generate an OData V4 UI service from a copy before distributing the exercise. SAP's RAP generator tutorial requires a client key of type abap.clnt and appropriate administrative fields.

E. Agency CDS view to be copied ​

Create and activate ZC_ABAPD_AGENCY:

abap
@EndUserText.label: 'Practice agency data'
@AccessControl.authorizationCheck: #CHECK
define view entity ZC_ABAPD_AGENCY
  as select from /dmo/agency
{
  key agency_id    as agency_id,
      name         as name,
      street       as street,
      postal_code  as postal_code,
      city         as city,
      country_code as country_code
}

For Task 6, create/assign an authorization object ZAGC#### with agency authorization field ZAGF#### (based on data element /DMO/AGENCY_ID) plus standard field ACTVT, where permitted activity 03 means Display. This part is conditional on trial privileges. If the repository object creation or IAM assignment is unavailable, record the limitation; do not pretend that a fixed filter is an authorization check.

F. Agency starter class and message ​

Create message class ZC_ABAPD with message number 002, for example:

text
Travel agency &1 could not be found.

Create and activate global class ZCL_AGENCY_MODEL, to be duplicated in Task 7:

abap
CLASS zcl_agency_model DEFINITION
  PUBLIC
  CREATE PUBLIC.
  PUBLIC SECTION.
    METHODS get_agency
      IMPORTING i_agency_id TYPE /dmo/agency_id
      RETURNING VALUE(r_agency) TYPE /dmo/agency.
ENDCLASS.

CLASS zcl_agency_model IMPLEMENTATION.
  METHOD get_agency.
    SELECT SINGLE *
      FROM /dmo/agency
      WHERE agency_id = @i_agency_id
      INTO @r_agency.
  ENDMETHOD.
ENDCLASS.

The class intentionally has no explicit error handling. Students must add that behavior to their copies during Task 7. If your trial account does not permit creating or maintaining message classes, note that Task 7 cannot be reproduced exactly in that account; an alternative exception-text exercise would be a reduced-fidelity option.

G. Preparation verification ​

Before publishing the timed assessment, verify these prepared objects in ADT:

If a prerequisite is unavailable, tell learners before the timed assessment and identify which task is affected.

SAP References ​

The following SAP resources document the ABAP trial features and repository object workflows used in this practice:


Last content review: October 2026. This independent training resource is not affiliated with or endorsed by SAP.