Aug11

AMDP Practices 2

CLASS zcl_amdp_gzn_ps DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .
  PUBLIC SECTION.
    INTERFACES: if_amdp_marker_hdb, if_oo_adt_classrun.
    TYPES:
      BEGIN OF ty_result,
        code TYPE char1,
      END OF ty_result,
      ty_result_tab TYPE STANDARD TABLE OF ty_result.
    METHODS:
      chk_inst_3k IMPORTING VALUE(iv_pid)    TYPE z9pieces
                            VALUE(iv_plant)  TYPE werks_d
                  EXPORTING VALUE(ev_result) TYPE char1.
  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.
CLASS zcl_amdp_gzn_ps IMPLEMENTATION.
  METHOD if_oo_adt_classrun~main.
    DATA: lv_pid    TYPE z9pieces VALUE 'G220530010100000006',
          lv_plant  TYPE werks_d  VALUE '7301',
          lv_result TYPE char1.
    TRY.
        me->chk_inst_3k( EXPORTING iv_pid = lv_pid
                                   iv_plant = lv_plant
                         IMPORTING ev_result = lv_result ).
        out->write( lv_result ).
      CATCH cx_amdp_execution_error INTO DATA(lx_amdp).
        out->write(  lx_amdp->get_longtext(  ) ).
    ENDTRY.
  ENDMETHOD.
  METHOD chk_inst_3k BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT
         OPTIONS READ-ONLY USING zppt9904 zppt9901.
    DECLARE v_badnum integer;
    DECLARE v_modlnr VARCHAR(12);
    DECLARE v_ksunit VARCHAR(3);
    D2K = SELECT * FROM ZPPT9904 AS PT
                              WHERE PT.MANDT = SESSION_CONTEXT( 'CLIENT' )
                                AND PT.WERKS = :IV_PLANT
                                AND PT.VORNR = '2000'
                                AND PT.PIECID = :IV_PID;
    IF IS_EMPTY( :D2K ) then
      ev_result = '4';
      RETURN;
    ELSE
      v_badnum = :D2K.BADNUM[1];
      IF v_badnum > 0 then
        ev_result = '6';
        return;
      else
       v_modlnr = :D2K.MODLNR[1];
      end if;
    end if;
    MODC = SELECT KSUNIT FROM ZPPT9901 AS KS
            WHERE KS.WERKS = :IV_PLANT
              AND KS.MODLNR = :v_modlnr;
    if IS_EMPTY ( :MODC ) then
      ev_result = '3';
      RETURN;
    else
      v_ksunit = :MODC.KSUNIT[1];
      if v_ksunit <> 'PCS' THEN
        ev_result = '2';
        RETURN;
      end if;
    end if;
    D3K = SELECT * FROM ZPPT9904 AS PT
                              WHERE PT.MANDT = SESSION_CONTEXT( 'CLIENT' )
                                AND PT.WERKS = :IV_PLANT
                                AND PT.VORNR = '3000'
                                AND PT.PIECID = :IV_PID;
     if IS_EMPTY ( :D3K ) then
       ev_result = '1';
     else
       ev_result = '5';
     end if;
  ENDMETHOD.
ENDCLASS.


本篇文章已有0条评论