3. パラメータと入力フィールド

ユーザーインターフェイスの項目を追加すると、チュートリアル1から応用してInputScriptsの様々な使い方ができるようになります。

最初の例題では、プッシュボタンを2つ置いて、ユーザーが異なる2つのプラント用の品目リストを表示できるようにします。これらを1つのInputScriptで対応したいので、”PLANT” というパラメータを定義します。最初のプッシュボタンを押すと、プラント”1000” (ハンブルグ)用のInputScriptを開始し、2番目のプッシュボタンを押すとプラント”3000” (ウィーン)を開始します。InputScript内の”&U[PLANT]” は、パラメータの値を参照します。

// GuiXT Script

Box (0,1) (5,26) “品目”

Image (0.7,1) (4.4,15) “materials.jpg”

Pushbutton (1,16) “ハンブルグ” “/NSA38” process=“HinmokuList.txt” size=(2,10)  using PLANT = “1000”

 

Pushbutton (3,16) “ウィーン” “/NSA38” process=“HinmokuList.txt” size=(2,10)  using PLANT  = “3000”

 

//InputScript “HinmokuList.txt”

Parameter PLANT

 

 // ABAP: プログラム実行

Screen SAPMS38M.0101

Set F[プログラム]              “RMMVRZ00”

Enter “/8”                 // 実行

 

// 品目一覧

Screen RMMVRZ00.1000

Set F[品目]                  “M-*”

Set F[プラント]   “&U[PLANT]”

Enter “/8”                 // 実行

チュートリアル 1のInputScriptと比べると、シンプルになったことがお分かりになるかと思います。

最初のファンクションコード “/NSA38”はプッシュボタン定義の中にすでに定義づけられています。そのためスクリプト内の最初の”Screen”コマンドを取り除きます。これでスクリプトが実行されたときにScreen-Enterサイクルを1つ省くことができます。

複数のプッシュボタンを定義せずに、ラジオボタンと1つのプッシュボタンの組み合わせでも対応できます。

以下の例題は、トランザクションVA01(受注入力)で異なる受注タイプを表示しています。

// GuiXT Script

del X[IMAGE_CONTAINER]  // X[IMAGE_CONTAINER]

 

Box (0,0) (8,36) “受注管理”

Image (0.7,0.3) (7.2,14.6) “order.png” “-plain”

 

// 受注タイプのデフォルト値をセット

if not V[VA01_Ordertype]

Set V[VA01_Ordertype] “BV”

endif

 

// 受注タイプの選択

RadioButton (1,16) “現金販売” Name=“VA01_Ordertype” value=“BV”

RadioButton (2,16) “緊急発注” Name=“VA01_Ordertype” value=“SO”

RadioButton (3,16) “インターネット受注” Name=“VA01_Ordertype” value=“ZA”

RadioButton (4,16) “返品” Name=“VA01_Ordertype” value=“RE”

 

Pushbutton (6,19) “受注登録” “/OVA01” Process=“startva01.txt” “size=2”

 

// InputScript “startva01.txt”

Screen SAPMV45A.0101

 

// パラメータ U[ORDERTYPE] を F[受注タイプ]フィールドにセット

Set F[受注タイプ] “&V[VA01_Ordertype]”

Set F[販売組織] “1000”

Set F[流通チャネル] “10”

Set F[営業所] “1000”

Enter

上記の場合、グローバル変数 V[VA01_Ordertype]を使用して作業しました。この場合、”/OVA01”コマンドを使用して、オルタナティブモードでトランザクションVA01を開始することはできません。理由は、各SAPセッションにはInputScriptの一連の変数があるためです。

”/OVA01”コマンドで開始するには、下記の様に、受注タイプをパラメータとして渡す必要があります。

//受注タイプのデフォルトの値をセット

if not V[VA01_Ordertype]

Set V[VA01_Ordertype] “BV”

endif

 

  //受注タイプの選択

RadioButton (1,16) “現金販売” Name=“VA01_Ordertype” value=“BV”

RadioButton (2,16) “緊急発注” Name=“VA01_Ordertype” value=“SO”

RadioButton (3,16) “インターネット受注” Name=“VA01_Ordertype” value=“ZA”

RadioButton (4,16) “返品” Name=“VA01_Ordertype” value=“RE”

 

Pushbutton (6,19) “受注登録” “/OVA01” Process=“startva01.txt” “size=2”

using ORDERTYPE = [VA01_Ordertype]

 

 

// InputScript “startva01.txt”

Parameter ORDERTYPE

 

Screen SAPMV45A.0101

 

// パラメータ U[ORDERTYPE] を F[受注タイプ]フィールドにセット

Set F[受注タイプ] “&U[ORDERTYPE]”

Set F[販売組織] “1000”

Set F[流通チャネル] “10”

Set F[営業所] “1000”

  Enter

入力フィールドも同様にラジオボタンとして定義することができます。各入力フィールド(コマンド “Inputfield”)はGuiXT変数を正確に参照します。変数の値は入力フィールドに表示され、ユーザーが入力フィールドに入力した値は変数の値を更新します。

2つ目の例題では、ユーザーは3プラントにおける品目の利用可能在庫を表示します。SAPのBAPIを利用して数を計算します。

品目番号は直接入力することも、あるいは、検索ヘルプから入力することもできます。

各項目に3つの数が表示された。

品目番号が間違っている場合、エラーメッセージを表示します。

// GuiXT Script

pos A[IMAGE_CONTAINER] (0,50) // A[IMAGE_CONTAINER]

Box (0,0) (8,36) “利用可能在庫”

 

InputField (1,1) “品目” (1,16) name=“AV_Material” size=18 techname=“MARA-MATNR” -uppercase

Text (2,1) “&V[AV_Materialtext](1-34)” -proportional -intensified

 

Text (3,2) “ハンブルグ”

Text (3,12) “&V[AV_Materialquantity1]” -border size=8

Text (3,22) “&V[AV_Materialunit]”

 

Text (4,2) “ベルリン”

Text (4,12) “&V[AV_Materialquantity2]” -border size=8

Text (4,22) “&V[AV_Materialunit]”

 

Text (5,2) “ウィーン”

Text (5,12) “&V[AV_Materialquantity3]” -border size=8

Text (5,22) “&V[AV_Materialunit]”

 

Pushbutton (7,2) “利用可能数を表示” Process=“availability.txt” size=(1,32)

using MATNR = [AV_Material]

 

// InputScript “availability.txt”

// 変数をリセット

Set V[AV_Materialtext]

Set V[AV_Materialunit]

Set V[AV_Materialquantity*]

 

// テキストと単位を読む

Call “BAPI_MATERIAL_GET_DETAIL” in.MATERIAL=“&V[AV_Material]” out.MATERIAL_GENERAL_DATA=“AV_materialdata”

 

// オフセットを使用

Set V[AV_Materialtext] “&V[AV_materialdata](1-41)”

Set V[AV_Materialunit] “&V[AV_materialdata](156-158)”

 

// 品目は存在する?

if not V[AV_Materialtext]

return “E: 品目 &V[AV_Material] は存在しません。” -statusline

endif

 

// 利用可能在庫を読む

Call “BAPI_MATERIAL_AVAILABILITY” in.MATERIAL=“&V[AV_Material]” in.PLANT=“1000” in.UNIT=“&V[AV_Materialunit]” out.AV_QTY_PLT=“AV_Materialquantity1”

Call “BAPI_MATERIAL_AVAILABILITY” in.MATERIAL=“&V[AV_Material]” in.PLANT=“1200” in.UNIT=“&V[AV_Materialunit]” out.AV_QTY_PLT=“AV_Materialquantity2”

Call “BAPI_MATERIAL_AVAILABILITY” in.MATERIAL=“&V[AV_Material]” in.PLANT=“3000” in.UNIT=“&V[AV_Materialunit]” out.AV_QTY_PLT=“AV_Materialquantity3”

 

// 小数第4位で表示

Set V[AV_Materialquantity1] &V[AV_Materialquantity1] / 1000

Set V[AV_Materialquantity2] &V[AV_Materialquantity2] / 1000

Set V[AV_Materialquantity3] &V[AV_Materialquantity3] / 1000

 

// メッセージ + スクリーン再表示

Return “S: 利用可能在庫が計算されました。” -statusline