@EndUserText.label: 'My Projects – Active'
@VDM.viewType: #COMPOSITE
@AbapCatalog.sqlViewName: 'IPPMMYACTIVE'
@AbapCatalog.compiler.compareFilter: true
@ObjectModel.usageType.serviceQuality: #X
@ObjectModel.usageType.sizeCategory: #L
@ObjectModel.usageType.dataClass: #MIXED
@ClientHandling.algorithm: #SESSION_VARIABLE
@AccessControl.authorizationCheck: #PRIVILEGED_ONLY
@AccessControl.personalData.blocking: #NOT_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_MyActiveProjects
as select from P_PPM_ProjectList as Project
/* To distinguish CE Project Category from OP project ( CE completed is active ).
inner join I_PPM_ProjectType as ProjectType on Project.ProjectType = ProjectType.ProjectType */
// 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 )
// 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 )
// 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
left outer join I_EPPMGlobalSetting as _GlobalSetting on _GlobalSetting.EPPMUsageArea = '0007' and _GlobalSetting.EPPMGlobalSettingsCode = '0053'
{
@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,
Project.ProjectInternalID,
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,
@Semantics.businessDate.to: true
PhaseCurrentTask.LatestFinishDate as CurrentPhaseEndDate,
@Semantics.businessDate.at: true
MilestEssentTask.LatestFinishDate as LaunchDate,
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,
@Semantics.businessDate.to: true
MilestRelNextTask.LatestFinishDate as NextMilestoneDate,
projectImage.ProjectImageURL,
_GlobalSetting.EPPMSettingsDefaultValue,
Project._AuthUser,
Project._AuthSubst,
Project._AuthRole,
Project._AuthGroup
}
where
// All active Status: Partially Released, Released, Released (Processing has begun), Locked, Locked (Released First), (OP & CE)
( Project.ProjectProcessingStatus between '10' and '21'
or
// Completed (since CE2002, reinserted in CE2105)
( Project.ProjectProcessingStatus = '40' and Project.ProjectCategory >= '6' ) )
and Project.ProjectVersionNumber = '' // active projects do not have a version!
and _ProjectManager.BusinessPartnerUUID = MyBusinessPartnerUUID