SAP GUI 脚本如何测试消息的存在
SAP GUI script how to test the presence of a message
下面我有一个非常简单直接的脚本,用于更新 SAP 中 Agreement/Contract 的有效截止日期。
我的脚本运行正常,但如果我想更改的日期已经相同,那么 change/save 没有任何内容,因此脚本停止...
执行此步骤 session.findById("wnd[1]/usr/btnSPOP-OPTION1").press
后,来自系统的消息是 未更改数据 并且在执行此步骤后脚本停止。 06022号留言
脚本中的记录部分是基于你可以保存的,但是当“不变”的情况发生时,因为日期已经相同,那么没有什么可以保存,脚本停止。
如何向脚本添加功能,以便它仍然继续到下一个 Agreement/Contract,即使当前脚本没有任何可保存的内容。我还想在这种情况下添加评论“无变化”。当它确实更新时,我有 objSheet.Cells(i, 3) = "Updated" 但是当没有什么可以保存时(无法保存)我想在第 3 列评论“没有数据更改”。
Set SapGuiAuto = GetObject("SAPGUI")
Set application = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(connection) Then
Set connection = application.Children(0)
End If
If Not IsObject(session) Then
Set session = connection.Children(0)
End If
If IsObject(WScript) Then
WScript.ConnectObject session, "on"
WScript.ConnectObject application, "on"
End If
session.findById("wnd[0]").maximize
REM ADDED BY EXCEL *************************************
Dim objExcel
Dim objSheet, intRow, i
Set objExcel = GetObject(,"Excel.Application")
Set objSheet = objExcel.ActiveWorkbook.ActiveSheet
For i = 2 to objSheet.UsedRange.Rows.Count
COL1 = Trim(CStr(objSheet.Cells(i, 1).Value)) 'Column1 Agreement/Contract number
COL2 = Trim(CStr(objSheet.Cells(i, 2).Value)) 'Column2 New Valid to date
if isEmpty(objSheet.cells(i,3)) then
session.findById("wnd[0]/tbar[0]/okcd").text = "/nme32k"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtRM06E-EVRTN").text = COL1
session.findById("wnd[0]/usr/ctxtRM06E-EVRTN").caretPosition = 10
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/tbar[1]/btn[6]").press
session.findById("wnd[0]/usr/ctxtEKKO-KDATE").text = COL2
session.findById("wnd[0]/usr/ctxtEKKO-KDATE").setFocus
session.findById("wnd[0]/usr/ctxtEKKO-KDATE").caretPosition = 10
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/tbar[0]/btn[11]").press
session.findById("wnd[1]/usr/btnSPOP-OPTION1").press
objSheet.Cells(i, 3) = "Updated"
REM FINALIZATION CONTROL CHECK ************************
aux=col1 & " " & COL2
CreateObject("WScript.Shell").run("cmd /c @echo %date% %time% " & aux & " >> C:\SCRIPT\PlOrCreationLog.txt")
End if
next
msgbox "Process Completed"
REM FINALIZATION CONTROL CHECK ************************ ```
经过多次尝试终于解决了,大家在评论区帮忙:)
session.findById("wnd[0]/tbar[0]/btn[11]").press
If session.ActiveWindow.Name = "wnd[1]" then
session.findById("wnd[1]/usr/btnSPOP-OPTION1").press
objSheet.Cells(i, 3) = "Updated"
else
objSheet.Cells(i, 3).Value = session.findById("wnd[0]/sbar").Text
End if
下面我有一个非常简单直接的脚本,用于更新 SAP 中 Agreement/Contract 的有效截止日期。
我的脚本运行正常,但如果我想更改的日期已经相同,那么 change/save 没有任何内容,因此脚本停止...
执行此步骤 session.findById("wnd[1]/usr/btnSPOP-OPTION1").press
后,来自系统的消息是 未更改数据 并且在执行此步骤后脚本停止。 06022号留言
脚本中的记录部分是基于你可以保存的,但是当“不变”的情况发生时,因为日期已经相同,那么没有什么可以保存,脚本停止。
如何向脚本添加功能,以便它仍然继续到下一个 Agreement/Contract,即使当前脚本没有任何可保存的内容。我还想在这种情况下添加评论“无变化”。当它确实更新时,我有 objSheet.Cells(i, 3) = "Updated" 但是当没有什么可以保存时(无法保存)我想在第 3 列评论“没有数据更改”。
Set SapGuiAuto = GetObject("SAPGUI")
Set application = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(connection) Then
Set connection = application.Children(0)
End If
If Not IsObject(session) Then
Set session = connection.Children(0)
End If
If IsObject(WScript) Then
WScript.ConnectObject session, "on"
WScript.ConnectObject application, "on"
End If
session.findById("wnd[0]").maximize
REM ADDED BY EXCEL *************************************
Dim objExcel
Dim objSheet, intRow, i
Set objExcel = GetObject(,"Excel.Application")
Set objSheet = objExcel.ActiveWorkbook.ActiveSheet
For i = 2 to objSheet.UsedRange.Rows.Count
COL1 = Trim(CStr(objSheet.Cells(i, 1).Value)) 'Column1 Agreement/Contract number
COL2 = Trim(CStr(objSheet.Cells(i, 2).Value)) 'Column2 New Valid to date
if isEmpty(objSheet.cells(i,3)) then
session.findById("wnd[0]/tbar[0]/okcd").text = "/nme32k"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtRM06E-EVRTN").text = COL1
session.findById("wnd[0]/usr/ctxtRM06E-EVRTN").caretPosition = 10
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/tbar[1]/btn[6]").press
session.findById("wnd[0]/usr/ctxtEKKO-KDATE").text = COL2
session.findById("wnd[0]/usr/ctxtEKKO-KDATE").setFocus
session.findById("wnd[0]/usr/ctxtEKKO-KDATE").caretPosition = 10
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/tbar[0]/btn[11]").press
session.findById("wnd[1]/usr/btnSPOP-OPTION1").press
objSheet.Cells(i, 3) = "Updated"
REM FINALIZATION CONTROL CHECK ************************
aux=col1 & " " & COL2
CreateObject("WScript.Shell").run("cmd /c @echo %date% %time% " & aux & " >> C:\SCRIPT\PlOrCreationLog.txt")
End if
next
msgbox "Process Completed"
REM FINALIZATION CONTROL CHECK ************************ ```
经过多次尝试终于解决了,大家在评论区帮忙:)
session.findById("wnd[0]/tbar[0]/btn[11]").press
If session.ActiveWindow.Name = "wnd[1]" then
session.findById("wnd[1]/usr/btnSPOP-OPTION1").press
objSheet.Cells(i, 3) = "Updated"
else
objSheet.Cells(i, 3).Value = session.findById("wnd[0]/sbar").Text
End if