Cerca nel blog

giovedì 16 settembre 2021

BAPI per chiusura tecnica di un Ordine di Manutenzione

BAPI per chiusura tecnica di un Ordine di Manutenzione

Nel caso in cui si debba effettuare la chiusura tecnica di un OdM, in pratica che simuli la transazione IW32, mediante codice ABAP, usare la BAPI_ALM_ORDER_MAINTAIN.


Riporto il codice per il popolamento della bapi:

   DATAlt_bapiret   TYPE bapiret2_t,
        lt_methods   TYPE STANDARD TABLE OF bapi_alm_order_method,
        ls_methods   TYPE bapi_alm_order_method,
        lt_header_i  TYPE STANDARD TABLE OF bapi_alm_order_headers_i,
        ls_header_i  TYPE bapi_alm_order_headers_i,
        lt_header_up TYPE STANDARD TABLE OF bapi_alm_order_headers_up,
        ls_header_up TYPE bapi_alm_order_headers_up,
        lv_aufnr     TYPE 
AUFNR,
       
lv_err       TYPE  boolean.

  FREElt_bapiret[]lt_methods[]lt_header_i[]lt_header_up[].
  lv_err abap_false.
 

  lv_aufnr = '590042282'.
  CLEARls_methods.
  ls_methods-refnumber '000001'.
  ls_methods-objecttype 'HEADER'.
  ls_methods-method 'TECHNICALCOMPLETE '.
  ls_methods-objectkey =
lv_aufnr.
  APPEND ls_methods TO lt_methods.

  CLEAR:ls_methods.
  ls_methods-refnumber '000001'.
  ls_methods-objecttype ''.
  ls_methods-method 'SAVE'.
  ls_methods-objectkey 
lv_aufnr.
  APPEND ls_methods TO lt_methods.

  CLEAR:ls_header_i.
  ls_header_i-orderid  =
lv_aufnr.
  APPEND ls_header_i TO lt_header_i.

  CLEAR:ls_header_up.
  ls_header_up-orderid  p_aufnr.
  APPEND ls_header_up TO lt_header_up.

  CALL FUNCTION 'BAPI_ALM_ORDER_MAINTAIN'
    TABLES
      it_methods   lt_methods
      it_header    lt_header_i
      it_header_up lt_header_up
      return       lt_bapiret.

  LOOP AT lt_bapiret ASSIGNING FIELD-SYMBOL(<lfs_bapiret>)
    WHERE type 'A' OR type 'E'.

    lv_err abap_true.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

    EXIT.
  ENDLOOP.

  CHECK   lv_err abap_false.

  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      wait 'X'.

NOTA: Nel caso in cui, prima della chiusura tecnica di un OdM, vengono effettuate altre operazioni sull'OdM, ad esempio lo storno delle ore, richiamando la bapi BAPI_ALM_CONF_CANCEL, dato che questa bapi effettua delle chiamate a delle sessioni di upgrade asincrone, si potrebbero verificare degli errori nella chiamata della bapi BAPI_ALM_ORDER_MAINTAIN

In questo caso usare al posto della bapi BAPI_ALM_ORDER_MAINTAIN, la seguente BAPI:

 DATAlt_return    TYPE STANDARD TABLE OF bapiret1,
        lv_date      TYPE riwo1-bezdt,
        lv_time      TYPE riwo1-brzur,
        lv_aufnr     TYPE  AUFNR ,
        lv_err       TYPE boolean.

 
  FREElt_return[].
  lv_date sy-datum.
  lv_time sy-uzeit.
  lv_err abap_false.
 
lv_aufnr = '093030303'.

  CALL FUNCTION 'BAPI_ISUSMORDER_SETSTATUSTECHN'
    EXPORTING
      number        = lv_aufnr
      referencedate lv_date
      referencetime lv_time
    TABLES
      return        lt_return.

  LOOP AT lt_return ASSIGNING FIELD-SYMBOL(<lfs_return>)
    WHERE type 'A' OR type 'E'.

    lv_err abap_true.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

    EXIT.
  ENDLOOP.

  CHECK   lv_err abap_false.

  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      wait 'X'.
 

lunedì 13 settembre 2021

WORKFLOW: Errore WD287 Task '&' has no agent assignment

 

WorkFlow: Errore WD287 Task '&' has no agent assignment

In fase di attivazione del workflow, transazione SBWP, compare il seguente errore: WD287 Task '&' has no agent assignment per il task “90100049   XXXX”.

Per risolvere questo problema ho richiamato la transazione PFTC, inserito il nome del task in errore "90100049" e premuto il pulsante di modifica.

Selezionare dal menu “Dati suppl.” -> Classificazione -> Creare.


Seleziona la classificazione “Task generale”.


 Salvare ed uscire. Riattivare il workflow.