I_PPM_LastUsedProject

DDL: I_PPM_LASTUSEDPROJECT SQL: IPPMLASTUSEDPRO Type: view COMPOSITE

Display Last Used Projects

I_PPM_LastUsedProject is a Composite CDS View that provides data about "Display Last Used Projects" in SAP S/4HANA. It reads from 12 data sources and exposes 23 fields with key field ProjectUUID.

Data Sources (12)

SourceAliasJoin Type
I_PPM_ItemInfo Item left_outer
P_PPM_ProjectsFromPers LastUsed inner
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

Annotations (13)

NameValueLevelField
EndUserText.label Display Last Used Projects view
VDM.viewType #COMPOSITE view
AbapCatalog.sqlViewName IPPMLASTUSEDPRO view
AbapCatalog.compiler.compareFilter true view
ObjectModel.usageType.serviceQuality #D view
ObjectModel.usageType.sizeCategory #L view
ObjectModel.usageType.dataClass #MIXED view
ClientHandling.algorithm #SESSION_VARIABLE view
AccessControl.authorizationCheck #CHECK view
AccessControl.personalData.blocking #NOT_REQUIRED view
ObjectModel.representativeKey ProjectUUID view
Metadata.allowExtensions true view
VDM.lifecycle.contract.type #SAP_INTERNAL_API view

Fields (23)

KeyFieldSource TableSource FieldDescription
KEY ProjectUUID P_PPM_ProjectList ProjectUUID
ProjectSummaryTaskUUID P_PPM_ProjectList ProjectSummaryTaskUUID
OrdinalNumber P_PPM_ProjectsFromPers OrdinalNumber
PortfolioItemUUID I_PPM_ItemInfo PortfolioItemUUID
PortfolioUUID I_PPM_ItemInfo PortfolioUUID
ProjectProcessingStatus P_PPM_ProjectList ProjectProcessingStatus
ProjectNameUserLanguage ProjectNameUserLanguage
ProjectNameMasterLanguage ProjectNameMasterLanguage
Project Project
ProjectType ProjectType
ProjectTypeName ProjectTypeName
CurrentPhaseEndDate I_PPM_Task LatestFinishDate
CurrentPhaseNameUserLanguage I_PPM_Text ObjectName
CurrentPhaseNameMasterLanguage I_PPM_Task TaskName
LaunchDate I_PPM_Task LatestFinishDate
NextMilestoneNameUserLanguage I_PPM_Text ObjectName
NextMilestoneNameMasterLang I_PPM_Task TaskName
NextMilestoneDate I_PPM_Task LatestFinishDate
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
@EndUserText.label: 'Display Last Used Projects'
@VDM.viewType: #COMPOSITE
@AbapCatalog.sqlViewName: 'IPPMLASTUSEDPRO'
@AbapCatalog.compiler.compareFilter: true
@ObjectModel.usageType.serviceQuality: #D
// size L because of underlying data to be searched

@ObjectModel.usageType.sizeCategory:  #L
@ObjectModel.usageType.dataClass:  #MIXED

@ClientHandling.algorithm: #SESSION_VARIABLE

@AccessControl.authorizationCheck: #CHECK
@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_LastUsedProject
  as select from    P_PPM_ProjectList          as Project
  // restrict to only my lst used from personalization

    inner join      P_PPM_ProjectsFromPers     as LastUsed                    on(
                         Project.ProjectSummaryTaskUUID = LastUsed.ReferencedObjectUUID
                       )

  // retrieve portfolio info

    left outer join I_PPM_ItemInfo             as Item                        on(
                             Project.ProjectUUID = Item.ProjectUUID
                           )

  // retrieve Milestone info

    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_ProjectMilestEssent  as milestEssent                on(
                     Project.ProjectUUID = milestEssent.ProjectUUID
                   )
    left outer join I_PPM_Task                 as MilestEssentTask            on(
                 MilestEssentTask.TaskUUID = milestEssent.TaskUUID
               )
    left outer join I_PPM_Text                 as milestRelNextTextUserLang   on (
         milestRelNextTextUserLang.LanguageCode                                                                                = $session.system_language
       )
                                                                              and(
                                                                                milestRelNextTextUserLang.ReferencedObjectUUID = milestRelNext.TaskUUID
                                                                              )

  // project image

    left outer join P_PPM_ProjectImage         as projectImage                on projectImage.ProjectUUID = Project.ProjectUUID

  // Retrieve 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
                                                                              )

{

      @Consumption.semanticObject: 'EnterpriseProject'
  key Project.ProjectUUID,

      Project.ProjectSummaryTaskUUID,

      // used only for sorting

      LastUsed.OrdinalNumber,

      // fields only used by navigation

      Item.PortfolioItemUUID,
      Item.PortfolioUUID,

      Project.ProjectProcessingStatus,

      ProjectNameUserLanguage,

      ProjectNameMasterLanguage,

      cast (
          case
              when ProjectNameUserLanguage > '' then
                  ProjectNameUserLanguage
              else ProjectName              
      end as /s4ppm/tv_project_name preserving type )              as ProjectName,

      Project,

      ProjectType,

      ProjectTypeName,
      
      PhaseCurrentTask.LatestFinishDate as CurrentPhaseEndDate,

      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,
     
       MilestEssentTask.LatestFinishDate   as LaunchDate,
     
      cast(
          case
              when milestRelNextTextUserLang.ObjectName > '' then
                  milestRelNextTextUserLang.ObjectName
           
                  else MilestRelNextTask.TaskName
              
       end as /s4ppm/tv_project_name preserving type )              as NextMilestoneName,

      milestRelNextTextUserLang.ObjectName   as NextMilestoneNameUserLanguage,

      MilestRelNextTask.TaskName as NextMilestoneNameMasterLang,
 
      //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.at: true
       MilestRelNextTask.LatestFinishDate as NextMilestoneDate,
      //note 2485200 end change

      projectImage.ProjectImageURL,
      
      Project._AuthUser,
      Project._AuthSubst,
      Project._AuthRole,
      Project._AuthGroup
}
where
  Project.ProjectVersionNumber = '' // active projects do not have a version! 

/*+[internal] {
"BASEINFO":
{
"FROM":
[
"I_PPM_ITEMINFO",
"I_PPM_PROJECTMILESTESSENT",
"I_PPM_PROJECTMILESTRELNEXT",
"I_PPM_PROJECTPHASECURRENT",
"I_PPM_TASK",
"I_PPM_TEXT",
"P_PPM_PROJECTIMAGE",
"P_PPM_PROJECTLIST",
"P_PPM_PROJECTSFROMPERS"
],
"ASSOCIATED":
[
"I_PPM_AUTHZNBYSUBSTITH",
"I_PPM_AUTHZNBYUSERROLEH",
"I_PPM_AUTHZNBYUSRGRPH",
"I_PPM_AUTHZNBYUSRH"
],
"BASE":
[
"P_PPM_PROJECTLIST"
],
"ANNO_REF":
[],
"SCALAR_FUNCTION":
[],
"VERSION":0,
"ANNOREF_EVALUATION_ERROR":""
}
}*/