Transaktionen
SU01 (Benutzerpflege)
PFCG (Pflege von Rollen)
Tabellen
TOBJ (Berechtigungsobjekte)
TOBJT (Kurztexte zu Berechtigungsobjekten)
@EndUserText.label : 'Tabelle für XYZ' @AbapCatalog.enhancement.category : #NOT_EXTENSIBLE @AbapCatalog.tableCategory : #TRANSPARENT @AbapCatalog.deliveryClass : #A @AbapCatalog.dataMaintenance : #ALLOWED define table ztablexyz { key client : abap.clnt not null; key id : sysuuid_x16 not null; name : abap.char(50); description : abap.char(200); lastchangedat : timestampl; locallastchangedat : timestampl; active : abap_boolean; age : abap.int1; }
@AccessControl.authorizationCheck: #NOT_REQUIRED @EndUserText.label: 'Root Entity View' define root view entity z_i_xyz as select from ztablexyz { key id as Id, name as Name, description as Description, @Semantics.systemDateTime.lastChangedAt: true lastchangedat as Lastchangedat, @Semantics.systemDateTime.localInstanceLastChangedAt: true locallastchangedat as Locallastchangedat, active as Active, age as Age }
@EndUserText.label: 'Projection View' @AccessControl.authorizationCheck: #NOT_REQUIRED @Search.searchable: true @Metadata.allowExtensions: true define root view entity z_c_xyz provider contract transactional_query as projection on z_i_xyz { @EndUserText.label: 'Id' key Id, @EndUserText.label: 'Name' @Search.defaultSearchElement: true Name, @EndUserText.label: 'Description' @Search.defaultSearchElement: true Description, Lastchangedat, Locallastchangedat, @EndUserText.label: 'Active' Active, @EndUserText.label: 'Age' Age }
@UI
)@UI.facet
) für die Einbindung eines Edit-Fensters (View-Window) für das Neuanlegen/Editieren (#FOR_ACTION
) von Daten von Entitäten (Draft-Handling)z_c_ValueHelp
wird für Feld ‚Name‘ eingebunden@Metadata.layer: #CORE @UI: { headerInfo: { typeName: 'ItemXYZ', typeNamePlural: 'ItemsXYZ', title: { type: #STANDARD, label: 'ItemXYZ', value: 'Name' }, description: { label: '(Description)' }, typeImageUrl: 'sap-icon://chart-axis' } } annotate view z_c_xyz with { @UI.facet: [{ id: 'ItemXYZ', purpose: #STANDARD, type: #IDENTIFICATION_REFERENCE, label: 'ItemXYZ', position: 10 }] @UI: { lineItem: [ { label: 'Id', position: 10 } ], identification: [{ position: 10 }] } Id; @UI: { lineItem: [ { label: 'Name', position: 20 } ], identification: [{ position: 20 }], selectionField: [{ position: 20 }] } @Consumption.valueHelpDefinition: [ { entity: { name: 'z_c_ValueHelp', element: 'Name' } } ] Name; @UI: { lineItem: [ { label: 'Desc', position: 30 } ], identification: [{ position: 30 }], selectionField: [{ position: 30 }] } Description; @UI.hidden: true Lastchangedat; @UI.hidden: true Locallastchangedat; @UI: { lineItem: [ { label: 'Set Active', position: 40, type: #FOR_ACTION, dataAction: 'setActive' } ] } Active; @UI: { lineItem: [ { label: 'Age', position: 50 } ], identification: [{ position: 50 }], selectionField: [{ position: 50 }] } Age; }
@AbapCatalog.viewEnhancementCategory: [#NONE] @AccessControl.authorizationCheck: #NOT_REQUIRED @EndUserText.label: 'Search Help' @Metadata.ignorePropagatedAnnotations: true @ObjectModel.usageType:{ serviceQuality: #X, sizeCategory: #S, dataClass: #MIXED } define view entity z_c_ValueHelp as select from z_i_xyz { @UI.hidden: true key Id, Name, Description }
managed implementation in class zbp_i_xyz unique; // Managed Behaviour Implementation erfolgt in ABAP-Klasse strict ( 2 ); with draft; // für Button "Insert" im UI define behavior for z_i_xyz alias a_i_xyz persistent table ztablexyz // Datenhaltung in transparenter Tabelle // Draft-Tabelle kann automatisiert in der Managed Behaviour Implementation über einen Quick Fix (CTRL + 1) generiert werden draft table ztablexyz_draft // Drafts werden in der Entwurfstabelle zwischengespeichert lock master total etag LastChangedAt // Lockkriterieum für die Drafts ist das letzte Änderungsdatum authorization master ( instance ) //etag master <field_name> { draft action Edit; draft action Activate; draft action Discard; draft action Resume; draft determine action Prepare; create; update; delete; field ( numbering : managed, readonly ) Id; field ( readonly ) Active, Lastchangedat, Locallastchangedat; // zusätzliche selbstdefinierte Action action ( features : instance ) setActive result [1] $self; mapping for ztablexyz corresponding // im Backend werden die gleichnamigen Felder bei INSERT/UPDATE gemappt, hier brauchen eigentlich nur die nicht namensgleichen Felder gemappt werden { Id = id; Name = name; Description = description; Lastchangedat = lastchangedat; Locallastchangedat = locallastchangedat; Active = active; Age = age; } }
sych_bdl_draft_admin_inc
)@EndUserText.label : 'Drafttabelle für XYZ' @AbapCatalog.enhancement.category : #EXTENSIBLE_ANY @AbapCatalog.tableCategory : #TRANSPARENT @AbapCatalog.deliveryClass : #A @AbapCatalog.dataMaintenance : #RESTRICTED define table ztablexyz_draft { key mandt : mandt not null; key id : sysuuid_x16 not null; name : abap.char(50); description : abap.char(200); lastchangedat : timestampl; locallastchangedat : timestampl; active : abap_boolean; age : abap.int1; "%admin" : include sych_bdl_draft_admin_inc; }
projection; strict ( 2 ); use draft; define behavior for z_c_xyz //alias <alias_name> use etag { // Button "Delete" Standardfunktion wird im UI eingefügt use delete; // Button "Create" Standardfunktion --> Daft Handling (Tabellen, UI Facet...) muss zusätzlich implementiert werden use create; use update; // Button für selbstdef. Action "setActive" use action setActive; use action Edit; use action Activate; use action Discard; use action Resume; use action Prepare; }
zbp_i_xyz
lhc_zbp_i_xyz
mit VerhaltensausprägungCLASS lhc_zbp_i_xyz DEFINITION INHERITING FROM cl_abap_behavior_handler. PRIVATE SECTION. METHODS get_instance_authorizations FOR INSTANCE AUTHORIZATION IMPORTING keys REQUEST requested_authorizations FOR a_i_xyz RESULT result. METHODS get_instance_features FOR INSTANCE FEATURES IMPORTING keys REQUEST requested_features FOR a_i_xyz RESULT result. METHODS setactive FOR MODIFY IMPORTING keys FOR ACTION a_i_xyz~setactive RESULT result. ENDCLASS. CLASS lhc_zbp_i_xyz IMPLEMENTATION. METHOD get_instance_authorizations. ENDMETHOD. METHOD get_instance_features. " Read the active flag of all items READ ENTITIES OF z_i_xyz IN LOCAL MODE ENTITY a_i_xyz FIELDS ( Active ) WITH CORRESPONDING #( keys ) RESULT DATA(items) FAILED failed. result = VALUE #( FOR item IN items LET status = COND #( WHEN item-Active = abap_true THEN if_abap_behv=>fc-o-disabled ELSE if_abap_behv=>fc-o-enabled ) IN ( %tky = item-%tky %action-setActive = status ) ). ENDMETHOD. METHOD setActive. MODIFY ENTITIES OF z_i_xyz IN LOCAL MODE ENTITY a_i_xyz UPDATE FIELDS ( Active ) WITH VALUE #( FOR key IN keys ( %tky = key-%tky Active = abap_true ) ) FAILED failed REPORTED reported. READ ENTITIES OF z_i_xyz IN LOCAL MODE ENTITY a_i_xyz ALL FIELDS WITH CORRESPONDING #( keys ) RESULT DATA(items). result = VALUE #( FOR item IN items ( %tky = item-%tky %param = item ) ). ENDMETHOD. ENDCLASS.
z_c_xyz
als ODATA V4 Service@EndUserText.label: 'Service def.' define service z_expose_xyz { expose z_c_xyz; }
/IWFND/V4_ADMIN
aufrufendeploy-config
oderDeploy
oderdeploy npm
oderAdd Deployment Configuration
npm run deploy
/UI2/SEMOBJ
: Semantisches Objekt anlegenFiori Anwendungsmanager
: technischen Katalog anlegen –> App-Id steht in der manifest.json/UI2/FLPCM_CUST
: technischen Katalog prüfenPFCG
: Rollen zuweisen (Menü –> Transaktion –> SAP Fiori Launchpad –> Launchpad-Katalog)/UI2/FLP
: App im Fiori Launchpad einbinden –> App Finder –> Katalog/IWFND/IWF_ACTIVATE
): SPRO -> SAP NetWeaver -> SAP Gateway -> OData Channel -> Konfiguration -> SAP Gateway aktivieren oder deaktivieren
SM30 + /IWFND/V_DFSYAL
): SPRO -> SAP NetWeaver -> SAP Gateway -> OData Channel -> Konfiguration -> Verbindungseinstellungen -> SAP Gateway zu SAP-System -> SAP-Systemalias verwalten
SM30 + /IWBEP/C_SYSTEM
): SPRO -> SAP NetWeaver -> Aktivierung SAP-Gateway-Service -> Backend OData Channel -> Verbindungsweinstellungen zu SAP Gateway -> SAP-Gateway-Einstellungen
SM59, SMT1
)/IWFND/MAINT_SERVICE
): TransportauftragSICF
): /sap/bc/ui5_ui5/sap/
-> entsprechenden Service aktivierenSICF
): /sap/opu/odata/sap/
oder /sap/bc/bsp/sap/
-> entsprechenden Service aktivierenPFCG
)SEGW, SE80
): TransportauftragWeiterführende Infos: Quick Starter Configuration Guide – SAP Gateway
PFCG (Pflege von Rollen)
SUIM (Benutzerinformationssystem)
SU53 (Auswertung der Berechtigungspüfung)
RSUSRAUTH (Suche nach Einzelrollen mit Berechtigungsdaten)
RSUSR050 (Systemübergreifend SAP-Benutzer, Rollen, Profile und Berechtigungen vergleichen)
AGR_DEFINE (Definition Rollen)
AGR_USERS (Zuordnung Rollen zu Benutzern)