I_PPM_ProjectElement

DDL: I_PPM_PROJECTELEMENT SQL: IPPMPROJECTELEM Type: view COMPOSITE

Project Element

I_PPM_ProjectElement is a Composite CDS View that provides data about "Project Element" in SAP S/4HANA. It reads from 4 data sources (I_EPPMGlobalSetting, /s4ppm/cds_dummy, I_PPM_Task, I_PPM_ProjectSummaryTask) and exposes 62 fields with key field TaskUUID. It has 12 associations to related views.

Data Sources (4)

SourceAliasJoin Type
I_EPPMGlobalSetting _GlobalSetting left_outer
/s4ppm/cds_dummy /s4ppm/cds_dummy left_outer
I_PPM_Task I_PPM_Task from
I_PPM_ProjectSummaryTask Project left_outer

Associations (12)

CardinalityTargetAliasCondition
[0..1] I_PPM_Text _TaskNameUserLanguage _TaskNameUserLanguage.LanguageCode = $session.system_language and _TaskNameUserLanguage.ReferencedObjectUUID = I_PPM_Task.TaskUUID
[0..1] I_PPM_Text _ProjNameUserLanguage _ProjNameUserLanguage.LanguageCode = $session.system_language and _ProjNameUserLanguage.ReferencedObjectUUID = Project.ProjectSummaryTaskUUID
[0..1] I_PPM_SingleResponsibleForObj _Responsible _Responsible.ReferencedObjectUUID = I_PPM_Task.TaskUUID
[0..*] I_PPM_BuPaWorkingOnObject _ContactsWorkingOnThis _ContactsWorkingOnThis.ReferencedObjectUUID = I_PPM_Task.TaskUUID
[0..*] I_PPM_ProjectManagerForObject _ImportantContacts _ImportantContacts.ReferencedObjectUUID = I_PPM_Task.TaskUUID
[0..1] I_UnitOfMeasure _PlannedWorkUnit _PlannedWorkUnit.UnitOfMeasure = $projection.PlannedWorkQuantityUnit
[0..1] I_UnitOfMeasure _ActualWorkUnit _ActualWorkUnit.UnitOfMeasure = $projection.ActualWorkExternalQuantityUnit
[0..1] I_UnitOfMeasure _RemainingWorkUnit _RemainingWorkUnit.UnitOfMeasure = $projection.RemainingWorkExtQuantityUnit
[0..1] I_UnitOfMeasure _CompletionUnitOfMeasure _CompletionUnitOfMeasure.UnitOfMeasure = '%'
[0..1] I_Currency _ManualCostRateCurrency _ManualCostRateCurrency.Currency = $projection.ManualCostRateCurrency
[0..1] I_Currency _ManualRevenueRateCurrency _ManualRevenueRateCurrency.Currency = $projection.ManualRevenueRateCurrency
[0..1] I_PPM_ProjectElementType _ProjectElementType _ProjectElementType.ProjectElementType = $projection.ProjectElementType

Annotations (13)

NameValueLevelField
EndUserText.label Project Element view
AbapCatalog.sqlViewName IPPMPROJECTELEM view
VDM.viewType #COMPOSITE view
AbapCatalog.compiler.compareFilter true view
AccessControl.authorizationCheck #PRIVILEGED_ONLY view
AccessControl.personalData.blocking #NOT_REQUIRED view
Search.searchable false view
ClientHandling.algorithm #SESSION_VARIABLE view
ObjectModel.representativeKey TaskUUID view
ObjectModel.usageType.serviceQuality #X view
ObjectModel.usageType.sizeCategory #XL view
ObjectModel.usageType.dataClass #MIXED view
VDM.lifecycle.contract.type #SAP_INTERNAL_API view

Fields (62)

KeyFieldSource TableSource FieldDescription
KEY TaskUUID I_PPM_Task TaskUUID
ProjectUUID I_PPM_Task ProjectUUID
TaskNameendasProjectElementName
ProjectNameendasProjectName
MasterLanguage I_PPM_ProjectSummaryTask MasterLanguage
PlanVersion I_PPM_ProjectSummaryTask PlanVersion
OrganizationalUnit I_PPM_ProjectSummaryTask OrganizationalUnit
OrganizationalUnitObjectType I_PPM_ProjectSummaryTask OrganizationalUnitObjectType
ProcessingStatusText
PercentageOfCompletion
CompletionUnit _CompletionUnitOfMeasure UnitOfMeasure
ActualStartDate I_PPM_Task ActualStartDate
ActualFinishDate I_PPM_Task ActualFinishDate
LatestStartDate I_PPM_Task LatestStartDate
LatestFinishDate I_PPM_Task LatestFinishDate
PlannedWorkQuantity I_PPM_Task PlannedWorkQuantity
PlannedWorkQuantityUnit I_PPM_Task PlannedWorkQuantityUnit
quan162asActualWorkQuantity
ActualWorkExternalQuantityUnit I_PPM_Task ActualWorkExternalQuantityUnit
quan162asRemainingWorkQuantity
RemainingWorkExtQuantityUnit I_PPM_Task RemainingWorkExtQuantityUnit
Severity
SeverityText
CriticalityCode
_SeverityText
CostRevenueRateCode I_PPM_Task CostRevenueRateCode
ManualCostRate I_PPM_Task ManualCostRate
ManualCostRateCurrency I_PPM_Task ManualCostRateCurrency
ManualRevenueRate I_PPM_Task ManualRevenueRate
ManualRevenueRateCurrency I_PPM_Task ManualRevenueRateCurrency
EarliestStartDate I_PPM_Task EarliestStartDate
EarliestFinishDate I_PPM_Task EarliestFinishDate
TaskType I_PPM_Task TaskType
ProjectElementDuration I_PPM_Task ProjectElementDuration
ProjectType I_PPM_ProjectSummaryTask ProjectType
clientNULLasCreationDate
clientNULLasLastChangeDate
CreatedByUserFullName
LastChangedByUserName
ProjectElementDescription /s4ppm/cds_dummy dummy_string
PriorityCodeName
PriorityCode I_PPM_Task PriorityCode
ExternalId I_PPM_Task ExternalId
ObjectType I_PPM_Task ObjectType
CreatedByUser I_PPM_Task CreatedByUser
LastChangedByUser I_PPM_Task LastChangedByUser
EPPMSettingsDefaultValue I_EPPMGlobalSetting EPPMSettingsDefaultValue
_ProjectElementType _ProjectElementType
_CreatedByUser I_PPM_Task _CreatedByUser
_LastChangedByUser I_PPM_Task _LastChangedByUser
_Severity I_PPM_Task _Severity
_ProjectType I_PPM_ProjectSummaryTask _ProjectType
_Responsible _Responsible
_PlannedWorkUnit _PlannedWorkUnit
_ActualWorkUnit _ActualWorkUnit
_RemainingWorkUnit _RemainingWorkUnit
_ManualCostRateCurrency _ManualCostRateCurrency
_ManualRevenueRateCurrency _ManualRevenueRateCurrency
_CompletionUnitOfMeasure _CompletionUnitOfMeasure
_Priority I_PPM_Task _Priority
_ImportantContacts _ImportantContacts
_ContactsWorkingOnThis _ContactsWorkingOnThis
@EndUserText.label: 'Project Element'
@AbapCatalog.sqlViewName: 'IPPMPROJECTELEM'
@VDM.viewType: #COMPOSITE
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #PRIVILEGED_ONLY
@AccessControl.personalData.blocking: #NOT_REQUIRED
@Search.searchable: false
@ClientHandling.algorithm: #SESSION_VARIABLE

@ObjectModel.representativeKey: 'TaskUUID'

@ObjectModel.usageType.serviceQuality: #X
@ObjectModel.usageType.sizeCategory: #XL
@ObjectModel.usageType.dataClass: #MIXED
@VDM.lifecycle.contract.type:  #SAP_INTERNAL_API

define view I_PPM_ProjectElement
  as select from    I_PPM_Task

    left outer join I_PPM_ProjectSummaryTask          as Project                      on I_PPM_Task.ProjectUUID = Project.ProjectUUID
    left outer join /s4ppm/cds_dummy                                                  on I_PPM_Task.TaskUUID = /s4ppm/cds_dummy.dummy_key //workaround to get string field

    left outer join I_EPPMGlobalSetting as _GlobalSetting on _GlobalSetting.EPPMUsageArea = '0007' and _GlobalSetting.EPPMGlobalSettingsCode = '0053'

  association [0..1] to I_PPM_Text                    as _TaskNameUserLanguage        on  _TaskNameUserLanguage.LanguageCode         = $session.system_language
                                                                                      and _TaskNameUserLanguage.ReferencedObjectUUID = I_PPM_Task.TaskUUID

  association [0..1] to I_PPM_Text                    as _ProjNameUserLanguage        on  _ProjNameUserLanguage.LanguageCode         = $session.system_language
                                                                                      and _ProjNameUserLanguage.ReferencedObjectUUID = Project.ProjectSummaryTaskUUID

  association [0..1] to I_PPM_SingleResponsibleForObj as _Responsible                 on  _Responsible.ReferencedObjectUUID = I_PPM_Task.TaskUUID
  association [0..*] to I_PPM_BuPaWorkingOnObject     as _ContactsWorkingOnThis       on  _ContactsWorkingOnThis.ReferencedObjectUUID = I_PPM_Task.TaskUUID
  association [0..*] to I_PPM_ProjectManagerForObject as _ImportantContacts           on  _ImportantContacts.ReferencedObjectUUID = I_PPM_Task.TaskUUID
  association [0..1] to I_UnitOfMeasure               as _PlannedWorkUnit             on  _PlannedWorkUnit.UnitOfMeasure = $projection.PlannedWorkQuantityUnit
  association [0..1] to I_UnitOfMeasure               as _ActualWorkUnit              on  _ActualWorkUnit.UnitOfMeasure = $projection.ActualWorkExternalQuantityUnit
  association [0..1] to I_UnitOfMeasure               as _RemainingWorkUnit           on  _RemainingWorkUnit.UnitOfMeasure = $projection.RemainingWorkExtQuantityUnit
  association [0..1] to I_UnitOfMeasure               as _CompletionUnitOfMeasure     on  _CompletionUnitOfMeasure.UnitOfMeasure = '%'
  association [0..1] to I_Currency                    as _ManualCostRateCurrency      on  _ManualCostRateCurrency.Currency = $projection.ManualCostRateCurrency
  association [0..1] to I_Currency                    as _ManualRevenueRateCurrency   on  _ManualRevenueRateCurrency.Currency = $projection.ManualRevenueRateCurrency
  association [0..1] to I_PPM_ProjectElementType      as _ProjectElementType          on  _ProjectElementType.ProjectElementType = $projection.ProjectElementType
{
  key I_PPM_Task.TaskUUID                                                                                 as TaskUUID,

      I_PPM_Task.ProjectUUID,

      case

       when _TaskNameUserLanguage.ObjectName > '' then _TaskNameUserLanguage.ObjectName
         else
              I_PPM_Task.TaskName

      end    as ProjectElementName,

      case

      when _ProjNameUserLanguage.ObjectName > '' then _ProjNameUserLanguage.ObjectName
           else
        Project.ProjectName

      end    as ProjectName,

      Project.MasterLanguage,
      Project.PlanVersion,
      Project.OrganizationalUnit,
      Project.OrganizationalUnitObjectType,

      I_PPM_Task._ProcessingStatus._Text[1: Language = $session.system_language].ProcessingStatusText,

      @DefaultAggregation: #NONE
      @Semantics.quantity.unitOfMeasure: 'CompletionUnit'
      cast (I_PPM_Task.PercentageOfCompletion as abap.quan( 3, 0 )) as PercentageOfCompletion,
      @Semantics.unitOfMeasure: true
      _CompletionUnitOfMeasure.UnitOfMeasure as CompletionUnit,


      I_PPM_Task.ActualStartDate                    as ActualStartDate,
      I_PPM_Task.ActualFinishDate                   as ActualFinishDate,

      I_PPM_Task.LatestStartDate                    as LatestStartDate,
      I_PPM_Task.LatestFinishDate                   as LatestFinishDate,


      /*********  PROGRESS **********/
      @DefaultAggregation: #NONE
      @Semantics.quantity.unitOfMeasure: 'PlannedWorkQuantityUnit'
      I_PPM_Task.PlannedWorkQuantity,
      @ObjectModel.foreignKey.association: '_PlannedWorkUnit'
      @Semantics.unitOfMeasure: true
      I_PPM_Task.PlannedWorkQuantityUnit,

      @DefaultAggregation: #NONE
      @Semantics.quantity.unitOfMeasure: 'ActualWorkExternalQuantityUnit'
      //cast to quan(16,2) because the unit_conversion delivers to many fractional digits

      cast (
            unit_conversion(
                    quantity => I_PPM_Task.ActualWorkQuantityInSeconds,
                    source_unit => cast('S' as abap.unit( 3 ) ) ,
                    target_unit => I_PPM_Task.ActualWorkExternalQuantityUnit,
                    error_handling => 'KEEP_UNCONVERTED'   )
                    as abap.quan( 16, 2 )) as ActualWorkQuantity,
      @ObjectModel.foreignKey.association: '_ActualWorkUnit'
      @Semantics.unitOfMeasure: true
      I_PPM_Task.ActualWorkExternalQuantityUnit,


      @DefaultAggregation: #NONE
      @Semantics.quantity.unitOfMeasure: 'RemainingWorkExtQuantityUnit'
      cast(
        unit_conversion(
                  quantity => I_PPM_Task.RemainingWorkQuantityInSeconds,
                  source_unit => cast('S' as abap.unit( 3 ) ),
                  target_unit => I_PPM_Task.RemainingWorkExtQuantityUnit,
                  error_handling => 'KEEP_UNCONVERTED' )
          as abap.quan( 16, 2 ) ) as RemainingWorkQuantity,
      @ObjectModel.foreignKey.association: '_RemainingWorkUnit'
      @Semantics.unitOfMeasure: true
      I_PPM_Task.RemainingWorkExtQuantityUnit,


      @ObjectModel.text.association: '_SeverityText'
      I_PPM_Task._Severity.Severity,
      I_PPM_Task._Severity.SeverityText,
      I_PPM_Task._Severity.CriticalityCode,
      I_PPM_Task._Severity._SeverityText,

      /*********  ADDITIONAL DATA **********/
      /*********  COSTING **********/

      I_PPM_Task.CostRevenueRateCode as CostRevenueRateCode,

      I_PPM_Task.ManualCostRate,
      @Semantics.currencyCode: true
      @ObjectModel.foreignKey.association: '_ManualCostRateCurrency'
      I_PPM_Task.ManualCostRateCurrency,
      I_PPM_Task.ManualRevenueRate,
      @Semantics.currencyCode: true
      @ObjectModel.foreignKey.association: '_ManualRevenueRateCurrency'
      I_PPM_Task.ManualRevenueRateCurrency,
      /* earl. start and finish is needed for the rates logic,
      web dynpro is using the earl. dates for determining which rate will be displayed*/
      I_PPM_Task.EarliestStartDate as EarliestStartDate,
      I_PPM_Task.EarliestFinishDate as EarliestFinishDate,
      I_PPM_Task.TaskType,
      I_PPM_Task.ProjectElementDuration,
      Project.ProjectType,

      case
        when I_PPM_Task.ProjectElementDuration = 0
          then I_PPM_Task.EarliestFinishDate
        else
          I_PPM_Task.EarliestStartDate
      end as CostRevenueRateDueDate,



      /*********  ADMINISTRATION **********/

      tstmp_to_dats(
        I_PPM_Task.CreationDateTime,
        abap_system_timezone( $session.client,'NULL' ),
        $session.client,
        'NULL' )    as CreationDate,

      tstmp_to_dats(
        I_PPM_Task.LastChangeDateTime,
        abap_system_timezone( $session.client,'NULL' ),
        $session.client,
        'NULL' ) as LastChangeDate,


      I_PPM_Task._CreatedByUser._BusinessUser.PersonFullName                                              as CreatedByUserFullName,
      I_PPM_Task._LastChangedByUser._BusinessUser.PersonFullName                                          as LastChangedByUserName,
      /s4ppm/cds_dummy.dummy_string                                                                       as ProjectElementDescription, //is filled in DPC_EXT

      I_PPM_Task._Priority._Text[1: LanguageCode = $session.system_language].PriorityCodeName,
      @ObjectModel.foreignKey.association: '_Priority'
      I_PPM_Task.PriorityCode,
      I_PPM_Task.ExternalId,
      I_PPM_Task.ObjectType,
      I_PPM_Task.CreatedByUser,
      I_PPM_Task.LastChangedByUser,

      /**** Project Element Type *****/
      @ObjectModel.foreignKey.association: '_ProjectElementType'
      case
        when (I_PPM_Task.ObjectType = 'TTO' or I_PPM_Task.ObjectType = 'TPO') and I_PPM_Task.IsProjectMilestone = ' '
          then '0' //Task

        when (I_PPM_Task.ObjectType = 'TTO' or I_PPM_Task.ObjectType = 'TPO') and I_PPM_Task.IsProjectMilestone = 'X'
          then '1' //Milestone

        when I_PPM_Task.ObjectType = 'PPO'
          then '2' //Phase

      end as ProjectElementType,

      _GlobalSetting.EPPMSettingsDefaultValue,

      _ProjectElementType,
      I_PPM_Task._CreatedByUser,
      I_PPM_Task._LastChangedByUser,
      I_PPM_Task._Severity,
      Project._ProjectType,
      _Responsible,
      _PlannedWorkUnit,
      _ActualWorkUnit,
      _RemainingWorkUnit,
      _ManualCostRateCurrency,
      _ManualRevenueRateCurrency,
      _CompletionUnitOfMeasure,
      I_PPM_Task._Priority,
      _ImportantContacts,
      _ContactsWorkingOnThis


} where I_PPM_Task.ObjectType != 'DPO'