mercoledì 9 novembre 2016

Caricamento di un infotype

*----------------------------------------------------------------------*
* DECLARATIONS                                                         *
*----------------------------------------------------------------------*
DATA: gv_msg   TYPE STRING,
      gv_count TYPE I,
      gv_total TYPE I.

DATA: BEGIN OF gs_dati,
        pernr       TYPE PERNR_D,
        begda       TYPE BEGDA,
        endda       TYPE ENDDA,
        tipo        TYPE ZTIPO_CMP,
        soglia_imp  TYPE ZSOGLIA_IMP,
        soglia_perc TYPE ZSOGLIA_PERC,
        target_imp  TYPE ZTARGET_IMP,
        target_perc TYPE ZTARGET_PERC,
        cap_imp     TYPE ZCAP_IMP,
        cap_perc    TYPE ZCAP_PERC,
        note        TYPE CHAR50,
        subty       TYPE SUBTY,
        aedtm       TYPE AEDAT,
        uname       TYPE AENAM,
      END OF gs_dati.

DATA: gs_9008   TYPE p9008,
      gs_return TYPE BAPIRETURN1,
      gs_key    TYPE BAPIPAKEY.

DATA gt_dati LIKE STANDARD TABLE OF gs_dati WITH HEADER LINE.

*----------------------------------------------------------------------*
* LAYOUT                                                               *
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS: pa_flcl TYPE STRING LOWER CASE,
            pa_test AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK b1.

*----------------------------------------------------------------------*
* PROGRAM BODY                                                         *
*----------------------------------------------------------------------*
START-OF-SELECTION.
  IF pa_flcl IS INITIAL.
    MESSAGE e002. "Indicare il file locale
  ENDIF.
  PERFORM read_xls.

  IF gt_dati[] IS NOT INITIAL.
    DESCRIBE TABLE gt_dati LINES gv_total.
    LOOP AT gt_dati.
      CLEAR gs_9008.
      MOVE-CORRESPONDING gt_dati TO gs_9008.
      gs_9008-infty = '9008'.
      CALL FUNCTION 'BAPI_EMPLOYEE_ENQUEUE'
        EXPORTING
          number = gt_dati-pernr
        IMPORTING
          return = gs_return.
      IF gs_return-type <> 'E'.
        CLEAR: gs_return, gs_key.
        CALL FUNCTION 'HR_INFOTYPE_OPERATION'
          EXPORTING
            INFTY     = '9008'
            NUMBER    = gs_9008-pernr
            RECORD    = gs_9008
            OPERATION = 'INS'
            NOCOMMIT  = pa_test
          IMPORTING
            RETURN    = gs_return
            KEY       = gs_key.
        IF gs_return-type = 'E'.
          CLEAR gv_msg.
          MESSAGE ID gs_return-id
                  TYPE gs_return-type
                  NUMBER gs_return-number
                  WITH gs_return-message_v1
                       gs_return-message_v2
                       gs_return-message_v3
                       gs_return-message_v4
                  INTO gv_msg.
          WRITE: / gt_dati-pernr,
                   gt_dati-begda,
                   gt_dati-endda,
                   gt_dati-subty,
                   '-',
                   gv_msg.
        ELSE.
          ADD 1 TO gv_count.
        ENDIF.
        CALL FUNCTION 'BAPI_EMPLOYEE_DEQUEUE'
          EXPORTING
            number = gt_dati-pernr.
      ELSE.
        CLEAR gv_msg.
        MESSAGE ID gs_return-id
                TYPE gs_return-type
                NUMBER gs_return-number
                WITH gs_return-message_v1
                     gs_return-message_v2
                     gs_return-message_v3
                     gs_return-message_v4
                INTO gv_msg.
        WRITE: / gt_dati-pernr,
                 gt_dati-begda,
                 gt_dati-endda,
                 gt_dati-subty,
                 '-',
                 gv_msg.
      ENDIF.
    ENDLOOP.
  ENDIF.

  WRITE: / 'Righe processate correttamente:',
           gv_count,
           'su',
           gv_total.

END-OF-SELECTION.
  EXIT.

*----------------------------------------------------------------------*

Nessun commento: