Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Problems when creating CLASSIFICATION with BAPI

Former Member
0 Likes
1,315

Hi,

I'm using the following FM to create the CLASSIFICTION view - MM. This is being done in batch ...

CALL FUNCTION 'BAPI_OBJCL_CREATE'

EXPORTING

objectkeynew = lv_matnr

objecttablenew = 'MARA'

classnumnew = lv_classnum

classtypenew = '001' " mat class

TABLES

allocvaluesnum = ialloc_num

allocvalueschar = ialloc_char

allocvaluescurr = ialloc_curr

return = ireturn.

When I create the 1st class with it's characteristics - no problems but when I create the 2nd class, I get an error that says that my allocation is invalid and not created --> MM01 transaction.

When I run the same part number again - meaning a MM02 transaction will be used - the 2nd class is being created. I've copied the logic from the CHANGE to the STORE but still the same error.

Please if you can help ... I don't know where to look anymore.

Thanx !

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
927

Hi Mare,

I've used this BAPI without problem, check my code, maybe you can get something useful:

FORM carga_clase USING l_nombre_clase LIKE klah-class
                       l_nombre_caract LIKE cabn-atnam.

******  BAPI Required Variables *****
* Header
  DATA:
    l_object_key LIKE ausp-objek,
    l_object_table LIKE bapi1003_key-objecttable VALUE 'LFA1',
    l_classnum_or LIKE bapi1003_key-classnum,
    l_classnum LIKE bapi1003_key-classnum,
    l_classtype LIKE bapi1003_key-classtype VALUE '010'.

* Tables
  DATA:
    itab_allocations LIKE STANDARD TABLE OF bapi1003_alloc_values_char,
    itab_numnew LIKE STANDARD TABLE OF bapi1003_alloc_values_num,
    itab_currnew LIKE STANDARD TABLE OF bapi1003_alloc_values_curr,
    itab_ret LIKE STANDARD TABLE OF bapiret2.

* Work Areas
  DATA:
    wa_allocations LIKE LINE OF itab_allocations,
    wa_ret LIKE LINE OF itab_ret.

***********************************************

  DATA: l_contador_registros TYPE i,
        l_contador_clase TYPE i,
        l_contador_registros_str TYPE string,
        l_contador_clase_str TYPE string,
        l_charact_or LIKE cabn-atnam,
        l_charact LIKE cabn-atnam.

  l_classnum_or = l_nombre_clase.
  l_charact_or = l_nombre_caract.
  l_contador_registros = 0.
  l_contador_clase = 0.

  LOOP AT itab_lfa1 INTO wa_lfa1.

    l_contador_registros = 0.
    l_contador_clase = 0.
    l_classnum = l_classnum_or.
    l_charact = l_nombre_caract.

    CLEAR: itab_allocations, itab_numnew, itab_currnew, itab_ret.

    LOOP AT itab_result INTO wa_result
    WHERE lifnr = wa_lfa1-lifnr AND class = l_nombre_clase.

      CLEAR: wa_allocations.

      IF l_contador_registros = 998.
        l_contador_clase = l_contador_clase + 1.
        l_contador_registros = 0.

        l_object_key = wa_lfa1-lifnr.

* Se crea la clase y caracteristica para el proveedor
        CALL FUNCTION 'BAPI_OBJCL_CREATE'
             EXPORTING
                  objectkeynew   = l_object_key
                  objecttablenew = l_object_table
                  classnumnew    = l_classnum
                  classtypenew   = l_classtype
             TABLES
                  return         = itab_ret.
        IF c_test <> 'X'.
          COMMIT WORK AND WAIT.
        ENDIF.

* Se agregan los valores a la caracteristica recien creada
        CALL FUNCTION 'BAPI_OBJCL_CHANGE'
             EXPORTING
                  objectkey          = l_object_key
                  objecttable        = l_object_table
                  classnum           = l_classnum
                  classtype          = l_classtype
             TABLES
                  allocvaluesnumnew  = itab_numnew
                  allocvaluescharnew = itab_allocations
                  allocvaluescurrnew = itab_currnew
                  return             = itab_ret.
        IF c_test <> 'X'.
          COMMIT WORK AND WAIT.
        ENDIF.

        LOOP AT itab_ret INTO wa_ret WHERE type = 'E'.
          CLEAR wa_log.
          wa_log-lifnr = wa_lfa1-lifnr.
          wa_log-class = l_classnum.
          wa_log-message = wa_ret-message.
          APPEND wa_log TO itab_log.
        ENDLOOP.

        CLEAR: itab_allocations, itab_numnew, itab_currnew, itab_ret.

        CLEAR l_classnum.
        l_contador_clase_str = l_contador_clase.
        CONCATENATE l_classnum_or l_contador_clase_str INTO l_classnum.
        CONCATENATE l_charact_or l_contador_clase_str INTO l_charact.

      ENDIF.

      wa_allocations-charact = l_charact.
      wa_allocations-value_char = wa_result-atwrt.

      APPEND wa_allocations TO itab_allocations.

      l_contador_registros = l_contador_registros + 1.

    ENDLOOP.

    l_object_key = wa_lfa1-lifnr.

* Se crea la clase y caracteristica para el proveedor
    CALL FUNCTION 'BAPI_OBJCL_CREATE'
         EXPORTING
              objectkeynew   = l_object_key
              objecttablenew = l_object_table
              classnumnew    = l_classnum
              classtypenew   = l_classtype
         TABLES
              return         = itab_ret.
    IF c_test <> 'X'.
      COMMIT WORK AND WAIT.
    ENDIF.

* Se agregan los valores a la caracteristica recien creada
    CALL FUNCTION 'BAPI_OBJCL_CHANGE'
         EXPORTING
              objectkey          = l_object_key
              objecttable        = l_object_table
              classnum           = l_classnum
              classtype          = l_classtype
         TABLES
              allocvaluesnumnew  = itab_numnew
              allocvaluescharnew = itab_allocations
              allocvaluescurrnew = itab_currnew
              return             = itab_ret.

    IF c_test <> 'X'.
      COMMIT WORK AND WAIT.
    ENDIF.

    LOOP AT itab_ret INTO wa_ret WHERE type = 'E'.
      CLEAR wa_log.
      wa_log-lifnr = wa_lfa1-lifnr.
      wa_log-class = l_classnum.
      wa_log-message = wa_ret-message.
      APPEND wa_log TO itab_log.
    ENDLOOP.

    CLEAR: itab_allocations, itab_numnew, itab_currnew, itab_ret.

  ENDLOOP.

ENDFORM.                    " CARGA_CLASE

Regards,

Gilberto Li

3 REPLIES 3
Read only

former_member376453
Contributor
0 Likes
927

I think after using this BAPI you are you have used commit work. In BAPI_TRANSACTION_COMMIT you check the option for wait. I think that may solve your problem.

Kuntal

Read only

Former Member
0 Likes
927

Hi,

I can suggest you another idea for creating classification fro materials.

There is a Tcode CL24N which will take input of Classtype and Class name and then material number, you can have a record in LSMW and run the LSMW for the materials you need.

If it works, jus check it out.

Thanks and Regards

Vipin Das V

Read only

Former Member
0 Likes
928

Hi Mare,

I've used this BAPI without problem, check my code, maybe you can get something useful:

FORM carga_clase USING l_nombre_clase LIKE klah-class
                       l_nombre_caract LIKE cabn-atnam.

******  BAPI Required Variables *****
* Header
  DATA:
    l_object_key LIKE ausp-objek,
    l_object_table LIKE bapi1003_key-objecttable VALUE 'LFA1',
    l_classnum_or LIKE bapi1003_key-classnum,
    l_classnum LIKE bapi1003_key-classnum,
    l_classtype LIKE bapi1003_key-classtype VALUE '010'.

* Tables
  DATA:
    itab_allocations LIKE STANDARD TABLE OF bapi1003_alloc_values_char,
    itab_numnew LIKE STANDARD TABLE OF bapi1003_alloc_values_num,
    itab_currnew LIKE STANDARD TABLE OF bapi1003_alloc_values_curr,
    itab_ret LIKE STANDARD TABLE OF bapiret2.

* Work Areas
  DATA:
    wa_allocations LIKE LINE OF itab_allocations,
    wa_ret LIKE LINE OF itab_ret.

***********************************************

  DATA: l_contador_registros TYPE i,
        l_contador_clase TYPE i,
        l_contador_registros_str TYPE string,
        l_contador_clase_str TYPE string,
        l_charact_or LIKE cabn-atnam,
        l_charact LIKE cabn-atnam.

  l_classnum_or = l_nombre_clase.
  l_charact_or = l_nombre_caract.
  l_contador_registros = 0.
  l_contador_clase = 0.

  LOOP AT itab_lfa1 INTO wa_lfa1.

    l_contador_registros = 0.
    l_contador_clase = 0.
    l_classnum = l_classnum_or.
    l_charact = l_nombre_caract.

    CLEAR: itab_allocations, itab_numnew, itab_currnew, itab_ret.

    LOOP AT itab_result INTO wa_result
    WHERE lifnr = wa_lfa1-lifnr AND class = l_nombre_clase.

      CLEAR: wa_allocations.

      IF l_contador_registros = 998.
        l_contador_clase = l_contador_clase + 1.
        l_contador_registros = 0.

        l_object_key = wa_lfa1-lifnr.

* Se crea la clase y caracteristica para el proveedor
        CALL FUNCTION 'BAPI_OBJCL_CREATE'
             EXPORTING
                  objectkeynew   = l_object_key
                  objecttablenew = l_object_table
                  classnumnew    = l_classnum
                  classtypenew   = l_classtype
             TABLES
                  return         = itab_ret.
        IF c_test <> 'X'.
          COMMIT WORK AND WAIT.
        ENDIF.

* Se agregan los valores a la caracteristica recien creada
        CALL FUNCTION 'BAPI_OBJCL_CHANGE'
             EXPORTING
                  objectkey          = l_object_key
                  objecttable        = l_object_table
                  classnum           = l_classnum
                  classtype          = l_classtype
             TABLES
                  allocvaluesnumnew  = itab_numnew
                  allocvaluescharnew = itab_allocations
                  allocvaluescurrnew = itab_currnew
                  return             = itab_ret.
        IF c_test <> 'X'.
          COMMIT WORK AND WAIT.
        ENDIF.

        LOOP AT itab_ret INTO wa_ret WHERE type = 'E'.
          CLEAR wa_log.
          wa_log-lifnr = wa_lfa1-lifnr.
          wa_log-class = l_classnum.
          wa_log-message = wa_ret-message.
          APPEND wa_log TO itab_log.
        ENDLOOP.

        CLEAR: itab_allocations, itab_numnew, itab_currnew, itab_ret.

        CLEAR l_classnum.
        l_contador_clase_str = l_contador_clase.
        CONCATENATE l_classnum_or l_contador_clase_str INTO l_classnum.
        CONCATENATE l_charact_or l_contador_clase_str INTO l_charact.

      ENDIF.

      wa_allocations-charact = l_charact.
      wa_allocations-value_char = wa_result-atwrt.

      APPEND wa_allocations TO itab_allocations.

      l_contador_registros = l_contador_registros + 1.

    ENDLOOP.

    l_object_key = wa_lfa1-lifnr.

* Se crea la clase y caracteristica para el proveedor
    CALL FUNCTION 'BAPI_OBJCL_CREATE'
         EXPORTING
              objectkeynew   = l_object_key
              objecttablenew = l_object_table
              classnumnew    = l_classnum
              classtypenew   = l_classtype
         TABLES
              return         = itab_ret.
    IF c_test <> 'X'.
      COMMIT WORK AND WAIT.
    ENDIF.

* Se agregan los valores a la caracteristica recien creada
    CALL FUNCTION 'BAPI_OBJCL_CHANGE'
         EXPORTING
              objectkey          = l_object_key
              objecttable        = l_object_table
              classnum           = l_classnum
              classtype          = l_classtype
         TABLES
              allocvaluesnumnew  = itab_numnew
              allocvaluescharnew = itab_allocations
              allocvaluescurrnew = itab_currnew
              return             = itab_ret.

    IF c_test <> 'X'.
      COMMIT WORK AND WAIT.
    ENDIF.

    LOOP AT itab_ret INTO wa_ret WHERE type = 'E'.
      CLEAR wa_log.
      wa_log-lifnr = wa_lfa1-lifnr.
      wa_log-class = l_classnum.
      wa_log-message = wa_ret-message.
      APPEND wa_log TO itab_log.
    ENDLOOP.

    CLEAR: itab_allocations, itab_numnew, itab_currnew, itab_ret.

  ENDLOOP.

ENDFORM.                    " CARGA_CLASE

Regards,

Gilberto Li