Kategorien
-
Neueste Beiträge
- Wissensmanagement
- [CSS] Farbschemen
- [CSS] Frameworks
- [ABAP] SPRO-Customizing – Anzeigen und Ändern eines Projektplans
- Software-Alternativen
- [SVG] SVG-Viewer und Editoren
- [SVG] SVG-Icon-Bibliotheken
- [CSS] Themes: Farbauswahl
- [TypeScript] Projekt im Visual Studio Code mit React, Typescript und Vite erstellen
- [ABAP] SALV: Events abfangen beim Klick auf die ALV Funktions-Buttons am Beispiel Filter-Setzen
Schlagwort: SAP
[SAP] ABAP Unit Testing – Writing Testable Code for ABAP
[SAP] Profit Center
Transaktionen
KA01 (Kostenart anlegen)
KA02 (Kostenart ändern)
KA03 (Kostenart anzeigen)
KA04 (Kostenart löschen)
KS01 (Kostenstelle anlegen)
KS02 (Kostenstelle ändern)
KS03 (Kostenstelle anzeigen)
KE51 (Profit Center anlegen)
KE52 (Profit Center ändern)
KE53 (Profit Center anzeigen)
Tabellen
CEPC (Stammdatentabelle von Profit Centern)
CEPCT (Profit-Center-Stammdaten Texte)
CEPC_BUKRS (Buchungskreiszuordnung von Profit Centern)
CDS-Views
SHSM_PROFITCENTER_VH (Join CEPC und CEPCT)
Fiori Apps
F3516 (Profitcenter verwalten)
F0764 (Manage Profit Center Groups)
F2918 (Körperschaftsteuerhierarchien verwalten, Globale Hierarchien verwalten)
Links
[SAP Fiori] Setup Fiori My Inbox
[SAP Fiori] Setup der Fiori Suche / Fiori search
[SAP] Projektsystem
Transaktionen
CJ20N (Project Builder)
CJ11 (PSP-Element anlegen)
CJ12 (PSP-Element ändern)
CJ13 (PSP-Element anzeigen)
CJ01 (Projektstrukturplan anlegen)
CJ02 (Projektstrukturplan ändern)
CJ03 (Projektstrukturplan anzeigen)
KJH3 (PSP-Element Gruppe: Anzeigen)
Tabellen
PROJ (Projektdefinition)
PRPS (PSP-Element (Projektstrukturplanelement) Stammdaten)
JSTO (Informationen zum Statusobjekt)
JEST (Einzelstatus pro Objekt)
TJ20 (Statusschemata)
TJ20T (Texte zu Statusschemata)
TJ30 (Anwenderstatus)
TJ30T (Texte zu Anwenderstatus)
TJ02 (Systemstatus)
TJ02T (Texte zu Systemstatus)
TJ03 (Objekttypen)
Suchhilfen
H_WBSELEM (Suchhlife für ID von PSP-Elementen)
Funktionsbausteine
BAPI_BUS2054_GETDATA (Detail Data for WBS Elements)
BAPI_PROJECT_GETINFO (Read detailed information for work breakdown structures)
CDS-View
I_WBSElementBasicData (WBS Element Basic Data)
I_MM_WBSElementValueHelp (Purchasing WBS Element Value Help)
Fiori-Apps
F1976 (Projektdefinitionsübersicht)
F1974 (PSP-Elementübersicht)
F1973 (Netzplanübersicht)
Links
[RAP] ODATA V4 Service und Fiori Elements App implementieren
Eclipse Project
Datenhaltung
- transparente Tabelle
- hält die Geschäftsdaten
@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;
}
Root Entity
- CDS-View
- definiert Geschäftsobjekt
- Sicht auf die DB-Tabelle ztablexyz
@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
}
Projection View
- CDS-View mit Annotationen
- Sicht auf Root Entity
@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
}
Metadatenerweiterung (Annotationen) für Projection View
- beinhaltet Header-Info (
@UI) - Facet-Definition (
@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) - Werthilfe
z_c_ValueHelpwird 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;
}
View für Werthilfe
@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 Behaviour Definition
- grundsätzlich bei Views, die mehr als nur lesen sollen
- bildet transaktionales Verhalten ab
- Implementation Type: Managed
Root View
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;
}
}
generierte Draft Table
- speichert Änderungen zwischen (Draft-Handling)
- Includiert zusätzliche Draft-Felder (
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 View
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;
}
Managed Behaviour Implementation
- globale Klasse zur „Behaviour Implementation“ anlegen:
zbp_i_xyz - lokale Klasse
lhc_zbp_i_xyzmit Verhaltensausprägung
CLASS 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.
ODATA V4 Service Definition
- Publiziert den Projection-View
z_c_xyzals ODATA V4 Service
@EndUserText.label: 'Service def.'
define service z_expose_xyz {
expose z_c_xyz;
}
ODATA V4 Service Binding einrichten
- SAP-GUI Transaktion
/IWFND/V4_ADMINaufrufen - Service-Gruppe publizieren
- Systemalias i.d.R. ‚LOCAL‘
Business Application Studio (BAS)
Fiori-Elements-App zum ODATA V4-Service einrichten
- neues Projekt in der BAS anlegen: ‚SAP Fiori Application‘
- Template ‚List Report Page‘
- Service: den publizierten ODATA V4 Service
- ‚Add deployment configuration‘
- ‚Configure Advanced Options‘ wählen
- ‚Add Eslint configuration to the project‘
- ‚Add code assist librares to your project‘
- Page Map (Flexible Column Layout, Flex enabled, Controller-Extensions: Lifecycle-Funktionen (JS) elegant überschreiben)
- Guided Developement –> Code Snippets einfügen
- Data Editor
Fiori-Elements-App deployen
- wenn nicht beim Erstellen des Projects option ‚Add deployment configuration‘ gewählt wurde, dann im BAS-Explorer
- npm-scripts:
deploy-configoder - Quick-Access:
Deployoder - Task-Explorer:
deploy npmoder - Command Palette:
Add Deployment Configuration
- npm-scripts:
- Deployment ausführen: Console:
npm run deploy - Bei Erfolg: BSP-Applikation ist im Backend ins Zielpaket geladen worden
App ins Fiori Launchpad einbinden
- Transaktion
/UI2/SEMOBJ: Semantisches Objekt anlegen - Fiori Launchpad –>
Fiori Anwendungsmanager: technischen Katalog anlegen –> App-Id steht in der manifest.json - Transaktion
/UI2/FLPCM_CUST: technischen Katalog prüfen - Transaktion
PFCG: Rollen zuweisen (Menü –> Transaktion –> SAP Fiori Launchpad –> Launchpad-Katalog) - Transaktion
/UI2/FLP: App im Fiori Launchpad einbinden –> App Finder –> Katalog
Links
- https://developers.sap.com/tutorials/fiori-tools-rap-create-application.html
- https://software-heroes.com/blog/abap-rap-generator-fiori
- https://learning.sap.com/learning-journeys/developing-an-sap-fiori-elements-app-based-on-a-cap-odata-v4-service
- https://developers.sap.com/group.fiori-tools-odata-v4-travel.html
- https://community.sap.com/t5/technology-blogs-by-sap/sap-fiori-elements-for-odata-v4-knowledge-resources/ba-p/13554974
- https://sapui5.hana.ondemand.com/test-resources/sap/fe/core/fpmExplorer/index.html#/overview/introduction
- https://experience.sap.com/fiori-design-web/floorplan-overview/
- https://github.com/SAP-samples/abap-cheat-sheets/blob/main/08_EML_ABAP_for_RAP.md
- https://software-heroes.com/en/blog/abap-rap-cds-pattern-en
[SAP] Fabrikkalender / Feiertagskalender einrichten
Transaktionen
SCAL (Fabrikkalender mit CUA-Oberfläche)
OX10 (Werk einrichten Customize)
Tabellen
TFACD (Fabrikkalenderdefinitionen)
TFACT (Texte der Fabrikkalender)
THOC (Feiertagskalender)
THOCD (Feiertagsdefinitionen)
THOL (Feiertage)
THOLT (Feiertagstexte)
T001W (Werke/Niederlassungen)
Funktionsbausteine
DATE_CONVERT_TO_FACTORYDATE (Kalenderfunktion Fabrikkalenderdatum zu einem Datum geben)
FACTORYDATE_CONVERT_TO_DATE (Kalenderfunktion Datum zu einem Fabrikkalenderdatum geben)
CDS-Views
I_CalendarDate (Date)
Links
[SAP] Drucker für Benutzer festlegen
Benutzereinstellungen – Drucker für Listausgaben
- SU3 (Benutzer eigene Daten pflegen)
- Reiter Festwerte: Ausgabegerät
oder
- SU3 (Benutzer eigene Daten pflegen)
- Reiter Parameter: Parameter „PRI“ (Drucker / Printer)
Einkäufergruppe
- OMGF (C MM-PUR Ausgabegerät Nachrichten) oder SPRO -> Materialwirtschaft -> Einkauf -> Nachrichten -> Ausgabegeräte zu Einkäufergruppen zuordnen
- Ausgabegeräte (Drucker) zu Einkäufergruppe zuordnen
Konditionssätze
- NACE (WFMC: Einstieg in das Customizing)
- Im Konditionssatz Button „Kommunikation“ -> Ausgabegerät festlegen
oder
- MN04 (Nachricht anlegen: Bestellung)
- MN05 (Nachricht ändern: Bestellung)
- Im Konditionssatz Button „Kommunikation“ -> Ausgabegerät festlegen
Zugriffsfolgen
- Zugriffsfolge mit Einkäufergruppe anlegen
- auf der Basis Belegart/EKORG/EKGRP Drucker definieren