Wednesday 28 June 2017

BOPF Creation Using CDS Views & ODATA Publish

Creating the business object using the cds views to enable ODATA service enabled:

1.Root node creation for example : ZBO_MARA (Root node)

For the root node need to specify the annotation: @ObjectModel.modelCategory: #BUSINESS_OBJECT

Zbo_mara is the Root node and created the associations with zbo_marc and zekpo nodes

@ObjectModel.compositionRoot: true

@ObjectModel.modelCategory: #BUSINESS_OBJECT

@AbapCatalog.sqlViewName: 'zbo_mara1'

@AbapCatalog.compiler.compareFilter: true

@AccessControl.authorizationCheck: #CHECK

@EndUserText.label: 'marac'

@ObjectModel.writeActivePersistence: 'mara'

@ObjectModel.transactionalProcessingEnabled: true

@ObjectModel.createEnabled: true


@ObjectModel.updateEnabled: true

@ObjectModel.deleteEnabled: true

@OData.publish: true


define view Zbo_mara as select from mara as ma

association [0..*] to Zbo_marc as mc on $projection.matnr = mc.matnr

association [0..*] to Zekpo    as ek on $projection.matnr = ek.matnr

{

ma.mandt,

ma.matnr,

ma.pstat,;

/* Associations */

@ObjectModel.association.type:  [#TO_COMPOSITION_CHILD  ]

mc,

ek

}

After activation, the CDS, there is a new BOPF. You have to generate the classes and activate it.

Then use CRUD Template in Web IDE.

Business object created in the back end,Please find the attached screen shot:


Double click on the BO , Popup get opens with information message (Business object is generated from the CDS VIEW)


ZBO_MARA  bo got created in the back end:


2.Child node Node creation zbo_marc association with the root node and zekpo

@AbapCatalog.sqlViewName: 'Zbo_marc1'

@AbapCatalog.compiler.compareFilter: true

@AccessControl.authorizationCheck: #NOT_REQUIRED

@EndUserText.label: 'material detail data'


@Search.searchable: true

@ObjectModel.semanticKey:  [ 'Matnr', 'Werks' ]

@ObjectModel.representativeKey: 'Werks'

@ObjectModel.writeActivePersistence: 'marc'

@ObjectModel.createEnabled: true

@ObjectModel.deleteEnabled: true

@ObjectModel.updateEnabled: true

@ObjectModel.transactionalProcessingEnabled: true

define view Zbo_marc as select from marc

association [0..*] to Zbo_mara as _Ma on $projection.matnr = _Ma.matnr

association [0..*] to Zekpo    as ek  on $projection.werks = ek.werks

{

@Search.defaultSearchElement: true

key matnr,

key marc.werks,

@ObjectModel.association.type:  [#TO_COMPOSITION_PARENT,#TO_COMPOSITION_ROOT]

_Ma,

@ObjectModel.association.type:  [#TO_COMPOSITION_CHILD]

ek

}

Child node ZBO_MARC created in the back end with the associated associations to the root node(ZBO_MARA) & parent node(ZBO_MARA)


3. Node creation zekpo association with the root node(zbo_mara) and parent node (zbo_marc)

@AbapCatalog.sqlViewName: 'zekpo_1'

@AbapCatalog.compiler.compareFilter: true

@AccessControl.authorizationCheck: #CHECK

@EndUserText.label: 'purchase order'

@Search.searchable: true

@ObjectModel.semanticKey:  [ 'matnr' ]

@ObjectModel.representativeKey: 'matnr'

@ObjectModel.writeActivePersistence: 'ekpo'

@ObjectModel.createEnabled: true

@ObjectModel.deleteEnabled: true

@ObjectModel.updateEnabled: true

@ObjectModel.transactionalProcessingEnabled: true

define view Zekpo as select from ekpo

association [0..*] to Zbo_mara as _Mc on $projection.matnr = _Mc.matnr

association [0..*] to Zbo_marc as _mrc on $projection.matnr = _mrc.matnr

{

ebeln,

@Search.defaultSearchElement: true

werks,

matnr,

@ObjectModel.association.type:  [#TO_COMPOSITION_ROOT]

_Mc,

@ObjectModel.association.type:  [#TO_COMPOSITION_PARENT]

_mrc

}

Child node ZEKPO created in the back end with the associated associations to the root node(ZBO_MARA) & parent node(ZBO_MARC)


Register the OData service in /iwfnd/maint_service.

No comments:

Post a Comment