コンテンツフレーム起動

機能の文書化 BIND 文書を SAP ライブラリストラクチャに組み込む

機能

ABAP データオブジェクトへの参照を JavaScript コンテキストに渡します。この結果 JavaScript プログラムは、これらのデータオブジェクトと直接アクセスできます。 

ABAP は特定のデータ型に基いていますが、JavaScript は「緩やかな型定義」を使用します。そこではフィールドはユニークなデータ型を持たず、データ型はコンテンツおよびコンテキストにしたがって解釈されます。こうして ABAP タイプ階層内の多数の異なるタイプが、JavaScript タイプおよびオブジェクトに以下のようにマップされます。

ABAP の基本データ型は、JavaScript の基本データ型にマップされます。他の ABAP の複合データ型 ( 構造体、内部テーブル、参照) は、JavaScript の特別オブジェクトにマップされる必要があります。このためマップされた ABAP のそれぞれの複合データ型について、JavaScript の実行時環境では別のプロキシクラスが導入されます。ABAP の複合データオブジェクトを JavaScript コンテキストにバインドする場合、対応するプロキシクラスのオブジェクトが作成されます。JavaScript ではこのオブジェクトは、プロキシオブジェクトへの参照として動作します。

ABAP の複合データオブジェクトを JavaScript コンテキストにバインドする際は、プロキシオブジェクトのサイズが動的であることに注意してください。バインドの間に ABAP データオブジェクトが JavaScript または ABAP の中で変更される場合、システムはプロキシオブジェクトを再生成する必要があります。BIND メソッドは、単に指定された名前の JavaScript ABAP データオブジェクトと静的にバインドしますが、その間にあるプロキシオブジェクトは交換することができます。後者はユーザに表示されません。

 

ABAP データ型

JavaScript でのマッピング

IF

Double

CDNP TXSTRINGXSTRING

String

構造体 (struct)

         構造体のコンポーネント (struct-comp)

プロキシクラス: SAPAbapStructClass

         プロキシオブジェクトの同一名の属性 ( プロパティ、proxy.comp)
副構造体は別のプロキシオブジェクト

内部標準テーブル (itab)

テーブル (itab[] INDEX idx) 内のレコード

プロキシクラス: SAPAbapStructClass

         プロキシオブジェクトにアクセスする配列 (proxy[idx])

データ参照 (dref)

         参照解除されたデータ参照 (dref->*)

         参照解除されたデータ参照のコンポーネント (dref->*-comp or dref ->comp)

プロキシクラス: SAPAbapDrefClass

        プロキシオブジェクトの「データ」属性 ( プロパティ、proxy.data)

         プロキシオブジェクトの同一名の属性 ( プロパティ、proxy.data.comp)

オブジェクト参照変数 (oref)

        ABAP オブジェクト (oref->attr) 内のオブジェクトのパブリックインスタンス属性

        ABAP オブジェクト (oref->attr) 内のオブジェクトのパブリックインスタンスメソッド

プロキシクラス: SAPAbapOrefClass

        プロキシオブジェクトの同一名の属性 ( プロパティ、proxy.attr)

        プロキシオブジェクトの呼び出されたメソッド (proxy.invoke)

クラス (class)

         ABAP オブジェクト内のクラスの静的パブリック属性 (class=>attr)

         ABAP オブジェクト内のクラスの静的パブリックメソッド (class=>attr)

プロキシクラス: SAPAbapOrefClass のプロパティクラス用の SAPAbapCrefClass

         プロキシオブジェクトの同一名の属性 ( プロパティ、proxy.Class.attr)

         プロキシオブジェクトの呼び出されたメソッド (proxy.Class.invoke)

現在、その他の ABAP データオブジェクトはサポートされていません。しかし、ABAP では構造体のコンポーネントとしての標準テーブルなど、上で指定されたデータ型すべての組み合わせが可能です。

JavaScript プログラム内でバインドされたデータオブジェクトの変更は、直接 ABAP データオブジェクトの値の意味の変更になります。ただしこの方法では、基本データオブジェクトまたは複合/ 下位データオブジェクトの基本コンポーネントのみ変更できます。つまり、テーブルまたはオブジェクト属性中のレコードの基本部分です。データオブジェクトは、プロキシオブジェクトをポイントする JavaScript 参照に割り当てることはできません。たとえば、値を JavaScript 内のトップレベルのバインドオブジェクトに割り当てようとすると、そのスクリプトは終了します。さらに、プロキシオブジェクトのプロパティを追加または削除できません。

JavaScript 内のバインドデータオブジェクトが基本データオブジェクトまたは基本コンポーネントの場合、そのバインドデータオブジェクトは、他のJavaScript 変数にのみ割り当てることができます。

ABAP データオブジェクトをポイントする JavaScript 参照を別の JavaScript 変数に割り当てるには、参照機能を使用する必要があります。つまり割り当てた後、JavaScript 内の対象の変数は、ソース変数として ABAP 内の同一データオブジェクトをポイントします。内部テーブルが再組織されるか、ABAP 内でガーベッジコレクタが実行されると、バインド対象の変数は失なわれます。この種類の ABAP オブジェクトのコンテンツがメモリ内で変更されると、JavaScript 内で新規プロキシオブジェクトが生成されます。ソース変数は自動的に新規プロキシオブジェクトにバインドされますが、対象変数は依然として以前のプロキシオブジェクトをポイントしています。対象変数にアクセスしようとすると、一般にJavaScript は処理を停止するか、ABAP 実行時エラーが発生します。

注記

JavaScript 対象変数 ( およびポイントされているプロキシオブジェクト) は、割り当て中の ABAP オブジェクトの状態のスナップショットを表わします。JavaScript ABAP で交互に作業している場合、ABAP を終了した後に続いてこのスナップショットで作業しないようにします。

現在、ABAP_DESTRUCTOR メソッドを使用して関連する JavaScript コンテキストを削除することにより、BIND のみを使用してバインドセットを削除できます。

IMPORT パラメータ

NAME_OBJ (type STRING)

JavaScript オブジェクトの名称。この名称には最大 256 個の ABAP データオブジェクトをプロパティとしてバインドできます ( トップレベルのバインド) 。コンテキストでは、任意の数のトップレベルバインドを作成できます。空文字列を渡すと、ABAP データオブジェクトはルートオブジェクト ( たとえばグローバル変数) のプロパティにバインドされます。( これはルートレベルのバインドと呼ばれていますが、お奨めできません)

NAME_PROP (type STRING)

トップレベルバインドオブジェクトまたはルートオブジェクトのプロパティの名称。JavaScript コンテキスト内では、そのオブジェクトの下の ABAP データオブジェクトにアクセスが行われます。複合 ABAP データオブジェクトでは、これらのプロパティ名は、関連するプロキシオブジェクトのオブジェクトへの参照です。

変更パラメータ

DATA (type ANY)

ABAP データオブジェクトの名称。

詳細と例

ABAP データ型 IF へのバインド

ABAP データ型 P へのバインド

ABAP 構造体へのバインド

内部テーブルへのバインド

データ参照へのバインド

オブジェクト参照へのバインド (インスタンス)

静的クラスコンポーネントへのバインド

 

 

 

コンテンツフレーム終了