¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Cómo manejar errores en el código ABAP para evitar bloqueos y depurar eficientemente

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 21 Vistas
0
Cargando...

Hola queridos compañeros,

¿Podrían darme una mano, por favor?

Cuando me encuentro con un error, no recibo ningún valor para el código y mi código se bloquea con demasiada frecuencia para depurar.

(o tal vez mis habilidades aún no están suficientemente desarrolladas)

He intentado manejarlo detectando el error y saltando a otra parte del código, pero no he tenido éxito durante mucho tiempo.

'primer paso de operaciones para la transacción QM
session.findById("wnd[0]/tbar[0]/okcd").Text = "qm02" 'iniciar transacción
session.findById("wnd[0]").sendVKey 0 'el número se mantiene de la acción anterior
session.findById("wnd[0]").sendVKey 0

session.findById("wnd[0]/usr/tabsTAB_GROUP_10/tabp10\TAB11").Select 'pestaña de TAREAS
session.findById("wnd[0]/shellcont/shell").selectItem "6175", "Column01" 'devolver
session.findById("wnd[0]/shellcont/shell").ensureVisibleHorizontalItem "6175", "Column01"
session.findById("wnd[0]/shellcont/shell").clickLink "6175", "Column01"
'
Posibilidad de que aparezca una ventana adicional de aprobación automática. Necesito verificar si hay un error al intentar presionar un botón que no existe
' pista 1/a sin aprobación automática...
' pista 2/b con aprobación automática -
Punto1: inicio de la sección sospechosa "aprobación automática"
On Error GoTo Point2
session.findById("wnd[1]/tbar[0]/btn[0]").press

' confirmar si no hay aprobación automática. Intentar presionar un botón cuando se bloquea al hacerlo manualmente, pero el script falla
session.findById("wnd[1]/tbar[0]/btn[17]").press
' otro intento si hay un error de acción diferente - si hay una ventana adicional con aprobación automática
' "Elegir una función válida" aquí mi script se bloquea...
session.findById("wnd[0]/tbar[0]/btn[11]").press 'guardar
GoTo Point3 'saltar al final.
Punto2: presionar aprobación automática, etc.
session.findById("wnd[1]/usr/btnBUTTON_1").press 'sí, aprobación automática
session.findById("wnd[0]/tbar[0]/btn[11]").press 'guardar
Point3:
resto del flujo.


Gracias de antemano

Saludos, -Komar

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Esto es solo un ejemplo. La llamada a SetScriptStatus() es una subrutina para la retroalimentación del usuario.

Una versión básica es algo así:

Public Sub SetScriptStatus(status As String)
'set status into Excel Table named 'ControlHeader'
    Dim ControlHeader As Variant
    
    Set ControlHeader = Worksheets("SAP GUI Scripting").ListObjects("ControlHeader")
        
    ControlHeader.DataBodyRange(1, 4) = status

End Sub
<br>

Puedes eliminar esa línea de tu ejemplo.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Mi sistema se niega a aceptar las líneas: "error de compilación"

Dim pop As SAPFEWSELib.GuiModalWindow

 If Not session.findById("wnd[1]/usr/btnBUTTON_2", False) Is Nothing
 
  Call SetScriptStatus(pop.Text)
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

¡Gracias por la primera respuesta!

Debo probarlo y verificar.
-Andrzej

p.d. Dependiendo del sistema, las propiedades de notificación de calidad - Otros popups también se muestran (como preguntando si quiero guardar)

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Tengo este fragmento como plantilla;

'verificar por "inesperados" popups
Do While Not session.findById("wnd[1]", False) Is Nothing
    If Not session.findById("wnd[1]/usr/btnBUTTON_2", False) Is Nothing Then
        session.findById("wnd[1]/usr/btnBUTTON_2").press
    End If
    If Not session.findById("wnd[1]/usr/btnSPOP-OPTION2", False) Is Nothing Then
        session.findById("wnd[1]/usr/btnSPOP-OPTION2").press
    End If
Loop

La variable interesante que necesitarás adaptar es esta sección.

If Not session.findById("wnd[1]/usr/btnBUTTON_2", False) Is Nothing

reemplaza "session.findById("wnd[1]/usr/btnBUTTON_2"" con cualquier punto de datos que necesites verificar la existencia.

Podría ser una técnica útil en tu situación, elimina todas las declaraciones de goto excepto tal vez un manejador de errores real al final, ya que 'deberías' estar abordando todas las opciones de interfaz con las que podrías encontrarte.

un ejemplo más involucrado:

Dim pop                                 As SAPFEWSELib.GuiModalWindow

'verificar popups, tabla IE es cross Client, bloqueado, etc
    If Not session.FindById("wnd[1]", False) Is Nothing Then
        Set pop = session.FindById("wnd[1]")
        If InStr(pop.text, "Datos Bloqueados") > 0 Then
            'Tabla bloqueada
            Call SetScriptStatus(pop.text)
            session.FindById("wnd[1]/usr/btnBUTTON_2").press
            session.FindById("wnd[0]/tbar[0]/btn[15
        
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?