I_EntProjProjectChgDocuments
Chg Doc for General Info of Ent Proj
I_EntProjProjectChgDocuments is a Composite CDS View that provides data about "Chg Doc for General Info of Ent Proj" in SAP S/4HANA. It reads from 4 data sources (I_ChangeDocument, I_ChangeDocumentItem, I_EnterpriseProject, I_EntProjChgDocTableField) and exposes 32 fields with key fields ChangeDocObject, ChangeDocObjectClass, ChangeDocument, DatabaseTable, ChangeDocTableKey. It has 8 associations to related views.
Data Sources (4)
| Source | Alias | Join Type |
|---|---|---|
| I_ChangeDocument | cdhdr | from |
| I_ChangeDocumentItem | cdpos | inner |
| I_EnterpriseProject | EntProject | inner |
| I_EntProjChgDocTableField | fields | inner |
Associations (8)
| Cardinality | Target | Alias | Condition |
|---|---|---|---|
| [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' ) |
Annotations (13)
| Name | Value | Level | Field |
|---|---|---|---|
| EndUserText.label | Chg Doc for General Info of Ent Proj | view | |
| VDM.viewType | #COMPOSITE | view | |
| VDM.lifecycle.contract.type | #SAP_INTERNAL_API | view | |
| AbapCatalog.sqlViewName | IPROJGENINFOCD | 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 (32)
| Key | Field | Source Table | Source Field | Description |
|---|---|---|---|---|
| KEY | ChangeDocObject | I_ChangeDocument | ChangeDocObject | |
| KEY | ChangeDocObjectClass | I_ChangeDocument | ChangeDocObjectClass | |
| KEY | ChangeDocument | I_ChangeDocumentItem | ChangeDocument | |
| KEY | DatabaseTable | I_ChangeDocumentItem | DatabaseTable | |
| KEY | ChangeDocTableKey | I_ChangeDocumentItem | ChangeDocTableKey | |
| KEY | ChangeDocDatabaseTableField | I_ChangeDocumentItem | ChangeDocDatabaseTableField | |
| KEY | ChangeDocItemChangeType | I_ChangeDocumentItem | ChangeDocItemChangeType | |
| KEY | ProjectUUID | I_EnterpriseProject | ProjectUUID | |
| ProjectSummaryTaskUUID | I_EnterpriseProject | ProjectSummaryTaskUUID | ||
| Project | I_EnterpriseProject | Project | ||
| ProjectName | I_EnterpriseProject | ProjectDescription | ||
| _ChangedBy | _ChangedBy | |||
| _ChangeTypeText | _ChangeTypeText | |||
| _FieldText | _FieldText | |||
| _PriorityText | _PriorityText | |||
| ControllingArea | I_EnterpriseProject | ControllingArea | ||
| ProfitCenter | I_EnterpriseProject | ProfitCenter | ||
| CompanyCode | I_EnterpriseProject | CompanyCode | ||
| ProjectProfileCode | I_EnterpriseProject | ProjectProfileCode | ||
| ResponsibleCostCenter | I_EnterpriseProject | ResponsibleCostCenter | ||
| Plant | I_EnterpriseProject | Plant | ||
| EnterpriseProjectType | I_EnterpriseProject | EnterpriseProjectType | ||
| FunctionalArea | I_EnterpriseProject | FunctionalArea | ||
| _AuthUser | _AuthUser | |||
| _AuthSubst | _AuthSubst | |||
| _AuthRole | _AuthRole | |||
| _AuthGroup | _AuthGroup | |||
| ChangeDocumentOldFieldValue | ChangeDocPreviousFieldValue | Old Value | ||
| ChangeDocumentNewFieldValue | ChangeDocNewFieldValue | New Value | ||
| LastChangedByUser | I_ChangeDocument | CreatedByUser | ||
| LastChangeDate | I_ChangeDocument | CreationDate | ||
| LastChangeTime | I_ChangeDocument | CreationTime |
@EndUserText.label: 'Chg Doc for General Info of Ent Proj'
@VDM: {
viewType: #COMPOSITE,
lifecycle.contract.type: #SAP_INTERNAL_API
}
@AbapCatalog: {
sqlViewName: 'IPROJGENINFOCD',
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_EntProjProjectChgDocuments as select from I_ChangeDocument as cdhdr
inner join I_EnterpriseProject as EntProject
on cdhdr.ChangeDocObject = concat ('ENTPROJ', bintohex(EntProject.ProjectUUID) )
inner join I_ChangeDocumentItem as cdpos
// on cdpos.ChangeDocObject = concat ('ENTPROJ', bintohex(ProjectUUID) ) // This row leads to a redundancy, because it is concatenated already with cdhdr
on cdpos.ChangeDocObject = cdhdr.ChangeDocObject
and cdpos.ChangeDocument = cdhdr.ChangeDocument
and ( cdpos.DatabaseTable = '/S4PPM/PSTASK_CD' or cdpos.DatabaseTable ='/S4PPM/BLKFCT_CD' )
// 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
//TODO: what is this needed for?
// 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
//TODO: Cardinality 1 of Association _CHANGEDBYUSERNAME does not match to the ON-condition
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'
)
{
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,
_ChangedBy,
_ChangeTypeText,
_FieldText,
_PriorityText,
// Needed for authorization check in DCL
EntProject.ControllingArea as ControllingArea,
EntProject.ProfitCenter as ProfitCenter,
EntProject.CompanyCode as CompanyCode,
EntProject.ProjectProfileCode as ProjectProfileCode,
EntProject.ResponsibleCostCenter as ResponsibleCostCenter,
EntProject.Plant as Plant,
EntProject.EnterpriseProjectType as EnterpriseProjectType,
EntProject.FunctionalArea as FunctionalArea,
// Authorization Association, needed for DCL
@Consumption.hidden: true
_AuthUser,
@Consumption.hidden: true
_AuthSubst,
@Consumption.hidden: true
_AuthRole,
@Consumption.hidden: true
_AuthGroup,
// 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
}
where
cdhdr.ChangeDocObjectClass = '/S4PPM/PROJECT'
Learn More
- What Is a CDS View in SAP S/4HANA?
- Types of CDS Views: Basic, Composite, Consumption, and Transactional
- SAP Tables vs CDS Views — Key Differences
- Understanding Data Lineage in SAP S/4HANA
- VDM (Virtual Data Model) in SAP S/4HANA Explained
- CDS View Annotations — A Complete Guide
- CDS View Field Mapping and Associations
- Understanding the SAP S/4HANA Data Model
- CDS View Extensions and Custom Fields in SAP S/4HANA
- Released APIs and Stability Contracts in SAP S/4HANA