Day 14: Conclusion - Final Summary

 

Final Summary 

✅ Topics Covered 

✅ CDS Views

  • Basic to Advanced CDS

  • Association, Joins

  • Predefined Functions

  • VDM (Interface, Consumption, Composite)

  • CDS with Parameters

  • CDS Extension

  • CDS with UI annotations

  • CDS Annotations (UI, Analytics, OData, Search)

  • Performance Comparison (Open SQL vs CDS)

🟡 Remaining:

  • 🔸 CDS Hierarchies (Analytical use with parent-child, recursive data)
  • 🔸 CDS Hierarchies (in plan)

  • 🔸 CDS View with Union / CASE / Nested CDS for handling legacy logic conversion


✅ CDS Table Functions (TF)

  • TF Basics & Deep Dive

  • CDS vs TF vs AMDP Comparison

  • SQLScript in TF

  • Real-time TF Reporting Scenarios

  • TF with Parameters

  • TF inside VDM and DCL

🟡 Remaining:

  • 🔸 TF with Recursive Logic (only if needed for special cases like multi-level BOM or org hierarchy)


✅ AMDP

  • Basic to Advanced AMDP

  • DML Support, Aggregation, Error Handling

  • AMDP with JOINS, IF, CASE, Cursor Logic

  • AMDP within CDS and TF

  • Performance optimization

  • AMDP for Mass Data Reports

  • Conversion from SE38 to CDS+AMDP+TF

🟡 Remaining:

  • 🔸 AMDP Exception Handling using TRY/CATCH with EXPORT parameters

  • 🔸 AMDP with parallel execution or tuning HINTS (if high-performance required)


✅ Authorization – DCL

  • DCL Concepts

  • PFCG Role Integration

  • Binding with CDS/TF

  • Real-time secure consumption

🟢 Nothing major left


✅ Fiori UI Annotations

  • All major @UI.* annotations

  • Smart Filter, LineItem, Identification

  • FieldGroups, Facets, DataPoints

  • Smart Charts

  • OData Publish

  • PresentationVariant & SelectionVariant

  • Smart KPIs

🟡 Remaining:

  • 🔸 HeaderInfo advanced usage for deep linking or dynamic titles

  • 🔸 Draft-enabled CDS Views (for change tracking apps – optional)


✅ Performance & Tools

  • Pushdown Optimization

  • ST05, SAT, SQL Plan Cache

  • CDS vs Open SQL

  • CDS-TF-AMDP vs Classic

  • Indexing, Buffering, HANA Tuning

🟢 Nothing left






Conclusion

🔹 I hope these digital notes have effectively covered the modern SAP ABAP on HANA stack for real-world enterprise development and serve as a handy reference for quick revision





BONUS





Enhanced & Verified CDS Annotation Reference Sheet


🔹 1. Catalog & Technical Metadata Annotations

Annotation

Purpose

Notes

@AbapCatalog.sqlViewName: 'ZVBAKBASIC'

Technical name for the underlying SQL DB view

Required for DEFINE VIEW, not for DEFINE VIEW ENTITY

@AbapCatalog.viewEnhancementCategory: [#NONE]

Specifies enhancement category (e.g., extendable)

#NONE, #EXTENSIBLE

@AbapCatalog.compiler.compareFilter: true

Optimizes comparison-based filter pushdown

Optional; improves DB runtime performance


🔹 2. Text & Labeling Annotations

Annotation

Purpose

@EndUserText.label: 'Sales Order View'

Provides a human-readable label used in UI5/Fiori, OData metadata, and dev tools

@ObjectModel.text.element: ['<field_name>']

Associates a description/text field with a key field (e.g., material → material_desc)


🔹 3. VDM View Types (SAP Best Practice Architecture)

Annotation

Purpose

@VDM.viewType: #BASIC

Basic CDS view = 1:1 on top of DB table/view; no business logic

@VDM.viewType: #COMPOSITE

For joining multiple BASIC views and adding calculations/logic

@VDM.viewType: #CONSUMPTION

Final view exposed to UI/OData/Reporting (used in Fiori/RAP)


🔹 4. Access Control & Security

Annotation

Purpose

@AccessControl.authorizationCheck: #CHECK

DCL-based authorization check will apply

@AccessControl.authorizationCheck: #NOT_REQUIRED

No authorization check needed

@AccessControl.authorizationCheck: #PRIVILEGED_ONLY

Only for trusted internal scenarios (rare)


🔹 5. UI Annotations – For Fiori Elements & Smart Controls

Annotation

Purpose

@UI.lineItem

Show field in Smart Table/List Report

@UI.selectionField

Show field in Smart Filter Bar

@UI.identification

Show field in Object Page (read-only section)

@UI.facet

Group fields into sections (e.g., tabs in object page)

@UI.fieldGroup

Groups fields logically under a facet

@UI.headerInfo

Title + Description info for Object Page header

@UI.dataPoint

To render KPIs or chart data (used in analytical apps)

@UI.chart

Renders Smart Chart (Bar, Pie, etc.)

@UI.hidden: true

Field hidden from UI, but present in metadata

@UI.importance: #HIGH/#MEDIUM/#LOW

For adaptive UIs (controls priority of fields on small screens)

@UI.presentationVariant

Predefine UI behavior like default sorting, grouping, etc.




🔹 6. Search Annotations

Annotation

Purpose

@Search.searchable: true/false

Entity is globally searchable

@Search.defaultSearchElement: true/false

Field is used for full-text search

@Search.fuzzinessThreshold: 0.8

Controls tolerance for fuzzy search (0 to 1)


🔹 7. Value Help (F4 Help)

Annotation

Purpose

@ObjectModel.dataCategory: #VALUE_HELP

Mark CDS as a value help provider

@Consumption.valueHelpDefinition: [{ entity: { name: 'ZI_CustomerVH', element: 'kunnr' } }]

Link field to external value help view/entity

@Consumption.filter.mandatory: true

Makes field mandatory in Smart Filter

@Consumption.filter.defaultValue: '20240101'

Default filter value in Fiori


🔹 8. Semantic & Analytical Annotations

Annotation

Purpose

@Analytics.query: true

Enable CDS view as Analytical Query for Smart Charts, SAC, RSRT

@ObjectModel.readOnly: true

CDS is read-only in OData/Fiori apps

@ObjectModel.representativeKey: 'name'

Preferred display key (e.g., show name instead of ID in UI)

@Semantics.amount.currencyCode: 'currency_field'

Attach amount field to currency

@Semantics.quantity.unitOfMeasure: 'unit_field'

Attach quantity field to UoM


🔹 9. OData & RAP Annotations

Annotation

Purpose

@OData.publish: true

Auto-publishes view as OData V2 service (for testing or POC; RAP uses Service Definition instead)

@ObjectModel.createEnabled: true

Allow Create in OData

@ObjectModel.updateEnabled: true

Allow Update in OData

@ObjectModel.deleteEnabled: true

Allow Delete in OData


🔹 10. Environment/System Fields

Annotation

Purpose

@Environment.systemField: #USER

Auto-fills user field with SY-UNAME

@Environment.systemField: #SYSTEM_DATE

Auto-fills with SY-DATUM

@Environment.systemField: #CREATED_BY/#CREATED_AT

Auto-populates audit fields




✅ Summary Improvements Applied

  • ✅ Verified all annotations from SAP Help Portal + SAP Community

  • ✅ Grouped them into logical categories for better memory and usage

  • ✅ Clarified field-level vs. entity-level annotations

  • ✅ Enhanced with real usage tips and syntax corrections

  • ✅ Avoided deprecated annotations (e.g., @ObjectModel.foreignKey.association is replaced in RAP)



Comments

Popular posts from this blog

Day 1: Introduction to ABAP on HANA

Day 3: CDS Intermediate – Filters & Expressions

Day 2: CDS View Basics