做预留时 与外部系统同步的代码

来源:互联网 发布:淘宝无线店铺装修教程 编辑:程序博客网 时间:2024/05/14 21:03

FUNCTION zexit_sapmm07r_001.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  TABLES
*"      TI_RKPF STRUCTURE  RKPF
*"      TI_RESB_NEW STRUCTURE  RESB
*"      TI_RESB_OLD STRUCTURE  RESB
*"      TI_DM07R STRUCTURE  DM07R
*"      TI_RESB_ADDED STRUCTURE  RESBN OPTIONAL
*"----------------------------------------------------------------------
  TABLES rkpf.
  DATA resnum LIKE resb-rsnum.
  DATA len    TYPE i.
  DATA: exc_ref TYPE REF TO cx_sy_native_sql_error,
        sql_error type bapiret2-message,
        rootexcept type ref to CX_ROOT.

  try.
  MOVE 0 TO len.
  DESCRIBE TABLE ti_rkpf LINES len.
  IF len EQ 0.
    DESCRIBE TABLE ti_resb_new LINES len.
    IF len NE 0.
      READ TABLE ti_resb_new INDEX 1.
      resnum = ti_resb_new-rsnum.
    ELSE.
      DESCRIBE TABLE ti_resb_added LINES len.
      IF len NE 0.
        READ TABLE ti_resb_added INDEX 1.
        resnum = ti_resb_added-rsnum.
      ELSE.
        EXIT.
      ENDIF.
    ENDIF.

    IF resnum EQ space.
      EXIT.
    ENDIF.

    SELECT SINGLE * FROM rkpf WHERE rsnum EQ resnum.
    CHECK sy-subrc EQ 0.
    IF rkpf-wempf EQ space.
      EXIT.
    ENDIF.

  ELSE.
    READ TABLE ti_rkpf INDEX 1.
    CHECK ti_rkpf-wempf NE space.
  ENDIF.
* 接收人为空 就退出    over

*将新 和增加的 放到 外面的oracle
  try.
  EXEC SQL.
    CONNECT TO 'TFCSM'
  ENDEXEC.
  CATCH cx_sy_native_sql_error INTO exc_ref.
      sql_error = exc_ref->get_text( ).
      CALL FUNCTION 'Z_SYN_ST'
        EXPORTING
          txt  = sql_error
          num  = '991'
          styp = 'E'.
  endtry.

  LOOP AT ti_resb_new.
    CHECK ti_resb_new-werks EQ '2020'.
    PERFORM sy_res USING ti_resb_new-matnr
                         ti_resb_new-lgort
                         ti_resb_new-bdmng.
  ENDLOOP.

  LOOP AT ti_resb_added.
    CHECK ti_resb_added-werks EQ '2020'.
    PERFORM sy_res USING ti_resb_added-matnr
                         ti_resb_added-lgort
                         ti_resb_added-bdmng
                         .
  ENDLOOP.

  EXEC SQL.
    commit
  ENDEXEC.

  EXEC SQL.
    DISCONNECT 'TFCSM'
  ENDEXEC.


  catch CX_ROOT into rootexcept.
   sql_error = rootexcept->get_text( ).
      CALL FUNCTION 'Z_SYN_ST'
        EXPORTING
          txt  = sql_error
          num  = '988'
          styp = 'E'.
  endtry.


ENDFUNCTION.

*&--------------------------------------------------------------------*
*&      Form  sy_res
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->VALUE(MATNRtext
*      -->VALUE(LGORTtext
*      -->VALUE(BDMNGtext
*---------------------------------------------------------------------*
FORM sy_res USING value(matnr)
                  value(lgort)
                  value(bdmng).
  DATA : lmatnr LIKE mara-matnr,
         llgort LIKE resb-lgort,
         lbdmng LIKE resb-bdmng.
  DATA: exc_ref TYPE REF TO cx_sy_native_sql_error,
        sql_error TYPE bapiret2-message.

  lbdmng = bdmng.
  llgort = lgort.

  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
    EXPORTING
      input  = matnr
    IMPORTING
      output = lmatnr.

  TRY.

      EXEC SQL.
        update base_storehouseinfo_materiel
          set obligate_count =
             obligate_count + :lbdmng
        where materiel_id = :lmatnr
          and storehouse_code = :llgort

      ENDEXEC.
    CATCH cx_sy_native_sql_error INTO exc_ref.
      sql_error = exc_ref->get_text( ).
      CALL FUNCTION 'Z_SYN_ST'
        EXPORTING
          txt  = sql_error
          num  = '990'
          styp = 'E'.
  ENDTRY.

ENDFORM.                    "sy_res

原创粉丝点击