2016-10-18 13 views
0

SAP GUI 화면에서 요소를 목록에 추가하는 스크립트를 작성하고 있습니다. 이제는 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 내가 다음 (매우에서 무엇을 생각하고

절대 psuedocode) :

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 

... 등등 내가 하나 i을 반복하고있어 때까지.

이런 종류의 '검색'을 수행하는 일반적으로 허용되는 더 나은 방법이 있습니까? 모든 의견을 보내 주시면 감사하겠습니다. 감사

답변

1

나의 제안 :

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

1

그냥 말

max_scrollbar = session.findById("wnd[1]/usr/tblSAPLCZDITCTRL_4010").verticalScrollbar.Maximum ' Get the maximum scrollbar value 
session.findById("wnd[1]/usr/tblSAPLCZDITCTRL_4010").verticalScrollbar.Position = max_scrollbar ' Go to the end 
로 이동합니다