@EndUserText.label: 'Data Extraction for Service Order'
@ClientHandling.algorithm: #SESSION_VARIABLE
@AbapCatalog: {
sqlViewName: 'CSRVCORDITMDEX',
compiler.compareFilter: true,
preserveKey: true
}
@VDM: {
viewType: #CONSUMPTION,
lifecycle.contract.type: #PUBLIC_LOCAL_API
}
@Analytics: {
dataCategory: #FACT,
dataExtraction: {
enabled: true,
delta.changeDataCapture: {
mapping:[
{
filter: [{operator: #EQ, tableElement: 'objtype_h', value: 'BUS2000116'}],
table: 'crms4d_serv_i', role: #MAIN,
viewElement: ['ServiceObjectType', 'ServiceDocument', 'ServiceDocumentItem'],
tableElement: ['objtype_h', 'object_id', 'number_int']
},
{
filter: [{operator: #EQ, tableElement: 'objtype_h', value: 'BUS2000116'}],
table: 'crms4d_serv_h', role: #LEFT_OUTER_TO_ONE_JOIN,
viewElement: ['ServiceObjectType', 'ServiceDocument'],
tableElement: ['objtype_h', 'object_id']
},
{
filter: [{operator: #EQ, tableElement: 'objtype_h', value: 'BUS2000116'}],
table: 'crms4d_refobj', role: #LEFT_OUTER_TO_ONE_JOIN,
viewElement: ['ServiceObjectType', 'ServiceDocument','ServiceDocumentItem','ServiceRefObjectSequenceNumber'],
tableElement: ['objtype_h', 'object_id','number_int','counter']
},
{
// filter: [{operator: #EQ, tableElement: 'objtype_b_sel', value: 'BUS2000116'}],
table: 'crmd_brelvonae', role: #LEFT_OUTER_TO_ONE_JOIN,
viewElement: ['ServiceDocumentRelationUUID', 'ServiceDocRltnSequenceNumber'],
tableElement: ['relationid', 'posno']
},
{
// filter: [{operator: #EQ, tableElement: 'objtype_b', value: 'BUS2000116'}],
table: 'crmd_brelvonai', role: #LEFT_OUTER_TO_ONE_JOIN,
viewElement: ['ServiceDocumentItmRelationUUID', 'ServiceDocItmRltnSqncNumber'],
tableElement: ['relationid', 'posno']
}
/* Changes removed
// {
//// filter: [{operator: #EQ, tableElement: 'objtype_b_sel', value: 'BUS2000116'}],
// table: 'crmd_brelvonae', role: #LEFT_OUTER_TO_ONE_JOIN,
// viewElement: ['ServiceDocumentRelationUUID', 'ServiceDocRltnSequenceNumber'],
// tableElement: ['relationid', 'posno']
// },
// {
//// filter: [{operator: #EQ, tableElement: 'objtype_b', value: 'BUS2000116'}],
// table: 'crmd_brelvonai', role: #LEFT_OUTER_TO_ONE_JOIN,
// viewElement: ['ServiceDocumentItmRelationUUID', 'ServiceDocItmRltnSqncNumber'],
// tableElement: ['relationid', 'posno']
// }
*/
]
}
}
}
@AccessControl: {
authorizationCheck: #CHECK,
personalData.blocking: #('TRANSACTIONAL_DATA')
}
@ObjectModel: {
representativeKey: 'ServiceDocumentItem',
usageType: {
dataClass: #TRANSACTIONAL,
serviceQuality: #D,
sizeCategory: #XL
},
supportedCapabilities: [#EXTRACTION_DATA_SOURCE]
}
@Metadata.ignorePropagatedAnnotations: true
/*
Service Order Extractor
Note:
1. Following Service Orders are extracted [excluding Quotations]
a. Service Order
b. Service Order Template
2. Service Order Items along with some Header fields are projected
3. BW extracts all projected fields and performance is not relevant
4. Out of box predecessor UUID fields are projected which indicates Service Contract only.
For any other predecessor types you may have to join explicitly!
*/
define view C_ServiceOrderItemDEX
as select from I_ServiceDocumentItemEnhcd as ServiceOrderItem
left outer to one join I_ServiceDocumentEnhcd as ServiceOrder on ServiceOrder.ServiceObjectType = 'BUS2000116'
and ServiceOrderItem.ServiceObjectType = 'BUS2000116'
and ServiceOrderItem.ServiceDocument = ServiceOrder.ServiceDocument
left outer to one join I_ServiceDocumentRefObject as ServiceOrdItemRefObj on ServiceOrdItemRefObj.ServiceObjectType = 'BUS2000116'
and ServiceOrdItemRefObj.ServiceDocument = ServiceOrderItem.ServiceDocument
and ServiceOrdItemRefObj.ServiceDocumentItem = ServiceOrderItem.ServiceDocumentItem
and ServiceOrdItemRefObj.SrvcRefObjIsMainObject = 'X'
left outer to one join I_ServiceDocumentItemPrdcssr_2 as ServiceDocumentItemPrdcssr on ServiceOrderItem.ServiceDocumentItemCharUUID = ServiceDocumentItemPrdcssr.ServiceDocumentItemCharUUID
and ServiceOrderItem.ServiceDocumentItemObjectType = ServiceDocumentItemPrdcssr.ServiceDocumentItemObjectType
/* Changes removed
left outer to one join I_ServiceDocumentItemPrdcssr_2 as ServiceContractItemPrdcssr on ServiceOrderItem.ServiceDocumentItemCharUUID = ServiceContractItemPrdcssr.ServiceDocumentItemCharUUID
and ServiceOrderItem.ServiceDocumentItemObjectType = ServiceContractItemPrdcssr.ServiceDocumentItemObjectType
and ServiceOrderItem.ServiceDocumentItemObjectType = 'BUS2000137'
*/
left outer to one join I_ServiceDocumentPredecessor as ServiceDocumentPredecessor on ServiceOrder.ServiceDocumentUUID = ServiceDocumentPredecessor.ServiceDocumentUUID
and ServiceOrder.ServiceObjectType = ServiceDocumentPredecessor.ServiceObjectType
and ServiceDocumentPredecessor.ServiceDocPrdcssrBusObjType = 'BUS2000112'
association [0..1] to E_ServiceDocumentItem as _ServiceDocItemExt on $projection.ServiceObjectType = _ServiceDocItemExt.ServiceCategory
and $projection.ServiceDocument = _ServiceDocItemExt.ServiceOrderItem
and $projection.ServiceDocumentItem = _ServiceDocItemExt.ServiceLineExternalID
association [0..1] to E_ServiceDocument as _ServiceDocumentExt on $projection.ServiceObjectType = _ServiceDocumentExt.ServiceCategory
and $projection.ServiceDocument = _ServiceDocumentExt.ServiceOrder
{
/* Service Order Item Keys */
@ObjectModel.foreignKey.association: '_ServiceObjType'
key ServiceOrderItem.ServiceObjectType,
@ObjectModel.foreignKey.association: '_ServiceDocument'
key ServiceOrderItem.ServiceDocument,
key ServiceOrderItem.ServiceDocumentItem,
/* Header Details */
ServiceOrder.ServiceDocumentUUID,
ServiceOrder.ServiceDocumentCharUUID,
ServiceOrder.ServiceDocumentDescription,
@Semantics: { amount : {currencyCode: 'TransactionCurrency'} }
ServiceOrder.ServiceDocNetAmount,
ServiceOrder.PurchaseOrderByCustomer,
ServiceOrder.ServiceDocumentStatus,
@Semantics.booleanIndicator: true
ServiceOrder.ServiceDocumentIsReleased,
@Semantics.booleanIndicator: true
ServiceOrder.ServiceDocumentIsQuotation,
@Semantics.booleanIndicator: true
ServiceOrder.ServiceDocumentHasError,
// ServiceOrderItem.SrvcDocItmDeliveryStatus,
// ServiceOrderItem.SrvcDocItmGoodsIssueStatus,
@Semantics.booleanIndicator: true
ServiceOrder.ServiceDocIsReleasedForBilling,
@Semantics.booleanIndicator: true
ServiceOrder.ServiceDocumentIsRejected,
// ServiceOrderItem.QuotationIsAccepted,
ServiceOrder.ServiceDocBillingStatus,
ServiceOrder.ServiceDocumentIsOpen,
ServiceOrder.BusinessActivityCategory,
ServiceOrder.ServiceDocChangedDateTime,
ServiceOrder.ServiceDocCreationDateTime,
ServiceOrder.ServiceDocumentUrgency,
ServiceOrder.ServiceDocumentImpact,
ServiceOrder.ServiceDocumentProblemCategory,
ServiceOrder.RecommendedServicePriority,
ServiceOrder.ServiceEscalationLevel,
ServiceOrder.ServiceRisk,
ServiceOrder.RequestedServiceStartDate,
ServiceOrder.RequestedServiceEndDate,
/* Item Details */
ServiceOrderItem.ServiceDocumentItemPriority,
ServiceOrderItem.ServiceDocumentType,
ServiceOrderItem.ServiceDocumentItemUUID,
ServiceOrderItem.ServiceDocumentItemCharUUID,
ServiceOrderItem.ServiceDocumentItemObjectType,
ServiceOrderItem.ParentServiceDocumentItemUUID,
ServiceOrderItem.PostingDate,
ServiceOrderItem.ProfitCenter,
ServiceOrderItem.ControllingArea,
ServiceOrderItem.ProfitCenterDeterminationDate,
ServiceOrderItem.ServiceDocItemCategory,
ServiceOrderItem.OriginallyRequestedProduct,
ServiceOrderItem.Product,
ServiceOrderItem.PlannedServiceStartDateTime,
ServiceOrderItem.PlannedServiceEndDateTime,
ServiceOrderItem.SrvcOrderConfirmationRelevance,
/* Item - Cumulated Value */
@DefaultAggregation: #SUM
@Semantics: { amount : {currencyCode: 'TransactionCurrency'} }
ServiceOrderItem.InvoiceAmountInInvoiceDocCrcy,
@Semantics: { quantity : {unitOfMeasure: 'ServiceDocItemQuantityUnit'} }
ServiceOrderItem.SrvcDocItmRequestedQuantity,
@Semantics: { quantity : {unitOfMeasure: 'ServiceDocItemQuantityUnit'} }
ServiceOrderItem.InvoiceQuantity,
@Semantics: { quantity : {unitOfMeasure: 'ServiceDocItemQuantityUnit'} }
ServiceOrderItem.SrvcDocItmDeliveredQuantity,
@Semantics: { quantity : {unitOfMeasure: 'ServiceDocItemQuantityUnit'} }
ServiceOrderItem.SrvcDocItmReleasedQuantity,
@DefaultAggregation: #SUM
@Semantics: { amount : {currencyCode: 'TransactionCurrency'} }
ServiceOrderItem.SrvcDocItmReldAmtInTransCrcy,
/* Item - Schedule Line */
@DefaultAggregation: #SUM
@Semantics: { quantity : {unitOfMeasure: 'ServiceDocItemQuantityUnit'} }
ServiceOrderItem.ServiceDocumentItemQuantity,
/* Item - Product */
ServiceOrderItem.SrvcDocItmOrdToBaseQtyNmrtr,
ServiceOrderItem.SrvcDocItmOrdToBaseQtyDnmntr,
ServiceOrderItem.OrderToBaseQuantityExponent,
@ObjectModel.foreignKey.association: '_SalesUnit'
@Semantics.unitOfMeasure:true
ServiceOrderItem.ServiceDocItemQuantityUnit,
@ObjectModel.foreignKey.association: '_BaseUnit_2'
@Semantics.unitOfMeasure:true
ServiceOrderItem.SrvcDocItemBaseQuantityUnit,
/* Partner */
ServiceOrderItem.ServiceTeam,
ServiceOrderItem.SoldToParty,
ServiceOrderItem.SoldToPartyCountry,
ServiceOrderItem.SoldToPartyRegion,
ServiceOrderItem.ResponsibleEmployee,
ServiceOrderItem.ContactPerson,
/* Pricing Parameter Set */
@ObjectModel.foreignKey.association: '_TransactionCurrency'
@Semantics.currencyCode:true
ServiceOrderItem.TransactionCurrency,
@Semantics.currencyCode:true
ServiceOrderItem.StatisticsCurrency,
ServiceOrderItem.ExchangeRateType,
ServiceOrderItem.ExchangeRateDate,
ServiceOrderItem.AccountingExchangeRate,
ServiceOrderItem.CustomerGroup,
ServiceOrderItem.BillableControl,
/* Billing Set */
ServiceOrderItem.BillingBlockReason,
/* Item - Sales Set */
ServiceOrderItem.AdditionalCustomerGroup1,
ServiceOrderItem.AdditionalCustomerGroup2,
ServiceOrderItem.AdditionalCustomerGroup3,
ServiceOrderItem.AdditionalCustomerGroup4,
ServiceOrderItem.AdditionalCustomerGroup5,
/* Organization Unit Set */
ServiceOrderItem.SalesOrganizationOrgUnitID,
ServiceOrderItem.SalesOfficeOrgUnitID,
ServiceOrderItem.SalesGroupOrgUnitID,
ServiceOrderItem.DistributionChannel,
ServiceOrderItem.Division,
ServiceOrderItem.ServiceOrganization,
ServiceOrderItem.ResponsibleSalesOrganization,
ServiceOrderItem.ResponsibleServiceOrganization,
/* Organizational units with the S/4 SD codes */
ServiceOrderItem.SalesOrganization,
ServiceOrderItem.SalesOffice,
ServiceOrderItem.SalesGroup,
/* Item - Service */
ServiceOrderItem.ServiceDurationUnit,
ServiceOrderItem.ServiceDuration,
/* Status */
ServiceOrderItem.ServiceDocumentItemStatus,
ServiceOrderItem.ServiceDocumentItemIsReleased,
ServiceOrderItem.ServiceDocumentItemIsQuotation,
ServiceOrderItem.ServiceDocumentItemHasError,
ServiceOrderItem.SrvcDocItmDeliveryStatus,
ServiceOrderItem.SrvcDocItmGoodsIssueStatus,
ServiceOrderItem.ServiceDocItemBillingStatus,
ServiceOrderItem.SrvcDocItmIsReleasedForBilling,
ServiceOrderItem.ServiceDocumentItemIsRejected,
ServiceOrderItem.ServiceDocumentItemIsOpen,
ServiceOrderItem.QuotationIsAccepted,
/* Item - Pricing */
@DefaultAggregation: #SUM
@Semantics: { amount : {currencyCode: 'TransactionCurrency'} }
ServiceOrderItem.ServiceDocumentItemNetAmount,
@DefaultAggregation: #SUM
@Semantics: { amount : {currencyCode: 'TransactionCurrency'} }
ServiceOrderItem.ServiceDocItemGrossAmount,
/* Item Product */
@API.element.releaseState: #DEPRECATED
@API.element.successor: 'SrvcMaterialPricingGroup'
ServiceOrderItem.ProductGroup,
ServiceOrderItem.ProductGroup as SrvcMaterialPricingGroup,
ServiceOrderItem.ProductGroup1,
ServiceOrderItem.ProductGroup2,
ServiceOrderItem.ProductGroup3,
ServiceOrderItem.ProductGroup4,
ServiceOrderItem.ProductGroup5,
ServiceOrderItem.ProductHierarchy,
/* Service Subject */
// ServiceOrderItem.ServiceSchema1Category1UUID,
// ServiceOrderItem.ServiceSchema1Category2UUID,
// ServiceOrderItem.ServiceSchema1Category3UUID,
// ServiceOrderItem.ServiceSchema1Category4UUID,
// ServiceOrderItem.ServiceSchema1Category5UUID,
// ServiceOrderItem.ServiceSchema1Category6UUID,
// ServiceOrderItem.ServiceSchema1Category7UUID,
// ServiceOrderItem.ServiceSchema1Category8UUID,
// ServiceOrderItem.ServiceSchema1Category9UUID,
// ServiceOrderItem.ServiceSchema1Category10UUID,
// ServiceOrderItem.SrvcCatztnSchema1,
// ServiceOrderItem.SrvcCatztnSchemaCategory1,
//
// ServiceOrderItem.ServiceSchema2Category1UUID,
// ServiceOrderItem.ServiceSchema2Category2UUID,
// ServiceOrderItem.ServiceSchema2Category3UUID,
// ServiceOrderItem.ServiceSchema2Category4UUID,
// ServiceOrderItem.ServiceSchema2Category5UUID,
// ServiceOrderItem.ServiceSchema2Category6UUID,
// ServiceOrderItem.ServiceSchema2Category7UUID,
// ServiceOrderItem.ServiceSchema2Category8UUID,
// ServiceOrderItem.ServiceSchema2Category9UUID,
// ServiceOrderItem.ServiceSchema2Category10UUID,
// ServiceOrderItem.SrvcCatztnSchema2,
// ServiceOrderItem.SrvcCatztnSchemaCategory2,
/* Reference Object Details */
ServiceOrdItemRefObj.ServiceRefObjectSequenceNumber,
ServiceOrdItemRefObj.ServiceReferenceObjectType,
ServiceOrdItemRefObj.ServiceReferenceObjectUUID,
ServiceOrdItemRefObj.ProductID,
ServiceOrdItemRefObj.SrvcRefObjIsMainObject,
ServiceOrdItemRefObj.ProductUUID,
ServiceOrdItemRefObj.SerialNumber,
ServiceOrdItemRefObj.Equipment,
ServiceOrdItemRefObj.FunctionalLocation,
/* Predecessor fields */
ServiceDocumentPredecessor.ServiceDocumentRelationUUID,
ServiceDocumentPredecessor.ServiceDocRltnSequenceNumber,
@API.element.releaseState: #DEPRECATED
@API.element.successor: 'SrvcContrPredecessorUUID'
ServiceDocumentPredecessor.ServiceDocumentPredecessorUUID,
@API.element.releaseState: #DEPRECATED
@API.element.successor: 'SrvcContrPrdcssrBusObjType'
ServiceDocumentPredecessor.ServiceDocPrdcssrBusObjType,
ServiceDocumentPredecessor.ServiceDocumentPredecessorUUID as SrvcContrPredecessorUUID,
ServiceDocumentPredecessor.ServiceDocPrdcssrBusObjType as SrvcContrPrdcssrBusObjType,
ServiceDocumentItemPrdcssr.ServiceDocumentItmRelationUUID,
ServiceDocumentItemPrdcssr.ServiceDocItmRltnSqncNumber,
@API.element.releaseState: #DEPRECATED
@API.element.successor: 'SrvcContrItmPrdcssrCharUUID'
ServiceDocumentItemPrdcssr.ServiceDocItmPrdcssrCharUUID,
@API.element.releaseState: #DEPRECATED
@API.element.successor: 'SrvcContrItmPrdcssrBusObjType'
ServiceDocumentItemPrdcssr.ServiceDocItmPrdcssrBusObjType,
ServiceDocumentItemPrdcssr.ServiceDocItmPrdcssrCharUUID as SrvcContrItmPrdcssrCharUUID,
ServiceDocumentItemPrdcssr.ServiceDocItmPrdcssrBusObjType as SrvcContrItmPrdcssrBusObjType,
/* Changes removed
@API.element.releaseState: #DEPRECATED
ServiceDocumentPredecessor.ServiceDocumentRelationUUID,
@API.element.releaseState: #DEPRECATED
ServiceDocumentPredecessor.ServiceDocRltnSequenceNumber,
@API.element.releaseState: #DEPRECATED
@API.element.successor: 'SrvcContrPredecessorUUID'
ServiceDocumentPredecessor.ServiceDocumentPredecessorUUID,
@API.element.releaseState: #DEPRECATED
@API.element.successor: 'SrvcContrPrdcssrBusObjType'
ServiceDocumentPredecessor.ServiceDocPrdcssrBusObjType,
ServiceDocumentPredecessor.ServiceDocumentPredecessorUUID as SrvcContrPredecessorUUID,
ServiceDocumentPredecessor.ServiceDocPrdcssrBusObjType as SrvcContrPrdcssrBusObjType,
@API.element.releaseState: #DEPRECATED
ServiceDocumentItemPrdcssr.ServiceDocumentItmRelationUUID,
@API.element.releaseState: #DEPRECATED
ServiceDocumentItemPrdcssr.ServiceDocItmRltnSqncNumber,
@API.element.releaseState: #DEPRECATED
@API.element.successor: 'SrvcContrItmPrdcssrCharUUID'
ServiceDocumentItemPrdcssr.ServiceDocItmPrdcssrCharUUID,
@API.element.releaseState: #DEPRECATED
@API.element.successor: 'SrvcContrItmPrdcssrBusObjType'
ServiceDocumentItemPrdcssr.ServiceDocItmPrdcssrBusObjType,
@API.element.releaseState: #DEPRECATED
@API.element.successor: 'SrvcContrItmPrdcssrCharUUID_2'
ServiceDocumentItemPrdcssr.ServiceDocItmPrdcssrCharUUID as SrvcContrItmPrdcssrCharUUID,
@API.element.releaseState: #DEPRECATED
@API.element.successor: 'SrvcContrItmPrdcssrBusObjType_2'
ServiceDocumentItemPrdcssr.ServiceDocItmPrdcssrBusObjType as SrvcContrItmPrdcssrBusObjType,
ServiceContractItemPrdcssr.ServiceDocItmPrdcssrCharUUID as SrvcContrItmPrdcssrCharUUID_2,
ServiceContractItemPrdcssr.ServiceDocItmPrdcssrBusObjType as SrvcContrItmPrdcssrBusObj_2,
*/
/* Solution Order */
ServiceOrderItem.RefBusinessSolutionOrder,
ServiceOrderItem.RefBusinessSolutionOrderItem,
/* Associations */
/* Keys */
_ServiceObjType,
_ServiceDocument,
/* Item - Product */
_BaseUnit_2,
_SalesUnit,
/* Pricing Parameter Set */
_TransactionCurrency
}
where
ServiceOrderItem.ServiceObjectType = 'BUS2000116'
and ServiceOrderItem.ServiceDocumentItemIsQuotation != 'X'
and ServiceOrder.ServiceDocumentIsQuotation != 'X'
and ServiceOrderItem.ServiceDocumentTemplateType is initial