@VDM.viewType: #CONSUMPTION
@ObjectModel.usageType.dataClass: #MIXED
@ObjectModel.usageType.serviceQuality: #X
@ObjectModel.usageType.sizeCategory: #XL
@ObjectModel.semanticKey: [ 'MaintenanceNotification' ]
@ObjectModel.representativeKey: 'MaintenanceNotification'
@AbapCatalog.sqlViewName: 'CMALFUNCREPORT'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Repair Malfunction Job List'
@AccessControl.privilegedAssociations: [ '_Involvement' ]
@Search.searchable: true
@ClientHandling.algorithm: #SESSION_VARIABLE
@AccessControl.personalData.blocking: #('TRANSACTIONAL_DATA')
@UI: {
headerInfo: {
description: {
value: 'NotificationText',
type: #STANDARD
},
title: {
value: 'MaintenanceNotification',
type: #STANDARD
},
typeName: 'Malfunction Report',
typeNamePlural: 'Malfunction Reports'
}
}
define view C_Malfunctionreport
as select from I_MaintNotificationTechObj
// inner join I_StatusObjectActiveStatus on I_MaintNotificationTechObj.MaintNotifInternalID = I_StatusObjectActiveStatus.StatusObject
// and I_StatusObjectActiveStatus.StatusCode = 'I3350'
// left outer join I_MaintenanceJobOverallStatus as _OverallJobStatus on I_MaintNotificationTechObj.MaintNotifInternalID = _OverallJobStatus.MaintenanceJobInternalID
association [1..*] to I_StatusObjectStatus as _StatusObjectStatus on $projection.MaintNotifInternalID = _StatusObjectStatus.StatusObject
association [0..1] to I_MaintenanceJobOverallStatus as _OverallJobStatus on $projection.MaintNotifInternalID = _OverallJobStatus.MaintenanceJobInternalID
association [0..1] to C_MalfunctionOvrStatsVH as _OverallStatusVH on $projection.eamoverallobjectstatus = _OverallStatusVH.EAMOverallStatus
and $projection.eamoverallobjectstatusprofile = _OverallStatusVH.EAMOverallStatusProfile
association [0..1] to I_WorkforcePerson as _MaintNotifPersonResponsible on $projection.PersonResponsible = _MaintNotifPersonResponsible.PersonExternalID
association [0..1] to I_PMContactCardEmployee as _PersonResponsible on $projection.PersonResponsible = _PersonResponsible.PersonnelNumber
association [0..1] to I_PMContactCardEmployee as _PersonInvolved on $projection.PersonInvolved = _PersonInvolved.PersonnelNumber
association [0..*] to C_MalfunctionReportInvlmnts as _Involvement on _Involvement.MaintenanceJobInternalID = $projection.MaintNotifInternalID
association [0..1] to I_PMContactCardUser as _CreatedBy on $projection.CreatedByUser = _CreatedBy.UserID
association [0..*] to I_WorkCenterText as _WorkCenterText on $projection.WorkCenterInternalID = _WorkCenterText.WorkCenterInternalID
and _WorkCenterText.WorkCenterTypeCode = 'A'
association [0..*] to C_PMWorkCenterVH as _WorkCenterVH on $projection.workcenter = _WorkCenterVH.WorkCenter
and $projection.MaintenanceWorkCenterPlant = _WorkCenterVH.Plant
and _WorkCenterVH.WorkCenterTypeCode = 'A'
association [0..*] to I_TechnicalObjectText as _TechnicalObjectText on $projection.TechnicalObject = _TechnicalObjectText.TechnicalObject
and $projection.TechObjIsEquipOrFuncnlLoc = _TechnicalObjectText.TechObjIsEquipOrFuncnlLoc
association [0..1] to C_TechnicalObjectFlatVH as _TechnicalObjectVH on $projection.TechnicalObject = _TechnicalObjectVH.TechnicalObject
and $projection.TechObjIsEquipOrFuncnlLoc = _TechnicalObjectVH.TechObjIsEquipOrFuncnlLoc
association [0..1] to C_TechnicalObjectForEditVH as _TechnicalObjectForEditVH on $projection.TechnicalObjectLabel = _TechnicalObjectForEditVH.TechnicalObjectLabel
and $projection.TechnicalObject = _TechnicalObjectForEditVH.TechnicalObject
and $projection.TechObjIsEquipOrFuncnlLoc = _TechnicalObjectForEditVH.TechObjIsEquipOrFuncnlLoc
association [0..1] to C_Malfunctionreporttype as _MalfunctionReportType on $projection.NotificationType = _MalfunctionReportType.NotificationType
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_FunctionalLocationLabel as _FunctionalLocationLabel on _FunctionalLocationLabel.FunctionalLocation = $projection.FunctionalLocation
-- Extensions, do not expose as association:
association [0..1] to E_PMNotifMaintenanceData as _NotifMaintenanceDataExtension on $projection.MaintenanceNotification = _NotifMaintenanceDataExtension.MaintenanceNotification
association [0..1] to E_MaintenanceOrder as _MaintenanceOrderExtension on $projection.MaintenanceOrder = _MaintenanceOrderExtension.MaintenanceOrder
{
@UI: {
fieldGroup: {qualifier:'MaintenanceNotification', position:10, label: 'Maintenance Notification', importance: #HIGH, type: #WITH_INTENT_BASED_NAVIGATION, semanticObjectAction:'display' },
lineItem: {position: 10, importance: #HIGH}
}
@Consumption.semanticObject: 'MaintenanceNotification'
@EndUserText.label: 'Issue'
@Search: {defaultSearchElement: true, ranking: #HIGH, fuzzinessThreshold: 0.8}
@Consumption.valueHelpDefinition: [{
entity: {
name: 'I_MaintNotifStdVH',
element: 'MaintenanceNotification'
}
}]
key I_MaintNotificationTechObj.MaintenanceNotification,
@UI.hidden: true
@Search: {defaultSearchElement: true, ranking: #HIGH, fuzzinessThreshold: 0.8}
I_MaintNotificationTechObj.NotificationText,
@Consumption.valueHelp: '_MalfunctionReportType'
I_MaintNotificationTechObj.NotificationType,
@UI.hidden: true
I_MaintNotificationTechObj.MaintNotifInternalID,
// '' as MaintNotifWithLeadingZeros,
//--[ GENERATED:012:GFBfhxvv7jY4hYOuhNduX0
@Consumption.valueHelpDefinition: [
{ entity: { name: 'I_MaintenanceOrderStdVH',
element: 'MaintenanceOrder' }
}]
// ]--GENERATED
@Search: {defaultSearchElement: true, ranking: #HIGH, fuzzinessThreshold: 0.8}
@Consumption.semanticObject: 'MaintenanceOrder'
@ObjectModel.foreignKey.association: '_MaintenanceOrder'
@ObjectModel.text.element: ['MaintenanceOrderDesc']
I_MaintNotificationTechObj.MaintenanceOrder,
@UI.hidden: true
@Search: {defaultSearchElement: true, ranking: #HIGH, fuzzinessThreshold: 0.8}
I_MaintNotificationTechObj._MaintenanceOrder.MaintenanceOrderDesc,
@UI.hidden: true
I_MaintNotificationTechObj.WorkCenterInternalID,
@ObjectModel.text.element: ['WorkCenterText']
//@ObjectModel.text.association: '_WorkCenterText'
@Consumption.valueHelp: '_WorkCenterVH'
@Consumption.valueHelpDefinition: null
I_MaintNotificationTechObj._MainWorkCenter.WorkCenter,
@UI.hidden: true
@Semantics.text: true
_WorkCenterText[1:Language=$session.system_language].WorkCenterText,
@EndUserText.label: 'Work Center Plant'
I_MaintNotificationTechObj.MaintenanceWorkCenterPlant,
@UI: {
lineItem: { position: 50, importance: #HIGH, criticality: 'MaintPriorityColorCode', criticalityRepresentation: #WITHOUT_ICON }
}
@Consumption.valueHelpDefinition: [
{ entity: { name: 'I_PMNotificationPriority',
element: 'MaintPriority' }
}]
@UI.textArrangement: #TEXT_ONLY
I_MaintNotificationTechObj.MaintPriority,
@UI.hidden: true
I_MaintNotificationTechObj._PMNotificationPriority.MaintPriorityColorCode,
@Consumption.hidden: true
I_MaintNotificationTechObj._PMNotificationPriority._Text[1: Language = $session.system_language ].MaintPriorityDesc,
@Consumption.hidden: true
I_MaintNotificationTechObj.MaintPriorityType,
@UI.hidden: true
I_MaintNotificationTechObj.TechnicalObject,
@UI.hidden: true
I_MaintNotificationTechObj._TechObjIsEquipOrFuncnlLoc._Text[1: Language = $session.system_language ].TechObjIsEquipOrFuncnlLocDesc,
@UI.hidden: true
@ObjectModel.foreignKey.association: '_TechObjIsEquipOrFuncnlLoc'
I_MaintNotificationTechObj.TechObjIsEquipOrFuncnlLoc,
// @UI.hidden: true
@Search: { defaultSearchElement: true, ranking: #HIGH, fuzzinessThreshold: 0.8 }
@ObjectModel.text.element: ['EquipmentName']
I_MaintNotificationTechObj.Equipment,
@UI.hidden: true
I_MaintNotificationTechObj.FunctionalLocation,
// @UI.hidden: true
// @EndUserText.label: 'Technical Object Description'
// @Search: { defaultSearchElement: true, ranking: #HIGH, fuzzinessThreshold: 0.8 }
// _TechnicalObjectText[1: Language = $session.system_language ].TechnicalObjectDescription,
// @UI.hidden: true
@Search: { defaultSearchElement: true, ranking: #HIGH, fuzzinessThreshold: 0.8 }
@ObjectModel.text.element: ['FunctionalLocationName']
@Consumption.valueHelpDefinition: [{ entity: { name: 'I_FunctionalLocationLabelStdVH', element: 'FunctionalLocationLabelName' } }]
_FunctionalLocationLabel._FuncLocationLabelSearch.FunctionalLocationLabelName,
@Consumption.semanticObject: 'MaintenanceObject'
@Consumption.valueHelp: '_TechnicalObjectForEditVH'
@ObjectModel.text.element: ['TechnicalObjectDescription']
case when _PMNotifMaintenanceData.Equipment = '' then
cast( _FunctionalLocationLabel.FunctionalLocationLabelName as eams_tech_obj_conv )
else cast( Equipment as eams_tech_obj_conv ) end as TechnicalObjectLabel,
@UI.hidden: true
case when Equipment = '' then
cast( _FunctionalLocationText.FunctionalLocationName as eams_tec_obj_des )
else cast( _EquipmentText.EquipmentName as eams_tec_obj_des ) end as TechnicalObjectDescription,
@UI.hidden: true
@Search: { defaultSearchElement: true, ranking: #HIGH, fuzzinessThreshold: 0.8 }
@Semantics.text: true
_FunctionalLocationText.FunctionalLocationName,
@UI.hidden: true
@Search: { defaultSearchElement: true, ranking: #HIGH, fuzzinessThreshold: 0.8 }
@Semantics.text: true
_EquipmentText.EquipmentName,
//--[ GENERATED:012:GFBfhxvv7jY4hYOuhNduX0
@Consumption.valueHelpDefinition: [
{ entity: { name: 'I_PersWrkAgrmtSrchHelp',
element: 'PersonWorkAgreement' }
}]
// ]--GENERATED
@UI: {lineItem: {position: 20, importance: #HIGH}}
//@UI.textArrangement: #TEXT_ONLY
@EndUserText.label: 'Processed By'
@ObjectModel.foreignKey.association : '_PersonResponsible'
@ObjectModel.text.element: [ 'PersonResponsibleName' ]
// casting is required to support $filter (leading zeros/no leading zeros)
cast( I_MaintNotificationTechObj.PersonResponsible as persno ) as PersonResponsible,
@UI.hidden: true
@ObjectModel.virtualElement
@ObjectModel.virtualElementCalculatedBy: 'ABAP:CL_EAM_OBJPG_MAINT_BP_TXT_EXIT'
cast('' as eams_person_responsible_name) as PersonResponsibleName,
@UI.hidden: true
cast( case when _StatusObjectStatus[ StatusCode = 'I3350' and StatusIsInactive = '' ].StatusObject is not null then 'F2023'
when _StatusObjectStatus[ StatusCode = 'I3351' and StatusIsInactive = '' ].StatusObject is not null then 'F2023'
else '' end as pm_source_appl) as MaintNotifSourceApplication,
@EndUserText.label: 'Reported By'
@Consumption.valueHelpDefinition: [
{ entity: { name: 'I_PMContactCardUser',
element: 'FullName' }
}]
I_MaintNotificationTechObj.ReporterFullName,
@Consumption.valueHelp: '_MalfunctionEffect'
I_MaintNotificationTechObj.MalfunctionEffect,
@EndUserText.label: 'Created By'
@ObjectModel.foreignKey.association: '_CreatedBy'
@ObjectModel.text.element: [ 'CreatedByUserName' ]
//@UI.textArrangement: #TEXT_FIRST
I_MaintNotificationTechObj.CreatedByUser,
@UI.hidden: true
@ObjectModel.virtualElement
@ObjectModel.virtualElementCalculatedBy: 'ABAP:CL_EAM_OBJPG_MAINT_BP_TXT_EXIT'
cast('' as eams_person_responsible_name) as CreatedByUserName,
@EndUserText.label: 'Malfunction Start Date'
@Consumption.filter.hidden: true
I_MaintNotificationTechObj.MalfunctionStartDate,
@EndUserText.label: 'Malfunction Start Time'
@Consumption.filter.hidden: true
I_MaintNotificationTechObj.MalfunctionStartTime,
@EndUserText.label: 'Malfunction End Date'
@Consumption.filter.hidden: true
I_MaintNotificationTechObj.MalfunctionEndDate,
@EndUserText.label: 'Malfunction End Time'
@Consumption.filter.hidden: true
I_MaintNotificationTechObj.MalfunctionEndTime,
@UI.hidden: true
I_MaintNotificationTechObj.NotificationCreationDate,
@Consumption.filter.hidden: true
I_MaintNotificationTechObj.NotificationCreationTime,
@UI.hidden: true
I_MaintNotificationTechObj.NotificationTimeZone,
// @Semantics.timeZone: true
// @EndUserText.label: 'User Timezone'
// @UI.hidden: true
// cast( abap_user_timezone( $session.user,$session.client,'NULL' ) as tzonso preserving type ) as UserEnteredTimeZone,
//@UI.hidden: true
//@Semantics.timeZone: true
//I_MaintNotificationTechObj._MaintenanceWorkCenterPlant._OrganizationAddress[1:AddressRepresentationCode = ''].AddressTimeZone,
@UI: {lineItem: {position: 40, importance: #MEDIUM}}
@EndUserText.label: 'Reported On'
@EndUserText.quickInfo: 'Reported On'
@Consumption.filter.selectionType: #INTERVAL
@ObjectModel.filter.enabled: true
@Semantics.dateTime: true
//@Semantics.timeZoneReference: 'UserEnteredTimeZone'
@ObjectModel.virtualElement
@ObjectModel.virtualElementCalculatedBy: 'ABAP:CL_EAM_MALFUNC_NOTIF_HEAD_EX'
@ObjectModel.sort.transformedBy: 'ABAP:CL_EAM_MALFUNC_NOTIF_HEAD_EX'
cast( '000000000000' as timestamp ) as NotificationDateTime,
@EndUserText.label: 'Malfunction Start'
@Consumption.filter.selectionType: #INTERVAL
//@Semantics.timeZoneReference: 'UserEnteredTimeZone'
@Semantics.dateTime: true
@ObjectModel.virtualElement
@ObjectModel.virtualElementCalculatedBy: 'ABAP:CL_EAM_MALFUNC_NOTIF_HEAD_EX'
@ObjectModel.sort.transformedBy: 'ABAP:CL_EAM_MALFUNC_NOTIF_HEAD_EX'
cast( '000000000000' as timestamp ) as MalfunctionStartDateTime,
@EndUserText.label: 'Malfunction End'
@Consumption.filter.selectionType: #INTERVAL
//@Semantics.timeZoneReference: 'UserEnteredTimeZone'
@Semantics.dateTime: true
@ObjectModel.virtualElement
@ObjectModel.virtualElementCalculatedBy: 'ABAP:CL_EAM_MALFUNC_NOTIF_HEAD_EX'
@ObjectModel.sort.transformedBy: 'ABAP:CL_EAM_MALFUNC_NOTIF_HEAD_EX'
cast( '000000000000' as timestamp ) as MalfunctionEndDateTime,
@UI: {lineItem: {position: 30, importance: #HIGH}}
@EndUserText.label: 'Status'
@ObjectModel.foreignKey.association: '_OverallStatus'
@Consumption.valueHelp: '_OverallStatusVH'
@UI.textArrangement: #TEXT_ONLY
_OverallJobStatus.EAMOverallObjectStatus,
@UI.hidden: true
@ObjectModel.foreignKey.association: '_OverallStatusProfile'
_OverallJobStatus.EAMOverallObjectStatusProfile,
//@UI.hidden: true
//I_StatusObjectActiveStatus.StatusCode,
-- virtual filter field for "Person Involved" (will search in header & operations)
//--[ GENERATED:012:GFBfhxvv7jY4hYOuhNduX0
@Consumption.valueHelpDefinition: [
{ entity: { name: 'I_PersWrkAgrmtSrchHelp',
element: 'PersonWorkAgreement' }
}]
// ]--GENERATED
@UI.textArrangement: #TEXT_ONLY
@ObjectModel.foreignKey.association : '_PersonInvolved'
@ObjectModel.filter.transformedBy: 'ABAP:CL_EAM_MALF_INVLMT_FILTER_EXIT'
cast( '' as eam_iwoc_person_involved ) as PersonInvolved,
// Associations
I_MaintNotificationTechObj._PMNotificationPriority,
_PMNotificationType,
_MalfunctionReportType,
_TechObjIsEquipOrFuncnlLoc,
_PersonResponsible,
_PersonInvolved,
_TechnicalObjectVH,
_TechnicalObjectText,
_TechnicalObjectForEditVH,
_MaintenanceOrder,
_WorkCenterText,
_WorkCenterVH,
_OverallJobStatus._OverallStatus,
_OverallJobStatus._OverallStatusProfile,
_OverallStatusVH,
_MalfunctionEffect,
_CreatedBy,
@Consumption.filter.hidden: true
_Involvement,
-- For DCL:
_PMNotifMaintenanceData,
_MaintNotifPersonResponsible
}
where
I_MaintNotificationTechObj.NotifProcessingPhase <> '4' //Completed
and I_MaintNotificationTechObj.NotifProcessingPhase <> '5' //Deletion Flag
/*+[internal] {
"BASEINFO":
{
"FROM":
[
"I_EQUIPMENTTEXT",
"I_FUNCLOCATIONLABELSEARCH",
"I_FUNCTIONALLOCATIONLABEL",
"I_FUNCTIONALLOCATIONTEXT",
"I_MAINTENANCEJOBOVERALLSTATUS",
"I_MAINTENANCEORDER",
"I_MAINTNOTIFICATIONTECHOBJ",
"I_PMNOTIFICATIONPRIORITY",
"I_PMNOTIFICATIONPRIORITYTEXT",
"I_PMNOTIFMAINTENANCEDATA",
"I_STATUSOBJECTSTATUS",
"I_TECHOBJISEQUIPORFUNCNLLOC",
"I_TECHOBJISEQUIPORFUNCNLLOCT",
"I_WORKCENTER",
"I_WORKCENTERTEXT"
],
"ASSOCIATED":
[
"C_MALFUNCTIONOVRSTATSVH",
"C_MALFUNCTIONREPORTINVLMNTS",
"C_MALFUNCTIONREPORTTYPE",
"C_PMWORKCENTERVH",
"C_TECHNICALOBJECTFLATVH",
"C_TECHNICALOBJECTFOREDITVH",
"E_MAINTENANCEORDER",
"E_PMNOTIFMAINTENANCEDATA",
"I_EAMOVERALLSTATUS",
"I_EAMOVERALLSTATUSPROFILE",
"I_EQUIPMENTTEXT",
"I_FUNCTIONALLOCATIONLABEL",
"I_FUNCTIONALLOCATIONTEXT",
"I_MAINTENANCEJOBOVERALLSTATUS",
"I_MAINTENANCEORDER",
"I_MALFUNCTIONEFFECT",
"I_PMCONTACTCARDEMPLOYEE",
"I_PMCONTACTCARDUSER",
"I_PMNOTIFICATIONPRIORITY",
"I_PMNOTIFICATIONTYPE",
"I_PMNOTIFMAINTENANCEDATA",
"I_STATUSOBJECTSTATUS",
"I_TECHNICALOBJECTTEXT",
"I_TECHOBJISEQUIPORFUNCNLLOC",
"I_WORKCENTERTEXT",
"I_WORKFORCEPERSON"
],
"BASE":
[
"I_MAINTENANCEJOBOVERALLSTATUS",
"I_MAINTNOTIFICATIONTECHOBJ"
],
"ANNO_REF":
[],
"SCALAR_FUNCTION":
[],
"VERSION":0,
"ANNOREF_EVALUATION_ERROR":""
}
}*/