批次更新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/tech/pnotes/18643.html

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

相关推荐

发表回复

登录后才能评论