SAPパーソナルデスクトップ
ここで、これまで示した手法を用いて、より高度な例、すなわち、個人の要求や好みに合わせてSAP関数を2次元的に再配置可能な”SAPパーソナルデスクトップ”を実装したいと思います。
この”パーソナルデスクトップ”は、始めは標準的なレイアウトで表示されます。
左側のボタンを使用して、自分用にカスタマイズされたレイアウトを保存できるため、それ以降は、2種類のレイアウト(標準レイアウトとカスタマイズされたレイアウト)を選択できるようになります。
ここで示す例は既に実用的なものですが、顧客や発注情報などの業務オブジェクトをこのパーソナルデスクトップに追加して、オブジェクトがクリックされたときに目的のトランザクションが開始されるようにすることができます。これを実現するには、いくつかのSAPトランザクションについてGuiXTの”Add to Personal Desktop”(パーソナルデスクトップに追加)ボタンを作成し、ボタンをクリックするだけでユーザーがオブジェクト(発注番号など)を追加できるようにします。
このサンプルを実現するには、以下のものが必要です。
- ユーザーに提供したいトランザクションおよびInputScriptsのリスト(適切なアイコンを含む)
- 必要なGuiXTスクリプトおよびVBScript関数
このチュートリアルでは、いくつかのトランザクションを選択し、販促リストを呼び出すInputScriptを1つ選択しました。アイコンは、インターネットで見つけたフリーウェアの画像を使用します(各32×32ピクセルの.gif形式。.jpg形式または.ico形式も使用可能)。
デスクトップ機能は、”menu\icons.txt”および”menu\items.E.txt”の2つのファイルで記述します。ここで、Eは言語キーです。これらのファイルをスクリプトディレクトリに保存します。
書式:
“icons.txt”: アイコンのIDで始まり、ファイル名(GuiXTスクリプトディレクトリへの絶対パスまたは相対パス)がその後ろに続きます。区切り文字はセミコロンです。
“items.E.txt”: トランザクションコードで始まります。オプションとして、その後ろにInputScriptの呼び出しを記述できます。その後ろに、項目ラベルとアイコンIDが続きます。
今回の例では以下のファイルを使用します。
// icons for SAP Personal Desktop
cust1;menu\icons\customer.gif
cust2;menu\icons\customer_change.gif
cust3;menu\icons\customer_display.gif
order1;menu\icons\order.gif
order2;menu\icons\order_change.gif
order3;menu\icons\order_display.gif
room;menu\icons\room.gif
prom1;menu\icons\promotions.gif
// Items for SAP Personal Desktop English version
XD01; Create customer; cust1
XD02; Change customer; cust2
XD03; Display customer; cust3
VA01; Create order; order1
VA02; Change order; order2
VA03; Display order; order3
// Promotions
SA38,process=promotions.txt; Promotions list; prom1
// Rooms and Meetings
PP30; Room reservation; room
2次元レイアウトもテキストファイルに保存します。今回は、レイアウトを個人用レイアウトとして保存し、それを標準レイアウトとしてコピーするため、このファイルを手動で作成する必要はありません。
アイコンファイルを含むすべてのファイルは、SAP Webリポジトリに保存できます。
今回の”SAPパーソナルデスクトップ”は、SAP標準のナビゲーションツリーを置き換えます。さらなる拡張として、SAP標準のナビゲーションツリーとパーソナルデスクトップを切り替え可能なボタンを追加することもできます。
GuiXT Scriptにて、”Microsoftコモンコントロール”のリストビューコントロールを再度使用します。スクリプトに含まれる要素については、すべて前のチュートリアルで説明しています。&%[USERPROFILE]を使用して、個人用レイアウトを保存するためのユーザープロファイルフォルダーを指定します。このフォルダーは、Windowsのバージョンに応じて、例えばC:\Documents and Settings\{username}やC:\Users\{username}のようになります。
GuiXT script:
Title “SAP Personal Desktop”
// delete SAP standard menu
del X[IMAGE_CONTAINER]
// special functions
Pushbutton (1,0) “@2L\QSave as personal layout@”process=”menu_save_layout.txt”
Pushbutton (3,0) “@9T\QStandard Layout@”process=“menu_standard_layout.txt”
Pushbutton (5,0) “@42\QRestore personal layout@”process=“menu_personal_layout.txt”
Control (0,6) (50,300) progid=“Comctl.ListViewCtrl”name=“menu_control” initflag=“menu_init”
// initialize if necessary
if V[menu_init=X]
// copy standard menu files to long texts
CopyText fromFile=“menu\icons.txt” toText=“menu_icons”
CopyText fromFile=”menu\items.&V[_language].txt”toText=“menu_items”
// create menu
CallVbs menu_init &V[menu_control]
// set personal or standard layout
CopyText fromFile=“&%[USERPROFILE]\sap_personal_desktop_layout.txt”toText=“menu_layout”
if not Q[ok]
CopyText fromFile=“menu\layout.txt” toText=“menu_layout”
endif
CallVBS set_menu_layout &V[menu_control]
endif
今回の例では、GuiXTロングテキスト変数の”menu”および”menu_layout”に基づきパーソナルデスクトップを作成します。ここで、”menu_layout”には各アイテムの座標が格納されます。このファイルは、ユーザーが”Save as personal layout”(個人用レイアウトとして保存)ボタンを押したときに自動的に生成されます。このファイルが空の場合、リストビューコントロールによって線形レイアウトが使用されます。今回の標準レイアウトの例では、ファイルは以下のようになります(リストビューコントロールは”pixels”ではなく”twips”を使用します)。
XD01;4366;2037
XD02;4313;4948
XD03;4233;7964
VA01;6112;2037
VA02;6033;4921
VA03;5953;7964
SA38,process=promotions.txt;9340;1984
PP30;9181;5054
VBScriptにおいて、シンボルとともに各アイテムを作成します。そして、このコントロールのイベント処理(ダブルクリック)を定義します。関数”set_menu_layout”は、各要素を指定された位置に移動します。
‘ ———————————————
‘ SAP Personal Desktop ’
‘ ’
‘ ———————————————
Sub menu_init(mv)
‘ for VbsEdit only to use context sensitive help
If IsEmpty(mv) Then
Set mv = CreateObject(“ComCtl.ListViewCtrl”)
End If
mv.View = 0 ‘ 0 = lvwIcon = icons (MS docu)
‘ no label editing
mv.LabelEdit = 1 ‘ manual
‘ font
mv.Font.Name = ”Arial”
mv.Font.Size = 10
’ color
mv.BackColor = RGB(255,255,255)
mv.ForeColor = RGB(50,60,90)
‘ Icons
Dim imgList
Set imgList = guixt.CreateObject(“ComCtl.ImageListCtrl”)
imgList.ListImages.Clear()
imgList.ImageHeight = 32
imgList.ImageWidth = 32
imgList.MaskColor = RGB(255,255,255)
’ parameters in menu line
Dim params
‘ read menu
Dim icons
icons = Split(guixt.GetText(“menu_icons”), vbCrLf)
‘ create icons
For Each line In icons
If Not line = ”” And Not Mid(Trim(line),1,2) = ”//” Then
params = Split(Trim(line), ”;”)
Dim imagepath
imagepath = guixt.FilePath(Trim(params(1)))
Call imgList.ListImages.Add(1, Trim(params(0)), LoadPicture(imagepath))
End If
Next
Set mv.Icons = imgList
‘ read menu items
Dim items
items = Split(guixt.GetText(“menu_items”), vbCrLf)
Dim itm
‘ create items
For Each line In items
If Not line = ”” And Not Mid(Trim(line),1,2) = ”//” Then
params = Split(Trim(line), ”;”)
‘ create new list view item
Set itm = mv.ListItems.Add()
itm.Tag = Trim(params(0))
itm.Text = Trim(params(1))
If Not params(2) = ”” Then
itm.Icon = Trim(params(2))
End If
End If
Next
‘ handle events
Set e = New menu_events
Set e.mv = mv
Call guixt.SetEventHandler(mv, e)
End Sub
Class menu_events
Dim mv
‘ double click
Function OnDblClick
If mv.selectedItem Is Nothing Then
Exit Function
End If
guixt.input(“OK:” & mv.selectedItem.Tag)
End Function
End Class
Sub get_menu_layout(mv)
Dim s()
Dim n
n = 0
For Each itm In mv.listitems
ReDim Preserve s(n)
s(n) = itm.Tag & ”;” & itm.Top & ”;” & itm.Left
n = n + 1
Next
Call guixt.settext(“menu_layout”,Join(s,vbCrLf))
End Sub
Sub set_menu_layout(mv)
Dim s
s = Split(guixt.gettext(“menu_layout”), vbCrLf)
‘ create dictionary object
Set pos = CreateObject(“Scripting.Dictionary”)
For Each line In s
params = Split(Trim(line), ”;”)
Call pos.Add(params(0), params(1) & ”;” & params(2))
Next
For Each itm In mv.listitems
Dim p
p = pos.Item(itm.Tag)
If Not p = ”” Then
Dim p2
p2 = Split(p, ”;”)
itm.Top = p2(0)
itm.Left = p2(1)
End If
Next
End Sub
レイアウトの保存、および標準/個人用レイアウトの読み込みを行うInputScriptsはシンプルです。
// InputScript menu_save_layout.txt
Set text[menu_layout] “”
CallVBS get_menu_layout &V[menu_control]
CopyText fromText=“menu_layout” toFile=“&%[USERPROFILE]\sapmenu_layout.txt”
Return “S: Menu layout saved” -statusline
// InputScript menu_personal_layout.txt
CopyText fromFile=“&%[USERPROFILE]\sapmenu_layout.txt”toText=“menu_layout”
CallVBS set_menu_layout &V[menu_control]
// InputScript menu_standard_layout.txt
CopyText fromFile=“menu\standard_layout.txt” toText=“menu_layout”
CallVBS set_menu_layout &V[menu_control]
最後に、”販促”リストの表示に使用するInputScriptを示します。
// InputScript promotions.txt
Screen SAPMS38M.0101
Set F[Programm] “RV15C003”
Enter “/8”
// List Promotions
Screen RV15C003.1000
Enter “/8”