miércoles, 19 de octubre de 2011

Cambiar status de usuario a Órdenes de Mantenimiento



Aqui os dejo la función que cambia el status de la órdenes de
Mantenimiento y la manera de ejecutarla.
  data: i_method type table of bapi_alm_order_method,
        w_method 
type 
bapi_alm_order_method.
  
data: i_status type table of 
bapi_alm_order_usrstat,
        w_status 
type 
bapi_alm_order_usrstat.
  
data: i_return type  table of bapiret2.
* Empezamos rellenando la table i_method de la siguiente manera
    w_method
-refnumber '000001'.
    
w_method-objecttype 'USERSTATUS'.
    w_method
-method 'CHANGE'.
    w_method
-objectkey w_afko-aufnr. “(órden que queremos modificar)
    
append w_method to 
i_method.
    
clear w_method.

    w_method
-refnumber '000002'.
    w_method
-objecttype ''.
    w_method
-method 'SAVE'.
    w_method
-objectkey w_afko-aufnr. “(Misma órden que arriba)
    
append w_method to 
i_method.
    
clear w_method.


    


call function 'BAPI_ALM_ORDER_MAINTAIN'

      
tables
        it_methods    
i_method
        it_userstatus 
i_status
        
return        
i_return.

    
call function 'BAPI_TRANSACTION_COMMIT'

      
exporting
        
wait 'X'.
* Cambiamos el status
    w_status
-user_st_text 'PRO1' “ Nuevo status que queremos asignar
    w_status
-langu sy-
langu.
    w_status
-langu_iso ''.

    w_status
-inactive ''.
    w_status
-change_event '01'.
    
append w_status to i_status.
    
clear 
w_status.

2 comentarios:

  1. Amigo, cuando ejecuto lo que indicas por la transaccion SE37 lo ejecuta sin problemas, pero cuando lo quiero ejecutar desde un programa externo (ingresando exactamente la misma informacion), me muestra el siguiente mensaje :
    "El status de usuario REVI no existe para el esquema de status PMST_ORD."

    REVI es el estado que quiero actualizar...pero PMST_ORD no se que significa.
    Alguna idea?
    Saludos.

    ResponderEliminar
  2. aqui mi codigo :

    Dim sd As IRfcFunction = repositorio.CreateFunction("BAPI_ALM_ORDER_MAINTAIN")
    OM = Me.gvOrdenMante.DataKeys(Fila.RowIndex).Item("OM")
    Dim IRfcMetodo As IRfcTable = sd.GetTable("IT_METHODS")
    Dim IRfcEstatus As IRfcTable = sd.GetTable("IT_USERSTATUS")

    IRfcMetodo.Append()
    IRfcMetodo.SetValue("REFNUMBER", "000001")
    IRfcMetodo.SetValue("OBJECTTYPE", "USERSTATUS")
    IRfcMetodo.SetValue("METHOD", "CHANGE")
    IRfcMetodo.SetValue("OBJECTKEY", OM)
    IRfcMetodo.Append()
    IRfcMetodo.SetValue("REFNUMBER", "000002")
    IRfcMetodo.SetValue("OBJECTTYPE", "")
    IRfcMetodo.SetValue("METHOD", "SAVE")
    IRfcMetodo.SetValue("OBJECTKEY", OM)

    IRfcEstatus.Append()
    IRfcEstatus.SetValue("USER_ST_TEXT", "REVI")
    IRfcEstatus.SetValue("LANGU", "ES")
    IRfcEstatus.SetValue("LANGU_ISO", "")
    IRfcEstatus.SetValue("INACTIVE", "")
    IRfcEstatus.SetValue("CHANGE_EVENT", "01")

    sd.Invoke(ConxSap)
    Dim IRfcResultado As IRfcTable = sd.GetTable("RETURN")

    ResponderEliminar