グリッドセルを読み込む

GuiXTコントロールを使用すると、グリッドコントロールやツリーコントロールといったSAP GUIコントロールと情報をやり取りすることができます。

: この機能を使用するには、SAPサーバーおよびSAP GUIオプションでSAP GUIスクリプティングがアクティブになっている必要があります。

ここでは、CallVBSではなくCallVBSAsyncというキーワードを使用する必要があります。すなわち、VBScript関数を非同期で実行する必要があるということです。GuiXTスクリプトによって要素が変更されたり、画面レイアウトが変更されたり、新規要素が追加されたりする可能性があるため、GuiXTスクリプトが処理されている間はSAP GUIによる画面構築は行われません。それが、CallVBSによる同期呼び出しができない理由です。

InputScriptsにおけるVBScriptの呼び出しでも同じことが当てはまります。”Screen”コマンド実行後のすべてのスクリプト要素は、SAP GUIによって画面要素が作成される前に実行されるため、これらの要素にアクセスするにはCallVBSAsyncによる非同期呼び出しを行う必要があります。

CallVBSAsyncを使用する場合、GuiXTは、スクリプトエンジンの個別のインスタンスを使用します。同期しているVBScriptのコンテンツと非同期なコンテンツとの間で情報を共有したい場合は、GuiXT変数を用いてVBScriptの情報の保存と読み取りを行う必要があります。CallVBAsyncの代わりになるのはApplyGUIScriptステートメントです。ApplyGUIScriptの場合、”GuiXTコントロール”コンポーネントは必要ありません。ただし、これははるかに少ない機能しか提供しません(GuiXT変数への直接アクセスなど)。

SAP GUI画面に”SAPツリーコントロール”または”SAPグリッドコントロール”が含まれている場合、定義済みオブジェクトの”SapTree”および”SapGrid”を使用してSAP GUIスクリプティングのメソッドを適用することができます。

例として、トランザクションMM60(品目リスト)に”Display material”(品目の表示)ツールバーボタンを追加します。ユーザーは、品目を選択してプッシュボタンをクリックできます。すると、選択した品目コードに対し、トランザクションMM03(品目の表示)が開始されます。

ここでは以下のGuiXTスクリプトを使用します。

if Q[Transaction=MM60]
Pushbutton (toolbar) “Display material”process=“material_display.txt”
endif

InputScriptの”material_display.txt”は、VBScriptのサブルーチンを呼び出します。

CallVBSAsync material_list_display_single

VBScriptのサブルーチン”material_list_display_single”において、選択した品目コードを読み出し、新しいモードでトランザクションMM03を開始し、2番目のInputScriptを実行します。

Sub material_list_display_single

‘ SAP GUI scripting active?   
If SapGrid Is Nothing Then
Exit Sub
    End If

‘ Material selected?
 If SapGrid.CurrentCellRow = -1Then
 Exit Sub
    End If

‘ read material number from grid cell
Dim matnr
matnr = SapGrid.GetCellValue(SapGrid.CurrentCellRow, ”MATNR”)

‘ start InputScript to display the material
guixt.input(“U[MATNR]:” + matnr)
guixt.input(“OK:/OMM03,process=MM03_display_single.txt”)

End Sub

呼び出されたInputScriptの”MM03_display_single.txt”によって品目が表示されます。

Parameter MATNR

// initial screen of MM03
Screen saplmgmm.0060
Set F[RMMG1-MATNR] “&U[MATNR]”
Enter /5

// select a view
Screen saplmgmm.0070
Set cell[Table,0,1] “X”
Enter