Ansicht
Dokumentation

ABENCDS_F1_DCL_FUNCTION - CDS F1 DCL FUNCTION

ABENCDS_F1_DCL_FUNCTION - CDS F1 DCL FUNCTION

CL_GUI_FRONTEND_SERVICES - Frontend Services   ROGBILLS - Synchronize billing plans  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

- DEFINE ROLE, dcl_function

... ${ SACF_CHECK_IN_USE( NAME => scenario_name $[, OBJECT => auth_object $] )
          IS $[NOT$] INITIAL $}
  $| ${ OPTIONAL_ELEMENT_EXISTS( NAME >= element )
          IS $[NOT$] INITIAL $} ...


Varianten:

1. ... SACF_CHECK_IN_USE ...

2. ... OPTIONAL_ELEMENT_EXISTS ...

Wirkung

DCL-Funktionen werden im ABAP-Application-Server ausgewertet, bevor die Anweisung an die Datenbank gesendet wird.

Sie werden entweder als logisch TRUE oder logisch FALSE gewertet und können anschließend dazu führen, dass der Baum des logischen Ausdrucks der Zugriffssteuerung reduziert wird.

Hinweis

Die DCL-Funktion wirkt sich ausschließlich zur Laufzeit aus. Die Zugriffssteuerung muss jederzeit syntaktisch korrekt sein.

So wird beispielsweise in einer Bedingung wie dcl_function AND element IS NULL ein Syntaxfehler ausgegeben, wenn das Element nicht vorhanden ist, auch wenn sich dcl_function zum Zeitpunkt der Kompilierung wie ein logisches FALSE verhält.

Variante 1

... SACF_CHECK_IN_USE ...


Wirkung

Mit dieser DCL-Funktion kann der Status schaltbarer Berechtigungsprüfungen abgefragt und in einer Zugriffssteuerung dazu verwendet werden, Bedingungsblöcke zu aktivieren oder zu deaktivieren.

Die Funktion verhält sich wie die ABAP-Methode CL_SACF=>SACF_CHECK_IN_USE mit ihren Parametern ID_NAME und ID_OBJECT. Der Rückgabewert kann ausschließlich über den Operator IS $[NOT$] INITIAL getestet werden:

  • SACF_CHECK_IN_USE( ... ) IS INITIAL ist TRUE, wenn das vorliegende Szenario (ggf. speziell für das angegebene Berechtigungsobjekt) nicht aktiv ist, d.h. eine durch dieses Szenario geschaltete Berechtigungsprüfung verhält sich wie eine Gesamtberechtigung.
  • SACF_CHECK_IN_USE( ... ) IS NOT INITIAL ist TRUE, wenn das vorliegende Szenario (ggf. speziell für das angegebene Berechtigungsobjekt) aktiv ist, d.h. eine durch dieses Szenario geschaltete Berechtigungsprüfung erfolgt entsprechend den Benutzerberechtigungen.

Beispiel

GRANT SELECT ON cds_entity
  WHERE
    SACF_CHECK_IN_USE (NAME => NEW_AUTH_SWITCH ) IS INITIAL
      AND
    ( element ) = ASPECT PFCG_AUTH( OLD_AUTH, F )
  OR
    SACF_CHECK_IN_USE( NAME => NEW_AUTH_SWITCH ) IS NOT INITIAL
      AND
    ( element ) = ASPECT PFCG_AUTH( NEW_AUTH, F );

Mit dieser Zugriffssteuerung wird eine Migration aus einem alten Berechtigungsobjekt OLD_AUTH in ein neues Berechtigungsobjekt NEW_AUTH basierend auf dem SACF-Szenario NEW_AUTH_SWITCH realisiert. Sobald dieses Szenario aktiviert ist, wird das alte Berechtigungsobjekt nicht mehr berücksichtigt.

Hinweis

Wenn Sie lediglich neue Berechtigungsobjekte einführen müssen, ohne dass umgehend die Auswertung eines Vorgängers deaktiviert werden muss, ist der reguläre Syntaxzusatz zur PFCG-Bedingung zu bevorzugen:

( element ) = ASPECT PFCG_AUTH( NEW_AUTH IN SCENARIO NEW_AUTH_SWITCH, F)

Variante 2

...  OPTIONAL_ELEMENT_EXISTS ...


Wirkung

Mit dieser DCL-Funktion kann die Existenz des angegebenen CDS-Elements in der geschützten Entität zur Laufzeit abgefragt werden. Je nach dem Prüfergebnis können dann größere Bedingungsblöcke in der Zugriffssteuerung aktiviert bzw. deaktiviert werden.

Hierbei handelt es sich um eine Erweiterung zum Konzept optionaler Elemente (WITH OPTIONAL ELEMENTS), die in der Anwendung nicht nur neu eingeführte Elemente, sondern auch Ersatzszenarien ermöglicht, in denen ein Element durch ein anderes Element semantisch ersetzt wird.

Hinweise

  • Das in der Funktion abgefragte Element muss als optionales Element deklariert sein.
Durch Ihre Verwendung der Funktion mit einem Element ergibt sich explizit, dass das Element auch fehlen kann; deshalb müssen Sie es als optional deklarieren, damit es im Fall, dass das Element fehlt, nicht zu syntaktisch fehlerhaften Zugriffssteuerungen kommt.
  • Das in der Funktion abgefragte Element muss mindestens einmal außerhalb der Zugriffssteuerung in einer Bedingungsanweisung verwendet werden.

Beispiel

GRANT SELECT ON cds_entity
   WITH OPTIONAL ELEMENTS (itemState DEFAULT FALSE )
     WHERE
       OPTIONAL_ELEMENT_EXISTS( NAME => itemState ) IS INITIAL
         AND
          toItem.state = 'A'
     OR
       OPTIONAL_ELEMENT_EXISTS( NAME => itemState ) IS NOT INITIAL
         AND
          itemState = 'A';

Mit dieser Zugriffssteuerung wurde bisher eine Zugriffssteuerung über eine Assoziation realisiert.

Um die Performance von Selektionen zu verbessern, soll diese Assoziation durch ein Replikat des verwendeten Elements in der eigentlichen geschützten Entität (itemState) ersetzt werden.

Da dieses Element nicht sofort in CDS-Entitäten vorliegt, die ihre Zugriffsbedingungen aus dieser Entität übernehmen, wird das neue Element als optionales Element eingeführt (der Standardwert FALSE ist standardmäßig sicher, wird im vorliegenden Fall jedoch aufgrund der DCL-Funktion nicht zur Laufzeit verwendet); in diesem Fall soll die bisherige Zugriffssteuerung gelten.

Sobald das neue Element verfügbar ist, soll es anstelle des bisherigen verwendet werden (das alte Element soll nicht mehr verwendet werden, damit die Performance nicht durch Join-Auswertungen beeinträchtigt wird).






General Data in Customer Master   General Data in Customer Master  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 9046 Date: 20240523 Time: 172124     sap01-206 ( 118 ms )