I_EntProjElemChgDocuments

DDL: I_ENTPROJELEMCHGDOCUMENTS Type: view COMPOSITE

Chg Doc for Project Elements of Ent Proj

I_EntProjElemChgDocuments is a Composite CDS View that provides data about "Chg Doc for Project Elements of Ent Proj" in SAP S/4HANA. It reads from 4 data sources (I_ChangeDocument, I_EntProjElemChgDocItem, I_EnterpriseProject, I_EntProjChgDocTableField) and exposes 29 fields with key fields ChangeDocObject, ChangeDocObjectClass, ChangeDocument, DatabaseTable, ChangeDocTableKey. It has 9 associations to related views.

Data Sources (4)

SourceAliasJoin Type
I_ChangeDocument cdhdr from
I_EntProjElemChgDocItem cdpos inner
I_EnterpriseProject EntProject inner
I_EntProjChgDocTableField fields inner

Associations (9)

CardinalityTargetAliasCondition
[0..*] I_PPM_PriorityText _PriorityText $projection.ChangeDocumentOldFieldValue = _PriorityText.PriorityCodeName
[0..*] I_EntProjChangeIndicatorText _ChangeTypeText $projection.ChangeDocItemChangeType = _ChangeTypeText.ChangeDocItemChangeType
[0..*] I_PPM_ContactData _ChangedBy $projection.LastChangedByUser = _ChangedBy.UserID
[0..*] I_EntProjChgDocTableFieldText _FieldText ( _FieldText.ChangeDocDatabaseTableField = $projection.ChangeDocDatabaseTableField and _FieldText.DatabaseTable = cdpos.DatabaseTable )
[0..*] I_PPM_AuthznByUsrH _AuthUser _AuthUser.ReferencedObjectUUID = $projection.ProjectSummaryTaskUUID and _AuthUser.UserID = $session.user and ( _AuthUser.Activity = 'Admin' or _AuthUser.Activity = 'Write' or _AuthUser.Activity = 'Read' )
[0..*] I_PPM_AuthznBySubstitH _AuthSubst _AuthSubst.ReferencedObjectUUID = $projection.ProjectSummaryTaskUUID and _AuthSubst.UserID = $session.user and ( _AuthSubst.Activity = 'Admin' or _AuthSubst.Activity = 'Write' or _AuthSubst.Activity = 'Read' )
[0..*] I_PPM_AuthznByUserRoleH _AuthRole _AuthRole.ReferencedObjectUUID = $projection.ProjectSummaryTaskUUID and _AuthRole.UserID = $session.user and ( _AuthRole.Activity = 'Admin' or _AuthRole.Activity = 'Write' or _AuthRole.Activity = 'Read' )
[0..*] I_PPM_AuthznByUsrGrpH _AuthGroup _AuthGroup.ReferencedObjectUUID = $projection.ProjectSummaryTaskUUID and _AuthGroup.UserID = $session.user and ( _AuthGroup.Activity = 'Admin' or _AuthGroup.Activity = 'Write' or _AuthGroup.Activity = 'Read' )
[0..1] I_EnterpriseProjectElement _EntProjElem _EntProjElem.ProjectElementUUID = cdpos.ProjectElementUUID

Annotations (13)

NameValueLevelField
EndUserText.label Chg Doc for Project Elements of Ent Proj view
VDM.viewType #COMPOSITE view
VDM.lifecycle.contract.type #SAP_INTERNAL_API view
AbapCatalog.sqlViewName IENTPRJELMCD view
AbapCatalog.compiler.compareFilter true view
AbapCatalog.preserveKey true view
AccessControl.authorizationCheck #CHECK view
AccessControl.personalData.blocking #BLOCKED_DATA_EXCLUDED view
ClientHandling.algorithm #SESSION_VARIABLE view
ObjectModel.representativeKey ProjectUUID view
ObjectModel.usageType.serviceQuality #D view
ObjectModel.usageType.dataClass #TRANSACTIONAL view
ObjectModel.usageType.sizeCategory #XL view

Fields (29)

KeyFieldSource TableSource FieldDescription
KEY ChangeDocObject I_ChangeDocument ChangeDocObject
KEY ChangeDocObjectClass I_ChangeDocument ChangeDocObjectClass
KEY ChangeDocument I_EntProjElemChgDocItem ChangeDocument
KEY DatabaseTable I_EntProjElemChgDocItem DatabaseTable
KEY ChangeDocTableKey I_EntProjElemChgDocItem ChangeDocTableKey
KEY ChangeDocDatabaseTableField I_EntProjElemChgDocItem ChangeDocDatabaseTableField
KEY ChangeDocItemChangeType I_EntProjElemChgDocItem ChangeDocItemChangeType
KEY ProjectUUID I_EnterpriseProject ProjectUUID
ProjectSummaryTaskUUID I_EnterpriseProject ProjectSummaryTaskUUID
Project I_EnterpriseProject Project
ProjectName I_EnterpriseProject ProjectDescription
ProjectElementUUID I_EntProjElemChgDocItem ProjectElementUUID
ProjectElement ProjectElement
ProjectElementName ProjectElementName
_ChangedBy _ChangedBy
_ChangeTypeText _ChangeTypeText
_FieldText _FieldText
_PriorityText _PriorityText
_EntProjElem _EntProjElem
ChangeDocumentOldFieldValue ChangeDocPreviousFieldValue Old Value
ChangeDocumentNewFieldValue ChangeDocNewFieldValue New Value
LastChangedByUser I_ChangeDocument CreatedByUser
LastChangeDate I_ChangeDocument CreationDate
LastChangeTime I_ChangeDocument CreationTime
IsProjectMilestone I_EntProjElemChgDocItem IsProjectMilestone
_AuthUser _AuthUser
_AuthSubst _AuthSubst
_AuthRole _AuthRole
_AuthGroup _AuthGroup
@EndUserText.label: 'Chg Doc for Project Elements of Ent Proj'
@VDM: {
   viewType: #COMPOSITE,
   lifecycle.contract.type: #SAP_INTERNAL_API
}

@AbapCatalog: {
   sqlViewName: 'IENTPRJELMCD',
   compiler.compareFilter: true,
   preserveKey: true
}

// Authorization handling

@AccessControl: {
  authorizationCheck: #CHECK,
  personalData.blocking: #BLOCKED_DATA_EXCLUDED
}

@ClientHandling.algorithm: #SESSION_VARIABLE

@ObjectModel: {
   semanticKey:       [ 'Project' ],
   representativeKey:  'ProjectUUID',
   alternativeKey: [
                     { id : 'ProjectUUID', element: ['ProjectUUID', 'ChangeDocument' ], uniqueness: #UNIQUE }, //TODO

                     { id : 'ChangeDocObject', element: ['ChangeDocObject'], uniqueness: #UNIQUE } ], //TODO


   usageType: {
     serviceQuality:  #D,
     dataClass:       #TRANSACTIONAL,
     sizeCategory:    #XL
   }
}
define view I_EntProjElemChgDocuments
  as select from I_ChangeDocument          as cdhdr

    inner join   I_EnterpriseProject       as EntProject on cdhdr.ChangeDocObject = concat(
      'ENTPROJ', bintohex(
        EntProject.ProjectUUID
      )
    )

    inner join   I_EntProjElemChgDocItem as cdpos        on  cdpos.ChangeDocObjectClass = cdhdr.ChangeDocObjectClass
                                                         and cdpos.ChangeDocObject      = cdhdr.ChangeDocObject
                                                         and cdpos.ChangeDocument       = cdhdr.ChangeDocument



  // To filter only the CD-Fields that shall be visible in App

    inner join   I_EntProjChgDocTableField as fields     on  fields.ChangeDocDatabaseTableField = cdpos.ChangeDocDatabaseTableField
                                                         and fields.DatabaseTable               = cdpos.DatabaseTable



  // Priority

  association [0..*] to I_PPM_PriorityText            as _PriorityText   on  $projection.ChangeDocumentOldFieldValue = _PriorityText.PriorityCodeName


  // Change Type Text (Action in UI)

  association [0..*] to I_EntProjChangeIndicatorText  as _ChangeTypeText on  $projection.ChangeDocItemChangeType = _ChangeTypeText.ChangeDocItemChangeType

  // Changed By + Changed By Text

  association [0..*] to I_PPM_ContactData             as _ChangedBy      on  $projection.LastChangedByUser = _ChangedBy.UserID


  association [0..*] to I_EntProjChgDocTableFieldText as _FieldText      on  (
           _FieldText.ChangeDocDatabaseTableField = $projection.ChangeDocDatabaseTableField
           and _FieldText.DatabaseTable           = cdpos.DatabaseTable
         )

  // Associations to authorization views

  association [0..*] to I_PPM_AuthznByUsrH            as _AuthUser       on  _AuthUser.ReferencedObjectUUID = $projection.ProjectSummaryTaskUUID
                                                                         and _AuthUser.UserID               = $session.user
                                                                         and (
                                                                            _AuthUser.Activity              = 'Admin'
                                                                            or _AuthUser.Activity           = 'Write'
                                                                            or _AuthUser.Activity           = 'Read'
                                                                          )
  association [0..*] to I_PPM_AuthznBySubstitH        as _AuthSubst      on  _AuthSubst.ReferencedObjectUUID = $projection.ProjectSummaryTaskUUID
                                                                         and _AuthSubst.UserID               = $session.user
                                                                         and (
                                                                            _AuthSubst.Activity              = 'Admin'
                                                                            or _AuthSubst.Activity           = 'Write'
                                                                            or _AuthSubst.Activity           = 'Read'
                                                                          )

  association [0..*] to I_PPM_AuthznByUserRoleH       as _AuthRole       on  _AuthRole.ReferencedObjectUUID = $projection.ProjectSummaryTaskUUID
                                                                         and _AuthRole.UserID               = $session.user
                                                                         and (
                                                                            _AuthRole.Activity              = 'Admin'
                                                                            or _AuthRole.Activity           = 'Write'
                                                                            or _AuthRole.Activity           = 'Read'
                                                                          )
  association [0..*] to I_PPM_AuthznByUsrGrpH         as _AuthGroup      on  _AuthGroup.ReferencedObjectUUID = $projection.ProjectSummaryTaskUUID
                                                                         and _AuthGroup.UserID               = $session.user
                                                                         and (
                                                                            _AuthGroup.Activity              = 'Admin'
                                                                            or _AuthGroup.Activity           = 'Write'
                                                                            or _AuthGroup.Activity           = 'Read'
                                                                          )
  // Association for getting controlling area and profit center in case of work packages

  association [0..1] to I_EnterpriseProjectElement    as _EntProjElem    on  _EntProjElem.ProjectElementUUID = cdpos.ProjectElementUUID

{

  key cdhdr.ChangeDocObject                                                                       as ChangeDocObject,
  key cdhdr.ChangeDocObjectClass                                                                  as ChangeDocObjectClass,

  key cdpos.ChangeDocument                                                                        as ChangeDocument,
  key cdpos.DatabaseTable                                                                         as DatabaseTable,
  key cdpos.ChangeDocTableKey                                                                     as ChangeDocTableKey,

      // Field Name

  key cdpos.ChangeDocDatabaseTableField                                                           as ChangeDocDatabaseTableField,

      // Change Indicator

      @ObjectModel.text.association: '_ChangeTypeText'
  key cdpos.ChangeDocItemChangeType                                                               as ChangeDocItemChangeType,

  key EntProject.ProjectUUID                                                                      as ProjectUUID,

      EntProject.ProjectSummaryTaskUUID                                                           as ProjectSummaryTaskUUID,
      EntProject.Project                                                                          as Project,
      EntProject.ProjectDescription                                                               as ProjectName,
      cdpos.ProjectElementUUID,
      ProjectElement,
      @Semantics.text: true
      ProjectElementName,
      _ChangedBy,
      _ChangeTypeText,
      _FieldText,
      _PriorityText,
      _EntProjElem,

      // Old Value

      @ObjectModel.readOnly: true
      @EndUserText.label: 'Old Value'
      ChangeDocPreviousFieldValue                                                                 as ChangeDocumentOldFieldValue,
      
      // New Value

      @ObjectModel.readOnly: true
      @EndUserText.label: 'New Value'
      ChangeDocNewFieldValue                                                                      as ChangeDocumentNewFieldValue,

      // Changed By

      @ObjectModel.text.association: '_ChangedBy'
      cdhdr.CreatedByUser                                                                         as LastChangedByUser,

      // Separate Date

      // LastChangedDate needed for Smart Filter Bar

      cdhdr.CreationDate                                                                          as LastChangeDate,

      // Separate Time

      // LastChangeTime needed for sorting

      cdhdr.CreationTime                                                                          as LastChangeTime,

      // Date Time in One

      // Needed for Smart Table

      cast ( dats_tims_to_tstmp ( cdhdr.CreationDate,
                                  cdhdr.CreationTime,
                                  abap_system_timezone ( $session.client, 'NULL' ),
                                                         $session.client, 'NULL' ) as cdcreated ) as LastChangeDateTime,
      //Milestone indicator

      cdpos.IsProjectMilestone,

      // Needed for authorization check in DCL

      @Consumption.hidden: true
      cast( case
            when IsProjectMilestone = 'X' then EntProject.ControllingArea
            when IsProjectMilestone = '' then _EntProjElem.ControllingArea
            else EntProject.ControllingArea
            end as ps_pkokr preserving type )                                            as ControllingArea,
      cast( case
            when IsProjectMilestone = 'X' then EntProject.ProfitCenter
            when IsProjectMilestone = '' then _EntProjElem.ProfitCenter
            else EntProject.ProfitCenter
            end as prctr preserving type )                                               as ProfitCenter,
      @Consumption.hidden: true       
      cast( case
            when IsProjectMilestone = 'X' then EntProject.CompanyCode
            when IsProjectMilestone = '' then _EntProjElem.CompanyCode
            else EntProject.CompanyCode
            end as ps_vbukr preserving type )                                             as CompanyCode, 
            
      @Consumption.hidden: true         
      cast( case
            when IsProjectMilestone = 'X' then EntProject.ResponsibleCostCenter
            when IsProjectMilestone = '' then _EntProjElem.ResponsibleCostCenter
            else EntProject.ResponsibleCostCenter
            end as ps_fkstl  preserving type )                                           as ResponsibleCostCenter, 
            
      @Consumption.hidden: true         
      cast( case
            when IsProjectMilestone = 'X' then EntProject.Plant
            when IsProjectMilestone = '' then _EntProjElem.Plant
            else EntProject.Plant
            end as werks_d  preserving type )                                           as Plant, 
              
      @Consumption.hidden: true         
      cast( case
            when IsProjectMilestone = 'X' then EntProject.ProjectProfileCode
            when IsProjectMilestone = '' then _EntProjElem._Project.ProjectProfileCode
            else EntProject.ProjectProfileCode
            end as profidproj preserving type )                                           as ProjectProfileCode,      
            
            
      @Consumption.hidden: true         
      cast( case
            when IsProjectMilestone = 'X' then EntProject.EnterpriseProjectType
            when IsProjectMilestone = '' then _EntProjElem._Project.EnterpriseProjectType
            else EntProject.EnterpriseProjectType
            end as ps_prart preserving type )                                           as EnterpriseProjectType,      
            
      @Consumption.hidden: true         
      cast( case
            when IsProjectMilestone = 'X' then EntProject.FunctionalArea
            when IsProjectMilestone = '' then _EntProjElem._Project.FunctionalArea
            else EntProject.EnterpriseProjectType
            end as fkber preserving type )                                           as FunctionalArea,      
            
                                                  
      @Consumption.hidden: true
      _AuthUser,
      @Consumption.hidden: true
      _AuthSubst,
      @Consumption.hidden: true
      _AuthRole,
      @Consumption.hidden: true
      _AuthGroup
}

where
  cdhdr.ChangeDocObjectClass = '/S4PPM/PROJECT'

/*+[internal] {
"BASEINFO":
{
"FROM":
[
"I_CHANGEDOCUMENT",
"I_ENTERPRISEPROJECT",
"I_ENTERPRISEPROJECTELEMENT",
"I_ENTPROJCHGDOCTABLEFIELD",
"I_ENTPROJELEMCHGDOCITEM"
],
"ASSOCIATED":
[
"I_ENTERPRISEPROJECTELEMENT",
"I_ENTPROJCHANGEINDICATORTEXT",
"I_ENTPROJCHGDOCTABLEFIELDTEXT",
"I_PPM_AUTHZNBYSUBSTITH",
"I_PPM_AUTHZNBYUSERROLEH",
"I_PPM_AUTHZNBYUSRGRPH",
"I_PPM_AUTHZNBYUSRH",
"I_PPM_CONTACTDATA",
"I_PPM_PRIORITYTEXT"
],
"BASE":
[],
"ANNO_REF":
[],
"SCALAR_FUNCTION":
[],
"VERSION":0,
"ANNOREF_EVALUATION_ERROR":""
}
}*/