批次更新BAPI_OBJCL_CHANGE详解编程语言


FORM frm_edit_batch  TABLES pt_field STRUCTURE dfies 
USING ps_batch TYPE ty_batch 
CHANGING ps_rturn TYPE bapiret2. 
 DATA : lv_key        TYPE            bapi1003_key-object, 
lv_table      TYPE            bapi1003_key-objecttable VALUE 'MCH1', 
lv_class      TYPE            bapi1003_key-classnum VALUE 'Z_CLASS_BATCH', 
lv_class_type TYPE            bapi1003_key-classtype VALUE  '023', 
lv_status     TYPE            bapi1003_key-status, 
*--------------------TUS-CHARG-BEGIN---------------------------------* 
lt_alloc_curr TYPE TABLE OF   zbapi1003_alloc_values_curr, 
lt_alloc_num     TYPE TABLE OF   zbapi1003_alloc_values_num, 
lt_alloc_char TYPE TABLE OF      zbapi1003_alloc_values_char, 
*--------------------TUS-CHARG-END-----------------------------------* 
lt_return     TYPE TABLE OF   bapiret2, 
ls_return     TYPE            bapiret2. 
DATA:ls_field      TYPE dfies, 
lv_field(100) TYPE c. 
*--------------------TUS-CHARG-BEGIN---------------------------------* 
FIELD-SYMBOLS: 
<fs_s_alloc_curr> TYPE zbapi1003_alloc_values_curr, 
<fs_s_alloc_char> TYPE zbapi1003_alloc_values_char, 
<fs_s_alloc_num>  TYPE zbapi1003_alloc_values_num, 
<fs_value>. 
*--------------------TUS-CHARG-END-----------------------------------* 
REFRESH:lt_alloc_curr,lt_return,lt_alloc_num,lt_alloc_char. 
CLEAR:lv_key,lv_status,ls_return. 
lv_key+0(18)  = ps_batch-matnr. 
lv_key+18(10) = ps_batch-charg. 
*--------------------TUS-CHARG-BEGIN---------------------------------* 
CALL FUNCTION 'BAPI_OBJCL_GETDETAIL' 
EXPORTING 
objectkey       = lv_key 
objecttable     = lv_table 
classnum        = lv_class 
classtype       = lv_class_type 
keydate         = sy-datum 
language        = sy-langu 
IMPORTING 
status          = lv_status 
TABLES 
allocvaluesnum  = lt_alloc_num 
allocvalueschar = lt_alloc_char 
allocvaluescurr = lt_alloc_curr 
return          = lt_return. 
*--------------------TUS-CHARG-END-----------------------------------* 
LOOP AT pt_field INTO ls_field. 
CLEAR lv_field. 
CONCATENATE 'Z_' ls_field-fieldname INTO lv_field. 
ASSIGN COMPONENT ls_field-fieldname OF STRUCTURE ps_batch TO <fs_value>. 
IF sy-subrc EQ 0. 
CASE ls_field-datatype. 
WHEN 'CHAR'. 
READ TABLE lt_alloc_char ASSIGNING <fs_s_alloc_char> WITH KEY charact = lv_field. 
IF sy-subrc = 0. 
IF <fs_value> IS NOT INITIAL. 
<fs_s_alloc_char>-charact       = lv_field. 
<fs_s_alloc_char>-value_char    = <fs_value>. 
<fs_s_alloc_char>-value_neutral = <fs_value>. 
ENDIF. 
ELSE. 
APPEND INITIAL LINE TO lt_alloc_char ASSIGNING <fs_s_alloc_char>. 
<fs_s_alloc_char>-charact       = lv_field. 
<fs_s_alloc_char>-value_char    = <fs_value>. 
<fs_s_alloc_char>-value_neutral = <fs_value>. 
ENDIF. 
IF <fs_value> EQ '999'. 
CLEAR : <fs_s_alloc_char>-value_char,<fs_s_alloc_char>-value_neutral. 
ENDIF. 
WHEN 'DEC' OR 'QUAN'. 
READ TABLE lt_alloc_num ASSIGNING <fs_s_alloc_num> WITH KEY charact = lv_field. 
IF sy-subrc = 0 . 
IF <fs_value> IS NOT INITIAL. 
<fs_s_alloc_num>-charact    = lv_field. 
<fs_s_alloc_num>-value_from = <fs_value>. 
<fs_s_alloc_num>-value_to   = <fs_value>. 
ENDIF. 
ELSE. 
APPEND INITIAL LINE TO lt_alloc_num ASSIGNING <fs_s_alloc_num>. 
<fs_s_alloc_num>-charact    = lv_field. 
<fs_s_alloc_num>-value_from = <fs_value>. 
<fs_s_alloc_num>-value_to   = <fs_value>. 
ENDIF. 
IF <fs_value> EQ 999 . 
CLEAR: <fs_s_alloc_num>-value_from,<fs_s_alloc_num>-value_to. 
ENDIF. 
WHEN 'CURR'. 
READ TABLE lt_alloc_curr ASSIGNING <fs_s_alloc_curr> WITH KEY charact = lv_field. 
IF sy-subrc = 0. 
IF <fs_value> IS NOT INITIAL. 
<fs_s_alloc_curr>-charact           = lv_field. 
<fs_s_alloc_curr>-value_from        = <fs_value>. 
<fs_s_alloc_curr>-currency_from     = 'CNY'. 
<fs_s_alloc_curr>-currency_from_iso = 'CNY'. 
ENDIF. 
ELSE. 
APPEND INITIAL LINE TO lt_alloc_curr ASSIGNING <fs_s_alloc_curr>. 
<fs_s_alloc_curr>-charact           = lv_field. 
<fs_s_alloc_curr>-value_from        = <fs_value>. 
<fs_s_alloc_curr>-currency_from     = 'CNY'. 
<fs_s_alloc_curr>-currency_from_iso = 'CNY'. 
ENDIF. 
IF <fs_value> EQ 999 . 
CLEAR <fs_s_alloc_curr>-value_from . 
ENDIF. 
WHEN OTHERS. 
ENDCASE. 
ENDIF. 
ENDLOOP. 
*--------------------TUS-CHARG-BEGIN---------------------------------* 
CALL FUNCTION 'BAPI_OBJCL_CHANGE' 
EXPORTING 
objectkey          = lv_key 
objecttable        = lv_table 
classnum           = lv_class 
classtype          = lv_class_type 
status             = '1' 
keydate            = sy-datum 
IMPORTING 
classif_status     = lv_status 
TABLES 
allocvaluesnumnew  = lt_alloc_num 
allocvaluescharnew = lt_alloc_char 
allocvaluescurrnew = lt_alloc_curr 
return             = lt_return. 
*--------------------TUS-CHARG-END-----------------------------------* 
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' 
EXPORTING 
wait = 'X'. 
LOOP AT lt_return INTO ls_return WHERE type = 'E' OR type = 'A'. 
ps_rturn = ls_return. 
EXIT. 
ENDLOOP. 
ENDFORM.                    " FRM_EDIT_BATCH



这个批次可以在CL01/02/03 处查看,批次修改和创建参数基本一致。

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/18643.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论