問題!
現在、私が働いている場所では、 SAPGui、Excel 、およびVBAを使用して、自動的に何らかの反復タスクを実行しようとしています。通常、SAP の TCodes から収集したレポートのほとんどは、簡単ではなく、簡潔で迅速に解析できない GuiUserArea で表示されます。
解決!
とにかく、特定の種類の要件に応じて、これらの種類のレポートを解析することができました。そのため、初めてレポート (GuiUserArea として表示) を解析しようとしたとき、レポートを書式設定されていないテキストとして保存し、VBA (Regexes、Splits 、テキストの長さ、...) GuiUserArea のメソッドとプロパティを使用する代わりに。この手順 (ファイルの保存) を使用すると、より簡単かつ迅速に情報を解析できることに注意してください。ただし、ファイルを保存するためだけにSAPGUIオブジェクトを使用し、情報を解析するためのより複雑なタスクを完了するのに何の意味があるのでしょうか...
GuiUserArea を使用して、次の解決策を思いつきました。
Sub ParseSAPGUI()
Dim objSAPGui As Object
Dim objApplication As Object
Dim objConnection As Object
Dim objSession As Object
If (objSAPGui Is Nothing) Then
Set objSAPGui = GetSAPGuiObject()
Set objApplication = GetSAPGuiScriptEngine(objSAPGui)
End If
If (objConnection Is Nothing) Then
Set objConnection = GetSAPGuiConnection(objApplication)
End If
If (objSession Is Nothing) Then
Set objSession = GetSAPGuiSession(objConnection)
End If
With objSession
Dim intItemsShown As Integer
Dim intVerticalScrollEndPoint As Integer
Dim intHorizontalScrollEndPoint As Integer
' Move to the end of the GuiUserArea
.findById("wnd[0]/usr").HorizontalScrollbar.Position = 10000
.findById("wnd[0]/usr").VerticalScrollbar.Position = 10000
' Store end points
intVerticalScrollEndPoint = .findById("wnd[0]/usr").VerticalScrollbar.Position
intHorizontalScrollEndPoint = .findById("wnd[0]/usr").HorizontalScrollbar.Position
' Move to the start of the GuiUserArea
.findById("wnd[0]/usr").HorizontalScrollbar.Position = 0
.findById("wnd[0]/usr").VerticalScrollbar.Position = 0
' Items per page being shown
intItemsShown = objSession.findById("wnd[0]/usr").Children.Count - 1
Dim i As Integer
Dim n As Integer
For i = 0 To intVerticalScrollEndPoint Step intItemsShown
.findById("wnd[0]/usr").VerticalScrollbar.Position = i
intItemsShown = objSession.findById("wnd[0]/usr").Children.Count - 1
For n = 0 To intItemsShown
Debug.Print .findById("wnd[0]/usr").Children.ElementAt(n).Text
Next n
Next i
End With
End Sub
上記のコードは、次のステートメントを除いて完全に機能します。
水平ウィンドウが広いものを除いて、ほぼすべての種類のGuiUserAreaレポートを解析します。これらの問題の修正に取り組んでいますが、SAPGUIオブジェクトのドキュメントが不足しています。
大量のデータの場合は遅く、非常に遅くなります(VBA to COM Objectsを使用しているため、当然のことです)。プロセスを高速化するために、成功せずに.NETおよびSAPGUIオブジェクトを操作しようとしました。
しかし、結局のところ、SAPGUIオブジェクトはこの種のタスク用に設計されていないようです。
質問!
- GuiUserArea を解析する他の方法はありますか?
- SAP システムと対話するために、VBA の代わりに高レベルのプログラミング言語 (またはスクリプト言語) を使用しようとしましたか?
- SAPGUIオブジェクトではなく、SAP システムと対話する他の方法があるかどうか知っていますか(SAP .NET コネクタを試しましたか?)