@AbapCatalog.viewEnhancementCategory: [#NONE]
@EndUserText.label: 'Functional Location Data'
@VDM.viewType: #CONSUMPTION
@Metadata: { ignorePropagatedAnnotations,
allowExtensions }
@AccessControl: {
authorizationCheck: #MANDATORY,
personalData.blocking: #REQUIRED,
privilegedAssociations: ['_Location',
'_LocationAccountAssignment' ]
}
@ObjectModel: {
sapObjectNodeType.name: 'FunctionalLocation',
representativeKey: 'FunctionalLocation',
usageType: {
dataClass: #MIXED,
serviceQuality: #C,
sizeCategory: #XXL },
modelingPattern: #ANALYTICAL_DIMENSION,
supportedCapabilities: [ #EXTRACTION_DATA_SOURCE, #ANALYTICAL_DIMENSION,
#CDS_MODELING_ASSOCIATION_TARGET,
#SQL_DATA_SOURCE, #CDS_MODELING_DATA_SOURCE ]
}
@Analytics: {
internalName:#LOCAL,
dataCategory: #DIMENSION,
dataExtraction: {
enabled: true,
delta.changeDataCapture: {
mapping:[
{
table: 'iflot', role: #MAIN,
viewElement: ['FunctionalLocation'],
tableElement: ['tplnr' ]
},
{
table: 'iloa', role: #LEFT_OUTER_TO_ONE_JOIN,
viewElement: ['MaintObjectLocAcctAssgmtNmbr'],
tableElement: ['iloan']
},
{
table: 'jest', role: #LEFT_OUTER_TO_ONE_JOIN,
viewElement: ['MaintObjectInternalID'],
tableElement: ['objnr'],
filter: [{ operator: #EQ, tableElement: 'STAT', value: 'I0076' }]
}
]
}
}
}
define view entity C_FunctionalLocationDEX
as select from I_FunctionalLocation as I_FunctionalLocation
// Out of the first release's scope
// association [0..1] to I_FunclocationLabelInternal as _PrimaryLabel on $projection.FunctionalLocation = _PrimaryLabel.FunctionalLocation
// and _PrimaryLabel.FuncnlLocLabelIsPrimaryLabel = 'X'
// and _PrimaryLabel.FunctionalLocLabelIsActive = 'X'
association [0..1] to I_WorkCenterBySemanticKey as _MainWorkCenterBySemanticKey on $projection.MainWorkCenter = _MainWorkCenterBySemanticKey.WorkCenter
and $projection.MainWorkCenterPlant = _MainWorkCenterBySemanticKey.Plant
association [0..1] to I_Plant as _MainWorkCenterPlant on $projection.MainWorkCenterPlant = _MainWorkCenterPlant.Plant
association [0..1] to I_WorkCenterBySemanticKey as _WorkCenterBySemanticKey on $projection.workcenter = _WorkCenterBySemanticKey.WorkCenter
and $projection.WorkCenterPlant = _WorkCenterBySemanticKey.Plant
association [0..1] to I_Plant as _WorkCenterPlant on $projection.WorkCenterPlant = _WorkCenterPlant.Plant
association [0..1] to I_WorkCenter as _MainWorkCenter on _MainWorkCenter.WorkCenterInternalID = $projection.MainWorkCenterInternalID
and _MainWorkCenter.WorkCenterTypeCode = 'A'
association [0..1] to I_Indicator as _FuncnlLocIsMarkedForDeletion on $projection.FuncnlLocIsMarkedForDeletion = _FuncnlLocIsMarkedForDeletion.IndicatorValue
association [0..1] to I_MaintenancePlanPlant as _MaintenancePlanPlant on $projection.MaintenancePlanningPlant = _MaintenancePlanPlant.MaintenancePlanningPlant
association [0..1] to I_WBSElementBasicData as _WBSElementBasicData on $projection.WBSElementInternalID = _WBSElementBasicData.WBSElementInternalID
{
/* start suppress warning shlporigin_not_inherited */
// key I_FunctionalLocation.FunctionalLocation,
key cast(I_FunctionalLocation.FunctionalLocation as ps_s4_tplnr preserving type ) as FunctionalLocation,
I_FunctionalLocation.MaintObjectLocAcctAssgmtNmbr,
@ObjectModel.foreignKey.association: '_ABCIndicator'
_LocationAccountAssignment.ABCIndicator,
_LocationAccountAssignment.AddressID,
@ObjectModel.foreignKey.association: '_MasterFixedAsset'
_LocationAccountAssignment.MasterFixedAsset,
@ObjectModel.foreignKey.association: '_ConstructionMaterial'
ConstructionMaterial,
@ObjectModel.foreignKey.association: '_CompanyCode'
_LocationAccountAssignment.CompanyCode,
@ObjectModel.foreignKey.association: '_CostCenter'
_LocationAccountAssignment.CostCenter,
@ObjectModel.foreignKey.association: '_ControllingArea'
_LocationAccountAssignment.ControllingArea,
OperationStartDate,
@ObjectModel.foreignKey.association: '_TechnicalObjectType'
TechnicalObjectType,
@ObjectModel.foreignKey.association: '_Location'
_LocationAccountAssignment.AssetLocation,
@ObjectModel.foreignKey.association: '_MaintenancePlant'
_LocationAccountAssignment.MaintenancePlant,
_LocationAccountAssignment.AssetRoom,
@ObjectModel.foreignKey.association: '_MaintenancePlanPlant'
MaintenancePlanningPlant,
@ObjectModel.foreignKey.association: '_PlantSection'
_LocationAccountAssignment.PlantSection,
@ObjectModel.foreignKey.association: '_MaintenancePlannerGroup'
MaintenancePlannerGroup,
@EndUserText: { label: 'WBS Element External ID', quickInfo: 'WBS Element External ID' }
// cast( _LocationAccountAssignment._WBSElementBasicData.WBSElement as ps_s4_posid ) as WBSElement,
_LocationAccountAssignment._WBSElementBasicData.WBSElementExternalID,
@ObjectModel.foreignKey.association: '_FunctionalLocationCategory'
FunctionalLocationCategory,
@ObjectModel.foreignKey.association: '_MainWorkCenterBySemanticKey'
cast( I_FunctionalLocation._WorkCenter.WorkCenter as gewrk preserving type ) as MainWorkCenter,
@ObjectModel.foreignKey.association: '_MainWorkCenterPlant'
@EndUserText: { label: 'Plant of Work Center', quickInfo: 'Plant of Work Center' }
I_FunctionalLocation._WorkCenter.Plant as MainWorkCenterPlant,
@ObjectModel.foreignKey.association: '_SettlementOrder'
_LocationAccountAssignment.SettlementOrder,
@ObjectModel.foreignKey.association: '_WorkCenterBySemanticKey'
_LocationAccountAssignment._WorkCenter.WorkCenter,
@ObjectModel.foreignKey.association: '_WorkCenterPlant'
_LocationAccountAssignment._WorkCenter.Plant as WorkCenterPlant,
@ObjectModel.foreignKey.association: '_MainWorkCenter'
@EndUserText: { label: 'Internal ID of Main Work Center', quickInfo: 'Internal ID of Main Work Center' }
I_FunctionalLocation.WorkCenterInternalID as MainWorkCenterInternalID,
@ObjectModel.foreignKey.association: '_WorkCenter'
_LocationAccountAssignment.WorkCenterInternalID,
@ObjectModel.foreignKey.association: '_WorkCenterType'
@EndUserText: { label: 'Type Code of Work Center', quickInfo: 'Type Code of Work Center' }
_LocationAccountAssignment.WorkCenterTypeCode as WorkCenterTypeCode,
/* Additional fields */
cast( I_FunctionalLocation.SuperiorFunctionalLocation as ps_s4_tplnr preserving type ) as SuperiorFunctionalLocation,
@Semantics.systemDate.createdAt: true
I_FunctionalLocation.CreationDate,
@Semantics.systemDate.lastChangedAt: true
I_FunctionalLocation.LastChangeDate,
AuthorizationGroup,
@Semantics.systemDateTime.lastChangedAt: true
I_FunctionalLocation.LastChangeDateTime,
I_FunctionalLocation.FunctionalLocationEndOfUseDate,
I_FunctionalLocation.MaintObjectInternalID,
@ObjectModel.foreignKey.association: '_FuncnlLocIsMarkedForDeletion'
@Semantics.booleanIndicator: true
cast( case when _Status[ exact one to one : StatusCode = 'I0076' and StatusIsInactive = '' ].StatusCode is not null
then 'X' else ' '
end as eam_is_deleted preserving type ) as FuncnlLocIsMarkedForDeletion,
// I_LocationAccountAssignment
@ObjectModel.foreignKey.association: '_WBSElementBasicData'
@EndUserText: { label: 'WBS Element Internal ID', quickInfo: 'WBS Element Internal ID' }
cast( _LocationAccountAssignment.WBSElementInternalID as ps_s4_pspnr preserving type ) as WBSElementInternalID,
//I_LinearAssetManagementData
cast( cast( I_FunctionalLocation._LinearAssetManagementData.LinearDataStartPoint as abap.dec(11, 3) ) as eaml_start_point ) as LinearDataStartPoint,
cast( cast( I_FunctionalLocation._LinearAssetManagementData.LinearDataEndPoint as abap.dec(11, 3) ) as eaml_end_point ) as LinearDataEndPoint,
@Semantics.quantity.unitOfMeasure: 'LinearDataUnitOfMeasure'
cast( I_FunctionalLocation._LinearAssetManagementData.LinearDataLength as eaml_linear_length_si ) as LinearDataLength,
I_FunctionalLocation._LinearAssetManagementData.LinearDataUnitOfMeasure,
/* end suppress warning shlporigin_not_inherited */
/* Associations */
_FunctionalLocationCategory,
_ConstructionMaterial,
_TechnicalObjectType,
_MaintenancePlannerGroup,
_MaintenancePlanningPlant,
// _PrimaryLabel._FunctionalLocLabelingSyst, Out of the first release's scope
_WBSElementBasicData,
_LocationAccountAssignment._PlantSection,
_LocationAccountAssignment._Location,
_LocationAccountAssignment._CompanyCode,
_LocationAccountAssignment._MaintenancePlant,
_LocationAccountAssignment._MasterFixedAsset,
_LocationAccountAssignment._ABCIndicator,
_LocationAccountAssignment._CostCenter,
_LocationAccountAssignment._ControllingArea,
_LocationAccountAssignment._SettlementOrder,
_LocationAccountAssignment._WorkCenter,
_LocationAccountAssignment._WorkCenterType,
_MainWorkCenterBySemanticKey,
_MainWorkCenterPlant,
_WorkCenterBySemanticKey,
_WorkCenterPlant,
_MainWorkCenter,
_FuncnlLocIsMarkedForDeletion,
// _SuperiorFunctionalLocation,
_MaintenancePlanPlant,
_FunctionalLocationText,
_LocationAccountAssignment
}