cancel
Showing results for 
Search instead for 
Did you mean: 

MDM ABAP API Performance Problems

Former Member
0 Kudos

Hi all,

we developed a custom transaction into our ECC 6.0 system to remotely retreive data coming from MDM (7.1 SP05) and show them to the user. The 2 systems phisically reside in different datacenters, so running in the same WAN but in 2 different AD domains and 2 different ip networks.

In short the transaction is working using the standard MDM ABAP API functionalities and getting the MDM data using the following methods:

.....

CALL METHOD lr_api->mo_accessor->connect

......

CALL METHOD lr_api->mo_core_service->query

......

CALL METHOD lr_api->mo_core_service->retrieve

.......

CALL METHOD lr_api->mo_accessor->disconnect.

This is working, but with awful performances. for example to get a subset of materials (around 500 codes) it takes more than 1 minute, and the quantity of data transfered from MDM to ECC (around 30 KB) is not justifying this time.

Please be so kind to suggest any kind of activity that I can perform to improve the situation.

Thanks in advance.

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Hello Rinox

MDM spent much time for connection installation.

Open your connection when you start session and close when session have been finished

Don't close your connection all time.

Regards

Kanstantsin Chernichenka

Former Member
0 Kudos

Kanstantsin,

Thanks for your answer.

In fact this is what we do. We first call method lr_api->mo_accessor->connect in the beginning of a function module, then we do our job (materials selection and info retrival) and at the end we close the connection to MDM thru method lr_api->mo_accessor->disconnect.

What I noted is that, during the rfc activity, a lot of tcp ports are opened on MDM side and then small packets are sent to the ECC system. I don't know if this is a normal behaviour and could be the reaso of the performance problem... maybe this is a way to parallelize the MDM extraction activity, but could introduce delay while preparing this packets.

Maybe there're some settings on the MDM side that can be done to "optimize" the size of the network packets sent to the ECC system. Or maybe I'm wrong and this is not the reason of my problems.

Regards,

Rinox

Former Member
0 Kudos

Hi all,

no answers till today unfortunately. I would like to better clarify the situation so maybe it could help you expert to get possible solutions.

As told, we're currently developing a transaction inside our ECC 6.0 system to remotely retreive the Materials Classification tree from the MDM system, and then allowing the users to have the list of the MDM materials according to the selected commodity (class). In short the transaction is replicating a subset of functionalities available with MDM Data Manager (class search), and the data retrival is performed only with standard methods made available wiht the MDM_TECH addon:

- CALL METHOD lr_api->mo_accessor->connect

- CALL METHOD lr_api->mo_core_service->query

- CALL METHOD lr_api->mo_core_service->retrieve

- CALL METHOD lr_api->mo_accessor->disconnect

According to the ABAP API programming best practices, the process has been managed thru the following 4 steps:

1. retreive the list of MDM material by class code

2. retreive for the selected materials some attributes in a MDM lookup table,

3. retreive, material by material, the list of SAP material code (included in a MDM lookup table different from point 2.),

4. retreive, material by material, the list of SAP material country (included in a MDM lookup table different from point 2. and 3.),

Thus we can say that, while point 1 executes only 1 selection, points 2., 3. and 4. have to perform n single selections, where n is the number of materials belonging to the selected commodity.

Unfortunately, for some (not huge) classes, the transaction takes too much time and this is not justified neither by the number of materials selected nor by the volumes of data transferred from MDM to ECC. Please note that largest classes contain up to 3000 materials, that is in any case a limited number.

Question is: considering that the problem seems to be related to the way the ABAP API can retreive the data from different lookup tables, is there a way to perform this with "global selections" instead of having to perform "single selections" material by material? Also do you know if some MDS.ini parameters aloow to speed up such kind of selections?

Thanks!

Former Member
0 Kudos

Hi There,

After making connection, using Query statement, you are getting all catergoy IDs.

Instead of passing each and every category ID to Retrieve statement, It would be better to send all Category IDs at one shot and retrieve all CategoryID text.

So at one call you are getting Category texts or descriptions.

I am also doing same thing, but I am displaying Tree Strure and all attribute Text values on WebDynPro-ABAP Form.

If this is not the answere expecting please give more details, I will try to figure out the probelm.

Former Member
0 Kudos

I am trying to retreieve date from MDM to ECC using ABAP API.I am getting the below dump.

Short text

    An exception occurred that was not caught.

What happened?

    The exception 'CX_MDM_PROVIDER' was raised, but it was not

     along

    the call hierarchy.

    Since exceptions represent error situations and this error

    adequately responded to, the running ABAP program

     'CL_MDM_PROVIDER_71_SP00_PL00==CP' has to be

    terminated.

    

What can you do?

    Note down which actions and inputs caused the error.

    To process the problem further, contact you SAP system

    administrator.

    Using Transaction ST22 for ABAP Dump Analysis, you can loo

    at and manage termination messages, and you can also

    keep them for a long time.

    

Error analysis

    An exception occurred that is explained in detail below.

The exception, which is assigned to class 'CX_MDM_PROVIDER', was not caught in

procedure "GET_LOC_SUPP" "(METHOD)", nor was it propagated by a RAISING clause.

Since the caller of the procedure could not have anticipated that the

exception would occur, the current program is terminated.

The reason for the exception is:

Internal error: field 'SEARCH_GROUPS' not found; contact your system

administrator

Please check at this point I am getting dump:

LT_SEARCH_TUPLE_PATH

    Table IT_1806[0x12]

    \CLASS=CL_MDM_PROVIDER_71_SP00_PL00\METHOD=IF_MDM_CORE_SERVICES~QUERY\DATA=LT_SEARCH_TUPLE_PAT

    Table reference: 1612

    TABH+  0(20) = 000000000000000007000000579D710000000000

    TABH+ 20(20) = 0000064C0000070E000000000000000CFFFFFFFF

    TABH+ 40(16) = 04000138000F44A0000424E403000000

    store        = 0x0000000000000000

    ext1         = 0x07000000579D7100

    shmId        = 0     (0x00000000)

    id           = 1612  (0x0000064C)

    label        = 1806  (0x0000070E)

    fill         = 0     (0x00000000)

    leng         = 12    (0x0000000C)

    loop         = -1    (0xFFFFFFFF)

    xtyp         = TYPE#000300

    occu         = 4     (0x00000004)

    accKind      = 1     (ItAccessStandard)

    idxKind      = 0     (ItIndexNone)

    uniKind      = 2     (ItUniNo)

    keyKind      = 1     (default)

    cmpMode      = 12    (ILLEGAL)

    occu0        = 1

    stMode       = 0

    groupCntl    = 0

    rfc          = 0

    unShareable  = 0

    mightBeShared = 0

    sharedWithShmTab = 0

    isShmLockId  = 0

    isUsed       = 1

    isCtfyAble   = 1

    hasScndKeys  = 0

    hasRowId     = 0

    scndKeysOutdated = 0

    scndUniKeysOutdated = 0

LV_MESS

    field 'SEARCH_GROUPS' not found

    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

    6666622544544545455522667266766222222222222222222222222222222222222222222222222222222222222222

    695C407351238F72F50370EF406F5E4000000000000000000000000000000000000000000000000000000000000000

SY-REPID


I am picking the data from MAIN TABLE MDM_SUPPLIER_MAP and below is the code.

CALL METHOD lv_mdm_api->mo_core_service->query

      EXPORTING

*Main Table

      iv_object_type_code = 'MDM_SUPPLIER_MAP'               "#EC NOTEXT

*      it_query = lt_query

      IMPORTING

      et_result_set = lt_result_set.

Please suggest solution to get the records from MDM to ECC.

When I am tring to replace the abpove with the below code it is working.But in this case I need to retreive all the data instead of using DO and ENDO.Could any please suggest solution.

DO 10 TIMES.

APPEND sy-index TO keys.

ENDDO.

CALL METHOD lv_mdm_api->mo_core_service->retrieve_simple

EXPORTING

iv_object_type_code = 'MDM_SUPPLIER_MAP'

it_keys = keys

IMPORTING

et_ddic_structure = result_ddic


Answers (0)