Capstone — Build a Complete App

ABAP Capstone Project: Build a Complete SAP App 2026 | ABAP Zero to Hero
ABAP Zero to Hero · Final Chapter

Chapter 20  ·  Capstone Project

Capstone — Build a Complete App

Consolidate everything from Chapters 1–19 into one working SAP application — and turn it into the portfolio piece that gets you hired.

Chapter 20 of 20 24 min read Part 5: Capstone 10 Interview Q&A

You have reached the final chapter. Over the last 19 chapters, you have learned classic ABAP, modern ABAP, RAP, CDS Views, Fiori, debugging, performance tuning, and interfaces. That is a lot of knowledge — but knowledge alone does not get you hired. Proof of skill does.

This chapter is where you turn everything into one working application — a capstone project that demonstrates what you can actually do. Not a tutorial exercise. Not a copy-paste from a book. Your own business scenario, your own design, your own code, your own app.

And at the end, you will have something to show recruiters, hiring managers, and interviewers — a link they can click, screenshots they can review, and a story you can tell.

The final chapter’s mission Build one complete SAP application from database table to Fiori app. Document it. Publish it. Present it. This is your portfolio. This is what separates you from candidates who only finished tutorials.

🎯 What You Will Achieve in This Chapter

  • A complete, working, end-to-end SAP application on your own system
  • A GitHub repository with your source code exported via abapGit
  • A README document explaining your design and architecture
  • Screenshots and a demo of the working Fiori app
  • A prepared interview presentation (5-10 minutes)
  • A polished portfolio entry for your resume, LinkedIn, and blog
  • Confidence that you can build real SAP applications independently

📘 What is a Capstone Project?

A capstone project is a self-designed, self-built, end-to-end application that demonstrates your skills. Unlike a tutorial (where you follow steps someone else wrote), a capstone is your own project — you choose the scenario, design the solution, and implement it.

Why capstone projects matter for SAP careers

Without a CapstoneWith a Capstone
“I completed some tutorials.”“I built this app from scratch.”
No proof of independent capabilityWorking code the recruiter can review
Generic resumePortfolio link that stands out
Vague answers to “what have you built?”Concrete story with screenshots and architecture
Competes with 100s of other beginnersDiffs itself from beginners who only followed tutorials
The honest truth Hiring managers cannot tell from your resume whether you actually know ABAP or just watched videos. A capstone project — with code, docs, and a working app — removes that doubt. It is the single highest-leverage investment you can make in your career right now.

🎬 Step 1 — Choose Your Business Scenario

Do not try to build something huge. Choose a scenario that is small enough to finish but real enough to be meaningful. The Travel scenario from Chapter 17 is a great default. Here are three options.

Option A — Travel Management (Recommended)

An app for managing business trips. Fields: Travel ID, Employee, Destination, Start Date, End Date, Cost, Currency, Status. Actions: Submit, Approve, Cancel.

Option B — Employee Leave Requests

An app for HR to manage employee leave. Fields: Request ID, Employee, Leave Type, Start Date, End Date, Days, Status. Actions: Approve, Reject.

Option C — Purchase Requisition Tracking

An app for procurement to track internal purchase requests. Fields: PR Number, Requester, Department, Item, Amount, Status. Actions: Submit, Approve.

Choose the one you understand best Do not pick the scenario that sounds most impressive. Pick the one where you already know the domain — because the business logic will be easier to define, and the interview story will be more authentic.

🏗️ Step 2 — Design the Data Model

Every capstone starts with a table. What data does your scenario need? Write the fields down on paper first — then build.

Example — Travel table (ZTRVL_HEADER)

FieldTypePurpose
MANDTCLNT(3)Client — always the first field
TRAVEL_IDNUMC(10)Unique travel record number (primary key)
EMPLOYEE_IDCHAR(10)Who is travelling
DESTINATIONCHAR(40)Where they are going
START_DATEDATS(8)Travel start
END_DATEDATS(8)Travel end
COSTCURR(15,2)Total cost
CURRENCYCUKY(5)Currency for the cost field
STATUSCHAR(1)N = New, A = Approved, R = Rejected
CREATED_BYCHAR(12)User who created it
CREATED_ATDEC(15)Timestamp

Build the table

1 In Eclipse ADT

Right-click your package → New → Other ABAP Repository Object → Dictionary → Database Table. Name it ZTRVL_HEADER. Use a delivery class of A (application table) and data class APPL0 (master data).

2 Add the fields

Add each field from the table above. Mark MANDT and TRAVEL_ID as key fields.

3 Activate

Save and activate the table. You now have a place to store your data.

⚙️ Step 3 — Build the RAP Business Object

This is the heart of your capstone. You will create six objects that work together.

ObjectName ExamplePurpose
Interface ViewZI_TravelReads data from ZTRVL_HEADER
Consumption ViewZC_TravelAdds UI annotations for Fiori
Behavior DefinitionZI_Travel (BDEF)Declares operations, validations, determinations
Behavior ImplementationZBP_TravelImplements the business logic
Service DefinitionZUI_TRAVELExposes the entities as OData
Service BindingZUI_TRAVEL_O4OData V4 endpoint for Fiori

Step 3a — Create the Interface View

@AbapCatalog.sqlViewName: 'ZITRAVEL'
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Travel Interface View'

define view ZI_Travel as select from ztrvl_header
{
  key travel_id     as TravelId,
      employee_id   as EmployeeId,
      destination   as Destination,
      start_date    as StartDate,
      end_date      as EndDate,
      cost          as Cost,
      currency      as Currency,
      status        as Status,
      created_by    as CreatedBy,
      created_at    as CreatedAt
}

Step 3b — Create the Consumption View with UI Annotations

@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Travel App'
@UI.headerInfo: {
  typeName: 'Travel',
  typeNamePlural: 'Travels',
  title: { type: #STANDARD, value: 'TravelId' }
}

define view entity ZC_Travel
  as select from ZI_Travel
{
  @UI.lineItem: [{ position: 10 }]
  @UI.identification: [{ position: 10 }]
  key TravelId,

  @UI.lineItem: [{ position: 20 }]
  @UI.selectionField: [{ position: 10 }]
      EmployeeId,

  @UI.lineItem: [{ position: 30 }]
      Destination,

  @UI.lineItem: [{ position: 40 }]
      StartDate,

  @UI.lineItem: [{ position: 50 }]
      EndDate,

  @UI.lineItem: [{ position: 60 }]
  @Semantics.amount.currencyCode: 'Currency'
      Cost,

  @Semantics.currencyCode: true
      Currency,

  @UI.lineItem: [{ position: 70 }]
      Status
}

Step 3c — Create the Behavior Definition

managed implementation in class ZBP_Travel unique;

define behavior for ZI_Travel
persistent table ztrvl_header
lock master
authorization master ( global )
{
  create;
  update;
  delete;

  field ( readonly ) TravelId;

  validation validateDates   on save { field StartDate, EndDate; }
  validation validateCost    on save { field Cost; }

  determination setInitialStatus on modify { field Status; }
  determination setCreatedInfo   on save   { field CreatedBy, CreatedAt; }

  action ( features : instance ) approve;
  action ( features : instance ) reject;
}

Step 3d — Implement the Behavior

The class ZBP_Travel is generated automatically when you activate the BDEF. Open it and implement the methods you declared:

  • validateDates — check that EndDate is not before StartDate
  • validateCost — check that Cost is not negative
  • setInitialStatus — set Status to ‘N’ if empty
  • setCreatedInfo — fill CreatedBy and CreatedAt from sy-uname and sy-datum
  • approve — set Status to ‘A’
  • reject — set Status to ‘R’
Do not forget the create method In a Managed scenario, you only need to implement what the framework cannot infer — like filling a Travel ID from a number range. If your TRAVEL_ID is manually entered by the user, you can skip this. Otherwise, implement create to populate it from a number range object.

Step 3e — Create the Service Definition and Binding

@EndUserText.label: 'Travel Service Definition'
define service ZUI_TRAVEL {
  expose ZC_Travel as Travel;
}

Then create a Service Binding named ZUI_TRAVEL_O4 with type OData V4 – UI, activate it, and click Preview.

You just built a complete RAP business object. From database table to Fiori preview. This is the same pattern used on every real S/4HANA project. Once you can do this, you can build any CRUD business object.

✅ Step 4 — Test and Polish

Before you publish, verify your app works end to end. Here is a testing checklist.

Functional testing

TestWhat to Verify
CreateAdd a new Travel record with valid data. It should save.
ReadList report shows all records. Object page opens on row click.
UpdateEdit a field and save. Change persists.
DeleteDelete a row. It disappears from the list.
ValidationEnter EndDate before StartDate. Save should be blocked.
DeterminationCreate a new Travel without Status. It should default to ‘N’.
ActionClick Approve. Status changes to ‘A’.
FilterUse selection field to filter by EmployeeId.

Edge cases to test

  • What happens with an empty filter?
  • What happens with a very long destination name?
  • What happens on simultaneous saves (lock conflicts)?
  • What happens if you enter a Cost of 0 or negative?

📄 Step 5 — Document Your Project

A working app without documentation is invisible to recruiters. Write a README that explains your design.

README structure

# Travel Management App — ABAP RAP Capstone

## Business Scenario
A Travel Management app for HR to create, approve,
and track business travel requests.

## Architecture
- Database Table: ZTRVL_HEADER
- CDS Interface View: ZI_Travel
- CDS Consumption View: ZC_Travel
- Behavior Definition: ZI_Travel
- Behavior Implementation: ZBP_Travel
- Service Definition: ZUI_TRAVEL
- Service Binding: ZUI_TRAVEL_O4 (OData V4)

## Key Features
- Full CRUD operations on Travel records
- Validation: End date must be >= Start date
- Validation: Cost must be positive
- Determination: Status defaults to 'N' on creation
- Determination: CreatedBy and CreatedAt filled on save
- Action: Approve / Reject

## Screenshots
- List Report view
- Object Page view
- Validation error example
- Success message after approval

## Tech Stack
- SAP BTP ABAP Environment (or S/4HANA 2020+)
- ABAP RESTful Application Programming Model (RAP)
- OData V4
- Fiori Elements

## How to Run
1. Import the objects into your ABAP system
2. Activate in this order: Table → CDS Views → BDEF → ZBP → Service Def → Binding
3. Open Service Binding → Preview

## Author
[Your Name] — [Your LinkedIn / GitHub]
The README is as important as the code Recruiters scan READMEs first. If your README explains the scenario, architecture, features, and how to run the project — you have already stood out from 90% of applicants.

🌐 Step 6 — Publish and Share

Your capstone is done. Now make it visible.

Publish to GitHub with abapGit

1 Install abapGit

abapGit is an open-source Git client for ABAP. Download from abapgit.org and install in your system. It is free.

2 Create a repository on GitHub

Name it something clear like abap-travel-rap-capstone. Set it to public.

3 Push your package

In abapGit, create an online repository pointing to your GitHub repo. Select your package. Click Stage → Commit → Push. All your CDS Views, BDEF, classes, table definitions are now on GitHub.

Write a blog post

Publish a blog post describing your project. Include:

  • The business scenario and why you chose it
  • The architecture diagram
  • The key technical decisions (Managed RAP, OData V4, Fiori Elements)
  • What you learned building it
  • Link to the GitHub repository

Share on LinkedIn

Post a short summary of the project with 2-3 screenshots. Include the GitHub link and tag it with #SAP #ABAP #RAP #Fiori.

Add to your resume

In the “Projects” section of your resume, list the project with:

  • Business scenario (one line)
  • Tech stack (RAP, CDS, OData V4, Fiori Elements)
  • Link to GitHub

🎤 Step 7 — Present in an Interview

When an interviewer asks “tell me about a project you’ve built” — this is your moment.

The 5-minute presentation structure

TimeWhat to Cover
30 secThe scenario — what problem does the app solve?
1 minThe architecture — table, CDS, BDEF, service, UI
2 minThe demo — walk through create, validation, action, approve
1 minThe challenges — what broke, how you fixed it
30 secThe link — GitHub repo, blog post, LinkedIn
Have the demo ready Open the Fiori preview in a browser tab before the interview. When you describe the app, walk through it live. Seeing a working Fiori app during the interview is worth more than 1000 words.

🚀 What’s Next After the Capstone

You have finished the series. But your learning is only beginning. Here is what comes next.

Build a second capstone

Two projects are better than one. Pick a different scenario — HR Leave Requests, Procurement, or Sales — and build the same RAP pattern. This time faster, because you already know the workflow.

Deepen your knowledge

TopicWhere to Go Next
Draft Handling in RAPAdd draft-enabled editing to your capstone
Analytical CDS ViewsBuild KPI tiles for Fiori Overview Page
SAP Fiori FreestyleLearn SAPUI5 to build custom UIs
ABAP Unit TestingWrite unit tests for your Behavior Implementation
SAP BTP DeploymentDeploy your app on SAP BTP ABAP Environment
Clean Core ConceptsUnderstand released APIs and upgrade safety

Apply for jobs

You are ready. Your resume should include:

  • Your capstone project (with GitHub link)
  • Your blog posts from this series
  • Your LinkedIn with the project pinned
  • Interview practice on the 165 Q&A across all 20 chapters
The series is complete You started knowing nothing about SAP ABAP. You now have:
  • A working ABAP Cloud environment
  • Classic ABAP fundamentals
  • Real-world skills (debugging, enhancements, interfaces, forms, performance)
  • Modern ABAP (CDS Views, RAP, EML, Fiori, OData)
  • A complete capstone project in your portfolio
  • 165+ interview questions answered
That is what “Zero to Hero” actually means.

📝 Final Chapter Summary

  • Capstone projects prove skill — a working app beats a certificate or a tutorial.
  • Choose a small, real scenario — Travel, Leave, or Procurement.
  • Build the data model first — a table, then CDS Views, then RAP.
  • Use Managed RAP + OData V4 + Fiori Elements — the modern standard.
  • Add validations, determinations, and actions — this is where real business logic lives.
  • Test thoroughly — create, read, update, delete, edge cases.
  • Document with a README — scenario, architecture, features, screenshots.
  • Publish with abapGit — get your code on GitHub.
  • Share on LinkedIn and your blog — make it visible.
  • Present in 5 minutes — scenario, architecture, demo, challenges, link.
  • Build a second project — two capstones doubles your credibility.

🎤 Interview Questions & Answers

These are the questions you will face about your capstone project. Prepare your answers with your specific project details.

1 Tell me about a project you built.

Use the 5-minute structure: scenario, architecture, demo, challenges, link. Pick a specific project — the capstone you built — and walk through it as a story. Focus on what you designed and what broke, not on tutorials you followed.

2 Why did you choose Managed RAP for your capstone?

Managed RAP handles CRUD, transactional consistency, and draft automatically. My business logic was standard create/update/delete with validations — no need for the full control of Unmanaged. Managed gave me a working app faster and with less code to maintain. If I had needed to wrap a legacy BAPI, I would have used Unmanaged.

3 How did you structure your CDS Views?

I used the standard three-layer pattern: a Basic Interface View (ZI_Travel) that reads from the table, and a Consumption View (ZC_Travel) that adds UI annotations and exposes the entity for the Service Definition. This separation lets me change the UI without touching the data model, and vice versa.

4 What validations did you implement and why?

I implemented two validations. The first checks that End Date is not before Start Date — a travel cannot end before it starts. The second checks that Cost is not negative. Both are declared on save in the Behavior Definition and implemented in ZBP_Travel. They return error messages via the REPORTED parameter and block the save if the rule fails.

5 How did you handle the CreatedBy and CreatedAt fields?

I used a Determination declared on save. When the record is saved, the framework calls setCreatedInfo, which fills CreatedBy from sy-uname and CreatedAt from sy-datum plus sy-uzeit. The user never sees these fields as input — they are auto-filled.

6 What was the most challenging part of your capstone?

Be honest. Common answers: getting the number range to generate Travel IDs correctly, or figuring out why the Fiori app did not show the Approve button (because the action was not declared correctly in the BDEF). Whatever it actually was — describe the problem, what you tried, and how you solved it. Interviewers love this because it shows real debugging skills.

7 How would you extend this project for a real customer?

I would add: draft handling so users can save incomplete work, a second entity (Travel Items) to represent sub-records, an analytical CDS View for reporting, and integration with the HR system for employee validation. I would also add authorization checks with DCL for row-level security based on department.

8 Did you use OData V2 or V4? Why?

I used OData V4 because it is the modern standard and fully supported by RAP. V4 is REST-native, supports cleaner batch operations, and works out of the box with the latest Fiori Elements. V2 is legacy and should not be used for new development.

9 Where can I see your code?

Have a GitHub link ready. “The source code is on GitHub at [URL]. You can see the CDS Views, Behavior Definition, implementation class, and the Service Definition. The README explains the architecture and includes screenshots.” This is your moment to look professional.

10 What would you do differently next time?

This is a maturity question. Good answer: “I would define the data model more carefully upfront — I changed the table structure twice, which meant re-doing the CDS Views. Next time I would spend more time on design before coding. I would also add unit tests earlier instead of after everything worked.”

🛠 Final Capstone Checklist

Work through this checklist. When every box is ticked, your capstone is complete.

Build

  • ☐ Database table created and activated
  • ☐ Interface CDS View created
  • ☐ Consumption CDS View with UI annotations
  • ☐ Behavior Definition declared
  • ☐ Behavior Implementation class with validations
  • ☐ At least one determination implemented
  • ☐ At least two actions (e.g., Approve, Reject)
  • ☐ Service Definition created
  • ☐ Service Binding activated (OData V4)

Test

  • ☐ Created a new record successfully
  • ☐ Updated a record successfully
  • ☐ Deleted a record successfully
  • ☐ Triggered a validation error
  • ☐ Triggered a determination
  • ☐ Triggered a custom action
  • ☐ Verified Fiori app preview works

Document

  • ☐ README written with scenario and architecture
  • ☐ Screenshots of the working app
  • ☐ Code pushed to GitHub via abapGit
  • ☐ Blog post published (optional)
  • ☐ LinkedIn post shared
  • ☐ Resume updated with project link
You are done. When this checklist is complete, you have a portfolio project that most ABAP beginners do not have. You are no longer a “learner” — you are a developer with proof of work.
🏆 Chapter 20 Final Challenge

Test: Kon Banega Crorepati?

5 questions. ₹1 Crore. Prove you understood the capstone project. No pressure — restart anytime.

₹1,000 ₹10,000 ₹1,00,000 ₹10,00,000 ₹1 Crore
Question 1 of 5
Score: 0
Q1
🏆
You Did It!
0/5Correct Answers
You won ₹0
🎉 Series Complete

🎓 Congratulations — You’ve Completed ABAP Zero to Hero

Twenty chapters. Classic ABAP. Modern ABAP. A working capstone project. 165 interview questions. You started as a beginner. You are now a developer with proof of work.

What’s Next Build a Second Capstone →
Want to Learn Faster?

Explore Our Instructor-Led SAP & IT Courses

Self-study works. But if you want guided training, real project practice, and placement support — here are the courses we offer. Book a free demo before you decide.

WhatsApp WhatsApp us
Call Now Button