Victor Ionescu
msg systems, Technical Guidance Unit
https://people.sap.com/victor.ionescu
@ivictor88
Design Time
Runtime
API
IDEs
Persistency
BOPF
Nodes
Associations
Determinations
Actions
Validations
Transaction Handling
Authorization Handling
API
A. Multiple flavors of SAP GUI Transactions:
B. BOPF in Eclipse:
Validation flavors in classical BOPF development:
Cross-node validation through "Consistency Groups"
action
action
commit
Action Check
Check after Modify
Check before Save
consistency group
!Change!
i.e. "ABAP Programming Model for SAP Fiori"
Database
BOPF
CDS
SADL
Gateway
UI5
Database
BOPF
CDS
SADL
Gateway
UI5
/**
* SADL = Abstraction layer between
* OData and underlying business
* entities
*/
function SADL()
{
interpret_OData_request();
if ( action == READ )
{
build_query_and_push_to_database();
}
else // action == C/U/D
{
forward_to_transactional_engine(); //i.e. BOPF
}
map_result_to_OData();
}
Database
BOPF
SADL
Gateway
UI5
Database
CDS
SADL
Gateway
UI5
Database
BOPF
CDS
SADL
Gateway
UI5
S/4 Prog. Model
Database
BOPF
CDS
SADL
Gateway
UI5
=> Will try to cover all angles..
OData | BOPF |
---|---|
nouns | |
Entity(Set) | Node |
Navigation Property | Association |
Function Import | Action |
verbs | |
HTTP GET /Entity(id) | Node.query(id) |
HTTP POST /Entity | Node.create() |
HTTP PUT /Entity(id) | Node.update(id) |
Database
BOPF
SADL
Gateway
UI5
OData | BOPF |
---|---|
$expand | ? |
$batch | ? |
Deep Insert | ? |
Database
BOPF
CDS
SADL
Gateway
UI5
...SADL!
Database
BOPF
CDS
SADL
Gateway
UI5
< 7.50 SP5: Data Source Mapping
>= 7.50 SP5: "OData Exposure" for CDS/BOPF Models
GET SampleODataEntity('00505692515B1ED58EA9C9E0FD67DB41')
GET SampleODataEntity(1001)
Database
BOPF
SADL
Gateway
UI5
Database
BOPF
CDS
SADL
Gateway
UI5
BOPF Model
Authorization Object (SU21)
Role (PFCG)
STUDENT_GRADE: {
ACTVT: integer
CLASS_NAME: string
}
ROLE MATH_TEACHER: [
STUDENT_GRADE: {
ACTVT = 01(READ) or 02(WRITE)
CLASS_NAME = "MATH"
}
]
mapping
read/write
BOPF Model
Authorization Object (SU21)
Role (PFCG)
STUDENT_GRADE: {
ACTVT: integer
CLASS_NAME: string
}
ROLE MATH_TEACHER: [
STUDENT_GRADE: {
ACTVT = 01(READ) or 02(WRITE)
CLASS_NAME = "MATH"
}
]
mapping
query condition provider
Database
SADL
Gateway
SELECT ... WHERE CLASS_NAME = "MATH"
CDS
Operation | How |
---|---|
Write | Redefine BOPF Auth. Checks |
Read | A. CDS DCL (Preferred) B. Redefine Query condition provider |
define view <SAMPLE> ..
{
...
@ObjectModel.readOnly: 'EXTERNAL_CALCULATION'
viewField
...
}
In the S4 Programming Model:
https://people.sap.com/victor.ionescu
@ivictor88 (Look for slides here)
Victor Ionescu
msg systems, Technical Guidance Unit