0

SAP ワークロードを軽減するために、少し .vbs スクリプトを実行しようとしています。私は簡単に始めているので、最初に特定の接続で開かれているセッションの数を確認したいと思います。

これは私のコードです:

Set SapGuiAuto  = GetObject("SAPGUI")
Set application = SapGuiAuto.GetScriptingEngine
iConnections = application.Connections.Count


If iConnections > 0 Then
    For i = 0 to iConnections - 1 
    iSessions = application.Connections.Item(i).Sessions.Count
    msgbox iSessions & "   Sessions for Connection " & i + 1
    Next
End If

問題は
のとおりです。3行目でエラーが発生します

コレクション アクセスのインデックス タイプが正しくありません。

の代わりに 0 または 1 を入れると、i完全に正常に動作します。しかし、変数を持つアイテムが見つかりません。

どなたか助けていただけませんか?どうすればいいのかわからない。

4

4 に答える 4

0

悪いインデックス エラーを回避する唯一の方法は、各変数の後に +1+0-1 を追加して、インデックス値を操作することです。

以下は、事前バインディングを使用して 1 つの接続でセッションの数をカウントしています

Sub Session_count()
        
Dim sapAuto As Object
        Dim sapGUI As SAPFEWSELib.GuiApplication
        Dim con As SAPFEWSELib.GuiConnection
        Dim sapSession As SAPFEWSELib.GuiSession
        Dim i As Long
        Dim iSessions As Long
        Dim IConnections As Long
        
        Set sapAuto = GetObject("sapgui")
        Set sapGUI = sapAuto.GetScriptingEngine
        
        IConnections = sapGUI.Connections.Count
        
        If IConnections > 0 Then
                Set con = sapGUI.Connections.Item(IConnections - 1 + 1 - 0 - 1)
                iSessions = con.Sessions.Count - 1
                If iSessions > 0 Then
                        i = 0
                        Do
                                Set sapSession = con.Children.Item(i + 1 + 0 - 1)
                                With sapSession
                                        Debug.Print .Name, .Type, .ID
                                End With
                                i = i + 1 + 1 - 0 - 1 'Here am still incementing i by 1 but for some reason SAP won't give you a bad index
                                Set sapSession = Nothing
                        Loop While i + 0 + 1 - 1 < iSessions + 1
                End If
        End If
End Sub

于 2016-07-03T16:01:20.697 に答える
0

Connections コレクションのインデックスが 0 ではなく 1 から始まる可能性があります。

If iConnections > 0 Then
    For i = 1 to iConnections
    iSessions = application.Connections.Item(i).Sessions.Count
    msgbox iSessions & "   Sessions for Connection " & i 
    Next
End If

それがうまくいかない場合は、インデックスで接続を参照する代わりに、For..Each を使用して接続を列挙することができます。

If iConnections > 0 Then
    For Each con in Application.Connections
    i = i + 1
    iSessions = con.Sessions.Count
    msgbox iSessions & "   Sessions for Connection " & i 
    'EDIT: The next line can't explicitly use Next con in VB-script, so I've commented out con
    Next 'con
End If
于 2016-01-22T10:59:44.190 に答える
0

この投稿にはまだアクティビティがあるため、最終的なコードを投稿します。もう使用されていませんが、その特定の問題に対する答えをまだ探している人がいれば、ここに実用的な解決策があると思いました. (他の回答は本当に役に立ちましたが!)

これは、.hta ファイル内で実行されるスクリプトによって記述されています。したがって、リストボックス。すべてのセッションが ID とともに一覧表示されます。

function SessionInfo    

Dim i as Long

        'clear listbox
        SessionList.innerhtml = ""

        'create listbox
        Set optGroup = Document.createElement("OPTGROUP")
        optGroup.label = "Server"

        'count number of connections
        ConnectionCount = application.Connections.Count

        If ConnectionCount > 0 Then
            Sessionlist.appendChild(optGroup)
        Else 
            optGroup.label = No connection."
            Sessionlist.appendChild(optGroup)           
        End If

        If ConnectionCount > 0 Then
            For Each conn in application.Connections
                SessionCount = conn.Sessions.Count
                Set objOption = nothing
                Set optGroup = Document.createElement("OPTGROUP")
                optGroup.label = conn.Description
                Sessionlist.appendChild(optGroup)
                i = 0
                For Each sess In conn.Sessions
                    i = i + 1
                    Set objOption = Document.createElement("OPTION")
                    objOption.Text = "Session " & i & ": " & sess.ID
                    objOption.Value = sess.ID
                    SessionList.options.add(objOption)
                Next
            Next
        Else
            Exit function
        End If

End function
于 2016-07-04T08:18:40.020 に答える