@AbapCatalog.sqlViewName: 'CMLSGRAPHOV'
@ClientHandling.algorithm: #SESSION_VARIABLE
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey:true
@AccessControl.authorizationCheck: #CHECK
@AccessControl.personalData.blocking: #NOT_REQUIRED
@VDM.viewType: #CONSUMPTION
@ObjectModel.usageType.serviceQuality: #D
@ObjectModel.usageType.sizeCategory: #M
@ObjectModel.usageType.dataClass: #MIXED
@Metadata: { ignorePropagatedAnnotations: true,
allowExtensions:true }
@EndUserText.label: 'Milestone Graph Overview'
define view C_MilestoneGraphOverview
as select from I_ProjectMilestoneData as ProjectMilestone
association [0..1] to C_WBSElementForGraph as _WBSElement on _WBSElement.WBSElementInternalID = $projection.WBSElementInternalID
association [0..1] to C_ProjectForNetworkGraph as _Project on _Project.ProjectInternalID = $projection.ProjectInternalID
association [0..1] to C_ProjectNetworkForGraph as _ProjectNetwork on _ProjectNetwork.ProjectNetwork = $projection.ProjectNetwork
association [0..1] to C_NetworkActivityForGraph as _NetworkActivity on _NetworkActivity.ProjectNetworkInternalID = $projection.ProjectNetworkInternalID
and _NetworkActivity.NetworkActivityInternalID = $projection.NetworkActivityInternalID
association [1..1] to E_ProjectMilestone as _Extension on $projection.ProjectMilestone = _Extension.ProjectMilestone
{
@ObjectModel.text.element: 'MilestoneDescription'
//key cast(ProjectMilestone as ps_s4_mlst_zaehl preserving type) as ProjectMilestone,
key cast(ProjectMilestone as mlst_zaehl) as ProjectMilestone,
key ProjectMilestoneInternalID,
key cast( '' as vsnmr_v ) as Version,
@ObjectModel.text.element: ['WBSDescription']
ProjectMilestone._WBSElement.WBSElementExternalID as WBSElementExternalID,
ProjectMilestone._WBSElement.WBSElementObject,
@ObjectModel.text.element: ['ProjectDescription']
ProjectMilestone._WBSElement._Project.ProjectExternalID as ProjectExternalID,
ProjectMilestone._WBSElement.ProjectInternalID as ProjectInternalID,
@ObjectModel.text.element: ['ProjectNetworkDescription']
@EndUserText.label: 'Network'
case
when ProjectMilestone._ProjectNetwork.ProjectNetwork is null
then ''
else ProjectMilestone._ProjectNetwork.ProjectNetwork
end as ProjectNetwork,
@ObjectModel.text.element: ['NetworkActivityDescription']
lpad(
cast(
case
when ProjectMilestone._NetworkActivity.NetworkActivity is null
then ''
else ProjectMilestone._NetworkActivity.NetworkActivity
end as abap.char( 4 )), 4, '0' ) as NetworkActivity,
lpad(_NetworkActivity.SuperiorNtwkActivityExternalID, 4, '0' ) as SuperiorNtwkActivityExternalID,
case
when ProjectMilestone._WBSElement.WBSElementHierarchyLevel is null
then 0
else ProjectMilestone._WBSElement.WBSElementHierarchyLevel
end as WBSElementHierarchyLevel,
@Semantics.text: true
case
when ProjectMilestone._WBSElement._WBSElementShortText.LanguageBasedShortText is not initial
then ProjectMilestone._WBSElement._WBSElementShortText.LanguageBasedShortText
else ProjectMilestone._WBSElement.WBSDescription
end as WBSDescription,
//ProjectMilestone._WBSElement.WBSDescription,
@Semantics.text: true
case
when ProjectMilestone._WBSElement._Project._ProjectShortText.LanguageBasedShortText is not initial
then ProjectMilestone._WBSElement._Project._ProjectShortText.LanguageBasedShortText
else ProjectMilestone._WBSElement._Project.ProjectDescription
end as ProjectDescription,
//ProjectMilestone._WBSElement._Project.ProjectDescription,
@Semantics.text: true
case
when ProjectMilestone._ProjectNetwork._NetworkShortText.LanguageBasedShortText is not initial
then ProjectMilestone._ProjectNetwork._NetworkShortText.LanguageBasedShortText
else ProjectMilestone._ProjectNetwork.ProjectNetworkDescription
end as ProjectNetworkDescription,
//ProjectMilestone._ProjectNetwork.ProjectNetworkDescription,
@Semantics.text: true
case
when ProjectMilestone._NetworkActivity._ActivityShortText.LanguageBasedShortText is not initial
then ProjectMilestone._NetworkActivity._ActivityShortText.LanguageBasedShortText
else ProjectMilestone._NetworkActivity.NetworkActivityDescription
end as NetworkActivityDescription,
//ProjectMilestone._NetworkActivity.NetworkActivityDescription,
cast( WBSElementInternalID as ps_pspnr) as WBSElementInternalID,
ProjectNetworkInternalID,
NetworkActivityInternalID,
@Consumption:{ hidden: true}
AuthorizationGroup,
@EndUserText.label: 'Milestone Name'
@Semantics.text: true
case
when ProjectMilestone._MilestoneShortText.LanguageBasedShortText is not initial
then ProjectMilestone._MilestoneShortText.LanguageBasedShortText
else
_Text.MilestoneDescription
//case
//when _Text[1: Language = $session.system_language ].MilestoneDescription is not initial
//then cast(_Text[1: Language = $session.system_language ].MilestoneDescription as ps_s4_mlst_ktext)
//else cast(_Text[1: Language = 'E' ].MilestoneDescription as ps_s4_mlst_ktext)
//end
end as MilestoneDescription,
@EndUserText.label: 'Usage'
@ObjectModel.text.element: ['UsageCodeName']
UsageCode,
@Semantics.text: true
case
when _UsageText._UsageCodeText[1:Language = $session.system_language].UsageCodeName is null
then ''
else _UsageText._UsageCodeText[1:Language = $session.system_language].UsageCodeName
end as UsageCodeName,
@DefaultAggregation: #MAX
cast(LastChangeDate as ps_s4_updat) as LastChangeDate,
ScheduledBasicDate,
ScheduledForecastedDate,
case
when FixedBasicDate is null
then '00000000'
when FixedBasicDate = ''
then '00000000'
else FixedBasicDate
end as FixedBasicDate,
ForecastedFixedDate,
case
when ActualEndDate is null
then '00000000'
when ActualEndDate = ''
then '00000000'
else ActualEndDate
end as ActualEndDate,
CreatedByUser,
cast(CreationDate as erdat) as CreationDate,
cast(LastChangedByUser as ps_s4_aenam) as LastChangedByUser,
@EndUserText.label: 'Days Due'
@DefaultAggregation: #MIN
case
when ActualEndDate = '00000000'
and ScheduledBasicDate > $session.system_date
then DATS_DAYS_BETWEEN( cast($session.system_date as sydatum),
ScheduledBasicDate
)
else 0
end as DueDays,
@EndUserText.label:'Days Overdue'
@DefaultAggregation: #MAX
case
when ActualEndDate = '00000000'
and ScheduledBasicDate < $session.system_date
then DATS_DAYS_BETWEEN( ScheduledBasicDate,
cast($session.system_date as sydatum)
)
else 0
end as OverdueDays,
case
when CompletionRateInPercent = '000'
then cast('' as ps_s4_cgpl_completion)
else cast(ltrim(CompletionRateInPercent,'0') as ps_s4_cgpl_completion)
end as CompletionRateInPercent,
cast(ProjCostToBeInvoicedPercent as fproz ) as ProjCostToBeInvoicedPercent,
cast (IsDeleted as ps_s4_loevm) as IsDeleted,
MlstnIsRelevantForPrgrsAnlys,
MlstnIsRelevantForDteInSlsDoc,
MlstnIsRelevantForTrendAnlys,
MlstnIsUsedforMlstnFunc,
MlstnReleaseStopIsActive,
DateIsOffsetToParentEndDate,
MlstnDateOffsetPercent,
@Semantics.unitOfMeasure: true
MlstnDateOffsetDurationUnit,
@Semantics.quantity.unitOfMeasure: 'MlstnDateOffsetDurationUnit'
MlstnDateOffsetDuration,
DateIsOffsetToParentLtstDates,
WorkflowTask,
_ProjectNetwork,
_NetworkActivity,
_WBSElement,
_Project
}
/*+[internal] {
"BASEINFO":
{
"FROM":
[
"C_NETWORKACTIVITYFORGRAPH",
"I_NETWORKACTIVITYBYINTERNALKEY",
"I_PROJECTDATA_2",
"I_PROJECTMILESTONEDATA",
"I_PROJECTMILESTONETEXT",
"I_PROJECTMILESTONEUSAGE",
"I_PROJECTNETWORKBASICDATA",
"I_PROJECTOBJECTSHORTTEXT",
"I_USAGECODETEXT",
"I_WBSELEMENTDATA_2"
],
"ASSOCIATED":
[
"C_NETWORKACTIVITYFORGRAPH",
"C_PROJECTFORNETWORKGRAPH",
"C_PROJECTNETWORKFORGRAPH",
"C_WBSELEMENTFORGRAPH",
"E_PROJECTMILESTONE"
],
"BASE":
[],
"ANNO_REF":
[],
"SCALAR_FUNCTION":
[],
"VERSION":0,
"ANNOREF_EVALUATION_ERROR":""
}
}*/