@EndUserText.label: 'Maintenance Notification'
@VDM.viewType: #CONSUMPTION
@AbapCatalog.sqlViewName: 'CPMNOTIFHEAD'
@AccessControl.authorizationCheck:#CHECK
@AbapCatalog.compiler.compareFilter: true
@ObjectModel.representativeKey: 'MaintNotifWithLeadingZeros'
@ClientHandling.algorithm: #SESSION_VARIABLE
@ObjectModel.usageType.dataClass: #TRANSACTIONAL
@ObjectModel.usageType.serviceQuality: #D
@ObjectModel.usageType.sizeCategory: #XL
@AccessControl.personalData.blocking: #('TRANSACTIONAL_DATA')
define view C_PMNotificationHeader
with parameters
@Consumption.hidden: true
@Environment.systemField: #SYSTEM_LANGUAGE
P_Language : sylangu,
@Consumption.hidden: true
@Environment.systemField: #SYSTEM_DATE
P_KeyDate : sydate,
@Consumption.hidden: true
@Environment.systemField: #SYSTEM_TIME
P_KeyTime : sytime,
@Consumption.hidden: true
@Environment.systemField: #USER
P_User : syuname,
// Notification Category (Maintenance Notification = '01')
P_NotificationCategory : qmtyp
as select from I_MaintenanceNotification
association [0..1] to C_TechObjNotifSubQuery as _TechnicalObject on _TechnicalObject.MaintenanceNotification = $projection.MaintNotifWithLeadingZeros
// 0..* due to association cardinality check:
association [0..*] to I_PlantMaintenancePartner as _InterestedParty on _InterestedParty.MaintObjectInternalID = $projection.MaintNotifInternalID
and _InterestedParty.PartnerFunction = 'IT' // Interested party
association [0..1] to I_PMContactCardUser as _PMContactCardUser on _PMContactCardUser.UserID = $projection.ReportedByUser
association [0..1] to I_EquipmentText as _EquipmentText on _EquipmentText.Equipment = $projection.equipment
and _EquipmentText.Language = $session.system_language
association [0..1] to I_FunctionalLocationText as _FunctionalLocationText on _FunctionalLocationText.FunctionalLocation = $projection.functionallocation
and _FunctionalLocationText.Language = $session.system_language
association [0..1] to I_TechObjIsEquipOrFuncnlLocT as _TechObjIsEquipT on _TechObjIsEquipT.TechObjIsEquipOrFuncnlLoc = 'EAMS_EQUI'
and _TechObjIsEquipT.Language = $session.system_language
association [0..1] to I_TechObjIsEquipOrFuncnlLocT as _TechObjIsFuncnlLocT on _TechObjIsFuncnlLocT.TechObjIsEquipOrFuncnlLoc = 'EAMS_FL'
and _TechObjIsFuncnlLocT.Language = $session.system_language
{
@ObjectModel.foreignKey.association: '_TechnicalObject'
key MaintenanceNotification as MaintNotifWithLeadingZeros,
ltrim( MaintenanceNotification, '0') as MaintenanceNotification,
//Associations
@ObjectModel.foreignKey.association: '_InterestedParty'
MaintNotifInternalID,
@ObjectModel.foreignKey.association: '_PMContactCardUser'
ReportedByUser,
_PMNotifMaintenanceData.Equipment,
_PMNotifMaintenanceData._LocationAccountAssignment.FunctionalLocation,
_PMNotifMaintenanceData._LocationAccountAssignment._FunctionalLocation._FunctionalLocationLabel.FunctionalLocationLabelName,
MaintPriority,
MaintPriorityType,
NotificationType,
NotifProcessingPhase,
NotificationText,
CreatedByUser,
CreationDate,
CreationTime,
LastChangedByUser,
MaintenanceOrder,
RequiredStartDate,
RequiredStartTime,
RequiredEndDate,
RequiredEndTime,
NotificationCreationDate,
NotificationCreationTime,
NotificationTimeZone,
IsCompleted,
IsDeleted,
_PMNotificationType.NotificationCategory,
dats_tims_to_tstmp(NotificationCreationDate, NotificationCreationTime, NotificationTimeZone, $session.client, 'NULL' ) as NotificationDateTime,
// LastChangeDateTime shall never turn NULL, as it will cause DPC to raise an exception (ETag handling).
// SAP Note 636992: Internal timestamps are always in system timezone.
dats_tims_to_tstmp(LastChangeDate, LastChangeTime, abap_system_timezone($session.client, 'INITIAL'), $session.client, 'FAIL') as LastChangeDateTime,
// Reference Object
_PMNotifMaintenanceData.Assembly,
//Responsibilities
_PMNotifMaintenanceData.MaintenancePlannerGroup,
_PMNotifMaintenanceData.MaintenancePlanningPlant,
_MainWorkCenter.WorkCenter as MainWorkCenter,
MaintenanceWorkCenterPlant,
// Malfunction Effect
_PMNotifMaintenanceData.MalfunctionEffect,
_PMNotifMaintenanceData._MalfunctionEffect._Text[1: Language = $parameters.P_Language ].MalfunctionEffectText,
//Location Data
_PMNotifMaintenanceData._LocationAccountAssignment.MaintenanceObjectLocation,
_PMNotifMaintenanceData._LocationAccountAssignment.MaintenancePlant,
_PMNotifMaintenanceData._LocationAccountAssignment.AssetLocation,
_PMNotifMaintenanceData._LocationAccountAssignment.AssetRoom,
_PMNotifMaintenanceData._LocationAccountAssignment.PlantSection,
_PMNotifMaintenanceData._LocationAccountAssignment._WorkCenter.WorkCenter as MaintenanceWorkCenter,
_PMNotifMaintenanceData.LocationDescription,
// Account assignment
_PMNotifMaintenanceData._LocationAccountAssignment.ControllingArea,
_PMNotifMaintenanceData._LocationAccountAssignment.BusinessArea,
_PMNotifMaintenanceData._LocationAccountAssignment.CostCenter,
_PMNotifMaintenanceData._LocationAccountAssignment.CompanyCode,
// Text fields
_PMNotificationPhase._Text[1: Language = $parameters.P_Language ].NotifProcessingPhaseDesc,
_PMNotificationPriority._Text[1: Language = $parameters.P_Language ].MaintPriorityDesc,
_PMNotificationType._Text[1: Language = $parameters.P_Language ].NotificationTypeName,
// Corresponding 'Interested Party' entry in Maintenance Partner Table exists for User? --> Subscribed!
case _InterestedParty[1: Partner = $parameters.P_User ].MaintObjectInternalID
when MaintNotifInternalID then 'X'
else '' end as UserIsNotified,
// Changed Timestamp
CONCAT(LastChangeDate, LastChangeTime) as ChangedDateTime,
// Reporter field to display on UI
case when _PMContactCardUser.FullName is not null and _PMContactCardUser.FullName != '' then _PMContactCardUser.FullName
when _PMContactCardUser.UserID is not null and _PMContactCardUser.UserID != '' then _PMContactCardUser.UserID
else ReportedByUser end as ReporterFullName,
// SAP User ID of Reporter (if available)
_PMContactCardUser.UserID as ReporterUserID,
// Calculated Date Monitor Field
case when ( RequiredStartDate is null or RequiredStartDate = '00000000' ) and
( RequiredEndDate is null or RequiredEndDate = '00000000' )
then 'I' // Inactive
else
case when RequiredStartDate > $parameters.P_KeyDate or
( RequiredStartDate = $parameters.P_KeyDate and RequiredStartTime > $parameters.P_KeyTime)
then 'G' // Green --> Start Date not reached
else
case when RequiredEndDate > $parameters.P_KeyDate or
RequiredEndDate is null or RequiredEndDate = '00000000' or
( RequiredEndDate = $parameters.P_KeyDate and RequiredEndTime > $parameters.P_KeyTime )
then 'Y' // Yellow --> End Date not reached
else 'R' // Red --> End Date reached
end
end
end as DateMonitor,
_PMNotificationType.UserCanBeNotified,
//_ResponsiblePerson.Partner as PersonResponsible,
// Technical Object fields
// Technical Object fields
case when I_MaintenanceNotification._PMNotifMaintenanceData.Equipment != '' then
cast( I_MaintenanceNotification._PMNotifMaintenanceData.Equipment as eams_tec_obj )
when I_MaintenanceNotification._PMNotifMaintenanceData.Equipment = '' and
I_MaintenanceNotification._PMNotifMaintenanceData._LocationAccountAssignment.FunctionalLocation != '' then
cast( I_MaintenanceNotification._PMNotifMaintenanceData._LocationAccountAssignment.FunctionalLocation as eams_tec_obj)
else cast('' as eams_tec_obj ) end as TechObjectWithLeadingZeros,
case when I_MaintenanceNotification._PMNotifMaintenanceData.Equipment != '' then
cast ( 'EAMS_EQUI' as eams_tec_obj_type)
when I_MaintenanceNotification._PMNotifMaintenanceData.Equipment = '' and
I_MaintenanceNotification._PMNotifMaintenanceData._LocationAccountAssignment.FunctionalLocation != '' then
cast ( 'EAMS_FL' as eams_tec_obj_type)
else cast('' as eams_tec_obj_type ) end as TechObjIsEquipOrFuncnlLoc,
case when _PMNotifMaintenanceData.Equipment = '' then
cast( _PMNotifMaintenanceData._LocationAccountAssignment._FunctionalLocation._FunctionalLocationLabel.FunctionalLocationLabelName as eams_tec_obj )
else cast( _PMNotifMaintenanceData.Equipment as eams_tec_obj ) end as TechnicalObject,
case when _PMNotifMaintenanceData.Equipment = '' then
cast( _PMNotifMaintenanceData._LocationAccountAssignment._FunctionalLocation._FunctionalLocationText[1: Language = $session.system_language ].FunctionalLocationName as eams_tec_obj_des )
else cast( _PMNotifMaintenanceData._Equipment._EquipmentText[1: Language = $session.system_language ].EquipmentName as eams_tec_obj_des ) end as TechnicalObjectDescription,
cast( case when I_MaintenanceNotification._PMNotifMaintenanceData.Equipment != '' then _TechObjIsEquipT.TechObjIsEquipOrFuncnlLocDesc
when I_MaintenanceNotification._PMNotifMaintenanceData.Equipment = '' and
I_MaintenanceNotification._PMNotifMaintenanceData._LocationAccountAssignment.FunctionalLocation != '' then _TechObjIsFuncnlLocT.TechObjIsEquipOrFuncnlLocDesc end as eams_tec_obj_type_desc ) as TechObjIsEquipOrFuncnlLocDesc,
coalesce( _PMNotifMaintenanceData._Equipment.EquipmentCategory, _PMNotifMaintenanceData._LocationAccountAssignment._FunctionalLocation.FunctionalLocationCategory ) as TechnicalObjectCategory,
case when _PMNotifMaintenanceData.Equipment = '' then _PMNotifMaintenanceData._LocationAccountAssignment._FunctionalLocation._FunctionalLocationCategory._Text[ Language = $parameters.P_Language ].FunctionalLocationCategoryDesc
else _PMNotifMaintenanceData._Equipment._EquipmentCategory._Text[ Language = $parameters.P_Language ].EquipmentCategoryDesc end as TechnicalObjectCategoryDesc,
coalesce( _PMNotifMaintenanceData._Equipment.TechnicalObjectType, _PMNotifMaintenanceData._LocationAccountAssignment._FunctionalLocation.TechnicalObjectType ) as TechnicalObjectType,
case when _PMNotifMaintenanceData.Equipment = '' then _PMNotifMaintenanceData._LocationAccountAssignment._FunctionalLocation._TechnicalObjectType._Text[ Language = $parameters.P_Language ].TechnicalObjectTypeDesc
else _PMNotifMaintenanceData._Equipment._TechnicalObjectType._Text[ Language = $parameters.P_Language ].TechnicalObjectTypeDesc end as TechnicalObjectTypeDesc,
coalesce( _PMNotifMaintenanceData._Equipment.AssetManufacturerName, _PMNotifMaintenanceData._LocationAccountAssignment._FunctionalLocation.AssetManufacturerName ) as AssetManufacturerName,
coalesce( _PMNotifMaintenanceData._Equipment.ManufacturerPartTypeName, _PMNotifMaintenanceData._LocationAccountAssignment._FunctionalLocation.ManufacturerPartTypeName ) as ManufacturerPartTypeName,
coalesce( _PMNotifMaintenanceData._Equipment._CurrentTimeSegment._LocationAccountAssignment.ABCIndicator, _PMNotifMaintenanceData._LocationAccountAssignment._FunctionalLocation._LocationAccountAssignment.ABCIndicator ) as ABCIndicator,
coalesce( _PMNotifMaintenanceData._Equipment.AuthorizationGroup, _PMNotifMaintenanceData._LocationAccountAssignment._FunctionalLocation.AuthorizationGroup ) as AuthorizationGroup,
// Propagate associations
_PMNotificationPhase,
_PMNotificationPriority,
_PMNotificationType,
_PMNotifMaintenanceData,
_InterestedParty,
_TechnicalObject,
_PMContactCardUser
//_ResponsiblePerson
}
where
_PMNotificationType.NotificationCategory = $parameters.P_NotificationCategory