P_EntProjAccCtrlListCompare

DDL: P_ENTPROJACCCTRLLISTCOMPARE Type: view_entity COMPOSITE Package: VDM_PPM_OBJECTS_AUTHORIZATION

Compare old and new ACL

P_EntProjAccCtrlListCompare is a Composite CDS View that provides data about "Compare old and new ACL" in SAP S/4HANA. It reads from 6 data sources and exposes 8 fields with key field ProjectEntitlementUUID. Part of development package VDM_PPM_OBJECTS_AUTHORIZATION.

Data Sources (6)

SourceAliasJoin Type
R_AccessControlReason acf_reason left_outer
I_EntProjectEntitlement entitlement from
I_EnterpriseProject project inner
I_EnterpriseProjectRole role inner
I_EnterpriseProjectTeamMember teammbr inner
I_User user inner

Annotations (11)

NameValueLevelField
AccessControl.authorizationCheck #NOT_REQUIRED view
AccessControl.auditing.type #CUSTOM view
AccessControl.auditing.specification change documents on Enterprise Projects view
AccessControl.personalData.blocking #BLOCKED_DATA_EXCLUDED view
ObjectModel.usageType.serviceQuality #C view
ObjectModel.usageType.dataClass #TRANSACTIONAL view
ObjectModel.usageType.sizeCategory #L view
VDM.viewType #COMPOSITE view
VDM.private true view
VDM.lifecycle.contract.type #NONE view
Metadata.ignorePropagatedAnnotations true view

Fields (8)

KeyFieldSource TableSource FieldDescription
KEY ProjectEntitlementUUID I_EntProjectEntitlement ProjectEntitlementUUID
ProjectUUID I_EntProjectEntitlement ProjectUUID
ProjectInternalID I_EnterpriseProject ProjectInternalID
Project I_EnterpriseProject Project
RoleUUID I_EntProjectEntitlement ProjectRoleUUID
RoleType I_EnterpriseProjectRole ProjectRoleType
UserID I_User UserID
AccessControlUserUUID acf AccessControlUserUUID
@AccessControl: {
    authorizationCheck:      #NOT_REQUIRED, // @NOT_ALLOWED not allowed at SAP although semantically the correct annotation

    auditing: {
        type: #CUSTOM,
        specification: 'change documents on Enterprise Projects'
    },
    personalData.blocking:   #BLOCKED_DATA_EXCLUDED
}

@ObjectModel: {
   usageType: {
       serviceQuality:  #C,
       dataClass:       #TRANSACTIONAL,
       sizeCategory:    #L
   }
}
@VDM: {
  viewType: #COMPOSITE,
  private: true,
  lifecycle.contract.type: #NONE
}

//@EndUserText.label: 'Compare old and new ACL'

@Metadata.ignorePropagatedAnnotations: true
define view entity P_EntProjAccCtrlListCompare
  as select from            I_EntProjectEntitlement       as entitlement

    inner join              I_EnterpriseProject           as project    on entitlement.ProjectUUID = project.ProjectUUID

  //only entries with existing user should be checked, as only acl entries for valid user can be created

    inner join              I_EnterpriseProjectRole       as role       on  entitlement.ProjectRoleUUID = role.ProjectRoleUUID
                                                                        and entitlement.ProjectUUID     = role.ProjectUUID

    inner join              I_EnterpriseProjectTeamMember as teammbr    on  entitlement.TeamMemberUUID = teammbr.TeamMemberUUID
                                                                        and entitlement.ProjectUUID    = teammbr.ProjectUUID


    inner join              I_User                        as user       on teammbr.BusinessPartnerUUID = user.BusinessPartnerUUID
  //ACF, check for each role+user

    left outer join         R_AccessControlReason         as acf_reason on  acf_reason.AccessControlFrameworkUUID = role.ProjectRoleUUID
                                                                        and acf_reason.AccessControlFrameworkCode = 'ENTPRJ_U'
    left outer to many join R_AccessControlUser           as acf        on  acf.AccessControlHeaderUUID = acf_reason.AccessControlHeaderUUID
                                                                        and acf.UserID                  = user.UserID

{
  key entitlement.ProjectEntitlementUUID,
      entitlement.ProjectUUID,
      project.ProjectInternalID,
      project.Project,
      entitlement.ProjectRoleUUID as RoleUUID,
      role.ProjectRoleType        as RoleType,
      user.UserID,
      acf.AccessControlUserUUID
}
where
      project.ProjectCategory   = '6'
  and acf.AccessControlUserUUID is null