22
Master Data Governance Application Programming Interface Guide Marcus Galleck

Master Data Governance Application Programming Interface Guide

  • Upload
    barry

  • View
    175

  • Download
    12

Embed Size (px)

DESCRIPTION

SAP MDG_Interfacing

Citation preview

Page 1: Master Data Governance Application Programming Interface Guide

Master Data Governance Application Programming Interface Guide Marcus Galleck

Page 2: Master Data Governance Application Programming Interface Guide

TABLE OF CONTENTS 1 OVERVIEW OF MDG USABLE APIS ............................................................................................... 3 1.1 Availability of APIs and Their Functional scope .......................................................................... 3 1.2 Usage of MDG APIs ......................................................................................................................... 4

2 INTRODUCTION ............................................................................................................................... 5

3 LIMITATIONS .................................................................................................................................... 6

4 INTERFACES .................................................................................................................................... 8 4.1 Governance API ............................................................................................................................... 8 4.1.1 IF_USMD_GOV_API ......................................................................................................................... 8 4.1.2 IF_USMD_GOV_API_CR_DATA ...................................................................................................... 8 4.1.3 IF_USMD_GOV_API_ENTITY .......................................................................................................... 8 4.1.4 IF_USMD_GOV_API_PROCESS ..................................................................................................... 8 4.1.5 IF_USMD_GOV_API_SERVICES ..................................................................................................... 8 4.1.6 IF_USMD_GOV_API_TRANS ........................................................................................................... 8 4.1.7 IF_USMD_GOV_API_CR_ACTION .................................................................................................. 8 4.2 Convenience API ............................................................................................................................. 8 4.2.1 IF_USMD_CONV_SOM_GOV_API .................................................................................................. 9 4.2.2 IF_USMD_CONV_SOM_GOV_CR ................................................................................................... 9 4.2.3 IF_USMD_CONV_SOM_GOV_ENTITY ........................................................................................... 9 4.2.4 IF_USMD_CONV_SOM_GOV_TRANS ............................................................................................ 9 4.2.5 IF_USMD_CONV_SOM_GOV_CR_ACTION ................................................................................... 9

5 SIMPLE GUIDE FOR IMPLEMENTATION ....................................................................................... 9 5.1 Sequence Diagram for Convenience API Usage .......................................................................... 9 5.2 Reading Entity Data ....................................................................................................................... 10 5.2.1 Reading Entity Data - Governance API Behavior ............................................................................ 10 5.3 Writing Entity Data ......................................................................................................................... 11 5.3.1 Write Strategies and Cross-Derivation ............................................................................................ 11 5.3.2 Writing Data with Convenience/Governance API ............................................................................ 13 5.3.3 Writing Data with the Change Request API ..................................................................................... 14 5.4 Authorization .................................................................................................................................. 14 5.4.1 Entity Authorization .......................................................................................................................... 14 5.4.2 Change Request Authorization ........................................................................................................ 14 5.5 Code Example – Create Airline (with governance API) ............................................................. 14 5.6 Code Example – Change Flight Connection (with governance API) ........................................ 18

Page 3: Master Data Governance Application Programming Interface Guide

Master Data Governance

3

1 OVERVIEW OF MDG USABLE APIS

Depending on the software release, MDG offers different APIs for consumption with different functional scopes.

1.1 Availability of APIs and Their Functional scope

Availability Description Object Purpose / Scope

EhP 5 Change Request API

CL_USMD_CREQUEST_API IF_USMD_CREQUEST_API

Programming interface for CR Processing. One Instance per change request. Administration of change request object list by consumer.

External use model API

IF_USMD_MODEL_EXT CL_USMD_MODEL_EXT

Reading entity and hierarchy data.

EhP 6

Change Request API

CL_USMD_CREQUEST_API IF_USMD_CREQUEST_API

No further development.

Governance API CL_USMD_GOV_API IF_USMD_GOV_API

Programming interface for governance process. One instance per MDG model. Multiple CR processing within one instance for one model. Limited use for models using editions.

Convenience API CL_USMD_CONV_SOM_GOV_API IF_USMD_CONV_SOM_GOV_API

Programming interface for governance process optimized for single object processing and single object processing UIs. No support for models using editions.

App Context API CL_USMD_APP_CONTEXT IF_USMD_APP_CONTEXT

Programming interface consumed mainly by convenience API. Stores and calculates context data.

External use model API

IF_USMD_MODEL_EXT CL_USMD_MODEL_EXT

Reading entity and hierarchy data.

MDG 6.1 Change Request API

CL_USMD_CREQUEST_API IF_USMD_CREQUEST_API

No further development.

Governance API CL_USMD_GOV_API IF_USMD_GOV_API

Support of foreign key entities.

Convenience API CL_USMD_CONV_SOM_GOV_API IF_USMD_CONV_SOM_GOV_API

Support of foreign key entities.

App Context API CL_USMD_APP_CONTEXT IF_USMD_APP_CONTEXT

No further development.

External use model API

IF_USMD_MODEL_EXT CL_USMD_MODEL_EXT

Reading entity and hierarchy data.

MDG 7.0 Change Request API

CL_USMD_CREQUEST_API IF_USMD_CREQUEST_API

No further development.

MDG 7.0 Governance API CL_USMD_GOV_API IF_USMD_GOV_API

Support of new edition management and parallel change requests

Convenience API CL_USMD_CONV_SOM_GOV_API IF_USMD_CONV_SOM_GOV_API

Support of new edition management and parallel change requests

App Context API CL_USMD_APP_CONTEXT IF_USMD_APP_CONTEXT

Support of new edition management and parallel change requests

External use model API

IF_USMD_MODEL_EXT CL_USMD_MODEL_EXT

Support for reading data from parallel change requests

Page 4: Master Data Governance Application Programming Interface Guide

Master Data Governance

4

1.2 Usage of MDG APIs

Use Case Allowed usage Forbidden usage

Build UI application, Inbound/Remote governed process

IF_USMD_GOV_API or IF_USMD_CONV_SOM_GOV_API or IF_USMD_CREQUEST_API IF_USMD_MODEL_EXT (read access only)

IF_USMD_MODEL

Access Class Implementation

IF_USMD_MODEL_EXT (read access only)

IF_USMD_MODEL IF_USMD_GOV_API IF_USMD_CONV_SOM_GOV_API IF_USMD_CREQUEST_API

Rule Service BAdI, BRF+

IF_USMD_MODEL_EXT (read access only)

IF_USMD_MODEL IF_USMD_GOV_API IF_USMD_CONV_SOM_GOV_API IF_USMD_CREQUEST_API

As some APIs are not stateless, you must not consume the convenience, governance and change request API at the same time. Depending on the MDG release, we recommend you use the governance API or the convenience API for your purposes. Newly implemented MDG features are supported by the governance API and the convenience API, but not necessarily by the change request API. The external model class interface IF_USMD_MODEL_EXT can be used for read access only to avoid harming the state of other APIs. Since the change request API is stateless, writing and reading data with the change request API and reading data with the external model interface does not result in a conflict. The external model interface IF_USMD_MODEL_EXT can be consumed in combination with the governance/convenience and the change request API. Since the governance API and the convenience API are not stateless, data changes within the abstraction layer (BAdI, BRF+, access class) must be done using the corresponding interfaces. Additional data can be read with the external model interface anyway. The following figures provide the concept of layering and usage of the APIs. Figure 1:

(Layered view: Convenience/Governance API) Figure 2:

Page 5: Master Data Governance Application Programming Interface Guide

Master Data Governance

5

(Layered view: Change Request API) These figures show that only the convenience API provides the application context with information. Consumers of the governance API or the change request API have to take care of the application context explicitly.

2 INTRODUCTION

The primary purpose of the governance API (CL_USMD_GOV_API) is to provide applications with a single API for the consumption of the master data governance process. The governance API covers the complete governance process for one model with multiple change requests. The convenience API (CL_USMD_CONV_SOM_GOV_API) is based on the governance API and is optimized for single object processing. It can handle only one change request at a time. The convenience API methods have an extended implicit logic for easier consumption. The convenience API can be used as an API without UI, but it is optimized for the interaction with the generic change request UIBB and the communicator UI component. The figure below shows the layer concept of governance API and convenience API. Figure 3:

The consumers of the governance API and the convenience API within SAP are Master Data Governance for Customer (MDGC), Master Data Governance for Supplier (MDGS) and Master Data Governance for Material (MDGM). Customer projects based on the convenience API or the governance API using data models from MDGC, MDGS or MDGM (or copies of these models with no changes to the keys of the entities) are the best preconditions.

Page 6: Master Data Governance Application Programming Interface Guide

Master Data Governance

6

Currently, both APIs offer the best consumable interface and can be recommended for customer use with restrictions. As a prerequisite for the consumption of the governance API or the convenience API functionality, the MDG foundation business functions MDG_FOUNDATION for EhP5 and MDG_FOUNDATION_2 for EHP6 have to be switched on. Applications using the governance process need to have an active data model and the necessary customizing for workflow processing. The purpose of the change request API (CL_USMD_CREQUEST_API) is to provide an API for a single change request (per instance). The change request API provides less convenience for consumers, as they have to take care of the change request object list themselves. In addition, the change request API provides only a basic functionality for the governance process for simple data models. For complex data models, such as material, customer or supplier, we recommend you consume the convenience API or the governance API. Figure 4:

3 LIMITATIONS

The convenience API can handle exactly one change request at a time. However, one instance of the convenience API can handle multiple change requests sequentially. For each change request, the buffers have to be refreshed at the end of the change request processing, and the environment has to be set again for the next change request to be processed. At the end of the sequential process, it is sufficient to call the ABAP command commit work. Depending on the software release, the governance API and the convenience API can handle editions (see table in section 1.1). To reduce the risk of inconsistent programming against two APIs, the convenience API cannot be instantiated if the governance API has been instantiated before, and vice versa. You cannot simultaneously run both APIs. You can instantiate exactly one of these APIs at a time in one logical unit of work (LUW). However, the convenience API consumes the governance API. The governance API as well as the convenience API are instantiated as singletons. For one data model, one instance is provided. It is not recommended to instantiate the governance API or the convenience API for different data models. The abstraction layer cannot handle multiple data models simultaneously. You should use one API (convenience API / governance API / [change request API]) for one data model in one logical unit of work at a time. The external model interface can be used in parallel. With the convenience API/governance API, it is not possible to activate a change request directly. Both APIs strictly follow the governance process and use the workflow of the selected change request type. It is also not possible to create a change request by referencing the convenience/governance API.

Page 7: Master Data Governance Application Programming Interface Guide

Master Data Governance

7

One instance of the change request API can handle only one change request. A consumer of this API has to take care of the object list of a change request. Before checking or saving the data of one change request, the change request’s object list needs to be consistent. With the change request API, you can activate or reject the change request by passing the governance process (workflow/dual-control-principle). In addition, the change request API offers the possibility to move objects between different change requests or to split one change request and to move objects to the new change request. With the change request API it is also possible to create a change request using another change request as a template. With the convenience/governance/change request API, it is not possible to process hierarchies. Parallel change request types cannot be used together with editions. It is only possible to set the flag for parallel change requests in the Customizing activity Create Change Request Type if the edition type is empty. With the external interface for data models (IF_USMD_MODEL_EXT) it is not possible to change change request data or entity data to ensure that the interface does not affect the state of any of the above mentioned APIs. Regardless of the writing modes, the READ_CHAR_VALUE method triggers a flush (Cross Entity Derivation) by default. With the external interface for data models, it is also possible to read hierarchies.

Page 8: Master Data Governance Application Programming Interface Guide

Master Data Governance

8

4 INTERFACES

Both the governance API as well as the convenience API have a static factory method, GET_INSTANCE, to provide an instance of the requested API for a specific data model. The data model is mandatory for both APIs. To request the API several times for one data model, the same instance of the API is provided by the GET_INSTANCE method. GET_INSTANCE allows applications to inherit from this class and provide an own implementation, which can provide additional methods for your convenience (for example, providing a method to read a business partner with the structure BUT000 instead of reading the entity type BP_HEADER with the ABAP statement REF TO DATA as the export parameter).

4.1 Governance API

The governance API CL_USMD_GOV_API (IF_USMD_GOV_API) includes other interfaces for better clarity, since there are many methods involved. Nearly all methods of the governance API are documented in the system. The functionality, the requirements and the expected results of a particular method are briefly described in the method documentation. The governance API is consumed by the convenience API and the data load process.

4.1.1 IF_USMD_GOV_API

The interface IF_USMD_GOV_API combines all necessary sub-interfaces to support the governance process. The purpose of the sub-interfaces is to categorize the methods for their use. There is one event defined for this interface that is raised as soon as the data has been changed due to derivations or data enrichments.

4.1.2 IF_USMD_GOV_API_CR_DATA

The methods of this interface can be used for change request header data, change request notes, change request attachments, and target systems.

4.1.3 IF_USMD_GOV_API_ENTITY

The methods of this interface can be used for data manipulation based on the governance process. There, methods can be used for locking an entity, reading and writing entity data, etc. The attributes of this interface are constants for creating data references of different kinds.

4.1.4 IF_USMD_GOV_API_PROCESS

The methods of this interface can be used to check the data of a change request and to create and forward the workflow.

4.1.5 IF_USMD_GOV_API_SERVICES

The methods of this interface can be used to retrieve change requests by a specific entity as well as for step type determination for a specific change request, and for the determination of permitted changes for a change request in process.

4.1.6 IF_USMD_GOV_API_TRANS

This interface contains two methods that can be used to save the change requests and the corresponding inactive entity data, and to refresh the master data governance buffer (change request data and entity data).

4.1.7 IF_USMD_GOV_API_CR_ACTION

This interface contains one method for the deletion of a change request in draft mode.

4.2 Convenience API

Page 9: Master Data Governance Application Programming Interface Guide

Master Data Governance

9

The Convenience API CL_USMD_CONV_SOM_GOV_API (IF_USMD_CONV_SOM_GOV_API) consumes the functions and methods of the Governance API. It is designed for easy and convenient consumption of the governance process within a specific object application. The application has to take care of the transactional behaviour and application-specific data. One important method is the SET_ENVIRONMENT method. As change requests might be created implicitly because there is no explicit method for creating a change request, the change request ID or at least the change request type needs to be set if you want to change an object for which no change request exists. For example, the creation of a change request is triggered by locking the main entity of a data model and by retrieving a temporary number for the main entity. Before an entity can be locked and a change request can be created, the environment has to be set. If you want to create a new change request, the change request type has to be defined. Just like the governance API, the convenience API also includes other interfaces for better clarity.

4.2.1 IF_USMD_CONV_SOM_GOV_API

The interface IF_USMD_CONV_SOM_GOV_API combines all necessary sub-interfaces to support the convenient governance process. The purpose of the sub-interfaces is to categorize the methods for their use. There are three events defined for this interface that are raised in the following situations:

data has been changed due to derivations or data enrichments

data was saved

the key of an entity has changed during activation

The methods of this interface can be used for message handling, setting of the environment, and for determining the processing details of an entity.

4.2.2 IF_USMD_CONV_SOM_GOV_CR

The methods of the interface IF_USMD_CONV_SOM_GOV_CR handle change request header data as well as change request notes, attachments, and target systems. With the method RETRIEVE_CREQUESTS_BY_ENTITY you can determine whether an entity is in process and which change request is used for processing. Methods relevant to the workflow are also available, for example the method SET_ACTION. It can be used to provide the action result of a workflow action to finalize processing, to approve, or to reject.

4.2.3 IF_USMD_CONV_SOM_GOV_ENTITY

The methods of interface IF_USMD_CONV_SOM_GOV_ENTITY handle entity data. Entity data can be enqueued. If you have not already set an existing change request ID as environment, enqueueing an entity or acquiring a new temporary entity key creates a change request. Otherwise a change request type needs to be provided. Data can be retrieved, written and checked. SAP also provides a method for field property determination.

4.2.4 IF_USMD_CONV_SOM_GOV_TRANS

The two methods of interface IF_USMD_CONV_SOM_GOV_TRANS are relevant to transactional handling. This interface contains the methods SAVE and REFRESH_BUFFERS.

4.2.5 IF_USMD_CONV_SOM_GOV_CR_ACTION

This interface IF_USMD_CONV_SOM_GOV_CR_ACTION contains only one method for the deletion of a change request in draft mode (no workflow has been started so far for the relevant change request).

5 SIMPLE GUIDE FOR IMPLEMENTATION

5.1 Sequence Diagram for Convenience API Usage

The next figure focuses on the convenience API and its usage. The governance API consumes the relevant methods from the abstraction layer. Figure 5:

Page 10: Master Data Governance Application Programming Interface Guide

Master Data Governance

10

5.2 Reading Entity Data

In a master data governance process, there are different sources of entity data. There is active data that can be used for business processes, and there is inactive data that has to be checked and approved before being used in business processes. Inactive data becomes active data when the data is approved and activated, or inactive data is deleted when data creation or data change is declined. All APIs (change request API, governance API, convenience API, and the external data model interface) trigger a flush when a corresponding READ method is called for entity data. To avoid that a derivation cycle is triggered, a flush can only be suppressed with the external data model interface. This is necessary to read additional data during the derivation process.

5.2.1 Reading Entity Data - Governance API Behavior

Data from an object can be read from different sources during the governance process. If no change request ID is specified, active data will be read. If a change request ID is specified, the inactive data will be read from

Page 11: Master Data Governance Application Programming Interface Guide

Master Data Governance

11

the change request by default. Reading active data can be enforced. The following matrix describes the rules for reading entity data: Figure 6:

During a round-trip within an API, the following sources of data are available:

the active data/ the snapshot data

the inactive data

the delta buffer content before a derivation

The delta buffer content (for example, just modified screen fields) is provided at the interface of the cross-derivation or the check. The active or inactive data (before or during the derivation or the check) can be read with the external data model interface IF_USMD_MODEL_EXT with the method READ_CHAR_VALUE and the corresponding READ_MODE parameter. To avoid unnecessary flushes (derivations), the NO_FLUSH parameter should be set to ‘X’. When you use parallel change requests it is possible to have several change requests for one business object. There is only one set of inactive data (as in a non-parallel change request). The change list determines the inactive record that is assigned to a particular change request. When the system reads the inactive data in the context of a particular change request it provides only the subset of inactive data assigned to that change request. Depending on the software release the governance API and the convenience API provide an additional parameter (IV_EDITION) for reading entity data. If an edition is not provided the APIs will take the edition assigned to the change request. If neither an edition is provided nor a valid change request, no edition will be taken into account for reading entity data. In this case all editions will be provided. If a valid change request with a valid edition and an edition parameter is provided the edition parameter will be used for reading entity data.

5.3 Writing Entity Data

Entity data changes are always persisted in the staging area. With all the APIs mentioned above, it is not possible to write entity data to the active area immediately. The staging area contains the inactive data. It will become active as soon as the change request is activated. Once the change request is finalized (finally approved or finally rejected), the inactive data is deleted from the staging area. The staging area (generated table content) can be accessed with the report USMD_DATA_MODEL using transaction SE38.

5.3.1 Write Strategies and Cross-Derivation

As of ERP EhP6, the abstraction layer (CL_USMD_MODEL) offers the following write modes for writing entity data.

Write mode 1 writes the data directly to the MDF buffer without performing a cross-derivation. No

data is written to the delta buffer.

Page 12: Master Data Governance Application Programming Interface Guide

Master Data Governance

12

Write mode 2 writes the data for one entity type into the delta buffer first. The cross-derivation is

triggered immediately after writing the complete entity data for one entity.

Write mode 3 writes the entity data to the delta buffer only without an implicit derivation. A flush has

to be triggered to write the data from the delta buffer to the MDF buffer.

Additionally, for write mode 2 and write mode 3, the following applies: Before the data is transferred from the delta buffer to the MDF buffer, the cross-derivation (access class and derive method of the RULE_SERVICE_BADI) is performed. The complete delta buffer is provided to those interfaces. A write mode is used for writing and deleting entity data. It is not recommended to mix write modes to change entity data. Writing entity data requires a fully specified entity: The entity type and the entity key is specified completely. Checking and saving the data triggers a flush. To read the data, it is possible to suppress the flush (for IF_USMD_MODEL_EXT~READ_CHAR_VALUE). A cross-derivation is performed only if entity data has changed and, as a consequence, the delta buffer contains changed data. The reuse area access class is called for each entity type depending on the data model (for flexibility data models, no access class is available). The cross-derivation BAdI implementation is called once for all changed entity types. The complete delta buffer content is provided to the access class and the BAdI implementation. When you use parallel change requests it is be possible that derived entity types are not in the scope of the change request type or the derived entity can be interlocked in another change request. In such a case the derived data which cannot be added to the change list is filtered. Only these entities are derived that are in scope and can be interlocked. The removed entities are listed in a warning message. If the derived data is essential for data consistency a corresponding check should take care of this. The derivation provides no error message in such a case.

Page 13: Master Data Governance Application Programming Interface Guide

Master Data Governance

13

Figure 7: The figure below describes the flush in a sequence diagram in detail.

5.3.2 Writing Data with Convenience/Governance API

Data for an entity can be written if a change request has been created beforehand. If entity data is written into a change request, the convenience API or the governance API determines whether it is necessary to write a record into the object list of the change request. As a prerequisite for writing entity data into a change request, the enqueue of the corresponding object has to be performed successfully. Entity data can only be written when the enqueue has been successfully performed. If the change request type is valid for parallel change requests an entry in the change list is made. For parallel change requests it is necessary to have an assignment from the inactive data record to the change request. The entity type to be written needs to be in scope of the change request type. Additionally, the entity to be written must not be assigned to another change request. When you want to write edition dependent data the system uses the edition that is assigned to the change request. Edition dependent data can only be written if the change request has a valid edition assigned to it. By default, the WRITE strategy of the governance API (and also of the convenience API) is set to write mode 3 (collect changes and derive data on flush). It is not possible to set a different WRITE strategy for the governance API (write mode 1 = no derivation, write directly to change request buffer; write mode 2 = derive directly after WRITE). A derivation (flush) is done implicitly by reading entity data, checking entity data and saving the change request. However, the application can trigger a derivation when the CONFIRM_ENTITY_DATA method is called. There is one exception for the convenience/governance API for the write strategy: if the changeable key of an entity is changed, the change is written to the MDF at once (write strategy 1). When the write method of the convenience/governance API is called, the DERIVE_ENTITY exit of the USMD_RULE_SERVICE BAdI is also called. The API does not enrich the data of the entity data. In addition, the structure provided by the caller is used for the derivation. That means that only those attributes that are

Page 14: Master Data Governance Application Programming Interface Guide

Master Data Governance

14

part of the structure are available for a derivation (DERIVE_ENTITY). It is recommended to use the structure (Key and Attributes) to write entity data. This ensures that the complete attribute set is available for a derivation. It is recommended to provide the complete data (even if only one attribute is changed) to write an entity. Otherwise it is recommended to read the entity data first, change the attribute(s), and write the changed data. In this case, it is ensured that the complete attribute set is available for a derivation (DERIVE_ENTITY) and that all attribute values are available. Before the data is written to the abstraction layer, there are prerequisites that have to be fulfilled:

The object (main entity) needs to be locked.

The entity that you want to change is not interlocked by another change request.

The user has the authorization to create (if it is a new entity) or change (if it is an existing entity) the

entity.

For parallel change requests: The entity type is part of the change request type scope.

Once these checks have been successfully performed, the data is passed on to the abstraction layer using write mode 3 (collect). Subsequently to writing the entity data to the abstraction layer, the object list of the corresponding change request is updated (if necessary).

5.3.3 Writing Data with the Change Request API

The change request API does not offer an automatism to write the correct entities to the object list by writing entity data. This has to be done by the API caller. The object has to be registered manually to the object list in case entity data of that object is changed. The behavior for the entity derivation (DERIVE_ENTITY) is the same as described in chapter 5.3.1. The cross-entity derivations are done when the data for one entity type is written. The change request API uses write mode 2 (derive directly after write). The change request API only checks the authorization for the provided entity and the existence of a corresponding entry in the change request object list.

5.4 Authorization

5.4.1 Entity Authorization

While reading and writing entity data to a change request, an authority check is performed. To read entity data, the authorization check is done for the display authorization (AUTH_ACT = 3). To write entity data, the authorization check action depends on whether active data exists. If the entity data exists only as inactive data (no active data is available), the authorization check verifies, if a user is authorized to create the entity (AUTH_ACT = 1). If active data is available, the authorization check verifies, if a user is authorized to change the entity (AUTH_ACT = 2).

5.4.2 Change Request Authorization

During the creation of a change request, the authorization action create (AUTH_ACT = 1) is necessary for the relevant change request type. To create a workflow, the CREATE (AUTH_ACT = 1) authorization for a specific change request type is required. To complete a workflow step, the CHANGE (AUTH_ACT = 2) authorization for the change request type is required. To change the object list of the change request, it is not necessary to check the change request authorization.

5.5 Code Example – Create Airline (with governance API)

*&---------------------------------------------------------------------*

*& Report zcreatecarr_sf

*&---------------------------------------------------------------------*

*& This example creates a new change request. Along with the change

*& request, a new airline (carrier) is created.

*&

Page 15: Master Data Governance Application Programming Interface Guide

Master Data Governance

15

*& The exceptions raised by the governance API contain the error

*& messages and some other attributes. Therefore, it is possible to react

*& to the errors raised by the governance API.

*&---------------------------------------------------------------------*

REPORT zcreatecarr_sf.

DATA:

lo_gov_api TYPE REF TO if_usmd_gov_api,

lv_crequest_id TYPE usmd_crequest, "Change Request ID

lr_carr_key_str TYPE REF TO data, "Entity Carrier - key structure

lr_carr_key_tab TYPE REF TO data, "Entity Carrier - key table

lr_carr_data_str TYPE REF TO data, "Entity Carrier - data structure

lr_carr_data_tab TYPE REF TO data, "Entity Carrier - data table

ls_entity TYPE usmd_gov_api_s_ent_tabl,

lt_entity TYPE usmd_gov_api_ts_ent_tabl,

lt_messages TYPE usmd_t_message.

FIELD-SYMBOLS:

<ls_carr_key> TYPE any,

<lt_carr_key> TYPE ANY TABLE,

<ls_carr_data> TYPE any,

<lt_carr_data> TYPE ANY TABLE,

<value> TYPE any.

"1st: Create an instance of the governance API

TRY.

lo_gov_api = cl_usmd_gov_api=>get_instance( iv_model_name = 'SF' ).

CATCH cx_usmd_gov_api.

EXIT.

ENDTRY.

"2nd: Create all the data references needed to maintain the carrier entity

"Create a data reference of the key structure / table of entity CARR (Carrier)

lo_gov_api->create_data_reference(

EXPORTING iv_entity_name = 'CARR'

iv_struct = lo_gov_api->gc_struct_key

IMPORTING er_structure = lr_carr_key_str

er_table = lr_carr_key_tab ).

"Create a data reference of the key and attribute structure / table of

"entity CARR (Carrier)

lo_gov_api->create_data_reference(

EXPORTING iv_entity_name = 'CARR'

iv_struct = lo_gov_api->gc_struct_key_attr

IMPORTING er_structure = lr_carr_data_str

er_table = lr_carr_data_tab ).

"Assign the created data references for carrier key and carrier data

"to field symbols

ASSIGN lr_carr_key_str->* TO <ls_carr_key>.

ASSIGN lr_carr_key_tab->* TO <lt_carr_key>.

ASSIGN lr_carr_data_str->* TO <ls_carr_data>.

ASSIGN lr_carr_data_tab->* TO <lt_carr_data>.

"3rd: Fill the key and data structure with values to create a new carrier

"The entity CARR only has key field CARR. The new carrier ID should be 'YZ'

ASSIGN COMPONENT 'CARR' OF STRUCTURE <ls_carr_key> TO <value>.

IF sy-subrc = 0.

<value> = 'YZ'.

Page 16: Master Data Governance Application Programming Interface Guide

Master Data Governance

16

INSERT <ls_carr_key> INTO TABLE <lt_carr_key>.

ELSE.

EXIT.

"Tough luck – unfortunately, this field name is not part of the key structure

ENDIF.

"4th: Create a new change request using change request type and a

"description (required)

TRY.

lv_crequest_id = lo_gov_api->create_crequest(

iv_crequest_type = 'SFC01'

iv_description = 'Create new Carrier YZ' ).

CATCH cx_usmd_gov_api.

"Something went wrong while creating the change request (e.g. model blocked

"or change request type unknown).

EXIT.

ENDTRY.

"5th: Before making changes to an object, the object needs to be enqueued

"even if this is a creation scenario

TRY.

lo_gov_api->enqueue_entity( EXPORTING iv_crequest_id = lv_crequest_id

iv_entity_name = 'CARR'

it_data = <lt_carr_key> ).

CATCH cx_usmd_gov_api_entity_lock cx_usmd_gov_api.

EXIT.

"Tough luck –

"something went wrong while enqueueing the entity (it could be a

"technical reason, or maybe the carrier is already interlocked?!

ENDTRY.

"6th: Provide some entity attributes (complete data structure)

MOVE-CORRESPONDING <ls_carr_key> TO <ls_carr_data>.

ASSIGN COMPONENT 'CARRNAME' OF STRUCTURE <ls_carr_data> TO <value>.

<value> = 'Fantasy Flight Airlines'.

ASSIGN COMPONENT 'CURRCODE' OF STRUCTURE <ls_carr_data> TO <value>.

<value> = 'USD'.

ASSIGN COMPONENT 'URL' OF STRUCTURE <ls_carr_data> TO <value>.

<value> = 'http://www.fantasyflight.com'.

INSERT <ls_carr_data> INTO TABLE <lt_carr_data>.

"7th: Write the entity data to the change request

TRY.

lo_gov_api->write_entity( EXPORTING iv_crequest_id = lv_crequest_id

iv_entity_name = 'CARR'

it_data = <lt_carr_data> ).

CATCH cx_usmd_gov_api_entity_write.

EXIT.

"Tough luck - might be that you have no authorization, or the entity is

"not enqueued or cannot be added to the object list of the change

"request

ENDTRY.

"8th: optionally, the entity data is read again... just to make sure everything

"went right.

TRY.

lo_gov_api->read_entity( EXPORTING iv_crequest_id = lv_crequest_id

iv_entity_name = 'CARR'

it_key = <lt_carr_key>

IMPORTING et_data = <lt_carr_data> ).

Page 17: Master Data Governance Application Programming Interface Guide

Master Data Governance

17

CATCH cx_usmd_gov_api_core_error cx_usmd_gov_api.

EXIT.

"Adequate Exception handling

ENDTRY.

"9th: The complete change request should be checked before it is saved

TRY.

lo_gov_api->check_crequest_data( iv_crequest_id = lv_crequest_id ).

"Collect the entities to be checked

ls_entity-entity = 'CARR'.

ls_entity-tabl = lr_carr_key_tab.

INSERT ls_entity INTO TABLE lt_entity.

"check the entity

lo_gov_api->check_complete_data(

EXPORTING iv_crequest_id = lv_crequest_id

it_key = lt_entity ).

CATCH cx_usmd_gov_api_core_error cx_usmd_gov_api.

"Possibility to handle the erroneous data or go on.

ENDTRY.

"10th: Save the change request (and the entity data of course)

TRY.

lo_gov_api->save( ).

"Save is done in draft mode by default so it is possible to

"save the change request even if change request data or

"entity data is not consistent.

CATCH cx_usmd_gov_api_core_error.

EXIT.

"Adequate Exception handling

ENDTRY.

"11th: At the end, it is necessary to clean the house

TRY.

lo_gov_api->dequeue_entity( EXPORTING iv_crequest_id = lv_crequest_id

iv_entity_name = 'CARR'

it_data = <lt_carr_key> ).

lo_gov_api->dequeue_crequest(

EXPORTING iv_crequest_id = lv_crequest_id ).

CATCH cx_usmd_gov_api.

"Not a tragedy - maybe the workflow could not be processed properly after

"it was started

ENDTRY.

COMMIT WORK AND WAIT.

"12th: If everything is fine, the workflow can be started for

"the change request (this is like a 'submit')

TRY.

lo_gov_api->start_workflow( iv_crequest_id = lv_crequest_id ).

CATCH cx_usmd_gov_api_core_error.

"Adequate Exception handling

ENDTRY.

"Interested in the errors occured?

lt_messages = lo_gov_api->get_messages( ).

Page 18: Master Data Governance Application Programming Interface Guide

Master Data Governance

18

5.6 Code Example – Change Flight Connection (with governance API)

*&---------------------------------------------------------------------*

*& Report ZCHANGEPFLI_SF

*&---------------------------------------------------------------------*

*& This example creates a new change request. Along with the change

*& request, an existing flight connection is changed. Additionally, a

*& dependent entity of type flight schedule is changed/created.

*&

*& The exceptions raised by the governance API contain the error

*& messages and some other attributes. Therefore, it is possible to react

*& to the errors raised by the governance API.

*&---------------------------------------------------------------------*

REPORT zchangepfli_sf.

DATA:

lo_gov_api TYPE REF TO if_usmd_gov_api,

lv_crequest_id TYPE usmd_crequest, "Change Request ID

lr_pfli_key_str TYPE REF TO data, "Entity Flight Connection - key structure

lr_pfli_key_tab TYPE REF TO data, "Entity Flight Connection - key table

lr_pfli_data_str TYPE REF TO data, "Entity Flight Connection - data structure

lr_pfli_data_tab TYPE REF TO data, "Entity Flight Connection - data table

lr_flight_key_str TYPE REF TO data, "Entity Flight - key structure

lr_flight_key_tab TYPE REF TO data, "Entity Flight - key table

lr_flight_data_str TYPE REF TO data, "Entity Flight - data structure

lr_flight_data_tab TYPE REF TO data, "Entity Flight - data table

ls_entity TYPE usmd_gov_api_s_ent_tabl,

lt_entity TYPE usmd_gov_api_ts_ent_tabl,

lt_messages TYPE usmd_t_message.

FIELD-SYMBOLS:

<ls_pfli_key> TYPE any,

<lt_pfli_key> TYPE INDEX TABLE,

<ls_pfli_data> TYPE any,

<lt_pfli_data> TYPE INDEX TABLE,

<ls_flight_key> TYPE any,

<lt_flight_key> TYPE INDEX TABLE,

<ls_flight_data> TYPE any,

<lt_flight_data> TYPE INDEX TABLE,

<value> TYPE any.

"1: Create an instance of the governance API

TRY.

lo_gov_api = cl_usmd_gov_api=>get_instance( iv_model_name = 'SF' ).

CATCH cx_usmd_gov_api.

EXIT.

ENDTRY.

"2: Create the data references needed to maintain the flight connection entity

"Create a data reference of the key structure/table of entity PFLI

lo_gov_api->create_data_reference(

EXPORTING iv_entity_name = 'PFLI'

iv_struct = lo_gov_api->gc_struct_key

IMPORTING er_structure = lr_pfli_key_str

er_table = lr_pfli_key_tab ).

lo_gov_api->create_data_reference(

Page 19: Master Data Governance Application Programming Interface Guide

Master Data Governance

19

EXPORTING iv_entity_name = 'PFLI'

iv_struct = lo_gov_api->gc_struct_key_attr

IMPORTING er_structure = lr_pfli_data_str

er_table = lr_pfli_data_tab ).

"Assign the created data references for the flight connection key to the field symbols

ASSIGN lr_pfli_key_str->* TO <ls_pfli_key>.

ASSIGN lr_pfli_key_tab->* TO <lt_pfli_key>.

ASSIGN COMPONENT 'CARR' OF STRUCTURE <ls_pfli_key> TO <value>.

<value> = 'LH'.

ASSIGN COMPONENT 'PFLI' OF STRUCTURE <ls_pfli_key> TO <value>.

<value> = '0401'.

INSERT <ls_pfli_key> INTO TABLE <lt_pfli_key>.

"Assign the created data references for the flight connection data to the field symbols

ASSIGN lr_pfli_data_str->* TO <ls_pfli_data>.

ASSIGN lr_pfli_data_tab->* TO <lt_pfli_data>.

"3: Create a new change request using change request type and a

description (required)

TRY.

lv_crequest_id = lo_gov_api->create_crequest(

iv_crequest_type = 'SFP02'

iv_description = 'Change Flight Connection LH 400' ).

CATCH cx_usmd_gov_api.

"Something went wrong while creating the change request (e.g. data model blocked or change request type unknown).

EXIT.

ENDTRY.

"4: Before making changes to an object, the object needs to be enqueued.

TRY.

lo_gov_api->enqueue_entity( EXPORTING iv_crequest_id = lv_crequest_id

iv_entity_name = 'PFLI'

it_data = <lt_pfli_key> ).

CATCH cx_usmd_gov_api_entity_lock cx_usmd_gov_api.

EXIT.

ENDTRY.

"5: Read the flight connection data in order to do some changes

TRY.

lo_gov_api->read_entity( EXPORTING iv_crequest_id = lv_crequest_id

iv_entity_name = 'PFLI'

it_key = <lt_pfli_key>

IMPORTING et_data = <lt_pfli_data> ).

CATCH cx_usmd_gov_api_core_error cx_usmd_gov_api.

EXIT.

ENDTRY.

READ TABLE <lt_pfli_data> INDEX 1 INTO <ls_pfli_data>.

CLEAR <lt_pfli_data>.

ASSIGN COMPONENT 'ARRTIME' OF STRUCTURE <ls_pfli_data> TO <value>.

<value> = '075500'.

ASSIGN COMPONENT 'DEPTIME' OF STRUCTURE <ls_pfli_data> TO <value>.

<value> = '184000'.

INSERT <ls_pfli_data> INTO TABLE <lt_pfli_data>.

"6: Write the changes for the flight connection

TRY.

lo_gov_api->write_entity( EXPORTING iv_crequest_id = lv_crequest_id

iv_entity_name = 'PFLI'

it_data = <lt_pfli_data> ).

Page 20: Master Data Governance Application Programming Interface Guide

Master Data Governance

20

CATCH cx_usmd_gov_api_entity_write.

EXIT. "Do better next time!

ENDTRY.

"7: Create all the data references needed to maintain the flight entity

"Create a data reference of the key structure/table of entity FLIGHT (Flight)

lo_gov_api->create_data_reference(

EXPORTING iv_entity_name = 'FLIGHT'

iv_struct = lo_gov_api->gc_struct_key

IMPORTING er_structure = lr_flight_key_str

er_table = lr_flight_key_tab ).

lo_gov_api->create_data_reference(

EXPORTING iv_entity_name = 'FLIGHT'

iv_struct = lo_gov_api->gc_struct_key_attr

IMPORTING er_structure = lr_flight_data_str

er_table = lr_flight_data_tab ).

"Assign the created data references for flight connection key to the field symbols

ASSIGN lr_flight_key_str->* TO <ls_flight_key>.

ASSIGN lr_flight_key_tab->* TO <lt_flight_key>.

MOVE-CORRESPONDING <ls_pfli_key> TO <ls_flight_key>.

INSERT <ls_flight_key> INTO TABLE <lt_flight_key>.

ASSIGN lr_flight_data_str->* TO <ls_flight_data>.

ASSIGN lr_flight_data_tab->* TO <lt_flight_data>.

"8: Read some flight data in order to do some changes

TRY.

lo_gov_api->read_entity( EXPORTING iv_crequest_id = lv_crequest_id

iv_entity_name = 'FLIGHT'

it_key = <lt_flight_key>

IMPORTING et_data = <lt_flight_data> ).

CATCH cx_usmd_gov_api_core_error cx_usmd_gov_api.

EXIT.

ENDTRY.

READ TABLE <lt_flight_data> INDEX 1 INTO <ls_flight_data>.

CLEAR <lt_flight_data>.

IF sy-subrc <> 0.

MOVE-CORRESPONDING <ls_flight_key> TO <ls_flight_data>.

ASSIGN COMPONENT 'FLDATE' OF STRUCTURE <ls_flight_data> TO <value>.

<value> = '31122013'.

ENDIF.

ASSIGN COMPONENT 'SEATSOCC' OF STRUCTURE <ls_flight_data> TO <value>.

<value> = '209'.

INSERT <ls_flight_data> INTO TABLE <lt_flight_data>.

"9: Write the changes for the flight

TRY.

lo_gov_api->write_entity( EXPORTING iv_crequest_id = lv_crequest_id

iv_entity_name = 'FLIGHT'

it_data = <lt_flight_data> ).

CATCH cx_usmd_gov_api_entity_write.

EXIT. "Do better next time!

ENDTRY.

"10: The complete change request should be checked before it is saved

TRY.

lo_gov_api->check_crequest_data( iv_crequest_id = lv_crequest_id ).

"Collect the entities to be checked

Page 21: Master Data Governance Application Programming Interface Guide

Master Data Governance

21

ls_entity-entity = 'PFLI'.

ls_entity-tabl = lr_pfli_key_tab.

INSERT ls_entity INTO TABLE lt_entity.

"Check the entity

lo_gov_api->check_complete_data(

EXPORTING iv_crequest_id = lv_crequest_id

it_key = lt_entity ).

CATCH cx_usmd_gov_api_core_error cx_usmd_gov_api.

"Handle the erroneous data or go on.

ENDTRY.

"11: Save the change request (and the entity data, of course)

TRY.

lo_gov_api->save( ).

"Save is done in draft mode by default so it is possible to

save the change request even if the change request data or

the entity data is not consistent.

CATCH cx_usmd_gov_api_core_error.

EXIT.

"Adequate exception handling

ENDTRY.

"12: At the end, it is necessary to clean the house

TRY.

lo_gov_api->dequeue_entity( EXPORTING iv_crequest_id = lv_crequest_id

iv_entity_name = 'PFLI'

it_data = <lt_pfli_key> ).

lo_gov_api->dequeue_crequest( EXPORTING iv_crequest_id = lv_crequest_id ).

CATCH cx_usmd_gov_api.

"Adequate exception handling

ENDTRY.

COMMIT WORK AND WAIT.

"13: If everything is correct, the workflow can be started for

the change request (this is like a 'submit')

TRY.

lo_gov_api->start_workflow( iv_crequest_id = lv_crequest_id ).

CATCH cx_usmd_gov_api_core_error.

"Adequate exception handling

ENDTRY.

"Interested in the messages occurred?

lt_messages = lo_gov_api->get_messages( ).

Page 22: Master Data Governance Application Programming Interface Guide

Copyright

© Copyright 2014 SAP AG. All rights reserved

No part of this publication may be reproduced or transmitted in any form or for any purpose without the express permission of SAP AG. The information contained herein may be changed without prior notice.

Some software products marketed by SAP AG and its distributors contain proprietary software components of other software vendors.

Microsoft, Windows, Excel, Outlook, and PowerPoint are registered trademarks of Microsoft Corporation.

IBM, DB2, DB2 Universal Database, System i, System i5, System p, System p5, System x, System z, System z10, System z9, z10, z9, iSeries, pSeries, xSeries, zSeries, eServer, z/VM, z/OS, i5/OS, S/390, OS/390, OS/400, AS/400, S/390 Parallel Enterprise Server, PowerVM, Power Architecture, POWER6+, POWER6, POWER5+, POWER5, POWER, OpenPower, PowerPC, BatchPipes, BladeCenter, System Storage, GPFS, HACMP, RETAIN, DB2 Connect, RACF, Redbooks, OS/2, Parallel Sysplex, MVS/ESA, AIX, Intelligent Miner, WebSphere, Netfinity, Tivoli and Informix are trademarks or registered trademarks of IBM Corporation.

Linux is the registered trademark of Linus Torvalds in the U.S. and other countries.

Adobe, the Adobe logo, Acrobat, PostScript, and Reader are either trademarks or registered trademarks of Adobe Systems Incorporated in the United States and/or other countries.

Oracle is a registered trademark of Oracle Corporation.

UNIX, X/Open, OSF/1, and Motif are registered trademarks of the Open Group.

Citrix, ICA, Program Neighborhood, MetaFrame, WinFrame, VideoFrame, and MultiWin are trademarks or registered trademarks of Citrix Systems, Inc.

HTML, XML, XHTML and W3C are trademarks or registered trademarks of W3C®, World Wide Web Consortium, Massachusetts Institute of Technology.

Java is a registered trademark of Sun Microsystems, Inc.

JavaScript is a registered trademark of Sun Microsystems, Inc., used under license for technology invented and implemented by Netscape.

SAP, R/3, SAP NetWeaver, Duet, PartnerEdge, ByDesign, SAP Business ByDesign, and other SAP products and services mentioned herein as well as their respective logos are trademarks or registered trademarks of SAP AG in Germany and other countries.

Business Objects and the Business Objects logo, BusinessObjects, Crystal Reports, Crystal Decisions, Web Intelligence, Xcelsius, and other Business Objects products and services mentioned herein as well as their respective logos are trademarks or registered trademarks of Business Objects S.A. in the United States and in other countries. Business Objects is an SAP company.

All other product and service names mentioned are the trademarks of their respective companies. Data contained in this document serves informational purposes only. National product specifications may vary.

These materials are subject to change without notice. These materials are provided by SAP AG and its affiliated companies ("SAP Group") for informational purposes only, without representation or warranty of any kind, and SAP Group shall not be liable for errors or omissions with respect to the materials. The only warranties for SAP Group products and services are those that are set forth in the express warranty statements accompanying such products and services, if any. Nothing herein should be construed as constituting an additional warranty.