VB.NETコンポーネント

既存のActiveXコントロール(Windows標準のコントロールまたはサードパーティ製のActiveXコンポーネント)を使う代わりに、VC++またはVB6を用いて独自のActiveXコンポーネントを構築し、先のチュートリアルで説明したように、それらをSAP GUIに組み込むことができます。この場合、各フロントエンドPCに新たに作成したActiveXコンポーネントを、(Windowsログオン手順などで)インストールする必要があります。

VB.NETを使用する場合、明示的なインストールが不要な方法があります。その場合、以下の手順に従います。

  • VB.NETクラスライブラリとしてコンポーネントを構築する
  • 構築で得られたDLLファイルをWindows Webサーバー(IIS)(通常は社内のイントラネットサーバー)にアップロードする
  • このWebサーバーは、このコンポーネントを使用するフロントエンドPCのInternet Explorerにおいて、”信頼できるサイト”に含まれている必要がある(セキュリティ上の制約)

この方法を用いれば、最新の開発環境(MS Visual Studio)を使用して、特定のタスクに対する効率の高い専用のユーザーインターフェイスを実装し、それらをGuiXTコントロールを持つSAP GUIのコンテンツにシームレスに組み込むことができます。

これを詳しく説明するため、以下のサンプルを実装します。

トランザクションVF03(請求書の表示)に、VB.NETで実装されたRTFドキュメントを表示するコントロールを追加し、ドキュメントの編集、拡大、印刷ができるようにします。

ここでは、ここでは、ローカルに定義されたインターフェイスの例として、”zoom factor”(拡大率)スライドバーを追加しました。

手順1: VB.NETコントロールの実装

MS Visual Studioで、クラスライブラリ”s10edit.dll”を作成します。

このユーザーインターフェイスには、RTFコントロール、拡大率スライダー、および”word wrap”(行を折り返す)チェックボックスが含まれています。

RTFコントロールのVisual Studioプロパティダイアログ

GuiXTコントロールを用いて呼び出すメソッドは、すべて”Public”として定義する必要があります。

手順2: 作成したVB.NET DLLWebサーバー(Microsoft IIS)にコピーする

  • 注:
    IISでは、ディレクトリを”scripts and execution of programs”ではなく”scripts”としてリリースしてください。そうでないと正しく機能しません。

手順3: Webサーバー(任意のフォルダー)に、作成したVB.NETオブジェクトを組み込むHTML ページを追加する

オブジェクトのクラスIDは、注釈”dllpath#Namespace.Classname”を使用してください。

例: “embed_rtf.html”:

<html>
<head></head>

<body>
<object id=”rtfdisplay” classid=”activex/s10edit.dll#s10edit.rtfedit”
width=”100%” height=”100%” border=”0″> </object>
</body>
</html>

手順4: Internet Explorerのセキュリティ設定で、信頼できるサイトにWebサーバーを追加する

テスト: Internet ExplorerでこのHTMLページを呼び出します。すると、VB.NETコントロールが表示されるはずです。

手順5: 作成したGuiXT Scriptで、“Control”ステートメントを用いてこのHTMLページを表示する

例:

Control (1,1) (25,145) name=“ie”progid=“http://www.synactives10.com/s10forum/embed_rtf.html”

テスト: SAP GUIにVB.NETコントロールが表示されるはずです。

手順6: VBScriptまたはJavaScript のルーチンを用いてGuiXTとのインタラクションを定義する

ここでは両方のバージョンを示します。GuiXTスクリプトとInputScriptsは全く同じです。

GuiXT script:

del G[More Search Criteria]

Offset (6,0)
Box (0,0) (28,146) “Invoice”
Control (1,1) (25,145) name=“ie”progid=“http://www.synactives10.com/s10forum/embed_rtf.html”initflag=“rtfnew”

Pushbutton (26,2) “Start Word” process=“rtf_word.txt”size=(2,12)
Pushbutton (26,20) “Print” process=“rtf_print.txt”size=(2,12)

if V[rtfnew]

// set some test data, read SAP data in final version
Set V[invoice_number] “90035629”
Set V[invoice_fax] “(02) 6273 4980 ”
Set V[invoice_name] “National Library”
Set V[invoice_city] “Canberra”

  CopyText fromTemplate=“sample.invoice.rtf” toText=“ot”

CallVbs set_rtf_content &V[ie]

endif

 

InputScript “rtf_word.txt”:

// Text from rtf control to GuiXT long text “ot”
CallVbs rtf_read “&V[rtf]”

// save to temp file and start external editor (Word)
CopyText fromText=“ot” toFile=“&%[TEMP]\test.rtf”

Start “&%[TEMP]\test.rtf”

Return

 

InputScript “rtf_print.txt”:

CallVbs rtf_print “&V[rtf]”

Return

 

VBScript:

Function set_rtf_content(ie)

‘ wait until document is loaded
Const READYSTATE_COMPLETE = 4

Do
guixt.DoEvents()
Loop While ie.ReadyState <> READYSTATE_COMPLETE

Dim r
Set r = ie.document.getElementById(“rtfdisplay”)

Call guixt.Set(“rtf”, r)

Call r.set_content(guixt.getText(“ot”))
End Function

Function rtf_print(rtf)
Call rtf.print()
End Function

Function rtf_read(rtf)
Call guixt.setText(“ot”, rtf.get_content())
End Function

JavaScript:

function set_rtf_content(ie)

{

// wait until document is loaded

var  READYSTATE_COMPLETE = 4;

 

do

{

guixt.DoEvents();

} while (ie.ReadyState != READYSTATE_COMPLETE);

 

 

var r = ie.document.getElementById(“rtfdisplay”);

 

    // save object handle into GuiXT variable

guixt.Set(“rtf”, r);

 

// Set content

r.set_content(guixt.getText(“ot”));

 

}

 

 

 

function rtf_print(rtf)

{

rtf.print();

}

 

 

 

function rtf_read(rtf)

{

// Get content

guixt.setText(“ot”, rtf.get_content());

}

 

function rtf_color(rtf)

{

rtf.choose_bgcolor();

}