Call

 GuiXT 
 Input Assistant 

目的
GuiXTスクリプトまたはInputScriptから関数を呼び出すことができます。 関数は、SAPアプリケーションサーバー上のSAP関数モジュール、またはVC ++または同様の言語で実装されたローカルdll関数(フロントエンドPC上の)のいずれかです。 汎用モジュールについては、SAPのRFC(Remote Function Call)インターフェース技術を使用しています。

RFCを介したCallコマンドを使用する場合は、コンポーネント”InputAssistant” が必要です。

その他の機能(自動フォーマット変換や呼び出しのバンドルなど)は、GuiXTの”Open Call”インターフェースによって提供されます。以下を参照してください。

Call  “BAPI_USER_GET_DETAIL”   In.USERNAME=“MEYER   Out.LOGONDATA=“UserLogonData”

SAP汎用モジュール“BAPI_USER_GET_DETAIL”は、RFC経由で呼び出されます。

Call “ImgName” dll=“guiexits” In=“&F[Material]” Out=“Matfilename”

dll関数ImgNameはローカルで呼び出されます。

書式
RFC call  
Call “funcname” In.Name1=“value1” In.Name2=“value2” … Out.Name1=“vname1” Out.Name2=“vname2” …  … Table.Name1=“tab1” Table.Name2=“tab2″ …   dll call:
Call
“funcname” dll=“dllname” In=“par1” In=“par2” … Out=“par1” Out=“par2” …注意点:Ÿ  最大20個のパラメーター(In+Out+Tables)が可能。

Ÿ  最初に”In”パラメータ、次に”Out”、次に”Table”と名前を付けます。

オプション
Call “Funktionsname” export.Name1=“vname1” export.name2=“vname2” … import.Name3=“vname3” import.Name3″vname4″   ….

注意点:

Ÿ  これには、汎用モジュール /GUIXT/Callが必要です。移送リクエストsap.trans.guixtutilities.zipを使用して、SAPシステムにインポートできます。

Ÿ  説明と例は、「GuiXTのOpen Callインターフェースについて」の記事にあります。

Ÿ  パラメータの合計数(export + import)は最大20に制限されています。

Ÿ  パラメータの順序は、最初に ”export” パラメータ、次に “import” パラメータです。

既存の呼び出し手順をオープンコールインターフェイスに変換する場合は、次の点に注意してください:

Ÿ  表記はSAP構文に基づいており、汎用モジュールにエクスポートされるパラメーターをexportとして指定し、汎用モジュールからインポートされるパラメーターをimportとして指定します。

Ÿ  exportimportは常に変数名を指定し、値を直接指定しない

Ÿ  構造とテーブルもexportimportで処理されます。 ここでは、GuiXT構造変数またはテーブル変数を使用します。

オプション
destination= RFCの場合。 関数名の直後にオプションを指定してください。

宛先はファイルsaprfc.iniに記述されている必要があります。 詳細については、SAP RFCのドキュメントを参照してください。 saprfc.iniファイルは、SAP GUI作業ディレクトリ “… \SAPworkdir”にあるか、環境RFC_INIを使用してsaprfc.iniファイルに名前を付けます。

connection= RFCの場合。 関数名の直後にオプションを指定してください。

指定された呼び出しのRFC接続文字列を設定します。

例:connection=”ASHOST=myhost.com SYSNR = 00″。

指定された文字列で指定されていない場合、ユーザー、パスワード、言語、およびクライアントが自動的に追加されます。

-try RFCの場合。 関数名の直後にオプションを指定してください。

関数が「例外」で終了する場合、エラーメッセージはユーザーに表示されません。 代わりに、システム変数V[_exception]が例外の名前を取得します。 if Q[ok]を使用すると、call後に関数が正常に終了したかどうかを照会できます。

例:

Call “RPY_TABLE_READ”   -try 

in.TABLE_NAME=“&V[structid]” …
if not Q[OK]
Return “E: Structure &V[structid] not found in data dictionary” -statusline
endif

-currentuser RFCの場合。関数名の直後にオプションを指定してください。

呼び出しは、現在ログオンしているユーザーで実行されます。

注意:「シングルサインオン」の場合、このオプションはまだサポートされていません。

Call “RPY_TABLE_READ”  -currentuser  in.TABLE_NAME=“&V[structid]” …

-dialog RFCの場合:関数名の直後にオプションを指定してください。

呼び出しは、ユーザーダイアログを許可する方法で実行されます。

cache= RFCの場合:関数名の直後にオプションを指定してください。

cache=“transaction”, cache=“transaction” または cache=“file”を指定できます。効果:RFC GuiXTを実行する前に、同じ関数の以前の呼び出しで同じ入力パラメーターが既に使用されているかどうかを確認します。はいの場合、出力パラメーターはRFCを実行する代わりに内部キャッシュから読み取られます。いいえの場合、RFCが実行され、その出力パラメーターが内部キャッシュに保管されます。

入力パラメーターは、in.xxx=で指定された値とtable.xxx=で指定されたすべてのテーブルの内容です。テーブル “abc”が呼び出された汎用モジュールによって読み込まれず、返された場合のみ、たとえばSet text[abc] “”を使用して、呼び出しを実行する前にテーブルをクリアする必要があります。それ以外の場合、テーブルのコンテンツはキャッシュキーの一部になり、誤った結果にはなりませんが、キャッシュの効率が低下します。

出力パラメーターは、out.xxx =で指定された変数と、table.xxx=で指定されたすべてのテーブルの内容です。

キャッシュキーの合計長が8000バイトを超える場合、cache=オプションは無視されます。

cache=“transaction”を使用すると、新しいトランザクション呼び出しごとにGuiXTによってクリアされるキャッシュを利用できます。これは、ユーザーが/N…で始まるトランザクションの場合、またはSAPメニューでそれを選択することにより、すべてのデータがSAPシステムから新たに読み取られることを意味します。 cache=“session”を使用すると、1つのSAPモード内のすべてのトランザクションのセッション中に保持されるキャッシュを利用できます。

セッションキャッシュcache=“session”はユーザープロファイルデータまたはデータのカスタマイズに使用できますが、トランザクションキャッシュは、顧客アドレスのような、原則的にいつでも変更はできますが、1つのトランザクション中に複数回読み取られることを必要としないアプリケーションデータ等に適しています。

ファイルシステムキャッシュcache=“file”は、VersionNumberと組み合わせて機能します。ローカルファイルシステムはRFCキャッシュとして使用されるため、RFCの結果値は、新しいSAP GUIログオン後でも使用できます。

ClearCallCache cache=“transaction”およびClearCallCache cache=“session”コマンドを使用して、自分でキャッシュをクリアできます。たとえば、ユーザーが/N…を入力する代わりにトランザクション内からF3またはF12で第一画面に戻ることができる場合、トランザクションの第一画面でClearCallCache cache=“transaction”を使用できます。この場合(F3またはF12)、SAPアプリケーションは技術的には新しいトランザクションを開始しないため、トランザクションキャッシュはGuiXTによってクリアされません。

ファイルシステムキャッシュをリセットするためには。 ClearCallCache cache=“file”を使用するか、VersionNumberを増やします。

オープンコールインターフェイスの場合の追加オプション
-bundle この呼び出しを他の呼び出しとバンドルして単一のRFC呼び出しを形成し、単一のネットワーク通信ステップのみが実行されるようにします。
BundledRequests Call BundledRequests は、-bundleオプションで指定された以前のすべての呼び出しをバンドルし、SAPアプリケーションサーバーで処理するようになりました。
-parallelProcessing Call BundledRequestsの追加:SAPで定義されている代替モードの最大数xに応じて、処理はx-1プロセスで実行されます。 SAPシステムの標準はx = 6で、最大数はx = 16です。処理の順序は定義されていません。
serverGroup= Call BundledRequestsの追加:SAPシステムで定義されたアプリケーションサーバーの指定されたグループで処理が行われます(SAPトランザクション:RZ12)。
importFromBundle= 指定された番号1,2,3 …の呼び出しの結果は、結果セット全体から読み取られ、importとして指定された変数に配置されます。
if Q[ok] を使用して、指定した番号のコールがコールバンドルに存在するかどうかを照会できます。
If no Call BundledRequests がまだ実行されていない場合、これは最初のCall importFromBundle=ステートメントによって暗黙的にトリガーされます。
DeleteBundledRequest 以前にバンドルされた呼び出しの結果セット全体が削除されます。
また、バンドルされた各Callは、前のバンドルの結果セットを暗黙的に削除します。
SAP汎用モジュールの呼び出し
パラメータを渡す

Call “funcname” In.Name1=“value1” In.Name2=“value2” … Out.Name1=“vname1” Out.Name2=“vname2” … Table.Name1=“tab1” Table.Name2=“tab2” …  

制限事項

Ÿ  テーブルは、文字タイプまたはパック10進数フィールドフィールド(ABAPタイプC、P、N、D、T)で構成できます。

Ÿ  デフォルトのテーブル幅は4000です。行数に制限はありません。 必要に応じて、callステートメントのテーブルごとに1〜32000の異なる幅を指定できます。Table.Name1(width:8000)=“tab1”

テーブルの取り扱い

Ÿ  テーブルはテキストのようにInputScriptで処理されます。 例えば、CopyTextステートメントを使用できます。

Ÿ  両方向に転送されます

Ÿ  データディクショナリベースの構造を使用して、構造内の単一のフィールドをアドレス指定できます。

例1:

SAP標準関数BAPI_USER_GET_DETAIL “を呼び出して、ユーザーグループ(ユーザーマスターレコード)を読み取ります。

Call  “BAPI_USER_GET_DETAIL”   In.USERNAME=“&V[_user]”   Out.LOGONDATA=“UserLogonData”
Set V[UserGroup] “&V[UserLogonData](BAPILOGOND-CLASS)”

これで、変数V[UserGroup]にSAPユーザーグループが含まれます。

説明(トランザクションSE37のインタフェース定義も参照):

Ÿ  システム変数&V[_user]はインポートパラメータUSERNAMEとして渡されます

Ÿ  変数&V[UserLogonData]は、エクスポートパラメータLOGONDATAの値を取得します

Ÿ  構造定義BAPILOGONDに従って、コンポーネントCLASSにユーザグループを見つけます。

例2:

BAPIを介してすべてのユーザーパラメータをインポートおよびエクスポートすることにより、ユーザーパラメータを変更します。

// User parameter id to be changed, and new value:
Set
V[Paramid] “ND9”
Set V[Paramva] “Printer2400”

// Read user parameters
Call “BAPI_USER_GET_DETAIL” in.USERNAME=“&V[_user]” table.PARAMETER1=“ipt”

// Clear output parameter table
Set text[opt] “”

// “found” indicator
Set V[found] “”

// Loop through all user parameters
Set V[i] 1

Label next_parameter
CopyText fromText=“ipt” toString=“p” line=“&V[i]”

if Q[ok]

  Set V[parid] “&V[p](BAPIPARAM1-PARID)
    if V[parid=&V[Paramid]]
       Set V[p](BAPIPARAM1-PARVA) “&V[Paramva]”
       Set V[found] “X”
endif

// add parameter to new parameter table
CopyText fromString=“p” toText=“opt” -appendline

// next line
Set V[i] &V[i] + 1
goto next_parameter

endif

// parameter not found: add parameter line
if not V[found=X]
  Set V[p](BAPIPARAM1-PARID) “&V[Paramid]”
  Set V[p](BAPIPARAM1-PARVA) “&V[Paramva]”
  CopyText fromString=“p” toText=“opt” -appendline
endif

// Write back parameters
Call “BAPI_USER_CHANGE” in.USERNAME=“&V[_user]” in.PARAMETERX=“X” table.PARAMETER1=“opt”

dll関数の呼び出し
関数宣言は次のとおりです(2つのINパラメータと3つのOUTパラメータの例)。

__declspec(dllexport) int funcname(char* p1, char*p2, char* p3, char* p4, char* p5)

すべてのパラメーター(INおよびOUT)は、スクリプトで指定された順序で渡されます。 各文字列の最大長は4000文字です。 スクリプトですべてのパラメータを指定してください。指定しない場合、dll関数はアドレス例外を受け取ります。

ヒントとコツ
Ÿ   ABAPワークベンチでRFCコールをデバッグするには、以下を使用できます。

ProcessingOption debugRFC=”On”
Call …
ProcessingOption debugRFC=”Off”

Ÿ   RFCユーザーとパスワードは、GuiXTプロファイルで指定できます。 パスワードは暗号化された形式でGuiXTプロファイルに保存されます。

Ÿ   “GuiXT Controls” コンポーネントは、VBScript、JavaScript、VB.NET、またはC#に実装されている関数の呼び出しをサポートしています。

前の記事

CallJS

次の記事

Cachefile