SDK for SAP ABAP の概念 - AWS SDK の SAP ABAP

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

SDK for SAP ABAP の概念

このセクションでは、 の基本概念について説明します AWS SDK for SAP ABAP。

API クラス

各 には 3 文字の頭字語 または AWS のサービス が割り当てられますTLA。サービスは /AWS1/IF_<TLA> 形式のインターフェイスで表されます。これをサービスインターフェイスと呼びます。API クラスは /AWS1/API_<TLA> パッケージにあります。サービスインターフェイスは、 AWS オペレーションごとに 1 つのメソッドで構成されます (これらのメソッドをオペレーションメソッドと呼びます)。 AWS SDK for SAP ABAP TLAsAWS SDK for SAP ABAP - モジュールリスト」を参照してください。

各オペレーションメソッドには、いくつかの IMPORTING 引数と、最大 1 つの RETURNING 引数があります。多くの場合、これらの引数は複雑なコンストラクターと長い GET…() メソッドセットを持つオブジェクトです。多くの場合、オブジェクトには入れ子オブジェクト、再帰リファレンス、オブジェクトのテーブル、テーブルのテーブルなどが含まれます。これは、 AWS のサービス がディープ XML 構造と JSON 構造を渡しているためです。これは、引数のフラットセットでは表現できません。

クラスに 1 つの属性しか含まれていない場合でも、引RETURNING数は常にクラスです。

追加のオブジェクト

各 API パッケージには、プライマリ API クラスに加えて、関連するさまざまなリポジトリとデータディクショナリオブジェクトが含まれています。

  • 各構造型オブジェクトのクラス。

  • テーブルに表示されるあらゆるプリミティブデータ型のクラス。例えば、サービスが文字列のテーブルを返す場合、ABAP API はそれをオブジェクトのテーブルとして表現します。各オブジェクトは文字列をカプセル化するラッパークラスです。これは、ABAP でネイティブに表現できない null 文字列を表現する際に、ラッパークラスが詳細を隠すことができるようにするためです。

  • サービスによって定義された特定のエラーの例外クラス。

  • 各プリミティブデータ型のデータ要素。各データ型には、自己文書化できるように独自のデータ要素があります。

  • XML や JSON ペイロードをシリアル化および逆シリアル化するための XSLT 変換など、内部処理用の追加オブジェクト。

構造クラス

サービスによって送受信されるほとんどの AWS データは、 AWS SDK によってクラスとして表されます。これらのクラスはデータの構造を表し、ストレージの内部の詳細を隠します。特に、このフィールドには値がないことを SDK が表現する方法がクラスによって隠されています。

構造クラスの各フィールドには、3 つのメソッドがあります。

GET_field( )

GET_field( ) メソッド

  • フィールドの値が返されるか、または

  • フィールドに値がない場合は、オプションパラメータとして設定できるデフォルト値が返されます。

例えば、バケットの場所の制約を出力する次のコードを考えてみます。

DATA(lo_location) = go_s3->getbucketlocation( iv_bucket = CONV string( gv_bucket ) ). WRITE: / 'Bucket Location: ',    lo_location->get_locationconstraint( ). 

バケットに場所の制約がまったくない場合 (us-east-1 の場合のように)、GET_LOCATIONCONSTRAINT( ) は空の文字列を返します。フィールドに値がまったくない場合は、この動作をオーバーライドして目的の値を指定できます。

DATA(lo_location) = go_s3->getbucketlocation( iv_bucket = CONV string( gv_bucket ) ). WRITE: / 'Bucket Location: ',    lo_location->get_locationconstraint( iv_value_if_missing = 'assuming us-east-1' ). 

これで、getbucketlocation() の結果で場所が返されない場合、プログラムは Bucket Location: assuming us-east-1 と記述するようになります。

要求された値が完全に欠落している場合、GET () メソッドに特定の結果を返すように要求できます。次のコード例を参照してください。

data(lo_location) = go_s3->GETBUCKETLOCATION( new /AWS1/CL_S3_GET_BUCKET_LOC_REQ( iv_bucket = gv_bucket ) ). write: / 'Location constraint: ', lo_location->GET_LOCATIONCONSTRAINT( 'NopeNopeNope' ).

この場合、場所の制約がなければ、GET_LOCATIONCONSTRAINT( )NopeNopeNope を返します。

HAS_field( )

HAS_field( ) メソッドはフィールドに値があるかどうかを調べる方法です。次の例を参照してください。

if NOT lo_location->HAS_LOCATIONCONSTRAINT( ).    write: / 'There is no location constraint'. endif.

あるフィールドに必ず値があることがわかっている場合、HAS_field( ) メソッドはありません。

ASK_field( )

ASK_field( ) メソッドはフィールドの値を返すか、値がない場合は例外を発生させます。これは、多数のフィールドを処理し、値のないフィールドがある場合にロジックを回避して別のアプローチを取る場合に便利な方法です。

TRY.    WRITE: / 'Location constraint: ', lo_location->ask_locationconstraint( ). CATCH /aws1/cx_rt_value_missing.    WRITE: / 'Never mind, there is no location  constraint'. ENDTRY.

/AWS1/CX_RT_VALUE_MISSING は静的な例外であり、これをキャッチしないことを選択すると警告が表示されることに注意してください。

ベストプラクティス

一般に、GET_field( ) メソッドは NULL 文字列を空の文字列として扱い、3 つのオプションの中で最も ABAP に似ているため、使用できます。ただし、この方法では、フィールドの値が空白の状況とフィールドに値がない状況を簡単に区別することはできません。ビジネスロジックが欠損データと空白データの区別に依存している場合は、HAS または ASK メソッドを使用してこれらのケースに対処できます。

配列

配列は ABAP 標準オブジェクトテーブルとして表されます。

JSON 配列には、[‘cat’, ‘dog’, null, ‘horse’] の配列のような NULL 値を含めることができます。これはスパース配列と呼ばれます。ABAP ではオブジェクトリファレンスの内部テーブルとして表され、null 値はテーブル内では真の ABAP null 値として表されます。スパーステーブル内を繰り返し処理する場合、null オブジェクトにアクセスして CX_SY_REF_IS_INITIAL 例外が発生しないように、null 値をチェックする必要があります。実際には、スパース配列は AWS サービスではまれです。

オブジェクトの配列を初期化するには、ABAP 7.40 の新しいコンストラクトを使用すると便利です。複数のセキュリティグループが割り当てられた Amazon EC2 インスタンスの起動を考えてみます。

ao_ec2->runinstances(     iv_imageid                   = lo_latest_ami->get_imageid( )     iv_instancetype              = 't2.micro'     iv_maxcount                  = 1     iv_mincount                  = 1     it_securitygroupids          = VALUE /aws1/cl_ec2secgrpidstrlist_w=>tt_securitygroupidstringlist(                                     ( NEW /aws1/cl_ec2secgrpidstrlist_w( 'sg-12345678' ) )                                     ( NEW /aws1/cl_ec2secgrpidstrlist_w( 'sg-55555555' ) )                                     ( NEW /aws1/cl_ec2secgrpidstrlist_w( 'sg-99999999' ) )                                                                                                        )     iv_subnetid                  = ao_snet->get_subnetid( )     it_tagspecifications         = make_tag_spec( 'instance' ) )

マップ

JSON マップは ABAP では Hashed Tables として表され、各テーブル行には 2 つのコンポーネントのみが含まれます。

  • KEY — テーブルの UNIQUE KEY である文字列。

  • VALUE — 値を含むオブジェクト。

マップは、 AWS SDK がクラスではなく真の構造を使用する数少ないケースの 1 つです。これは、ABAP ハッシュテーブルではキーフィールドとしてオブジェクト参照を持つことができず、 AWS マップキーは常に null 以外の文字列であるために必要です。

高レベルの関数

前のセクションでAPI クラス説明した は、 AWS サービス APIs を正確にミラーリングし、これらの APIsとして表します。場合によっては、SDK には、特定のオペレーションを簡素化するために API クラス上に構築される高レベルの関数も含まれています。プログラマーの利便性のために上位レベルの関数が含まれており、下位レベルの API クラスを置き換えるものではありません。

SDK にモジュールの上位レベルの関数が含まれている場合、それらは同じトランスポートに含まれ、 というファクトリクラスを介してアクセスできます/AWS1/CL_TLA_L2_FACTORY。ファクトリークラスには、 API ドキュメント とともに、残りの API とともに文書化されているモジュールのさまざまな上位レベルのクライアントを作成するメソッドが含まれています。