将每个 SAP 命令发送到另一个子程序并执行它以进行错误处理

问题描述 投票:0回答:1

当像“SAPsession.FindById("wnd[0]").resizeWorkingPane(170, 25, False)”这样的命令发送到 SAP 并发生错误时,我想记录错误并让脚本在用户之后继续输入(如果需要)来修复错误。接下来我想使用日志来检查错误并修复它们。

我想通过一个额外的子程序来处理 sap 命令并捕获如下错误:



  Private sub DoSomethingInSAP() 
      SAPCommand(SAPsession.FindById("wnd[0]").resizeWorkingPane(170, 25, False))
      SAPCommand(SAPsession.FindById("wnd[0]/tbar[0]/okcd").text = "/nsu3")
      SAPCommand(SAPsession.FindById("wnd[0]").sendVKey(0))
  End Sub

  Private sub SAPCommand(input as ?????)         '//SAPCommand to be executed
      try
           Run SAPCommand
      Catch ex as Exception
           Log("Error: " & input & vbCRLF & ex.tostring)
           msgbox("First fix the error for command: " & vbCRLF & input & vbCRLF & "Next: Click 'Ok' to continue")
      end try
  end sub

我知道上面的代码根本不起作用,但它只是为了说明我想要完成的任务。

谢谢!

vba error-handling scripting sap
1个回答
0
投票

我建议如下:

Private Sub DoSomethingInSAP()
   On Error GoTo error

   SAPsession.FindById("wnd[0]").resizeWorkingPane(170, 25, False)
   SAPsession.FindById("wnd[0]/tbar[0]/okcd").Text = "/nsu3"
   SAPsession.FindById("wnd[0]").sendVKey (0)
   
   Exit Sub
   
error:
   Log("Error: " & input & vbCRLF & ex.tostring)
   MsgBox("First fix the error for command: " & vbCRLF & input & vbCRLF & "Next: Click 'Ok' to continue")
   
   Resume Next
End Sub

如果第一个 FindById 发生错误,控制将跳转到错误块,您可以在其中进行日志记录和用户输入。

Resume Next
是您场景的关键部分。 它将把控制权返回给引发错误的语句后面的语句,在本例中为第二个 FindById。

这种方法的一个缺点是您不知道哪一行引发了日志记录和用户输入的错误。

© www.soinside.com 2019 - 2024. All rights reserved.