@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
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,
_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'
/*+[internal] {
"BASEINFO":
{
"FROM":
[
"I_BUSINESSUSERBASIC",
"I_PPM_OBJECTSEVERITY",
"I_PPM_PRIORITY",
"I_PPM_PRIORITYTEXT",
"I_PPM_PROCESSINGSTATUS",
"I_PPM_PROCESSINGSTATUSTEXT",
"I_PPM_PROJECTSUMMARYTASK",
"I_PPM_TASK",
"I_PPM_TEXT",
"I_PPM_USER",
"I_UNITOFMEASURE",
"/S4PPM/CDS_DUMMY"
],
"ASSOCIATED":
[
"I_CURRENCY",
"I_PPM_BUPAWORKINGONOBJECT",
"I_PPM_OBJECTSEVERITY",
"I_PPM_PRIORITY",
"I_PPM_PROJECTELEMENTTYPE",
"I_PPM_PROJECTMANAGERFOROBJECT",
"I_PPM_PROJECTTYPE",
"I_PPM_SEVERITYTEXT",
"I_PPM_SINGLERESPONSIBLEFOROBJ",
"I_PPM_TEXT",
"I_PPM_USER",
"I_UNITOFMEASURE"
],
"BASE":
[
"I_PPM_OBJECTSEVERITY",
"I_PPM_PROJECTSUMMARYTASK",
"I_PPM_TASK"
],
"ANNO_REF":
[],
"SCALAR_FUNCTION":
[],
"VERSION":0,
"ANNOREF_EVALUATION_ERROR":""
}
}*/