I_PPM_ProjectElementProgress

DDL: I_PPM_PROJECTELEMENTPROGRESS SQL: IPPMPROJELEMPROG Type: view COMPOSITE Package: VDM_PPM_OBJECTS_TASK

Project Elements Progress

I_PPM_ProjectElementProgress is a Composite CDS View that provides data about "Project Elements Progress" in SAP S/4HANA. It reads from 6 data sources and exposes 45 fields with key field TaskUUID. It has 4 associations to related views. Part of development package VDM_PPM_OBJECTS_TASK.

Data Sources (6)

SourceAliasJoin Type
I_EnterpriseProjElmntHier Hierarchy left_outer
I_EntProjectResponsiblePerson ResponsibleBP left_outer
I_EnterpriseProjectRole ResponsibleRole left_outer
I_PPM_Task Task from
I_PPM_TaskText TaskText left_outer
I_PPM_Tasktype Tasktype left_outer

Associations (4)

CardinalityTargetAliasCondition
[0..1] I_BusinessUserBasic _BusinessUser _BusinessUser.BusinessPartnerUUID = ResponsibleBP.BusinessPartnerUUID
[0..1] I_PPM_ProjectRoleText _RoleText _RoleText.ProjectRoleUUID = ResponsibleRole.ProjectRoleUUID
[0..1] I_WBSElementBasicData _ProjObjRoot ( _ProjObjRoot.WBSElementInternalID = $projection.WBSElementInternalID )
[0..1] I_PPM_Project _Project _Project.ProjectUUID = Task.ProjectUUID

Annotations (12)

NameValueLevelField
EndUserText.label Project Elements Progress view
AbapCatalog.sqlViewName IPPMPROJELEMPROG view
VDM.viewType #COMPOSITE view
AbapCatalog.compiler.compareFilter true view
ClientHandling.algorithm #SESSION_VARIABLE view
AccessControl.authorizationCheck #CHECK view
AccessControl.personalData.blocking #REQUIRED view
ObjectModel.usageType.serviceQuality #D view
ObjectModel.usageType.sizeCategory #XL view
ObjectModel.usageType.dataClass #MIXED view
ObjectModel.representativeKey TaskUUID view
VDM.lifecycle.contract.type #SAP_INTERNAL_API view

Fields (45)

KeyFieldSource TableSource FieldDescription
KEY TaskUUID I_PPM_Task TaskUUID
ProjectUUID I_PPM_Task ProjectUUID
ObjectType I_PPM_Task ObjectType
TaskType I_PPM_Task TaskType
ParentObjectUUID I_EnterpriseProjElmntHier ParentObjectUUID
OrdinalNumber I_EnterpriseProjElmntHier OrdinalNumber
HierarchyNodeLevel I_EnterpriseProjElmntHier HierarchyNodeLevel
ObjectName I_PPM_TaskText ObjectName
IsProjectMilestone
IsSummaryTask
FactoryCalendar I_PPM_Task FactoryCalendar
ProcessingStatus I_PPM_Task TaskProcessingStatus
ProcessingStatusText
StartConstraintType I_PPM_Task StartConstraintType
FinishConstraintType I_PPM_Task FinishConstraintType
LatestStartDateTime I_PPM_Task LatestStartDate
LatestFinishDateTime I_PPM_Task LatestFinishDate
ActualFinishDateTime I_PPM_Task ActualFinishDate
IsMainMilestone I_PPM_Tasktype IsEssentialMilestone
ProjectElementDuration I_PPM_Task ProjectElementDuration
DurationUnit I_PPM_Task DurationUnit
PercentageOfCompletion I_PPM_Task PercentageOfCompletion
RemainingWorkQuantityInSeconds I_PPM_Task RemainingWorkQuantityInSeconds
dec152endasRemainingWorkQuantity
RemainingWorkExtQuantityUnit I_PPM_Task RemainingWorkExtQuantityUnit
RemainingWorkQuantityUnitName
CreatedByUser I_PPM_Task CreatedByUser
CreationDateTime I_PPM_Task CreationDateTime
LastChangedByUser I_PPM_Task LastChangedByUser
LastChangeDateTime I_PPM_Task LastChangeDateTime
WBSElementInternalID I_PPM_Task WBSElementInternalID
BusinessPartnerUUID I_EntProjectResponsiblePerson BusinessPartnerUUID
BusinessPartnerName _BusinessUser PersonFullName
ProjectRoleUUID I_EnterpriseProjectRole ProjectRoleUUID
EmailAddress
MobilePhoneNumber
AddressPhoneNumber
ProjectRoleName _RoleText ProjectRoleName
_BusinessUser _BusinessUser
_AuthUser _AuthUser
_AuthSubst _AuthSubst
_AuthRole _AuthRole
_AuthGroup _AuthGroup
_ProjObjRoot _ProjObjRoot
_Project _Project
@EndUserText.label: 'Project Elements Progress'
@AbapCatalog.sqlViewName: 'IPPMPROJELEMPROG'
@VDM.viewType: #COMPOSITE
@AbapCatalog.compiler.compareFilter: true
@ClientHandling.algorithm: #SESSION_VARIABLE
@AccessControl.authorizationCheck: #CHECK
@AccessControl.personalData.blocking: #REQUIRED

@ObjectModel.usageType.serviceQuality: #D
@ObjectModel.usageType.sizeCategory: #XL
@ObjectModel.usageType.dataClass: #MIXED

@ObjectModel.representativeKey: 'TaskUUID'
@VDM.lifecycle.contract.type:  #SAP_INTERNAL_API
@Consumption.dbHints:[ 'USE_HEX_PLAN' ]

define view I_PPM_ProjectElementProgress  
  as select from    I_PPM_Task                  as Task
    left outer join I_PPM_Tasktype              as Tasktype  on Task.TaskType = Tasktype.TaskType
    left outer join I_EnterpriseProjElmntHier   as Hierarchy on Task.TaskUUID = Hierarchy.TaskUUID
    left outer join I_PPM_TaskText              as TaskText  on Task.TaskUUID = TaskText.TaskUUID
    left outer join I_EntProjectResponsiblePerson  as ResponsibleBP   on Task.ProjectUUID = ResponsibleBP.ProjectUUID   and Task.TaskUUID = ResponsibleBP.ReferencedObjectUUID
    left outer join I_EnterpriseProjectRole        as ResponsibleRole on Task.ProjectUUID = ResponsibleRole.ProjectUUID and ResponsibleRole.ProjectRoleType = 'YP_RL_0001'
                                                                
  association [0..1] to I_BusinessUserBasic        as _BusinessUser  on _BusinessUser.BusinessPartnerUUID = ResponsibleBP.BusinessPartnerUUID 
  association [0..1] to I_PPM_ProjectRoleText      as _RoleText      on _RoleText.ProjectRoleUUID         = ResponsibleRole.ProjectRoleUUID
  // PS Root WBS Element

  association [0..1] to I_WBSElementBasicData      as _ProjObjRoot   on (
       _ProjObjRoot.WBSElementInternalID = $projection.WBSElementInternalID
     )
  association [0..1] to I_PPM_Project as _Project on _Project.ProjectUUID = Task.ProjectUUID

{
  key Task.TaskUUID                                                                                   as TaskUUID,
      Task.ProjectUUID                                                                                as ProjectUUID,
      Task.ObjectType                                                                                 as ObjectType,
      Task.TaskType                                                                                   as TaskType,
      Hierarchy.ParentObjectUUID                                                                      as ParentObjectUUID,
      Hierarchy.OrdinalNumber                                                                         as OrdinalNumber,
      Hierarchy.HierarchyNodeLevel                                                                    as HierarchyNodeLevel,
      TaskText.ObjectName                                                                             as ObjectName,
      case
          when Task.ObjectType <> 'DPO' and Task.ObjectType <> 'PPO' and Task.TotalFloat <= 0 and Task.TaskProcessingStatus <> '40' and Task.TaskProcessingStatus <> '41'
                                        and Task.TaskProcessingStatus <> '42'
            then cast('X' as boolean)
          else cast('' as boolean)
        end                                                                                           as IsCriticalPath,
      cast(Task.IsProjectMilestone as boolean)                                                        as IsProjectMilestone,
      cast(Task.IsSummaryTask as boolean)                                                             as IsSummaryTask,
      Task.FactoryCalendar                                                                            as FactoryCalendar,
      Task.TaskProcessingStatus                                                                       as ProcessingStatus,
      Task._ProcessingStatus._Text[1:Language=$session.system_language].ProcessingStatusText          as ProcessingStatusText,
      Task.StartConstraintType                                                                        as StartConstraintType,
      Task.FinishConstraintType                                                                       as FinishConstraintType,
      
      
      // for some reasons someone did not understand the difference between date and date/time, therefor wrong naming in result field!

      Task.LatestStartDate      as LatestStartDateTime,

      // for some reasons someone did not understand the difference between date and date/time, therefor wrong naming in result field!

      Task.LatestFinishDate     as LatestFinishDateTime,

      // for some reasons someone did not understand the difference between date and date/time, therefor wrong naming in result field!

      Task.ForecastedFinishDate as ForecastedFinishDateTime,

      // for some reasons someone did not understand the difference between date and date/time, therefor wrong naming in result field!

      Task.ActualFinishDate     as ActualFinishDateTime,

      Tasktype.IsEssentialMilestone                                                                   as IsMainMilestone,

      Task.ProjectElementDuration                                                                     as ProjectElementDuration,
      Task.DurationUnit                                                                               as DurationUnit,
      Task.PercentageOfCompletion                                                                     as PercentageOfCompletion,
      Task.RemainingWorkQuantityInSeconds                                                             as RemainingWorkQuantityInSeconds,
      case
          when Task.ObjectType <> 'DPO' and Task.ObjectType <> 'PPO' and Task.TaskProcessingStatus <> '40' and Task.TaskProcessingStatus <> '41' and Task.TaskProcessingStatus <> '42'
            then cast(unit_conversion( quantity => Task.RemainingWorkQuantityInSeconds,
                  source_unit => cast( 'S' as abap.unit(3) ),
                  target_unit => Task.RemainingWorkExtQuantityUnit,
                  error_handling => 'KEEP_UNCONVERTED')
                  as abap.dec( 15, 2 ) )
            else cast(0 as abap.dec( 15, 2 ) )
          end                                                                                         as RemainingWorkQuantity,

      Task.RemainingWorkExtQuantityUnit                                                               as RemainingWorkExtQuantityUnit,
      Task._RemainingWorkExtQuantityUnit._Text[1:Language=$session.system_language].UnitOfMeasureName as RemainingWorkQuantityUnitName,
      Task.CreatedByUser                                                                              as CreatedByUser,
      Task.CreationDateTime                                                                           as CreationDateTime,
      Task.LastChangedByUser                                                                          as LastChangedByUser,
      Task.LastChangeDateTime                                                                         as LastChangeDateTime,
     ///removed as part of DPR carve out topic

     // Task._Severity.CriticalityCode                                                                  as CriticalityCode,

     // Task._Severity.SeverityText                                                                     as SeverityText,

      Task.WBSElementInternalID,
      ResponsibleBP.BusinessPartnerUUID                                                               as BusinessPartnerUUID,
      _BusinessUser.PersonFullName                                                                    as BusinessPartnerName,
      ResponsibleRole.ProjectRoleUUID                                                                 as ProjectRoleUUID,
      _BusinessUser._WorkplaceAddress.DefaultEmailAddress                                             as EmailAddress, 
      _BusinessUser._WorkplaceAddress.MobilePhoneNumber                                               as MobilePhoneNumber,
      _BusinessUser._WorkplaceAddress.PhoneNumber                                                     as AddressPhoneNumber,
      _RoleText.ProjectRoleName                                                                       as ProjectRoleName,

      // for authorization checks

      _BusinessUser,
      _AuthUser,
      _AuthSubst,
      _AuthRole,
      _AuthGroup,

      _ProjObjRoot,
      _Project

} where _Project.ProjectCategory = '6'