¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Como lidar com erros no código ABAP para evitar bloqueios e depurar de forma eficiente

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

Olá queridos colegas,

Poderiam me dar uma mão, por favor?

Quando me deparo com um erro, não recebo nenhum valor para o código e meu código trava com muita frequência para depurar.

(ou talvez minhas habilidades ainda não estejam suficientemente desenvolvidas)

Tenho tentado lidar com isso detectando o erro e pulando para outra parte do código, mas não tive sucesso por muito tempo.

'primeiro passo de operações para a transação QM
session.findById("wnd[0]/tbar[0]/okcd").Text = "qm02" 'iniciar transação
session.findById("wnd[0]").sendVKey 0 'o número é mantido da ação anterior
session.findById("wnd[0]").sendVKey 0

session.findById("wnd[0]/usr/tabsTAB_GROUP_10/tabp10\TAB11").Select 'aba de TAREFAS
session.findById("wnd[0]/shellcont/shell").selectItem "6175", "Column01" 'retornar
session.findById("wnd[0]/shellcont/shell").ensureVisibleHorizontalItem "6175", "Column01"
session.findById("wnd[0]/shellcont/shell").clickLink "6175", "Column01"
'
Possibilidade de aparecer uma janela adicional de aprovação automática. Preciso verificar se há um erro ao tentar pressionar um botão que não existe
' dica 1/a sem aprovação automática...
' dica 2/b com aprovação automática -
Ponto1: início da seção suspeita "aprovação automática"
On Error GoTo Point2
session.findById("wnd[1]/tbar[0]/btn[0]").press

' confirmar se não há aprovação automática. Tentar pressionar um botão quando trava ao fazer manualmente, mas o script falha
session.findById("wnd[1]/tbar[0]/btn[17]").press
' outra tentativa se houver um erro de ação diferente - se houver uma janela adicional com aprovação automática
' "Escolher uma função válida" aqui meu script trava...
session.findById("wnd[0]/tbar[0]/btn[11]").press 'salvar
GoTo Point3 'pular para o final.
Ponto2: pressionar aprovação automática, etc.
session.findById("wnd[1]/usr/btnBUTTON_1").press 'sim, aprovação automática
session.findById("wnd[0]/tbar[0]/btn[11]").press 'salvar
Point3:
resto do fluxo.


Obrigado antecipadamente

Saudações, -Komar

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

4 Respuestas

0
Cargando...

Este é apenas um exemplo. A chamada para SetScriptStatus() é uma sub-rotina para feedback do usuário.

Uma versão básica seria algo assim:

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>

Você pode remover essa linha do seu exemplo.

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

Meu sistema se recusa a aceitar as linhas: "erro de compilação"

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...

Obrigado pela primeira resposta!

Devo testar e verificar.
-Andrzej

P.S. Dependendo do sistema, as propriedades de notificação de qualidade - Outros pop-ups também são exibidos (como perguntando se quero salvar)

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

Tenho este fragmento como modelo;

'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

A variável interessante que precisará adaptar é esta seção.

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

substitua "session.findById("wnd[1]/usr/btnBUTTON_2"" por qualquer ponto de dados que precise verificar a existência.

Poderia ser uma técnica útil em sua situação, elimine todas as declarações de goto, exceto talvez um manipulador de erros real no final, já que 'deveria' estar abordando todas as opções de interface com as quais poderia se deparar.

um exemplo mais envolvido:

Dim pop                                 As SAPFEWSELib.GuiModalWindow

'verificar popups, tabela IE é cross Client, bloqueado, etc
    If Not session.FindById("wnd[1]", False) Is Nothing Then
        Set pop = session.FindById("wnd[1]")
        If InStr(pop.text, "Dados Bloqueados") > 0 Then
            'Tabela bloqueada
            Call SetScriptStatus(pop.text)
            session.FindById("wnd[1]/usr/btnBUTTON_2").press
            session.FindById("wnd[0]/tbar[0]/btn[15]").press
        
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?