4.SAPシステムを動かす
SAPとはSAP社が作成したERPパッケージです。世界的に導入している企業がたくさんあります。
このSAPを使用して、原料購入から製造、検査、出荷まで管理しています。
また、予算作成も行われており、企業にとってはなくてはならないものです。
SAPはVBScriptと呼ばれるコンピュータ言語で動いています。
●VBScriptとは?
powershellと同様にwindows標準の言語です。windowsには、コマンドプロンプト(windows3~)、VBScript(windows98~)、powershell(windows7~)の言語があります。powershellは最も新しいですが、それぞれ特徴があり兄弟みたいな感じです。兄弟なのでpowershellでもSAPを動かすことができます。
●SAPを立ち上げ、ログイン
以下のスクリプトでサーバを指定して立ち上げ、ログインできます。
以下のスクリプト
echo "-----------SAP処理開始----------------" #-Begin----------------------------------------------------------------- #■自分のid、pass $SAPID = ■ $SAPPASS = ■ $Sig = @' [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern IntPtr FindWindow(string lpClassName, string lpWindowName); '@ #-Add FindWindow function--------------------------------------------- $Win32 = Add-Type -Namespace Win32 -Name Funcs -MemberDefinition $Sig -PassThru #-Set the path to the SAP GUI directory------------------------------- $SAPGUIPath = "C:\Program Files (x86)\SAP\FrontEnd\SAPgui\" #-Set the SAP system ID or the IP address----------------------------- #★サーバを指定(下記の画像参照) $SID = "★" #-Set the instance number of the SAP system--------------------------- $InstanceNo = "00" #-Starts the SAP GUI-------------------------------------------------- $SAPGUI = $SAPGUIPath + "sapgui.exe" & $SAPGUI $SID $InstanceNo While ($Win32::FindWindow("SAP_FRONTEND_SESSION", "SAP") -eq 0) { Start-Sleep -Milliseconds 250 } #-Begin----------------------------------------------------------------- #-Get-Property-------------------------------------------------------- function Get-Property { param([__ComObject] $object, [String] $propertyName) $objectType = [System.Type]::GetType($object) $objectType.InvokeMember($propertyName, "GetProperty", $NULL, $object, $NULL) } #-Set-Property-------------------------------------------------------- function Set-Property { param([__ComObject] $object, [String] $propertyName, $propertyValue) $objectType = [System.Type]::GetType($object) [Void] $objectType.InvokeMember($propertyName, "SetProperty", $NULL, $object, $propertyValue) } #-Invoke-Method------------------------------------------------------- function Invoke-Method { param([__ComObject] $object, [String] $methodName, $methodParameters) $objectType = [System.Type]::GetType($object) $output = $objectType.InvokeMember($methodName, "InvokeMethod", $NULL, $object, $methodParameters) if ( $output ) { $output } } #-Main---------------------------------------------------------------- $SapGuiAuto = [microsoft.visualbasic.Interaction]::GetObject("SAPGUI") $application = Invoke-Method $SapGuiAuto "GetScriptingEngine" $connection = Get-Property $application "Children" @(0) $session = Get-Property $connection "Children" @(0) $ID = Invoke-Method $session "findById" @("wnd[0]/usr/txtRSYST-MANDT") Set-Property $ID "Text" @("010") $ID = Invoke-Method $session "findById" @("wnd[0]/usr/txtRSYST-BNAME") Set-Property $ID "Text" @("$SAPID") $ID = Invoke-Method $session "findById" @("wnd[0]/usr/pwdRSYST-BCODE") Set-Property $ID "Text" @("$SAPPASS") $ID = Invoke-Method $session "findById" @("wnd[0]/usr/txtRSYST-LANGU") Set-Property $ID "Text" @("JA") $ID = Invoke-Method $session "findById" @("wnd[0]") Invoke-Method $ID "sendVKey" @(0)
以上スクリプト
★サーバは各社で異なるため、
以下画像のメッセージサーバ(赤枠内)を参照してください。
SAPコードの解説
①座標指定 $ID = Invoke-Method $session "findById" @("wnd[0]/usr/txtRSYST-BNAME") ②アクション(テキスト入力) Set-Property $ID "Text" @("$SAPID")
SAPコードは上記のように①座標指定、②テキスト入力で1セットになっており、これの繰り返しです。
①座標指定
"wnd[0]/usr/txtRSYST-BNAME"が座標になります。前後のコードは変更せず、この座標部分のみ変更して、作成していきます。尚、この座標の調べ方は5章で説明します。
②アクション
Set-Propertyは直訳すると、特性を決める。つまり、①で指定した座標$IDに"$SAPID"をテキスト形式でセットするとなります。