I_PPM_MeAsSubstituteProjects
My Projects - As a Substitute
I_PPM_MeAsSubstituteProjects is a Composite CDS View that provides data about "My Projects - As a Substitute" in SAP S/4HANA. It reads from 12 data sources and exposes 26 fields with key field ProjectUUID. Part of development package PPM_OBJECTS_DEPRECATED.
Data Sources (12)
| Source | Alias | Join Type |
|---|---|---|
| I_PPM_ItemInfo | Item | left_outer |
| I_PPM_ProjectMilestEssent | MilestEssent | left_outer |
| I_PPM_Task | MilestEssentTask | left_outer |
| I_PPM_ProjectMilestRelNext | MilestRelNext | left_outer |
| I_PPM_Task | MilestRelNextTask | left_outer |
| I_PPM_Text | MilestRelNextTextUserLang | left_outer |
| I_PPM_ProjectPhaseCurrent | PhaseCurrent | left_outer |
| I_PPM_Task | PhaseCurrentTask | left_outer |
| I_PPM_Text | PhaseCurrentTextUserLang | left_outer |
| P_PPM_ProjectList | Project | from |
| P_PPM_ProjectImage | projectImage | left_outer |
| I_PPM_SingleResponsibleForObj | ProjectResponsible | left_outer |
Annotations (13)
| Name | Value | Level | Field |
|---|---|---|---|
| EndUserText.label | My Projects - As a Substitute | view | |
| VDM.viewType | #COMPOSITE | view | |
| AbapCatalog.sqlViewName | IPPMMEASSUBST | view | |
| AbapCatalog.compiler.compareFilter | true | view | |
| ObjectModel.usageType.serviceQuality | #X | view | |
| ObjectModel.usageType.sizeCategory | #L | view | |
| ObjectModel.usageType.dataClass | #MIXED | view | |
| ClientHandling.algorithm | #SESSION_VARIABLE | view | |
| AccessControl.authorizationCheck | #CHECK | view | |
| AccessControl.personalData.blocking | #REQUIRED | view | |
| ObjectModel.representativeKey | ProjectUUID | view | |
| Metadata.allowExtensions | true | view | |
| VDM.lifecycle.contract.type | #SAP_INTERNAL_API | view |
Fields (26)
| Key | Field | Source Table | Source Field | Description |
|---|---|---|---|---|
| KEY | ProjectUUID | P_PPM_ProjectList | ProjectUUID | |
| ProjectSummaryTaskUUID | P_PPM_ProjectList | ProjectSummaryTaskUUID | ||
| PortfolioItemUUID | I_PPM_ItemInfo | PortfolioItemUUID | ||
| PortfolioUUID | I_PPM_ItemInfo | PortfolioUUID | ||
| ProjectNameUserLanguage | ProjectNameUserLanguage | |||
| ProjectNameMasterLanguage | ProjectNameMasterLanguage | |||
| Project | P_PPM_ProjectList | Project | ||
| ProjectType | P_PPM_ProjectList | ProjectType | ||
| ProjectTypeName | P_PPM_ProjectList | ProjectTypeName | ||
| BusinessPartnerUUID | I_PPM_SingleResponsibleForObj | BusinessPartnerUUID | ||
| ProjectManager | I_PPM_SingleResponsibleForObj | BusinessPartnerName | ||
| CurrentPhaseNameUserLanguage | I_PPM_Text | ObjectName | ||
| CurrentPhaseNameMasterLanguage | I_PPM_Task | TaskName | ||
| CurrentPhase | I_PPM_Task | ExternalId | ||
| LatestFinishDateendasCurrentPhaseEndDate | ||||
| LatestFinishDateendasLaunchDate | ||||
| NextMilestoneNameUserLanguage | I_PPM_Text | ObjectName | ||
| NextMilestoneNameMasterLang | I_PPM_Task | TaskName | ||
| NextMilestone | I_PPM_Task | ExternalId | ||
| TaskNameendasNextMilestoneDate | ||||
| ProjectImageURL | P_PPM_ProjectImage | ProjectImageURL | ||
| _AuthUser | P_PPM_ProjectList | _AuthUser | ||
| _AuthSubst | P_PPM_ProjectList | _AuthSubst | ||
| _AuthRole | P_PPM_ProjectList | _AuthRole | ||
| _AuthGroup | P_PPM_ProjectList | _AuthGroup | ||
| _BusinessUser | I_PPM_SingleResponsibleForObj | _BusinessUser |
@EndUserText.label: 'My Projects - As a Substitute'
@VDM.viewType: #COMPOSITE
@AbapCatalog.sqlViewName: 'IPPMMEASSUBST'
@AbapCatalog.compiler.compareFilter: true
@ObjectModel.usageType.serviceQuality: #X
@ObjectModel.usageType.sizeCategory: #L
@ObjectModel.usageType.dataClass: #MIXED
@ClientHandling.algorithm: #SESSION_VARIABLE
@AccessControl.authorizationCheck: #CHECK
@AccessControl.personalData.blocking: #REQUIRED
@ObjectModel.semanticKey: [ 'Project' ]
@ObjectModel.representativeKey: 'ProjectUUID'
@ObjectModel.alternativeKey: [{
id: 'ProjectSummaryTaskUUID',
element: ['ProjectSummaryTaskUUID'],
uniqueness: #UNIQUE
}]
@Metadata.allowExtensions: true
@VDM.lifecycle.contract.type: #SAP_INTERNAL_API
define view I_PPM_MeAsSubstituteProjects
as select from P_PPM_ProjectList as Project
// next relevant milestone
left outer join I_PPM_ProjectMilestRelNext as MilestRelNext on(
Project.ProjectUUID = MilestRelNext.ProjectUUID
)
left outer join I_PPM_Task as MilestRelNextTask on(
MilestRelNextTask.TaskUUID = MilestRelNext.TaskUUID
)
left outer join I_PPM_Text as MilestRelNextTextUserLang on (
MilestRelNextTextUserLang.LanguageCode = $session.system_language
)
and(
MilestRelNextTextUserLang.ReferencedObjectUUID = MilestRelNext.TaskUUID
)
// left outer join I_PPM_Text as MilestRelNextTextMasterLang on (
// MilestRelNextTextMasterLang.LanguageCode = Project.MasterLanguage
// )
// and(
// MilestRelNextTextMasterLang.ReferencedObjectUUID = MilestRelNext.TaskUUID
// )
// essential milestone
left outer join I_PPM_ProjectMilestEssent as MilestEssent on(
Project.ProjectUUID = MilestEssent.ProjectUUID
)
left outer join I_PPM_Task as MilestEssentTask on(
MilestEssentTask.TaskUUID = MilestEssent.TaskUUID
)
// current phase
left outer join I_PPM_ProjectPhaseCurrent as PhaseCurrent on(
Project.ProjectUUID = PhaseCurrent.ProjectUUID
)
left outer join I_PPM_Task as PhaseCurrentTask on(
PhaseCurrentTask.TaskUUID = PhaseCurrent.TaskUUID
)
left outer join I_PPM_Text as PhaseCurrentTextUserLang on (
PhaseCurrentTextUserLang.LanguageCode = $session.system_language
)
and(
PhaseCurrentTextUserLang.ReferencedObjectUUID = PhaseCurrent.TaskUUID
)
// left outer join I_PPM_Text as PhaseCurrentTextMasterLang on (
// PhaseCurrentTextMasterLang.LanguageCode = Project.MasterLanguage
// )
// and(
// PhaseCurrentTextMasterLang.ReferencedObjectUUID = PhaseCurrent.TaskUUID
// )
left outer join I_PPM_SingleResponsibleForObj as ProjectResponsible on ProjectResponsible.ReferencedObjectUUID = Project.ProjectSummaryTaskUUID
// retrieve portfolio info
left outer join I_PPM_ItemInfo as Item on(
Project.ProjectUUID = Item.ProjectUUID
)
// project image
left outer join P_PPM_ProjectImage as projectImage on projectImage.ProjectUUID = Project.ProjectUUID
{
@Consumption.semanticObject: 'EnterpriseProject'
key Project.ProjectUUID,
Project.ProjectSummaryTaskUUID,
// fields only used by navigation
Item.PortfolioItemUUID,
Item.PortfolioUUID,
cast (
case
when ProjectNameUserLanguage > '' then
ProjectNameUserLanguage
else Project.ProjectName
end as /s4ppm/tv_project_name preserving type ) as ProjectName,
ProjectNameUserLanguage,
ProjectNameMasterLanguage,
Project.Project,
Project.ProjectType,
Project.ProjectTypeName,
ProjectResponsible.BusinessPartnerUUID,
ProjectResponsible.BusinessPartnerName as ProjectManager,
cast (
case
when PhaseCurrentTextUserLang.ObjectName > '' then
PhaseCurrentTextUserLang.ObjectName
else PhaseCurrentTask.TaskName
end as /s4ppm/tv_description preserving type ) as CurrentPhaseName,
PhaseCurrentTextUserLang.ObjectName as CurrentPhaseNameUserLanguage,
PhaseCurrentTask.TaskName as CurrentPhaseNameMasterLanguage,
PhaseCurrentTask.ExternalId as CurrentPhase,
case
when PhaseCurrentTask.ProjectElementDuration > 0 then
PhaseCurrentTask.LatestFinishDate
else
PhaseCurrentTask.LatestFinishDate
end as CurrentPhaseEndDate,
//note 2485200 start change
// case when MilestEssentTask.ProjectElementDuration > 0 then
// dats_add_days( tstmp_to_dats( MilestEssentTask.LatestFinishDateTime, abap_system_timezone( $session.client,'NULL' ), $session.client, 'NULL' ), -1, 'NULL')
// else
// tstmp_to_dats( MilestEssentTask.LatestFinishDateTime, abap_system_timezone( $session.client,'NULL' ), $session.client, 'NULL' )
// end as LaunchDate,
@Semantics.businessDate.at: true
case
when MilestEssentTask.ProjectElementDuration = 0 then
MilestEssentTask.LatestFinishDate
else //this should only happen if the duration is > 0
MilestEssentTask.LatestFinishDate
end as LaunchDate,
//note 2485200 end change
cast (
case
when MilestRelNextTextUserLang.ObjectName > '' then
MilestRelNextTextUserLang.ObjectName
else (
MilestRelNextTask.TaskName
)
end as /s4ppm/tv_description preserving type) as NextMilestoneName,
MilestRelNextTextUserLang.ObjectName as NextMilestoneNameUserLanguage,
MilestRelNextTask.TaskName as NextMilestoneNameMasterLang,
MilestRelNextTask.ExternalId as NextMilestone,
//note 2485200 start change
// case when MilestRelNextTask.ProjectElementDuration > 0 then
// dats_add_days( tstmp_to_dats( MilestRelNextTask.LatestFinishDateTime, abap_system_timezone( $session.client,'NULL' ), $session.client, 'NULL' ), -1, 'NULL')
// else
// tstmp_to_dats( MilestRelNextTask.LatestFinishDateTime, abap_system_timezone( $session.client,'NULL' ), $session.client, 'NULL' )
// end as NextMilestoneDate,
@Semantics.businessDate.to: true
case
when MilestRelNextTask.ProjectElementDuration > 0 then
MilestRelNextTask.LatestFinishDate
else
MilestRelNextTask.TaskName
end as NextMilestoneDate,
//note 2485200 end change
projectImage.ProjectImageURL,
Project._AuthUser,
Project._AuthSubst,
Project._AuthRole,
Project._AuthGroup,
ProjectResponsible._BusinessUser
}
where
(
// All active Status: Partially Released, Released, Released (Processing has begun), Locked, Locked (Released First)
Project.ProjectProcessingStatus between '10' and '21'
)
and Project.ProjectVersionNumber = '' // active projects do not have a version!
and _Substitute.SubstituteUser = $session.user
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