CallVB

 GuiXT 
 Controls 

目的
GuiXTスクリプトまたはInputScriptからVB関数を呼び出すことができます。

呼び出された関数で以下が可能です:

Ÿ  関数パラメーター(文字列またはオブジェクト)を使用する

Ÿ  文字列またはオブジェクトを返す

Ÿ  GuiXT変数と長いテキスト変数の読み取りと書き込み

Ÿ  form.ShowDialog() を使用して独自のWindows.Formsダイアログを表示する

Ÿ  SAP GUI画面に埋め込まれたActiveXコントロールのメソッドをcontrolコマンドで呼び出す

Ÿ  類似のCallVBAsyncコマンドでSAP GUIスクリプトを使用する

.NETクラスライブラリ(dll)は、ローカル、または、SAP WebリポジトリまたはSAP Mimeリポジトリ等中央で利用できます。

前提条件:

Ÿ  コンポーネント “GuiXT Controls” がアクティブになっている

Ÿ  “.NET class libraries” フォルダ(guixt.iniパラメータVBDirectory)がGuiXTプロファイルで指定されている。スクリプトディレクトリで使用できるすべてのオプションが利用可能

VBDirectory  SAPWR:ZGUIXTVB

Ÿ  GuiXTセットアップに含まれるインターフェイスライブラリguinet.dll、および独自のクラスライブラリが、”.NET class libraries” フォルダに含まれています。

Ÿ  Visual Studioプロジェクトの “ターゲットフレームワーク”は、.NET Framework 4.0

Ÿ  .NET Framework 4.0がPCでアクティブになっている。Windows 7の場合自動的に有効になりますが、Windows 8の場合は、「Windowsの機能」を使用して構成できます。

CallVB msg = utilities.email.send

.NETクラスライブラリ “utilities.dll” は、GuiXTプロファイルguixt.iniパラメータVBDirectoryで指定された”.NET class libraries”フォルダからロードされます。 SAP GUIモードごとに、指定されたクラス ”email” の個別のオブジェクトが作成されます。 このオブジェクトの関数 ”send” が呼び出され、関数の結果がV[msg] に格納されます。

書式1
CallVB  progname.classname.funcname “par1” “par2” …

クラスライブラリprogname.dllがロードされ、SAP GUIモードごとにクラスclassnameの別のオブジェクトが作成されます。 このオブジェクトの関数funcnameが呼び出され、指定された文字列「par1」、「par2」、…を関数パラメーターとして渡します。

書式2
CallVBS  varname = progname.classname.funcname “par1” “par1” “par2” …

クラスライブラリprogname.dllがロードされ、SAP GUIモードごとにクラスclassnameのspearateオブジェクトが作成されます。 このオブジェクトの関数funcnameが呼び出され、指定された文字列“par1” “par2” …を関数パラメータとして渡します。 関数の結果は文字列に変換され、指定されたGuiXT変数V[varname]に設定されます。

処理の詳細
クラスライブラリ progname.dllの最初のCallVBコマンドは、ライブラリを.NETランタイムにロードします。必要に応じて、ライブラリは最初にSAP WebリポジトリまたはSAP MimeリポジトリからローカルのGuiXTキャッシュフォルダーにコピーされます。

SAP WebリポジトリまたはSAP Mimeリポジトリを使用する場合は、セッションスクリプトでVersionNumberを設定してください。

インターフェースライブラリ guinet.dllも必要に応じてコピーされます。

次にクラスのオブジェクトclassnameのオブジェクトがSAPモードごとに1つ作成され、このオブジェクトの指定された関数funcnameが実行されます。

すべてのパラメータは、値と文字列形式で渡されます。戻り値は文字列形式に変換され、指定されたGuiXT変数に格納されます。

文字列形式に加えて、オブジェクト参照はパラメータと戻り値の両方で可能です。次の段落を参照してください。

呼び出されたVB関数では、GuiXT変数とロングテキスト変数を読み書きできます。詳細については、VBの “guixt” クラスを参照してください。 「参照による」パラメータの受け渡しはサポートされていませんが、変数の名前を渡してguixt.GetVariable() とguixt.SetVariable() を使用することにより、これをシミュレートできます。

オブジェクト参照
オブジェクト参照は関数パラメータとして使用でき、VB関数から返すことができます。 GuiXTはオブジェクト参照の文字列表現を使用し、これらの文字列パラメータをVBオブジェクト参照に自動的に変換し、返されたオブジェクト参照を文字列に変換します。 技術的には「IDispatch」インターフェースポインターがここで使用されます。 オブジェクト参照を2番目のVB関数に渡し、オブジェクトのメソッドと属性を使用できます。

例:VB.NET関数 “newcustomer”で、クラス “customer”の新しいオブジェクトを作成し、オブジェクト参照をGuiXTに返します。

Public Function newcustomer() As customer

Dim c As New customer

c.name = “abc GmbH”

Return c

End Function

2番目のVB関数では、「customer」クラスのオブジェクトをパラメーターとして想定し、name属性を返します。

Public Function customername(ByVal cust As customer) As String

Return cust.name

End Function

GuiXTでは、最初の関数を呼び出して、結果を変数に格納します。 後で2番目の関数を呼び出して、「customer」オブジェクトを渡すことができます。

CallVB c1 = mylib.class1.newcustomer

CallVB name = mylib.class1.customername “&V[c1]”

これで、変数V[name] に文字列「abc GmbH」が含まれます。

デバッギング
VB.NET関数のstopコマンドを使用して、Visual Studioデバッガを開始できます。

または、実行中のSAPセッションのデバッグを動的にアクティブ化するために、”saplogon.exe” プロセスに対して”Debug->Attach to process” 機能を使用できます。

例2
いくつかのデモ値を使ってMS Excelを起動します。

// GuiXT Script

// set some demo values
Set V[region.1] “Americas”
Set V[sales.1] “2584”
Set V[region.2] “Europe”
Set V[sales.2] “1228”

Set V[region.3] “Asia”
Set V[sales.3] “1628”

// call excel
CallVB excel = mylib.office.StartExcel 3

静的型付けが使用できるように、 VB.NETに “Microsoft.Office.Interop.Excel”への参照を追加します。

‘ VB
Function StartExcel(ByVal rows As String) As Excel.Application

Dim oXL As Excel.Application
Dim oWB As Excel.Workbook
Dim oSheet As Excel.Worksheet

oXL = CreateObject(“Excel.Application”)
oXL.Visible = True

oWB = oXL.Workbooks.Add()
oSheet = oWB.ActiveSheet
oSheet.Columns(1).ColumnWidth = 30
oSheet.Columns(2).ColumnWidth = 20

For k = 1 To CInt(rows)
oSheet.Cells(k, 1).Value = guixt.GetVariable(“region.” & k)
oSheet.Cells(k, 2).Value = guixt.GetVariable(“sales.” & k)
Next

Return oXL

End Function

前の記事

CallVBAsync

次の記事

CallJSAsync