0

SAP GUI 画面のリストに要素を追加するスクリプトを書いています。現在、SAP GUI を使用している場合、実際に画面上にない限り何も「存在しない」ように見えるため、最初のステップではリストの最後を見つける必要があります。

これは、各要素をスクロールして、空白かどうかを確認することで実現しました。

Do While Not blank
If session.findById("wnd[1]/usr/tblSAPLCZDITCTRL_4010/ctxtMAPL-MATNR[2,0]").Text = "" Then blank = True
session.findById("wnd[1]/usr/tblSAPLCZDITCTRL_4010").verticalScrollbar.Position = i
i = i + 1
Loop

ただし、既存のリストが非常に大きい場合、これには長い時間がかかります。どうにか早く終息する方法を模索中です。私が知っているいくつかの真実/制限:

  1. リストの長さを知らないと思います。
  2. リストverticalScrollbar.positionの最後をはるかに超えて命令することはできません。
    たとえば。リストに 62 個の要素が含まれている場合、機能し.verticalScrollbar.Position = 100ません。
  3. 上記の例の場合、SAP はエラーをスローしません。何も起こらず、次のコード行が実行されます。
  4. 要素へのすべての参照は、画面上の位置に関するものです。たとえば、5 桁下にスクロールすると、リスト全体の 6 番目の要素が実際には 1 としてインデックス付けされます。
  5. 一方、verticalScrollbar.Position絶対的です

私は次のことを考えています(非常に疑似コードで):

i = 0
do while scrolled = true
    scrolled = false
    a = GUIlist[0]
    verticalScrollbar.Position = i + 1000
    b = GUIlist[0]
    'check to see the first element shown has changed
    if a <> b then 
        scrolled = true
        i = i + 1000
    end if
loop

do while scrolled = true
    scrolled = false
    a = GUIlist[0]
    verticalScrollbar.Position = i + 500
    b = GUIlist[0]
    if a <> b then 
        scrolled = true
        i = i + 500
    end if
loop

...など、i1 つずつ反復するまで続けます。

この種の「検索」を行う一般的に受け入れられているより良い方法はありますか? どんな入力でも大歓迎です。ありがとう

4

2 に答える 2

3

私のおすすめ:

session.findById("wnd[0]").sendVKey 83 
myPosition = session.findById("wnd[1]/usr/tblSAPLCZDITCTRL_4010").verticalScrollbar.Position
do 
if session.findById("wnd[1]/usr/tblSAPLCZDITCTRL_4010/ctxtMAPL-MATNR[2,0]").Text = ""  then exit do
myPosition = myPosition + 1
session.findById("wnd[1]/usr/tblSAPLCZDITCTRL_4010").verticalScrollbar.Position = myPosition
loop 
msgbox myPosition

よろしく、 ScriptMan

于 2016-10-19T11:33:23.133 に答える