コンテンツフレーム起動

このグラフィックは添付のテキストに説明されています ABAP 構造体へのバインド 文書を SAP ライブラリストラクチャに組み込む

ABAP 構造体は JavaScript では、定義済みプロキシクラス SAPAbapStructClass のプロキシオブジェクトとしてマップされます。JavaScript 参照には、BIND メソッドの NAME_PROP パラメータを使用して大文字小文字を区別する名称を指定できます。

構造体のコンポーネントはプロキシオブジェクトのプロパティを形成し、そのため ABAP 名は小文字で渡されます。副構造体は、別のプロキシオブジェクトとしてマップされます。

JavaScript では、ABAP バインド構造体および副構造体の各コンポーネントには、全体としてではなく個別にアクセスすることのみ可能です。対応する命令は、ABAP バインドデータオブジェクト自身には影響しませんが、JavaScript 内のプロキシオブジェクトに影響します。さらに JavaScript 内では、他のプロパティまたはメソッドをプロキシオブジェクトに追加できません。

例

report DEMO_JAVA_SCRIPT_BIND_STRUCT.

data: begin of ADDRESS,
        FIRST_NAME type STRING,
        SECOND_NAME type STRING,
        begin of STREET,
          NAME      type STRING,
          NUMBER(4) type C,
        end of STREET,
        begin of CITY,
          ZIPCODE(5) type N,
          NAME       type STRING,
        end of CITY,
      end of ADDRESS.

data SOURCE type STRING.

data JS_PROCESSOR type ref to CL_JAVA_SCRIPT.
JS_PROCESSOR = CL_JAVA_SCRIPT=>CREATE( ).

JS_PROCESSOR->BIND( exporting NAME_OBJ  = 'abap'
                              NAME_PROP = 'Adr'
                    changing  DATA      = ADDRESS ).

concatenate 'abap.Adr.first_name=   "Han";       '
            'abap.Adr.second_name=  "Solo";      '
            'abap.Adr.street.name=  "Woodway";   '
            'abap.Adr.street.number="666";       '
            'abap.Adr.city.zipcode= "64283";     '
            'abap.Adr.city.name=    "Horse Town";'
  into SOURCE separated by CL_ABAP_CHAR_UTILITIES=>CR_LF.

JS_PROCESSOR->EVALUATE( JAVA_SCRIPT = SOURCE ).

write: / ADDRESS-FIRST_NAME,   ADDRESS-SECOND_NAME,
       / ADDRESS-STREET-NAME,  ADDRESS-STREET-NUMBER,
       / ADDRESS-CITY-ZIPCODE, ADDRESS-CITY-NAME.

SOURCE = 'abap.Adr = "Hello World!";'.

JS_PROCESSOR->EVALUATE( JAVA_SCRIPT = SOURCE ).

write JS_PROCESSOR->LAST_ERROR_MESSAGE.

この例のプログラムにより JavaScript は、名称 'abap.Adr' を使用して ABAP 構造体 ADDRESS にアクセスして、コンポーネントに値を割り当てることができます。EVALUATE メソッドが最初に呼び出された後、ABAP プログラム内の構造体はJavaScript 内の値セットを持ちます。

2 番めにEVALUATE を実行するとエラーとなります。複合属性に割り当てできないからです。

 

 

 

コンテンツフレーム終了