@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Equipment'
@Metadata.ignorePropagatedAnnotations: true
@VDM.lifecycle.contract.type: #PUBLIC_REMOTE_API
@VDM.viewType: #COMPOSITE
@VDM.usage.type: [#TRANSACTIONAL_PROCESSING_SERVICE]
@ObjectModel.usageType: {serviceQuality: #C, sizeCategory: #L, dataClass: #MASTER}
define root view entity A_Equipment
as select from I_EquipmentTimeSeg
left outer join I_Equipment on I_Equipment.Equipment = I_EquipmentTimeSeg.Equipment
composition [0..*] of A_EquipmentClfnClass as _Classification
composition [0..*] of A_EquipmentPartner as _Partner
composition [1..1] of A_EquipmentLongText as _LongText
composition [0..*] of A_EquipmentWarrantyAssgmt as _Warranty
association [0..*] to A_EquipmentText as _Text on $projection.Equipment = _Text.Equipment
association [0..1] to I_EquipmentStatus as _EquipmentStatus on $projection.Equipment = _EquipmentStatus.Equipment
association [0..1] to P_EquipHasSubOrdinateEquipment as _EquipHasSubOrdinateEquipment on _EquipHasSubOrdinateEquipment.Equipment = $projection.Equipment
/* Introduced for 2108 CE */
// association [0..1] to I_MaintenancePlannerGroup as _MaintenancePlannerGroupText on _MaintenancePlannerGroupText.MaintenancePlanningPlant = $projection.MaintenancePlanningPlant
// and _MaintenancePlannerGroupText.MaintenancePlannerGroup = $projection.MaintenancePlannerGroup
-- Extensions, do not expose as association:
association [0..1] to E_Equipment as _EquipmentExtension on _EquipmentExtension.Equipment = $projection.Equipment
{
//Header & General Fields
key I_EquipmentTimeSeg.Equipment,
@Semantics.businessDate.to: true
key I_EquipmentTimeSeg.ValidityEndDate,
I_EquipmentTimeSeg.ValidityEndTime,
/* Introduced For 2208 CFD */
@Semantics.dateTime: true
dats_tims_to_tstmp( I_EquipmentTimeSeg.ValidityEndDate, I_EquipmentTimeSeg.ValidityEndTime,
abap_system_timezone( $session.client,'NULL' ),
$session.client, 'NULL' ) as EquipmentValidityEndDateTime,
@Semantics.businessDate.from: true
I_EquipmentTimeSeg.ValidityStartDate,
//MDI_ODM
I_Equipment.EquipmentOID,
I_Equipment._EquipmentText[1:Language=$session.system_language].EquipmentName,
I_Equipment.EquipmentCategory,
I_Equipment.TechnicalObjectType,
I_Equipment.AuthorizationGroup,
@Semantics.quantity.unitOfMeasure: 'GrossWeightUnit'
I_Equipment.GrossWeight,
// @Semantics.unitOfMeasure: true
I_Equipment.GrossWeightUnit,
I_Equipment.SizeOrDimensionText,
I_Equipment.InventoryNumber,
I_Equipment.OperationStartDate,
//Reference Data
@Semantics.amount.currencyCode: 'Currency'
I_Equipment.AcquisitionValue,
// @Semantics.currencyCode:true
I_Equipment.Currency,
I_Equipment.AcquisitionDate,
//Manufacturer Data
I_Equipment.AssetManufacturerName,
I_Equipment.ManufacturerPartTypeName,
I_Equipment.ManufacturerCountry,
I_Equipment.ConstructionYear,
I_Equipment.ConstructionMonth,
I_EquipmentTimeSeg.ManufacturerPartNmbr,
I_Equipment.ManufacturerSerialNumber,
I_Equipment.EquipmentEndOfUseDate, //Added EndOfUseDate - 2308 changes
//Location Fields
I_EquipmentTimeSeg._LocationAccountAssignment.MaintenancePlant,
I_EquipmentTimeSeg._LocationAccountAssignment.AssetLocation,
I_EquipmentTimeSeg._LocationAccountAssignment.AssetRoom,
I_EquipmentTimeSeg._LocationAccountAssignment.PlantSection,
I_EquipmentTimeSeg._LocationAccountAssignment._WorkCenter.WorkCenter,
I_EquipmentTimeSeg._LocationAccountAssignment.WorkCenterInternalID,
I_EquipmentTimeSeg._LocationAccountAssignment._WorkCenter.Plant as WorkCenterPlant,
@Consumption: { hidden: true }
I_EquipmentTimeSeg.WorkCenterTypeCode,
I_EquipmentTimeSeg._LocationAccountAssignment.ABCIndicator,
I_EquipmentTimeSeg._LocationAccountAssignment.MaintObjectFreeDefinedAttrib,
//Address
@Consumption: { hidden: true }
I_EquipmentTimeSeg._LocationAccountAssignment.AddressID,
// I_EquipmentTimeSeg._LocationAccountAssignment._Address.FormOfAddress, // new field 2108
I_EquipmentTimeSeg._LocationAccountAssignment._Address2.FormOfAddress, //Added : 2302 CE - Consider fields from I_Address_2
// I_EquipmentTimeSeg._LocationAccountAssignment._Address.BusinessPartnerName1,
I_EquipmentTimeSeg._LocationAccountAssignment._Address2.OrganizationName1 as BusinessPartnerName1, //Added : 2302 CE - Consider fields from I_Address_2
// I_EquipmentTimeSeg._LocationAccountAssignment._Address.BusinessPartnerName2, // new field 2108
I_EquipmentTimeSeg._LocationAccountAssignment._Address2.OrganizationName2 as BusinessPartnerName2, //Added : 2302 CE - Consider fields from I_Address_2
// I_EquipmentTimeSeg._LocationAccountAssignment._Address.CityName,
I_EquipmentTimeSeg._LocationAccountAssignment._Address2.CityName, //Added : 2302 CE - Consider fields from I_Address_2
// I_EquipmentTimeSeg._LocationAccountAssignment._Address.HouseNumber,
I_EquipmentTimeSeg._LocationAccountAssignment._Address2.HouseNumber, //Added : 2302 CE - Consider fields from I_Address_2
// I_EquipmentTimeSeg._LocationAccountAssignment._Address.HouseNumberSupplementText, // new field 2108
I_EquipmentTimeSeg._LocationAccountAssignment._Address2.HouseNumberSupplementText, //Added : 2302 CE - Consider fields from I_Address_2
// I_EquipmentTimeSeg._LocationAccountAssignment._Address.Building, // new field 2108
I_EquipmentTimeSeg._LocationAccountAssignment._Address2.Building, //Added : 2302 CE - Consider fields from I_Address_2
// I_EquipmentTimeSeg._LocationAccountAssignment._Address.Floor, // new field 2108
I_EquipmentTimeSeg._LocationAccountAssignment._Address2.Floor, //Added : 2302 CE - Consider fields from I_Address_2
// I_EquipmentTimeSeg._LocationAccountAssignment._Address.RoomNumber, // new field 2108
I_EquipmentTimeSeg._LocationAccountAssignment._Address2.RoomNumber, //Added : 2302 CE - Consider fields from I_Address_2
// I_EquipmentTimeSeg._LocationAccountAssignment._Address.PostalCode,
I_EquipmentTimeSeg._LocationAccountAssignment._Address2.PostalCode, //Added : 2302 CE - Consider fields from I_Address_2
// I_EquipmentTimeSeg._LocationAccountAssignment._Address.StreetName,
I_EquipmentTimeSeg._LocationAccountAssignment._Address2.StreetName, //Added : 2302 CE - Consider fields from I_Address_2
// I_EquipmentTimeSeg._LocationAccountAssignment._Address.Region,
I_EquipmentTimeSeg._LocationAccountAssignment._Address2.Region, //Added : 2302 CE - Consider fields from I_Address_2
// I_EquipmentTimeSeg._LocationAccountAssignment._Address.Country,
I_EquipmentTimeSeg._LocationAccountAssignment._Address2.Country, //Added : 2302 CE - Consider fields from I_Address_2
// I_EquipmentTimeSeg._LocationAccountAssignment._Address.PhoneNumber,
I_EquipmentTimeSeg._LocationAccountAssignment._Address2._PhoneNumber.PhoneAreaCodeSubscriberNumber as PhoneNumber, //Added : 2302 CE - Consider fields from I_Address_2
// I_EquipmentTimeSeg._LocationAccountAssignment._Address.FaxNumber,
I_EquipmentTimeSeg._LocationAccountAssignment._Address2._FaxNumber.FaxAreaCodeSubscriberNumber as FaxNumber, //Added : 2302 CE - Consider fields from I_Address_2
//Organization Fields--Account Assignment
I_EquipmentTimeSeg._LocationAccountAssignment.CompanyCode,
I_EquipmentTimeSeg._LocationAccountAssignment.BusinessArea,
I_EquipmentTimeSeg._LocationAccountAssignment.MasterFixedAsset,
I_EquipmentTimeSeg._LocationAccountAssignment.FixedAsset,
I_EquipmentTimeSeg._LocationAccountAssignment.CostCenter,
I_EquipmentTimeSeg._LocationAccountAssignment.ControllingArea,
I_EquipmentTimeSeg._LocationAccountAssignment._WBSElementBasicData.WBSElementExternalID,
I_EquipmentTimeSeg._LocationAccountAssignment.SettlementOrder,
//Responsibilities
I_EquipmentTimeSeg.MaintenancePlanningPlant,
I_EquipmentTimeSeg.MaintenancePlannerGroup,
cast( I_EquipmentTimeSeg._WorkCenter.WorkCenter as gewrk preserving type ) as MainWorkCenter,
I_EquipmentTimeSeg.WorkCenterInternalID as MainWorkCenterInternalID,
cast( I_EquipmentTimeSeg._WorkCenter.Plant as wergw preserving type ) as MainWorkCenterPlant,
I_EquipmentTimeSeg.CatalogProfile,
//Structure Fields
cast(I_EquipmentTimeSeg._LocationAccountAssignment.FunctionalLocation as eams_ui_oid_name preserving type ) as FunctionalLocation,
I_EquipmentTimeSeg._LocationAccountAssignment._FunctionalLocation._FunctionalLocationLabel.FunctionalLocationLabelName,
I_EquipmentTimeSeg._LocationAccountAssignment._FunctionalLocation._FunctionalLocationText[1:Language=$session.system_language].FunctionalLocationName,
I_EquipmentTimeSeg.EquipInstallationPositionNmbr,
I_EquipmentTimeSeg.SuperordinateEquipment,
I_EquipmentTimeSeg.TechnicalObjectSortCode,
I_EquipmentTimeSeg.ConstructionMaterial,
//Serial Data
I_Equipment.Material,
// cast(I_Equipment.SerialNumber as char18 preserving type ) as SerialNumber,
I_Equipment.SerialNumber,
I_Equipment.UniqueItemIdentifier,
I_Equipment.UniqueItemIdentifierStrucType, // new UII field 2111
I_Equipment.UniqueItemIdentifierRespPlant, // new UII field 2111
//Sales Data
I_EquipmentTimeSeg._LocationAccountAssignment.SalesOrganization,
I_EquipmentTimeSeg._LocationAccountAssignment.DistributionChannel,
I_EquipmentTimeSeg._LocationAccountAssignment.OrganizationDivision,
I_EquipmentTimeSeg._LocationAccountAssignment.SalesGroup,
I_EquipmentTimeSeg._LocationAccountAssignment.SalesOffice,
//User Fields
I_Equipment.CreationDate,
I_Equipment.CreatedByUser,
I_Equipment.LastChangedByUser,
/* Additional fields */
/* If record is latest record (today's), then the timestamp comes from equipment.
This is because timestamp on equipment catches changes done to EQUI AND EQUZ. Example: AcquisitionValue changed
If record is an old record (i.e. its validity end date is not in the future), then that time segments timestamp is used.
This will also prevent any later changes of EQUI to be detected by ODP extractor. However this was discussed to be intended. */
case when I_EquipmentTimeSeg.ValidityEndDate = '99991231' then I_Equipment.LastChangeDateTime
else I_EquipmentTimeSeg.LastChangeDateTime end as LastChangeDateTime,
I_EquipmentTimeSeg.NextEquipUsagePeriodSqncNmbr,
I_EquipmentTimeSeg.MaintObjectLocAcctAssgmtNmbr,
I_Equipment.MaintObjectInternalID,
I_EquipmentTimeSeg.EquipUsagePeriodSequenceNumber,
//Status Fields
_EquipmentStatus.EquipmentIsAtCustomer,
_EquipmentStatus.EquipmentIsAvailable,
_EquipmentStatus.EquipmentIsInWarehouse,
_EquipmentStatus.EquipmentIsAssignedToDelivery,
_EquipmentStatus.EquipmentIsMarkedForDeletion,
_EquipmentStatus.EquipmentIsInstalled,
_EquipmentStatus.EquipIsAllocToSuperiorEquip,
_EquipmentStatus.EquipmentIsInactive,
_EquipHasSubOrdinateEquipment.EquipHasSubOrdinateEquipment,
/* Associations */
_Text,
_Classification,
_Partner,
_LongText,
_Warranty
}
where
I_EquipmentTimeSeg.EquipUsagePeriodSequenceNumber = '001'
//Consider latest entry in the EquipmentUsage in a particular day for an equipment
/*+[internal] {
"BASEINFO":
{
"FROM":
[
"I_ADDRESSDEFAULTREPRESENTATION",
"I_ADDRESSFAXNUMBER_2",
"I_ADDRESSPHONENUMBER_2",
"I_EQUIPMENT",
"I_EQUIPMENTSTATUS",
"I_EQUIPMENTTEXT",
"I_EQUIPMENTTIMESEG",
"I_FUNCTIONALLOCATION",
"I_FUNCTIONALLOCATIONLABEL",
"I_FUNCTIONALLOCATIONTEXT",
"I_LOCATIONACCOUNTASSIGNMENT",
"I_WBSELEMENTBASICDATA",
"I_WORKCENTER",
"P_EQUIPHASSUBORDINATEEQUIPMENT"
],
"ASSOCIATED":
[
"A_EQUIPMENTCLFNCLASS",
"A_EQUIPMENTLONGTEXT",
"A_EQUIPMENTPARTNER",
"A_EQUIPMENTTEXT",
"A_EQUIPMENTWARRANTYASSGMT"
],
"BASE":
[],
"ANNO_REF":
[],
"SCALAR_FUNCTION":
[],
"VERSION":0,
"ANNOREF_EVALUATION_ERROR":""
}
}*/