If

 GuiXT 

目的
現在のGUIステータスや、SAP画面に特定のフィールドの有無など、条件に応じてスクリプトコマンドを使用することができます。
if Q[Status=ADD1] or Q[Status=UPD1]   Image (1,50) (10,90) “imgupd.gif”  
else
Image (1,50) (10,90) “imgdis.gif”
endifGUIのステータスがADD1もしくはUPD1の場合、イメージファイル“imgupd.gif” を表示します。ステータスが異なる場合、“imgdis.gif”を表示します。
条件
Ifコマンドを利用するのはどのような時でしょうか。

1.    画面にエレメントがあるかどうか確認したいとき、ifコマンドにエレメントの名称を入れて検索することができます。

if F[Amount] ”画面にAmountというフィールドがある場合”
if I[Amount] ”画面にAmountという入力フィールドがある場合”
if P[Cancel] ”画面にCancelというプッシュボタンがある場合”
if M[Change] ”画面にChangeというメニュー項目がある場合”
if M[Change=active] ”画面にChangeという有効なメニュー項目がある場合”

2.    ステータスデータを問い合わせることができます。

if Q[Status=xxx] ステータスがxxxの場合
if Q[Language=x] 言語キーがxの場合 (J=Japanese)
if Q[Database=xxx] システム(DBサーバー)id がxxxの場合
if Q[Client=xxx] クライアントが xxxの場合
if Q[User=xxx] ユーザーが xxxの場合(*)
if Q[Role=xxx] ロールが xxxの場合(*)
if Q[Profile=xxx] プロファイルがxxxの場合
if Q[Transaction=xxx] トランザクションコードが xxxの場合(SAP Rel4以上)
if Q[ScreenVariant=xxx] スクリーンバリアントxxxが有効な場合(GuiXT scriptが中央にある場合に有効)
if Q[GuiXTVersion=yy Qx x] GuiXT のバージョンが yy Qx xの場合 (*1)
if Q[StopRequest] ユーザーがInputScript内でStopRequest を引き起こす場合
if Q[Page=xxx] 現在のタブページが xxxの場合
if V[vname=value] 変数に値がある場合

(InputAssistant利用時のみ有効)

if U[uname=value] 使用中のパラメータに値がある場合(InputAssistant利用時のみ有効)

3.    guixt.iniに設定されたユーザーオプションを問い合わせることができます。

Option xxx1 
Option xxx2

if Q[Option=xxx] をスクリプトに記述し、guixt.iniでこのオプションを有効にします。

例)オプションHelpDisplayを使用して、あるトランザクションでヘルプを表示します。Imageコマンドを使うと画像ファイルのように表示したり、Viewコマンドを使うとリッチテキストやhtml形式で表示できます。

また、各ユーザーはこのヘルプテキストを使用するかどうかを個別に決めることができます。

オプションは50個までguixt.iniで定義することができます。また、各オプションの文字数は30文字まで記述できます。

if else/endifのネストについて   論理式の使用について
if elseendifも両方ネストできます。

if not Q[Status=UPD1]  
Image (1,50) (10,90) “imgdis.gif”  
else  
if (F[Company code] or F[Business area]) and not F[Order number]
Image (1,50) (10,90) “imgupd1.gif”  
else
Image (1,50) (10,90) “imgupd2.gif”  
Pushbutton (Toolbar) “Cancel” “/OZC27”  
endif
endif
 

論理式内で括弧、”and” “or” “not“ が使用できます。優先順位や括弧は通常の論理式法則が適用されます。

変数比較における-strictオプション
変数を値と比較if V[vname=value]するとき、以下のルールが自動的に適用されます。

・       比較する文字は、大文字小文字の区別がない。

“abXY” = “ABxy”

・       ゼロで構成されている値はすべて等しい。また空の文字列も同様に等しい。

“0000” = “0” =””

上記のルールを適用しないで値を比較する場合には、オプション-strict を使用します。

if V[vname=value]  -strict

endif

ヒントとコツ
・       if文にフィールドを直接指定することはできないため、変数を使用してください。

Set V[buk] “&F[Company code]
if V[buk=0001]
 
endif

2つの変数 V[x1] と V[x2]を比較する場合は、”if V[x1=値]” に、 &V[x2] を使う必要があります。

if V[x1=&V[x2]]
 
endif

(*) if Q[Role=xxx]、及び、if Q[Profile=xxx] については、ドキュメンテーション「ロール固有のユーザーインターフェース」を参照してください。

・       “if Q[GuiXTVersion…]” はGuiXTバージョン2002 Q4 3以上でサポートされています。

ログオンスクリプトでインストール済みGuiXTバージョンは2002 Q4 5。以下のコーディングを使用できます。

if Q[GuiXTVersion<2002 Q4 5] Message “新しいGuiXTをインストールしてください。IT管理センター連絡先:xxx”  Title=”GuiXTを更新してください。”
endif

2002 Q4 3以前のバージョンでは、if Q[GuiXTVersion<….]が使用できません。そのため、このメッセージは表示されずに、”false” が戻ります。このような場合には、以前のGuiXTのバージョン番号を記述して以下のように “not … >” を使用します。

if not Q[GuiXTVersion>2002 Q4 4] Message “新しいGuiXTをインストールしてください。IT管理センター連絡先:xxx”  Title=”GuiXTを更新してください。”
endif

・       if … endif内でScreenコマンドを使用しないでください。スクリプトが解釈できなくなり、動作が予期できなくなります。

以下は、悪い例です。

Screen S1
Set V[x] “a”
Enter

if V[x=b]

Screen S2
Enter “xx”

else

Screen S2
Enter “yy”

endif

Screen S1の画面の次にScreen S2 の画面があると仮定します。GuiXTはEnter “xx”または “yy”を処理するでしょうか?この例では、Enter “xx”が実行されます。GuiXTは、前のスクリーンブロックのif文オープンを考慮しないで次にマッチしているScreen2用のスクリーンコマンドを検索するからです。その代わり、それぞれのスクリーンブロック内で すべてのオープン状態の“if”文を閉じてください。

Screen S1
Set V[x] “a”
Enter

Screen S2
if V[x=b] Enter “xx”
else
Enter “yy”
endif

goto/labelを使用するほうが適切な場合があります。

Screen S1
Set V[x] “a”
Enter

if V[x=b]
goto l_b
endif

Screen S2
Enter “xx”
goto l_continue

label l_b
Screen S2
Enter “yy”

label l_continue

前の記事

IgnoreWarning

次の記事

Icon