I_PPM_ProjectCopilot

DDL: I_PPM_PROJECTCOPILOT SQL: IPPMPROJCOPI Type: view COMPOSITE

Project header info for Copilot

I_PPM_ProjectCopilot is a Composite CDS View that provides data about "Project header info for Copilot" in SAP S/4HANA. It reads from 9 data sources and exposes 40 fields with key field ProjectUUID. It has 1 association to related views.

Data Sources (9)

SourceAliasJoin Type
I_PPM_ProjectMilestEssent MilestEssent left_outer
I_PPM_Task MilestEssentTask left_outer
I_PPM_ProjectPhaseCurrent PhaseCurrent left_outer
I_PPM_Task PhaseCurrentTask left_outer
I_PPM_Text PhaseCurrentTextMasterLang left_outer
I_PPM_Text PhaseCurrentTextUserLang left_outer
I_PPM_Project Project from
I_PPM_SingleResponsibleForObj ProjectResponsible left_outer
I_PPM_ObjectSeverity Severity left_outer

Associations (1)

CardinalityTargetAliasCondition
[0..*] I_PPM_CriticalityText _CriticalityText _CriticalityText.CriticalityCode = $projection.CriticalityCode

Annotations (12)

NameValueLevelField
AbapCatalog.sqlViewName IPPMPROJCOPI view
EndUserText.label Project header info for Copilot view
VDM.viewType #COMPOSITE 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 #NOT_REQUIRED view
ObjectModel.representativeKey ProjectUUID view
VDM.lifecycle.contract.type #SAP_INTERNAL_API view

Fields (40)

KeyFieldSource TableSource FieldDescription
KEY ProjectUUID I_PPM_Project ProjectUUID
ProjectSummaryTaskUUID I_PPM_Project ProjectSummaryTaskUUID
ProjectInternalID I_PPM_Project ProjectInternalID
WBSElementInternalID I_PPM_Project WBSElementInternalID
IsProjectSteeringCommitteeMbr I_PPM_Project IsProjectSteeringCommitteeMbr
IsMyProject I_PPM_Project IsMyProject
IsMyProjectAsSubstitute I_PPM_Project IsMyProjectAsSubstitute
ProjectManagerUUID I_PPM_Project ProjectManagerUUID
ProjectNameUserLanguage
ProjectNameMasterLanguage
Project I_PPM_Project Project
ProjectType ProjectType
ProjectTypeName
ProjectStartDate ProjectStartDate
ProjectEndDate ProjectEndDate
ProjectElementDuration I_PPM_Project ProjectElementDuration
ProcessingStatus ProcessingStatus
ProcessingStatusText
CurrentPhaseNameUserLanguage I_PPM_Text ObjectName
CurrentPhaseNameMasterLanguage I_PPM_Text ObjectName
CurrentPhase I_PPM_Task ExternalId
clientNULLendasCurrentPhaseEndDate
clientNULL1FAILendasLaunchDate
NextEssentialMlstnName NextEssentialMlstnName
NextRelevantMlstnDate NextRelevantMlstnDate
NextRelevantMlstnName NextRelevantMlstnName
CriticalityCode
Severity I_PPM_ObjectSeverity Severity
SeverityText I_PPM_ObjectSeverity SeverityText
ProjectManager I_PPM_SingleResponsibleForObj BusinessPartnerName
_ProjectManager _ProjectManager
_Substitute _Substitute
_ProTypeName _ProTypeName
_AuthUser I_PPM_Project _AuthUser
_AuthSubst I_PPM_Project _AuthSubst
_AuthRole I_PPM_Project _AuthRole
_AuthGroup I_PPM_Project _AuthGroup
_ProcessingStatusText _ProcessingStatusText
_ProjObjRoot _ProjObjRoot
_CriticalityText _CriticalityText
@AbapCatalog.sqlViewName: 'IPPMPROJCOPI'
@EndUserText.label: 'Project header info for Copilot'
@VDM.viewType: #COMPOSITE
@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: #NOT_REQUIRED
@ObjectModel.semanticKey:  [ 'Project' ]
@ObjectModel.representativeKey: 'ProjectUUID'
@ObjectModel.alternativeKey: [{
    id: 'ProjectSummaryTaskUUID',
    element: ['ProjectSummaryTaskUUID'],
    uniqueness: #UNIQUE
}]
@VDM.lifecycle.contract.type:  #SAP_INTERNAL_API
define view I_PPM_ProjectCopilot
  as select from    I_PPM_Project                 as Project
  // next relevant milestones

     
  // 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
               )
  //  left outer join I_PPM_TaskText                as NextEssentialMlstnName      on NextEssentialMlstnName.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
                                                                                 )
  // Severity

    left outer join I_PPM_ObjectSeverity          as Severity                    on(
                         Project.ProjectSummaryTaskUUID = Severity.ReferencedObjectUUID
                       )
  // Responsible                       

    left outer join I_PPM_SingleResponsibleForObj as ProjectResponsible          on ProjectResponsible.ReferencedObjectUUID = Project.ProjectSummaryTaskUUID
    association [0..*] to I_PPM_CriticalityText     as _CriticalityText          on _CriticalityText.CriticalityCode = $projection.CriticalityCode  
   
{
//    @Consumption.semanticObject: 'EnterpriseProject'

  key Project.ProjectUUID,

      Project.ProjectSummaryTaskUUID, 

      Project.ProjectInternalID,
      Project.WBSElementInternalID,

      Project.IsProjectSteeringCommitteeMbr,
      Project.IsMyProject,
      Project.IsMyProjectAsSubstitute,

      Project.ProjectManagerUUID,
      cast(
      case
      when Project._ProjectName.ObjectNameUserLanguage > '' then
        Project._ProjectName.ObjectNameUserLanguage
      else (
      case
        when Project._ProjectName.ObjectNameMasterLanguage > '' then
        Project._ProjectName.ObjectNameMasterLanguage
        else Project.Project
      end
      )
      end as dpr_project_name )              as ProjectName,


      Project._ProjectName.ObjectNameUserLanguage             as ProjectNameUserLanguage,
      Project._ProjectName.ObjectNameMasterLanguage           as ProjectNameMasterLanguage,

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

      ProjectType as ProjectType,
      
      Project._ProTypeName[1: LanguageCode = $session.system_language].ProjectTypeName,

      ProjectStartDate,

      ProjectEndDate,

      Project.ProjectElementDuration         as ProjectElementDuration,

      ProcessingStatus,
      _ProcessingStatusText[1: Language = $session.system_language].ProcessingStatusText, 
      cast(
          case
          when PhaseCurrentTextUserLang.ObjectName > '' then
                  PhaseCurrentTextUserLang.ObjectName
              else (
              case
                  when PhaseCurrentTextMasterLang.ObjectName > '' then
                  PhaseCurrentTextMasterLang.ObjectName
                  else PhaseCurrentTask.ExternalId
              end
             )
      end as cgpl_text1 )                    as CurrentPhaseName,
      PhaseCurrentTextUserLang.ObjectName    as CurrentPhaseNameUserLanguage,
      PhaseCurrentTextMasterLang.ObjectName  as CurrentPhaseNameMasterLanguage,
      PhaseCurrentTask.ExternalId            as CurrentPhase,

      @Semantics.businessDate.to: true
      case when PhaseCurrentTask.ProjectElementDuration > 0 then
          dats_add_days( tstmp_to_dats( PhaseCurrentTask.LatestFinishDateTime, abap_system_timezone( $session.client,'NULL' ), $session.client, 'NULL' ), -1, 'NULL')
      else
          tstmp_to_dats( PhaseCurrentTask.LatestFinishDateTime, abap_system_timezone( $session.client,'NULL' ), $session.client, 'NULL' )
      end                                    as CurrentPhaseEndDate,
 
      @Semantics.businessDate.at: true
      case
      //if the duration is initial, don't substract one day.

      //Case 1: int-constraint_time = int-latest_start

        when MilestEssentTask.ProjectElementDuration = 0  and MilestEssentTask.StartConstraintDateTime = MilestEssentTask.LatestStartDateTime then
            tstmp_to_dats(MilestEssentTask.LatestStartDateTime, abap_system_timezone( $session.client,'NULL' ), $session.client, 'NULL' ) //WebDynpro takes latest start

      //Case 2: int-constraint_time_fin = int-lates_start

        when MilestEssentTask.ProjectElementDuration = 0  and MilestEssentTask.FinishConstraintDateTime = MilestEssentTask.LatestStartDateTime then
            dats_add_days(
              tstmp_to_dats( MilestEssentTask.LatestFinishDateTime, abap_system_timezone( $session.client,'NULL' ), $session.client, 'NULL' ),
            -1, 'FAIL')
      //TODO: Case 3: not sure if this will work in CDS: number of successor MilestEssentTasks is > 0

      //Case 4: this is the "else" for the duration = 0 logic

        when MilestEssentTask.ProjectElementDuration = 0 then
      dats_add_days(
              tstmp_to_dats( MilestEssentTask.LatestFinishDateTime, abap_system_timezone( $session.client,'NULL' ), $session.client, 'NULL' ),
            -1, 'FAIL')
        else //this should only happen if the duration is > 0

          dats_add_days(
              tstmp_to_dats( MilestEssentTask.LatestFinishDateTime, abap_system_timezone( $session.client,'NULL' ), $session.client, 'NULL' ),
            -1, 'FAIL')
      end                                    as LaunchDate,

      NextEssentialMlstnName,
      NextRelevantMlstnDate,
      NextRelevantMlstnName,
   
      // criticality

      cast (Severity.CriticalityCode as abap.char(10) )             as CriticalityCode,
      Severity.Severity                      as Severity,
      Severity.SeverityText                  as SeverityText,
      // Severity._SeverityText.SeverityText    as SeverityText,

      // Responsible

      ProjectResponsible.BusinessPartnerName as ProjectManager,

      _ProjectManager,
      _Substitute,
      _ProTypeName,

      Project._AuthUser,
      Project._AuthSubst,
      Project._AuthRole,
      Project._AuthGroup,

      _ProcessingStatusText,
      
      _ProjObjRoot,
      _CriticalityText

}
/*+[internal] {
"BASEINFO":
{
"FROM":
[
"I_PPM_OBJECTSEVERITY",
"I_PPM_PROCESSINGSTATUSTEXT",
"I_PPM_PROJECT",
"I_PPM_PROJECTMILESTESSENT",
"I_PPM_PROJECTPHASECURRENT",
"I_PPM_PROTYPETEXT",
"I_PPM_SINGLERESPONSIBLEFOROBJ",
"I_PPM_TASK",
"I_PPM_TASKTEXT",
"I_PPM_TEXT"
],
"ASSOCIATED":
[
"I_BUSINESSUSER",
"I_PPM_AUTHZNBYSUBSTITH",
"I_PPM_AUTHZNBYUSERROLEH",
"I_PPM_AUTHZNBYUSRGRPH",
"I_PPM_AUTHZNBYUSRH",
"I_PPM_CRITICALITYTEXT",
"I_PPM_PROCESSINGSTATUSTEXT",
"I_PPM_PROTYPETEXT",
"I_PPM_SUBSTITUTE",
"I_WBSELEMENTBASICDATA"
],
"BASE":
[
"I_PPM_PROJECT"
],
"ANNO_REF":
[],
"SCALAR_FUNCTION":
[],
"VERSION":0,
"ANNOREF_EVALUATION_ERROR":""
}
}*/