I_PPM_ProjectRoot
Root object for project like data
I_PPM_ProjectRoot is a Basic CDS View that provides data about "Root object for project like data" in SAP S/4HANA. It reads from 1 data source (/s4ppm/project) and exposes 21 fields with key field ProjectUUID. It has 5 associations to related views.
Data Sources (1)
| Source | Alias | Join Type |
|---|---|---|
| /s4ppm/project | Root | from |
Associations (5)
| Cardinality | Target | Alias | Condition |
|---|---|---|---|
| [0..1] | I_PPM_Task | _SummaryTask | ( _SummaryTask.ProjectUUID = $projection.ProjectUUID ) and ( _SummaryTask.ObjectType = 'DPO' ) |
| [0..*] | I_PPM_Task | _Task | ( _Task.ProjectUUID = $projection.ProjectUUID ) and ( _Task.ObjectType = 'TPO' ) and ( _Task.ObjectType = 'TTO' ) |
| [0..*] | I_PPM_Task | _Phase | ( _Phase.ProjectUUID = $projection.ProjectUUID ) and ( _Phase.ObjectType = 'PPO' ) |
| [0..1] | I_User | _ProjectLastChangedByUser | ( $projection.ProjectLastChangedByUser = _ProjectLastChangedByUser.UserID ) |
| [0..1] | I_ProjectBasicData | _I_Project | ( _I_Project.ProjectInternalID = $projection.ProjectInternalID ) |
Annotations (13)
| Name | Value | Level | Field |
|---|---|---|---|
| EndUserText.label | Root object for project like data | view | |
| VDM.viewType | #BASIC | view | |
| ClientHandling.algorithm | #SESSION_VARIABLE | view | |
| AccessControl.authorizationCheck | #PRIVILEGED_ONLY | view | |
| AccessControl.personalData.blocking | #NOT_REQUIRED | view | |
| AbapCatalog.sqlViewName | IPPMPROJECTROOT | view | |
| AbapCatalog.compiler.compareFilter | true | view | |
| AbapCatalog.preserveKey | true | view | |
| ObjectModel.representativeKey | ProjectUUID | view | |
| ObjectModel.usageType.serviceQuality | #A | view | |
| ObjectModel.usageType.dataClass | #MIXED | view | |
| ObjectModel.usageType.sizeCategory | #L | view | |
| VDM.lifecycle.contract.type | #SAP_INTERNAL_API | view |
Fields (21)
| Key | Field | Source Table | Source Field | Description |
|---|---|---|---|---|
| KEY | ProjectUUID | /s4ppm/project | guid | |
| ProjectCategory | /s4ppm/project | pro_category | ||
| ProjectLastChangedByUser | /s4ppm/project | last_changed_by | ||
| ProjectLastChangedDateTime | /s4ppm/project | last_changed_on | ||
| ProjectReasonCode | /s4ppm/project | cause | ||
| MasterLanguage | /s4ppm/project | master_language | ||
| ProjectTemplateUUID | ||||
| IsSummaryTaskEnabled | /s4ppm/project | summary_tasks | ||
| ProjectLocation | /s4ppm/project | location | ||
| PlanVersion | /s4ppm/project | plvar | ||
| OrganizationalUnitObjectType | /s4ppm/project | otype | ||
| OrganizationalUnit | /s4ppm/project | resp_org_unit | ||
| ProjectInternalID | ||||
| ProjectEarliestOrLatest | /s4ppm/project | earliest_latest_dates | ||
| EnterpriseProjectServiceOrg | /s4ppm/project | org_id | ||
| EntProjectIsConfidential | /s4ppm/project | confidential | ||
| _I_Project | _I_Project | |||
| _SummaryTask | _SummaryTask | |||
| _Task | _Task | |||
| _Phase | _Phase | |||
| _ProjectLastChangedByUser | _ProjectLastChangedByUser |
@EndUserText.label: 'Root object for project like data'
@VDM.viewType: #BASIC
@ClientHandling.algorithm: #SESSION_VARIABLE
@AccessControl.authorizationCheck: #PRIVILEGED_ONLY
@AccessControl.personalData.blocking: #NOT_REQUIRED
@AbapCatalog: {
sqlViewName: 'IPPMPROJECTROOT',
compiler.compareFilter: true,
preserveKey:true
}
@ObjectModel: {
// semanticKey: [ 'Project' ], // no semantic key here, as this is part of the PST only
representativeKey: 'ProjectUUID',
alternativeKey: [ { id : 'ProjectInternalID', uniqueness: #UNIQUE, element: 'ProjectInternalID' } ],
usageType: {
serviceQuality: #A,
dataClass: #MIXED,
sizeCategory: #L
}
}
@VDM.lifecycle.contract.type: #SAP_INTERNAL_API
define view I_PPM_ProjectRoot as select from /s4ppm/project as Root
association [0..1] to I_PPM_Task as _SummaryTask
on ( _SummaryTask.ProjectUUID = $projection.ProjectUUID )
and ( _SummaryTask.ObjectType = 'DPO' )
association [0..*] to I_PPM_Task as _Task
on ( _Task.ProjectUUID = $projection.ProjectUUID )
and ( _Task.ObjectType = 'TPO' )
and ( _Task.ObjectType = 'TTO' )
association [0..*] to I_PPM_Task as _Phase
on ( _Phase.ProjectUUID = $projection.ProjectUUID )
and ( _Phase.ObjectType = 'PPO' )
// association [0..*] to I_PPM_TASK as _Milestone on ???? all milestones of a project
association [0..1] to I_User as _ProjectLastChangedByUser
on ( $projection.ProjectLastChangedByUser = _ProjectLastChangedByUser.UserID )
// PS Project
association [0..1] to I_ProjectBasicData as _I_Project
on ( _I_Project.ProjectInternalID = $projection.ProjectInternalID )
// Association to source project
// association [0..1] to I_PPM_ProjectRoot as _TemplateProject
// on ( _TemplateProject.ProjectUUID = $projection.ProjectTemplateUUID )
{
key Root.guid as ProjectUUID,
Root.pro_category as ProjectCategory,
@Semantics.user.lastChangedBy: true
@ObjectModel.foreignKey.association: '_ProjectLastChangedByUser'
Root.last_changed_by as ProjectLastChangedByUser,
//@Semantics.systemDateTime.lastChangedAt: true
Root.last_changed_on as ProjectLastChangedDateTime,
Root.cause as ProjectReasonCode,
Root.master_language as MasterLanguage,
// how about BuPa association?
// Root.template_admin as ProjectTemplateAdminBuPaUUID,
// @ObjectModel.foreignKey.association: '_TemplateProject'
cast(Root.template_guid as /s4ppm/tv_entity_guid preserving type ) as ProjectTemplateUUID,
// Root.schedule_type as ProjectScheduleingType,
Root.summary_tasks as IsSummaryTaskEnabled,
// Root.summary_tasks as IsSummaryTasksEnabled,
// Root.periodtype as PeriodType,
// Root.allocation_unit as ResourceAllocationUnit,
Root.location as ProjectLocation,
// Root.customer as ProjectRcvCustomerUUID,
// Root.sold_to_party as ProjectSoldToPartyUUID,
// Root.sort_overall as ProjectSortMode,
Root.plvar as PlanVersion,
Root.otype as OrganizationalUnitObjectType,
Root.resp_org_unit as OrganizationalUnit,
@ObjectModel.foreignKey.association: '_I_Project'
cast ( Root.pspnr as ps_s4_proj_pspnr preserving type ) as ProjectInternalID,
// Root.actual2plan as ProjectActualToPlan,
// Root.rstr_vis as HasRestrictedVisibility,
// Root.nonseq_phases as HasNonSequentialPhases,
Root.earliest_latest_dates as ProjectEarliestOrLatest,
Root.org_id as EnterpriseProjectServiceOrg,
Root.confidential as EntProjectIsConfidential,
// Make associations public
_I_Project,
_SummaryTask,
_Task,
_Phase,
// _TemplateProject,
_ProjectLastChangedByUser
}
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