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.
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 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 |