2010 Oct 26 2:37 PM
I want to update (MSC3N) classification tab -> characteristic values, Is it using this FM?
input what value of OBJECTKEY and OBJECTTABLE
CALL FUNCTION 'BAPI_OBJCL_CHANGE'
EXPORTING
OBJECTKEY =
OBJECTTABLE =
CLASSNUM =
CLASSTYPE =
* STATUS = '1'
* STANDARDCLASS =
* CHANGENUMBER =
* KEYDATE = SY-DATUM
* NO_DEFAULT_VALUES = ' '
* IMPORTING
* CLASSIF_STATUS =
TABLES
ALLOCVALUESNUMNEW =
ALLOCVALUESCHARNEW =
ALLOCVALUESCURRNEW =
RETURN =
.Edited by: cpliu903 on Oct 26, 2010 3:39 PM
2010 Oct 26 3:36 PM
Hello,
Yes You have to use FM to do it. Please find the usage below.
length = strlen(ekpo-matnr).
Write "batch" to objek+18(10).
Write ekpo-matnr to objek+0(length) LEFT-JUSTIFIED.
lt_charvalues-charact='XYZ' "Char Name
lt_charvalues-value_char='A' "Value
Call BAPI_OBJCL_CHANGE with OBJEK, OBJECTTABLE = 'MCH1', <Your Class Name>, <Class type> and alloccharvaluesnew as i took character type characterstic in my example(Need to use corresponding table based on datatype)
Hope it helps!
Pavan.
I want to update (MSC3N) classification tab -> characteristic values, Is it using this FM?
input what value of OBJECTKEY and OBJECTTABLE
CALL FUNCTION 'BAPI_OBJCL_CHANGE'
EXPORTING
OBJECTKEY =
OBJECTTABLE =
CLASSNUM =
CLASSTYPE =
* STATUS = '1'
* STANDARDCLASS =
* CHANGENUMBER =
* KEYDATE = SY-DATUM
* NO_DEFAULT_VALUES = ' '
* IMPORTING
* CLASSIF_STATUS =
TABLES
ALLOCVALUESNUMNEW =
ALLOCVALUESCHARNEW =
ALLOCVALUESCURRNEW =
RETURN =
.Edited by: cpliu903 on Oct 26, 2010 3:39 PM
2010 Oct 26 3:36 PM
Hello,
Yes You have to use FM to do it. Please find the usage below.
length = strlen(ekpo-matnr).
Write "batch" to objek+18(10).
Write ekpo-matnr to objek+0(length) LEFT-JUSTIFIED.
lt_charvalues-charact='XYZ' "Char Name
lt_charvalues-value_char='A' "Value
Call BAPI_OBJCL_CHANGE with OBJEK, OBJECTTABLE = 'MCH1', <Your Class Name>, <Class type> and alloccharvaluesnew as i took character type characterstic in my example(Need to use corresponding table based on datatype)
Hope it helps!
Pavan.
2010 Oct 27 4:48 AM
Message Type E
Table not supported for class type 022
what problem??
Data: length type I,
objek(50) type C.
length = STRLEN( 'PIC12F510-I/MC' ).
Write '0000120255' to objek+18(10).
Write 'PIC12F510-I/MC' to objek+0(length) LEFT-JUSTIFIED.
WRITE :/ length, objek .
DATA: GT_VALUES_NUM TYPE TABLE OF BAPI1003_ALLOC_VALUES_NUM,
GT_VALUES_CHAR TYPE TABLE OF BAPI1003_ALLOC_VALUES_CHAR,
GT_VALUES_CURR TYPE TABLE OF BAPI1003_ALLOC_VALUES_CURR,
GT_BAPIRET2 TYPE TABLE OF BAPIRET2,
LS_BAPIRET2 TYPE BAPIRET2.
DATA: GS_VALUES_NUM TYPE BAPI1003_ALLOC_VALUES_NUM,
GS_VALUES_CHAR TYPE BAPI1003_ALLOC_VALUES_CHAR,
GS_VALUES_CURR TYPE BAPI1003_ALLOC_VALUES_CHAR,
GC_FLAG_X(1) TYPE C VALUE 'X'.
START-OF-SELECTION.
GS_VALUES_CHAR-CHARACT = 'Z_STORAGE_BIN' .
GS_VALUES_CHAR-VALUE_CHAR = 'SH9999'.
APPEND GS_VALUES_CHAR TO GT_VALUES_CHAR.
CALL FUNCTION 'BAPI_OBJCL_CHANGE'
EXPORTING
OBJECTKEY = objek
OBJECTTABLE = 'MCH1'
CLASSNUM = 'EP_BATCH_01'
CLASSTYPE = '022'
* STATUS = '1'
* STANDARDCLASS =
* CHANGENUMBER =
* KEYDATE = SY-DATUM
* NO_DEFAULT_VALUES = ' '
* IMPORTING
* CLASSIF_STATUS =
TABLES
ALLOCVALUESNUMNEW = GT_VALUES_NUM
ALLOCVALUESCHARNEW = GT_VALUES_CHAR
ALLOCVALUESCURRNEW = GT_VALUES_CURR
RETURN = GT_BAPIRET2
.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'
IMPORTING
RETURN = LS_BAPIRET2.
WRITE:'Message Type',LS_BAPIRET2-TYPE .
LOOP AT GT_BAPIRET2 INTO LS_BAPIRET2.
WRITE:'Message Type',LS_BAPIRET2-TYPE ,LS_BAPIRET2-MESSAGE.
ENDLOOP.
2010 Oct 27 5:06 AM
Hello!
look at table TCLA
for 022 class you must use OBJECTTABLE = 'MCHA'
Thank you!
2010 Oct 27 6:59 AM
The Object Key also is MANTR + CHARG ??
MANTR : PIC12F510-I/MC
CHARG: 0000120255
Data: length type I,
objek(50) type C.
length = STRLEN( 'PIC12F510-I/MC' ).
Write '0000120255' to objek+18(10).
Write 'PIC12F510-I/MC' to objek+0(length) LEFT-JUSTIFIED.when object table change to MCHA, that will be appear "Object PIC12F510-I/MC0000120255 does not exist"
2010 Oct 27 8:45 AM
Use the following structures to build objkey
DATA : BEGIN OF MCHAKEY,
MATNR LIKE MCHA-MATNR,
WERKS LIKE MCHA-WERKS,
CHARG LIKE MCHA-CHARG.
DATA : END OF MCHAKEY.
DATA : BEGIN OF MCH1KEY,
MATNR LIKE MCHA-MATNR,
CHARG LIKE MCHA-CHARG.
DATA : END OF MCH1KEY.(You forgot WERKS, perform some tests via SE37 with function modules OBJECT_CHECK_MCH1 or OBJECT_CHECK_MCHA,"Existence check for batch classification")
Regards,
Raymond
2010 Oct 27 9:21 AM
not work, It prompt error message "Enter a batch" .
DATA : BEGIN OF MCHAKEY,
MATNR LIKE MCHA-MATNR,
WERKS LIKE MCHA-WERKS,
CHARG LIKE MCHA-CHARG.
DATA : END OF MCHAKEY.
DATA ITAB LIKE TABLE OF MCHAKEY WITH HEADER LINE.
SELECT MATNR WERKS CHARG INTO CORRESPONDING FIELDS OF TABLE ITAB FROM MCHA
WHERE MATNR = 'PIC12F510-I/MC' AND
WERKS = '8001' AND
CHARG = '0000120255'.
DATA L_OBJNUM(50) TYPE C.
LOOP AT ITAB.
L_OBJNUM(18) = ITAB-MATNR.
L_OBJNUM+18(4) = ITAB-WERKS.
L_OBJNUM+22(10) = ITAB-CHARG.
ENDLOOP.
DATA: GT_VALUES_NUM TYPE TABLE OF BAPI1003_ALLOC_VALUES_NUM,
GT_VALUES_CHAR TYPE TABLE OF BAPI1003_ALLOC_VALUES_CHAR,
GT_VALUES_CURR TYPE TABLE OF BAPI1003_ALLOC_VALUES_CURR,
GT_BAPIRET2 TYPE TABLE OF BAPIRET2,
LS_BAPIRET2 TYPE BAPIRET2.
DATA: GS_VALUES_NUM TYPE BAPI1003_ALLOC_VALUES_NUM,
GS_VALUES_CHAR TYPE BAPI1003_ALLOC_VALUES_CHAR,
GS_VALUES_CURR TYPE BAPI1003_ALLOC_VALUES_CHAR,
GC_FLAG_X(1) TYPE C VALUE 'X'.
START-OF-SELECTION.
GS_VALUES_CHAR-CHARACT = 'Z_STORAGE_BIN' .
GS_VALUES_CHAR-VALUE_CHAR = 'SH8005'.
APPEND GS_VALUES_CHAR TO GT_VALUES_CHAR.
CALL FUNCTION 'BAPI_OBJCL_CHANGE'
EXPORTING
OBJECTKEY = L_OBJNUM
OBJECTTABLE = 'MCHA'
CLASSNUM = 'EP_BATCH_01'
CLASSTYPE = '022'
TABLES
ALLOCVALUESNUMNEW = GT_VALUES_NUM
ALLOCVALUESCHARNEW = GT_VALUES_CHAR
ALLOCVALUESCURRNEW = GT_VALUES_CURR
RETURN = GT_BAPIRET2
.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'
IMPORTING
RETURN = LS_BAPIRET2.
WRITE: LS_BAPIRET2-TYPE .
LOOP AT GT_BAPIRET2 INTO LS_BAPIRET2.
WRITE: 'MESSAGE TYPE', LS_BAPIRET2-TYPE ,LS_BAPIRET2-MESSAGE.
ENDLOOP.
2010 Oct 27 9:26 AM
You need to concatenate them with the syntax 'RESPECTING BLANKS' .
Concatenate Matnr Charg into lv_objkey RESPECTING BLANKS.
The key is build up with full length of the matnr/charg in your case matnr is 14 char so after 'PIC12F510-I/MC' there will be 4 spaces .
Your key should look like this 'PIC12F510-I/MC 0000120255' instead of 'PIC12F510-I/MC0000120255'
2010 Oct 27 9:44 AM
Thank you very much.
It is correct...
However, the characteristics values does not change. why?
It's also not work Run in SE37.
GS_VALUES_CHAR-CHARACT = 'Z_STORAGE_BIN' .
GS_VALUES_CHAR-VALUE_CHAR = 'SH8005'.
2010 Oct 27 10:06 AM
Replace
SELECT MATNR WERKS CHARG INTO CORRESPONDING FIELDS OF TABLE ITAB FROM MCHA
WHERE MATNR = 'PIC12F510-I/MC' AND
WERKS = '8001' AND
CHARG = '0000120255'.
DATA L_OBJNUM(50) TYPE C.
LOOP AT ITAB.
L_OBJNUM(18) = ITAB-MATNR.
L_OBJNUM+18(4) = ITAB-WERKS.
L_OBJNUM+22(10) = ITAB-CHARG.
ENDLOOP.with
mchakey-matnr = 'PIC12F510-I/MC'.
mchakey-werks = '8001'.
mchakey-charg = '0000120255'.
l_objnum = mchakey.But the correct way is use of BAPI_OBJCL_CONCATENATEKEY_KEY to build the key (or BAPI_OBJCL_CONCATENATEKEY)
REFRESH lt_key.
lv_key-key_field = 'MATNR'
* lv_ket-VALUE_INT = mcha-matnr. " actual program
lv_key-value_ext = 'PIC12F510-I/MC'. " test program
lv_key-key_field = 'WERKS'.
* lv_ket-VALUE_INT = mcha-werks.
lv_key-value_ext = '8001'.
lv_key-key_field = 'CHARG'.
* lv_ket-VALUE_INT = mcha-charg.
lv_key-value_ext = '0000120255'.
APPEND lv_key TO lt_key.
CALL FUNCTION 'BAPI_OBJCL_CONCATENATEKEY_KEY'
EXPORTING
objecttable = 'MCHA'
classtype = '022'
IMPORTING
clobjectkeyout = l_objnum
TABLES
objectkeytable = lt_key
return = return.Regards,
Raymond
2010 Oct 27 11:18 AM
Is it pass this value
IMPORTING
clobjectkeyout = l_objnum
to BAPI_OBJCL_CHANGE
EXPORTING
OBJECTKEY = L_OBJNUM
I have try this, but it has run time error.
2010 Oct 27 12:53 PM
Hello,
Try adding this line to your coding
GS_VALUES_CHAR-CHARACT = 'Z_STORAGE_BIN' .
GS_VALUES_CHAR-VALUE_CHAR = 'SH8005'.
GS_VALUES_CHAR-value_neutral = 'SH8005'. <=
Edited by: tony pang on Oct 27, 2010 1:53 PM
2010 Oct 26 3:38 PM
I believe you are trying to change characteristic values. BAPI_OBJCL_CHANGE is to change/create class and class assignments. Try BAPI_CHARACT_CHANGE to change characteristics values. See FM documents for more details.
regards,
Pranav
2010 Oct 26 3:41 PM
OSS [Note 1083986 - BAPIs for classification - Overview|https://service.sap.com/sap/support/notes/1083986] is a good starting point for you.
- Also read [Note 1348099 - BAPI_OBJCL_CREATE: Operating instructions|https://service.sap.com/sap/support/notes/1348099] very similar parameters to [BAPI_OBJCL_CHANGE|http://www.sdn.sap.com/irj/scn/advancedsearch?query=bapi_objcl_change] "Change Properties of Assignment"
- And read [Note 1479120 - BAPI_CHARACT_CREATE: Operating instructions|https://service.sap.com/sap/support/notes/1479120] very similar parameters to [BAPI_CHARACT_CHANGE|http://www.sdn.sap.com/irj/scn/advancedsearch?query=bapi_charact_change] "Change Characteristic"
- Last read [Note 1083984 - BAPI_OBJCL_CONCATENATEKEY and BAPI_OBJCL_SPLITKEY: Condition|https://service.sap.com/sap/support/notes/1083984] to build Objects key with [BAPI_OBJCL_CONCATENATEKEY|http://www.sdn.sap.com/irj/scn/advancedsearch?query=bapi_objcl_concatenatekey]
Regards,
Raymond
2010 Oct 26 4:01 PM
Hello,
Keep in mind that with BAPI_OBJCL_CHANGE you need to populate all entries in the table parameters if you want to change a characteristic because empty enties in that bapi => deleted that characteristic if there is a value assigned to that characteristic.
You may want to call BAPI_OBJCL_GETCLASSES first and add/change entries from the tables-parameters to avoid problems.
| User | Count |
|---|---|
| 3 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |