@VDM.private: true
@VDM.viewType: #COMPOSITE
@AbapCatalog: {
sqlViewName: 'PPPMPROJECT',
compiler.compareFilter: true,
preserveKey:true
}
@ClientHandling.algorithm: #SESSION_VARIABLE
@AccessControl: {
authorizationCheck: #NOT_REQUIRED,
personalData.blocking: #BLOCKED_DATA_EXCLUDED,
privilegedAssociations: ['_ProjectType']
}
@ObjectModel: {
semanticKey: [ 'Project' ],
representativeKey: 'ProjectUUID',
alternativeKey: [ { id : 'ProjectSummaryTaskUUID', uniqueness: #UNIQUE, element: 'ProjectSummaryTaskUUID' },
{ id : 'ProjectInternalID' , uniqueness: #UNIQUE, element: 'ProjectInternalID' } ],
usageType: {
serviceQuality: #X,
dataClass: #MIXED,
sizeCategory: #L
}
}
/* @EndUserText.label: 'Project' */
define view P_PPM_Project
as select from I_PPM_ProjectSummaryTask as Project
/* PS Project */
left outer join I_ProjectBasicData as PS_Project on(
PS_Project.ProjectInternalID = Project.ProjectInternalID
)
/* PS Root WBS Element */
left outer join I_WBSElementBasicData as PS_RootWBS on(
PS_RootWBS.WBSElementInternalID = Project.WBSElementInternalID
)
/* Essential milestone */
left outer join I_PPM_ProjectMilestEssent as MlstnEssential // Next only
on(
Project.ProjectUUID = MlstnEssential.ProjectUUID
)
/* next released milestone */
left outer join I_PPM_ProjectMilestRelNext as MlstnRelevant on(
Project.ProjectUUID = MlstnRelevant.ProjectUUID
)
/* Build association [0..1] to OverallStatusArea of Project */
left outer join I_PPM_ProjectStatusArea as OverallStatusArea on Project.ProjectUUID = OverallStatusArea.ProjectUUID
and OverallStatusArea.IsOverallStatus = 'X'
// My Project Indicator
left outer join I_PPM_IsMyProject as IsMyProject on Project.ProjectUUID = IsMyProject.ProjectUUID
// My Project as Substitute Indicator
left outer join I_PPM_IsMyProjectAsSubstitute as IsMyProjectAsSubstitute on Project.ProjectUUID = IsMyProjectAsSubstitute.ProjectUUID
// Indicator for user being Project Steering Commitee Member
left outer join I_PPM_TeamMemberIsInRole( P_ProjectRoleCategory : 'SCM' ) as IsPrjSteerMbr on Project.ProjectUUID = IsPrjSteerMbr.ProjectUUID
// Indicator for user being Project Steering Commitee Member
left outer join I_PPM_TeamMemberIsInRole( P_ProjectRoleCategory : 'PFC' ) as IsPrjFinCtrlr on Project.ProjectUUID = IsPrjFinCtrlr.ProjectUUID
// Indicator for user being Project Manager
left outer join I_PPM_TeamMemberIsInRole( P_ProjectRoleCategory : 'PM' ) as IsPrjManager on Project.ProjectUUID = IsPrjManager.ProjectUUID
association [0..1] to I_PPM_SingleResponsibleForProj as Responsible on Responsible.ProjectSummaryTaskUUID = Project.ProjectSummaryTaskUUID
association [0..*] to I_PPM_Task as _ProjectTask on _ProjectTask.ProjectUUID = $projection.ProjectUUID
association [0..1] to I_PPM_ProjectProcgStatusVH as _ProcessingStatus on _ProcessingStatus.ProcessingStatus = $projection.ProcessingStatus
association [0..*] to I_PPM_ProcessingStatusText as _ProcessingStatusText on _ProcessingStatusText.ProcessingStatus = $projection.ProcessingStatus
association [0..1] to I_PPM_ProjectType as _ProjectType on _ProjectType.ProjectType = $projection.ProjectType
association [0..*] to I_PPM_ProTypeText as _ProTypeName on _ProTypeName.ProjectType = $projection.ProjectType
association [0..1] to I_PPM_Task as _NextEssentialMlstn on _NextEssentialMlstn.TaskUUID = $projection.NextEssentialMlstnUUID
and _NextEssentialMlstn.ProjectUUID = $projection.ProjectUUID
association [0..1] to I_PPM_Task as _NextRelevantMlstn on _NextRelevantMlstn.TaskUUID = $projection.NextRelevantMlstnUUID
and _NextRelevantMlstn.ProjectUUID = $projection.ProjectUUID
association [0..1] to I_BusinessUser as _ProjectManager on _ProjectManager.BusinessPartnerUUID = $projection.ProjectManagerUUID
association [0..*] to I_StatusObjectStatusBasic as _StatusObjectData on _StatusObjectData.StatusObject = $projection.StatusObject
association [0..1] to I_PPM_StatusAreaStatus as _AreaStatus on _AreaStatus.Status = $projection.OverallProjectStatus
association [0..*] to I_PPM_StatusAreaStatusText as _AreaStatusText on _AreaStatusText.Status = $projection.OverallProjectStatus
association [0..1] to I_PPM_StatusAreaTrend as _AreaTrend on _AreaTrend.StatusTrend = $projection.StatusTrend
association [0..*] to I_PPM_StatusAreaTrendText as _AreaTrendText on _AreaTrendText.StatusTrend = $projection.StatusTrend
association [0..*] to I_PPM_ProjectResponsible as _ProjectResponsible on _ProjectResponsible.ProjectUUID = $projection.ProjectUUID
association [0..1] to I_PPM_Substitute as _Substitute on _Substitute.ReferencedObjectUUID = $projection.ProjectSummaryTaskUUID
association [0..1] to I_PPM_TaskText as _ProjectName on _ProjectName.TaskUUID = $projection.ProjectSummaryTaskUUID
association [0..1] to I_ControllingArea as _ControllingArea on _ControllingArea.ControllingArea = $projection.ControllingArea
association [0..1] to I_CompanyCode as _CompanyCode on _CompanyCode.CompanyCode = $projection.CompanyCode
association [0..*] to I_CostCenter as _CostCenter on _CostCenter.CostCenter = $projection.CostCenter
and _CostCenter.ControllingArea = $projection.ControllingArea
association [0..1] to I_Plant as _Plant on _Plant.Plant = $projection.Plant
association [0..1] to I_ProjectProfileCode as _ProjectProfileCode on _ProjectProfileCode.ProjectProfileCode = $projection.ProjectProfileCode
association [0..1] to I_FunctionalArea as _FunctionalArea on _FunctionalArea.FunctionalArea = $projection.FunctionalArea
association [0..*] to I_ProfitCenter as _ProfitCenter on _ProfitCenter.ProfitCenter = $projection.ProfitCenter
and _ProfitCenter.ControllingArea = $projection.ControllingArea
association [0..1] to I_Projecttype as _EnterpriseProjectType on _EnterpriseProjectType.ProjectType = $projection.EnterpriseProjectType
association [0..*] to I_Projecttypetext as _EnterpriseProjectTypeText on _EnterpriseProjectTypeText.ProjectType = $projection.EnterpriseProjectType
{
key Project.ProjectUUID,
key Project.ProjectSummaryTaskUUID,
@EndUserText: { label: 'Project ID',
quickInfo: 'Unique identification of the project'
}
Project.Project,
Project.ProjectName,
Project.ProjectInternalID,
Project.WBSElementInternalID,
@ObjectModel.foreignKey.association: '_ProcessingStatus'
@ObjectModel.text.association: '_ProcessingStatusText'
Project.ProjectProcessingStatus as ProcessingStatus,
Project.ProjectTemplateUUID,
Project.ProjectCategory,
@ObjectModel.foreignKey.association: '_StatusObjectData'
PS_Project.ProjectObject as StatusObject,
// hierarchical settlement changes
PS_Project.EntProjectSettlementType,
PS_RootWBS.EntProjectSettlementElement,
// result analysis key changes
PS_RootWBS.ResultAnalysisInternalID,
PS_Project.Location,
PS_Project.ProjectCurrency,
// Tax Jurisdiction Code
PS_Project.TaxJurisdiction,
// TODO: text and code list
PS_Project.ProjectProfileCode,
// TODO: foreing key
PS_RootWBS.ResponsibleCostCenter,
// TODO: foreing key
PS_RootWBS.ProfitCenter,
// TODO: text and code list
PS_RootWBS.CompanyCode,
PS_RootWBS.ControllingArea,
PS_RootWBS.FunctionalArea,
PS_RootWBS.Plant,
PS_RootWBS.FactoryCalendar,
PS_RootWBS.CostingSheet,
PS_RootWBS.CostCenter,
PS_RootWBS.WBSElementIsBillingElement as IsBillingRelevant,
PS_RootWBS.WBSIsStatisticalWBSElement as IsStatistical,
// PS_RootWBS.WBSElementObject,
PS_RootWBS.InvestmentProfile,
// PS_RootWBS.WBSIsStatisticalWBSElement,
// 2005 Functional Location Changes
PS_RootWBS.FunctionalLocation,
/* Overall Project Status information */
OverallStatusArea.StatusAreaUUID as OverallStatusAreaUUID,
OverallStatusArea.Status as OverallProjectStatus, // obsolete should be removed
OverallStatusArea.Criticality as OverallProjectStsCriticality, // obsolete should be removed
OverallStatusArea.StatusTrend as StatusTrend, // obsolete should be removed
/* Admin data needed for Draft */
Project.ProjectLastChangedByUser as LastChangedByUser,
Project.ProjectLastChangedDateTime as LastChangeDateTime,
Project.CreatedByUser,
Project.CreationDateTime,
Project.MasterLanguage,
@ObjectModel.foreignKey.association: '_ProjectType'
Project.ProjectType,
Project.ProjectVersionNumber,
Project.PriorityCode,
//2102 Ent Project Multiple SO item indicator
Project.EntProjIsMultiSlsOrdItmsEnbld,
@ObjectModel.foreignKey.association: '_EnterpriseProjectType'
@ObjectModel.text.association: '_EnterpriseProjectTypeText'
PS_RootWBS.ProjectType as EnterpriseProjectType,
@EndUserText: { label: 'My Project (Project Manager)',
quickInfo: 'My Project (Project Manager)'
}
case when IsMyProject.IsMyProject is null
then
' '
else
IsMyProject.IsMyProject
end as IsMyProject,
@EndUserText: { label: 'My Project (Substitute)',
quickInfo: 'My Project (Substitute)'
}
case when IsMyProjectAsSubstitute.IsMyProject is null
then
' '
else
IsMyProjectAsSubstitute.IsMyProject
end as IsMyProjectAsSubstitute,
@EndUserText: { label: 'My Project (Steering Committee Member)',
quickInfo: 'My Project (Steering Committee Member)'
}
case when IsPrjSteerMbr.IsInRoleCategory is null
then
' '
else
IsPrjSteerMbr.IsInRoleCategory
end as IsProjectSteeringCommitteeMbr,
@EndUserText: { label: 'My Project (Project Financial Controller)',
quickInfo: 'My Project (Project Financial Controller)'
}
case when IsPrjFinCtrlr.IsInRoleCategory is null
then
' '
else
IsPrjFinCtrlr.IsInRoleCategory
end as IsProjectFinancialController,
@EndUserText: { label: 'My Project (Project Manager)',
quickInfo: 'My Project (Project Manager)'
}
case when IsPrjManager.IsInRoleCategory is null
then
' '
else
IsPrjManager.IsInRoleCategory
end as EntProjectIsProjectManager,
Responsible.BusinessPartnerUUID as ProjectManagerUUID,
@EndUserText: { label: 'Project Start',
quickInfo: 'Project Start'
}
Project.LatestStartDate as ProjectStartDate,
@EndUserText: { label: 'Project Finish',
quickInfo: 'Project Finish'
}
Project.LatestFinishDate as ProjectEndDate,
Project.ForecastedStartDate as ForecastedStartDate,
@EndUserText: { label: 'Forecasted Finish',
quickInfo: 'Forecasted Finish'
}
Project.ForecastedStartDate as ForecastedEndDate,
Project.ProjectElementDuration,
// Project.StartConstraintDateTime,
// Project.FinishConstraintDateTime,
// Project.EarliestStartDateTime,
// Project.ActualStartDateTime,
// Project.LatestStartDateTime as PlannedStartDate,
// Project.EarliestFinishDateTime,
// Project.ActualFinishDateTime,
// Project.LatestFinishDateTime as PlannedFinishDate,
//CE2011 ACTUAL DATES
Project.ActualStartDate as ActualStartDate,
Project.ActualFinishDate as ActualEndDate,
//CE2011 ACTUAL DATES
/* Essential milestone */
MlstnEssential.TaskUUID as NextEssentialMlstnUUID,
/* Next released milestone */
MlstnRelevant.TaskUUID as NextRelevantMlstnUUID,
PS_Project.AvailabilityControlProfile,
PS_Project.AvailabilityControlIsActive,
//CE2208 Enabling Project Stock
PS_Project.EntProjHasProjectStockEnabled,
/* Assocations */
_ProjectTask,
_ProcessingStatus,
_ProcessingStatusText,
_ProjectType,
_ProTypeName,
_NextEssentialMlstn,
_NextRelevantMlstn,
_ProjectManager,
_ProjectResponsible,
_Substitute,
_StatusObjectData,
_AreaStatus,
_AreaStatusText,
_AreaTrend,
_AreaTrendText,
_ProjectName,
_ControllingArea,
_ResponsibleCostCenter,
_CompanyCode,
_CostCenter,
_Plant,
_ProjectProfileCode,
_FunctionalArea,
_ProfitCenter,
_Priority,
_PriorityText,
_EnterpriseProjectType,
_EnterpriseProjectTypeText,
//hierarchical settlement changes
_EntProjectSettlementType,
Project._CreatedByUser,
Project._ProjectLastChangedByUser,
Project._AuthUser,
Project._AuthSubst,
Project._AuthRole,
Project._AuthGroup,
Project._I_Project,
Project._ProjObjRoot
}
/*+[internal] {
"BASEINFO":
{
"FROM":
[
"I_PPM_ISMYPROJECT",
"I_PPM_ISMYPROJECTASSUBSTITUTE",
"I_PPM_PROJECTMILESTESSENT",
"I_PPM_PROJECTMILESTRELNEXT",
"I_PPM_PROJECTSTATUSAREA",
"I_PPM_PROJECTSUMMARYTASK",
"I_PPM_SINGLERESPONSIBLEFORPROJ",
"I_PPM_TEAMMEMBERISINROLE",
"I_PROJECTBASICDATA",
"I_WBSELEMENTBASICDATA"
],
"ASSOCIATED":
[
"I_BUSINESSUSER",
"I_COMPANYCODE",
"I_CONTROLLINGAREA",
"I_COSTCENTER",
"I_ENTPROJECTSETTLEMENTTYPE",
"I_FUNCTIONALAREA",
"I_PLANT",
"I_PPM_AUTHZNBYSUBSTITH",
"I_PPM_AUTHZNBYUSERROLEH",
"I_PPM_AUTHZNBYUSRGRPH",
"I_PPM_AUTHZNBYUSRH",
"I_PPM_PRIORITY",
"I_PPM_PRIORITYTEXT",
"I_PPM_PROCESSINGSTATUSTEXT",
"I_PPM_PROJECTPROCGSTATUSVH",
"I_PPM_PROJECTRESPONSIBLE",
"I_PPM_PROJECTTYPE",
"I_PPM_PROTYPETEXT",
"I_PPM_SINGLERESPONSIBLEFORPROJ",
"I_PPM_STATUSAREASTATUS",
"I_PPM_STATUSAREASTATUSTEXT",
"I_PPM_STATUSAREATREND",
"I_PPM_STATUSAREATRENDTEXT",
"I_PPM_SUBSTITUTE",
"I_PPM_TASK",
"I_PPM_TASKTEXT",
"I_PPM_USER",
"I_PROFITCENTER",
"I_PROJECTBASICDATA",
"I_PROJECTPROFILECODE",
"I_PROJECTTYPE",
"I_PROJECTTYPETEXT",
"I_STATUSOBJECTSTATUSBASIC",
"I_USER",
"I_WBSELEMENTBASICDATA"
],
"BASE":
[
"I_PPM_PROJECTSUMMARYTASK",
"I_PROJECTBASICDATA",
"I_WBSELEMENTBASICDATA"
],
"ANNO_REF":
[],
"SCALAR_FUNCTION":
[],
"VERSION":0,
"ANNOREF_EVALUATION_ERROR":""
}
}*/