

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Menggunakan AWS SDK for SAP ABAP
<a name="using-sdk"></a>

SDK untuk SAP ABAP memiliki dua komponen utama.
+ SDK Runtime (paket`/AWS1/RT`) — sekumpulan objek yang mendukung keamanan, otentikasi, penelusuran, konfigurasi, konversi data, dan fungsi lintas-API lainnya. Modul API untuk Amazon S3,, IAM Roles Anywhere AWS STS, dan Secrets Manager adalah wajib.
+ APIs (paket `/AWS1/API` dan sub-paketnya) — sub-paket untuk setiap API di mana objek dari setiap API sepenuhnya independen satu sama lain, memastikan bahwa perubahan dalam satu API tidak merusak API lain. Untuk melihat daftar lengkap AWS SDK for SAP ABAP APIs, lihat [AWS SDK for SAP ABAP - Panduan Referensi API](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html).

Bagian ini mencakup topik-topik berikut.

**Topics**
+ [Representasi data dalam ABAP](representation.md)
+ [Program contoh Amazon S3](example-program.md)
+ [SDK untuk konsep SAP ABAP](concepts.md)
+ [AWS SDK for SAP ABAP fitur](features.md)
+ [Membangun produk dengan SDK](building-products.md)
+ [Sesuaikan permintaan HTTP ke AWS](customize-http-request.md)
+ [Batasan](limitations.md)

# Representasi data dalam ABAP
<a name="representation"></a>

Bagian ini mencakup topik-topik berikut.

**Topics**
+ [Jenis data](#data-types)
+ [AWS tipe data](#aws-api)

## Jenis data
<a name="data-types"></a>

Layanan AWS memiliki seperangkat tipe data standar yang harus dipetakan ke tipe data ABAP. Lihat tabel berikut untuk detail selengkapnya.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/sdk-for-sapabap/latest/developer-guide/representation.html)

Layanan AWS juga mengembalikan tipe data agregat berikut.


| AWS tipe data | Tipe data ABAP | Komentar | 
| --- | --- | --- | 
| Struktur | Kelas |  | 
| Union | Kelas | Sebuah serikat adalah sama dengan struktur, kecuali bahwa serikat pekerja tidak akan pernah memiliki lebih dari satu set bidang. Semua bidang lainnya akan disetel ke No Value. | 
| Array | TABEL STANDAR |  | 
| Hash | TABEL HASH | Tabel hash hanya akan memiliki dua kolom: KEY (string) dan VALUE (class).  | 

## AWS tipe data
<a name="aws-api"></a>

Pendekatan berikut telah diintegrasikan untuk mendukung Layanan AWS di ABAP.
+ Tipe AWS data tertentu tidak dapat direpresentasikan dalam ABAP. Misalnya, tipe `float` data di ABAP tidak mendukung`NaN`,`Infinity`, atau `-Infinity` nilai. Oleh karena itu, tipe `float` data direpresentasikan sebagai `STRING` dan diterjemahkan ke `DECFLOAT16` saat runtime.
+ AWS data direpresentasikan pada kawat sebagai JSON atau XHTML, dan nilainya opsional. Misalnya, lihat contoh berikut yang dikembalikan oleh Layanan AWS di JSON.

  ```
  Fullname: {
     Firstname:  "Ana",
     Middlename: "Carolina",
     Lastname:  "Silva"
  }
  ```

  Jika Ana tidak memiliki nama tengah, layanan mengembalikan output berikut.

  ```
  Fullname: {
     Firstname:  "Ana",
     Lastname:  "Silva"
  }
  ```

  ABAP tidak membedakan antara *string dengan panjang 0* dan *string yang tidak memiliki nilai*. Bahasa lain mungkin menetapkan nilai NULL ke string atau membungkus string dalam konstruksi (seperti, pembungkus `Optional<>` Java). Ini tidak didukung di ABAP. *Oleh karena itu, SDK untuk SAP ABAP memfasilitasi perbedaan nilai dengan menyediakan varian metode pengambil.*

# Program contoh Amazon S3
<a name="example-program"></a>

Bagian ini memandu Anda melalui program contoh sederhana untuk membuat daftar konten bucket Amazon S3 dengan menelepon. `ListObjectsV2`

**Topics**
+ [Prasyarat](#prerequisites-example-program)
+ [Kode](#code-example-program)
+ [Bagian kode](#code-sections)

## Prasyarat
<a name="prerequisites-example-program"></a>

Anda harus memenuhi prasyarat berikut untuk menjalankan program contoh ini.
+ Anda memiliki ember Amazon S3. Dalam tutorial ini, ember diberi nama`demo-invoices.customer.com`.
+ Transaksi`/AWS1/IMG`:
  + Memiliki profil SDK yang ditentukan bernama`DEMO_S3`.
    + Di profil SDK, peran IAM logis `TESTUSER` harus dipetakan ke peran IAM, seperti `arn:aws:iam::111122223333:role/SapDemoFinance` yang memberikan `s3:ListBucket` izin untuk mencantumkan konten bucket Amazon S3 Anda.
  + Memiliki sumber daya logis bernama `DEMO_BUCKET` yang dipetakan ke bucket Amazon S3 Anda dengan SID dan klien sistem SAP Anda.
+ Pengguna Anda memiliki peran PFCG yang:
  + Mengotorisasi pengguna untuk mengakses profil `DEMO_S3` SDK melalui objek auth -. `/AWS1/SESS`
  + Mengotorisasi pengguna untuk `TESTUSER` akses peran IAM logis melalui objek auth -. `/AWS1/LROL`
+ Sistem SAP Anda dapat mengautentikasi dirinya sendiri untuk AWS menggunakan metode yang ditentukan dalam profil SDK.
+ Profil EC2 instans Amazon Anda memberi sistem SAP Anda hak untuk peran IAM yang `arn:aws:iam::111122223333:role/SapDemoFinance` dipetakan `sts:assumeRole` di profil SDK.

## Kode
<a name="code-example-program"></a>

Blok kode berikut menunjukkan seperti apa kode Anda nantinya.

```
REPORT  zdemo_s3_listbuckets.

START-OF-SELECTION.
  PARAMETERS pv_lres TYPE  /aws1/rt_resource_logical
                     DEFAULT 'DEMO_BUCKET' OBLIGATORY.

  DATA(go_session) = /aws1/cl_rt_session_aws=>create( 'DEMO_S3'  ).
  DATA(gv_bucket)   = go_session->resolve_lresource( pv_lres ).

  DATA(go_s3)       = /aws1/cl_s3_factory=>create( go_session ).

  TRY.
      DATA(lo_output) = go_s3->listobjectsv2(
            iv_bucket = CONV string( gv_bucket )
            iv_maxkeys = 100
      ).
      LOOP AT lo_output->get_contents(  ) INTO DATA(lo_object).
        DATA lv_mdate TYPE datum.
        CONVERT TIME STAMP lo_object->get_lastmodified( )
                TIME ZONE 'UTC'
                INTO DATE lv_mdate.
        WRITE: /  CONV text30( lo_object->get_key( ) ),
                 lv_mdate, lo_object->get_size( ).
      ENDLOOP.
    CATCH /aws1/cx_rt_generic INTO DATA(lo_ex).
      DATA(lv_msg) = lo_ex->if_message~get_text(  ).
      MESSAGE lv_msg TYPE 'I'.
  ENDTRY.
```

## Bagian kode
<a name="code-sections"></a>

Berikut ini adalah ulasan kode di bagian.

```
  PARAMETERS pv_lres TYPE  /aws1/rt_resource_logical
                     DEFAULT 'DEMO_BUCKET' OBLIGATORY.
```

Pengguna tidak dapat menentukan nama bucket fisik. Mereka menentukan bucket logis dan administrator sistem (khususnya analis bisnis) berkoordinasi dengan AWS administrator memetakan bucket logis ke bucket fisik. `/AWS1/IMG` Dalam sebagian besar skenario bisnis, pengguna tidak memiliki kesempatan untuk memilih bucket logika — ID sumber daya logis dikodekan keras dalam kode atau dikonfigurasi dalam tabel konfigurasi khusus.

```
  DATA(go_session) = /aws1/cl_rt_session_aws=>create( 'DEMO_S3'  ).
```

Baris ini menetapkan sesi keamanan dan menyatakan bahwa program ABAP ini mengharapkan untuk menggunakan profil SDK. `DEMO_S3` Panggilan ini adalah koneksi ke konfigurasi SDK dan menarik Wilayah default, pengaturan otentikasi, dan Peran IAM yang diinginkan. Panggilan ke `AUTHORIZATION-CHECK` dilakukan secara otomatis untuk memastikan bahwa objek otorisasi `/AWS1/SESS` terpenuhi. Selain itu, `AUTHORIZATION-CHECK` panggilan akan dilakukan untuk menentukan peran IAM logis yang paling kuat (nomor urut lebih rendah) yang diizinkan pengguna, berdasarkan objek otorisasi. `/AWS1/LROL` SDK akan mengasumsikan bahwa peran IAM dipetakan ke peran IAM logis untuk SID dan klien. Kemudian, objek sesi mengaktifkan penelusuran berdasarkan pengaturan jejak di. `IMG`

Jika pengguna tidak diizinkan untuk profil SDK yang diminta atau untuk peran IAM logis apa pun yang tersedia, pengecualian akan diajukan.

```
DATA(gv_bucket)   = go_session->resolve_lresource( pv_lres ).
```

Baris ini menyelesaikan sumber daya logis ke nama bucket fisik. Jika sumber daya logis tidak dapat diselesaikan karena konfigurasi tidak memiliki pemetaan untuk kombinasi SID/klien ini, pengecualian akan dimunculkan.

```
  DATA(go_s3)       = /aws1/cl_s3_factory=>create( go_session ).
```

Baris ini membuat objek API untuk Amazon S3 menggunakan `create()` metode. `/aws1/cl_s3_factory` Objek yang dikembalikan adalah tipe `/aws1/if_s3` yang merupakan antarmuka untuk Amazon S3 API. Objek API terpisah harus dibuat untuk setiap layanan. Misalnya, jika program ABAP menggunakan Amazon S3 AWS Lambda,, dan DynamoDB, maka program tersebut akan membuat objek API dari,, dan. `/aws1/cl_s3_factory` `/aws1/cl_lmd_factory` `/aws1/cl_dyn_factory`

Ada beberapa parameter opsional ke konstruktor yang memungkinkan Anda menentukan Wilayah jika Anda ingin mengganti Wilayah default yang dikonfigurasi. `IMG` Dengan cara ini, bisa ada dua contoh`/aws1/if_s3`, satu untuk `us-east-1` dan satu untuk`us-west-2`, jika Anda ingin menyalin objek dari ember di satu Wilayah ke ember di Wilayah lain. Demikian pula, Anda dapat membuat dua objek sesi keamanan yang berbeda dan menggunakannya untuk membuat dua instance terpisah`/aws1/cl_s3`, jika Anda memerlukan laporan untuk membaca dari bucket terkait keuangan dan menulis objek ke bucket terkait logistik.

```
      DATA(lo_output) = go_s3->listobjectsv2(
            iv_bucket = CONV string( gv_bucket )
            iv_maxkeys = 100
      ).
```

 Baris ini adalah panggilan untuk`ListObjectsV2`. Hal ini membutuhkan argumen masukan sederhana dan mengembalikan satu objek. Objek-objek ini dapat mewakili data JSON dan XHTML yang dalam, de-serialisasi ke dalam konstruksi berorientasi objek ABAP. Ini bisa sangat rumit dalam beberapa kasus. Sekarang, Anda hanya perlu memproses output untuk membuat daftar isi ember.

```
      LOOP AT lo_output->get_contents(  ) INTO DATA(lo_object).
        DATA lv_mdate TYPE datum.
        CONVERT TIME STAMP lo_object->get_lastmodified( )
                TIME ZONE 'UTC'
                INTO DATE lv_mdate.
        WRITE: /  CONV text30( lo_object->get_key( ) ),
                 lv_mdate, lo_object->get_size( ).
      ENDLOOP.
```

Data diakses menggunakan metode `GET...()` gaya yang menyembunyikan representasi internal data. `GET_CONTENTS( )`mengembalikan tabel ABAP dan setiap baris itu sendiri berisi objek yang mewakili entri Amazon S3 tunggal. Dalam kebanyakan kasus, AWS SDK mengambil pendekatan berorientasi objek ini dan semua data direpresentasikan sebagai objek dan tabel. `LastModified`Bidang direpresentasikan sebagai stempel waktu yang dapat dikonversi ke tanggal dengan `CONVERT TIME STAMP` perintah ABAP-native. `GET_SIZE()` mengembalikan operasi matematika dan pemformatan `INT4` yang mudah.

```
    CATCH /aws1/cx_rt_generic INTO DATA(lo_ex).
      DATA(lv_msg) = lo_ex->if_message~get_text(  ).
      MESSAGE lv_msg TYPE 'I'.
```

Semua kesalahan — koneksi, klien 4xx, server 5xx, atau kesalahan ABAP apa pun, seperti kesalahan otorisasi atau konfigurasi, direpresentasikan sebagai pengecualian. Anda dapat menangani setiap pengecualian secara terpisah. Anda memiliki pilihan apakah pengecualian harus ditangani sebagai kesalahan informasi, coba lagi, peringatan, pembuangan singkat, atau jenis penanganan lainnya.

# SDK untuk konsep SAP ABAP
<a name="concepts"></a>

Bagian ini mencakup konsep dasar AWS SDK for SAP ABAP.

**Topics**
+ [Kelas API](#api-classes)
+ [Objek tambahan](#additional-objects)
+ [Kelas struktur](#structure-classes)
+ [Array](#arrays)
+ [Peta](#maps)
+ [Fungsi tingkat yang lebih tinggi](#higher-level-functions)

## Kelas API
<a name="api-classes"></a>

Masing-masing Layanan AWS diberi akronim tiga huruf atau`TLA`. Layanan ini diwakili oleh antarmuka dalam `/AWS1/IF_<TLA>` format. Kami akan menyebutnya antarmuka layanan. Kelas API ada dalam `/AWS1/API_<TLA>` paket. Antarmuka layanan terdiri dari satu metode untuk setiap AWS operasi (kami akan memanggil metode ini Metode Operasi). Untuk melihat daftar modul lengkap AWS SDK for SAP ABAP TLAs, lihat [AWS SDK for SAP ABAP - Daftar Modul](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/tla.html).

Setiap metode operasi memiliki beberapa `IMPORTING` argumen dan paling banyak satu `RETURNING` argumen. Seringkali, argumen ini akan menjadi objek dengan konstruktor yang rumit dan serangkaian `GET…()` metode yang panjang. Dalam banyak kasus, objek akan berisi objek bersarang, referensi rekursif, tabel objek, tabel tabel, dan sebagainya. Ini karena Layanan AWS melewati struktur XHTML dan JSON yang dalam, yang tidak dapat diwakili oleh serangkaian argumen datar.

`RETURNING`Argumen selalu kelas, bahkan jika kelas hanya berisi satu atribut.

## Objek tambahan
<a name="additional-objects"></a>

Selain berisi kelas API utama, setiap paket API berisi berbagai repositori terkait dan objek kamus data.
+ Kelas untuk setiap objek tipe struktur.
+ Sebuah kelas untuk setiap tipe data primitif yang muncul dalam tabel. Misalnya, jika layanan mengembalikan tabel string, ABAP API akan mewakilinya sebagai tabel objek, di mana setiap objek adalah kelas pembungkus yang merangkum string. Ini agar kelas pembungkus dapat menyembunyikan detail mewakili string nol yang tidak dapat direpresentasikan secara asli di ABAP.
+ Kelas pengecualian untuk kesalahan tertentu yang ditentukan oleh layanan.
+ Elemen data untuk setiap tipe data primitif. Setiap tipe data memiliki elemen datanya sendiri agar dapat mendokumentasikan diri.
+ Objek tambahan untuk pemrosesan internal, seperti transformasi XSLT untuk serialisasi dan de-serialisasi muatan XHTML dan JSON.

## Kelas struktur
<a name="structure-classes"></a>

Sebagian besar AWS data, dikirim dan diterima oleh layanan, diwakili oleh AWS SDK sebagai kelas. Kelas-kelas ini mewakili struktur data dan menyembunyikan detail internal penyimpanan. Secara khusus, kelas menyembunyikan cara SDK mewakili *bidang ini tidak memiliki nilai*.

 Untuk setiap bidang dalam kelas struktur, ada tiga metode.

 **`GET_field( )`** 

`GET_field( )`Metodenya 
+ Mengembalikan nilai bidang, atau
+ Jika bidang tidak memiliki nilai, ia mengembalikan nilai default, yang dapat Anda atur sebagai parameter opsional.

Misalnya, pertimbangkan kode berikut yang mencetak batasan lokasi bucket.

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

Jika bucket tidak memiliki batasan lokasi sama sekali (seperti dalam kasus`us-east-1`), maka `GET_LOCATIONCONSTRAINT( )` akan mengembalikan string kosong. Anda dapat mengganti perilaku ini dan menentukan nilai yang diinginkan jika bidang tidak memiliki nilai sama sekali.

```
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' ). 
```

Sekarang program akan menulis `Bucket Location: assuming us-east-1` jika `getbucketlocation()` hasil tidak mengembalikan lokasi.

Dimungkinkan untuk meminta metode GET () untuk mengembalikan hasil tertentu jika nilai yang diminta benar-benar hilang, lihat contoh kode berikut.

```
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'  ).
```

Dalam hal ini, jika tidak ada kendala lokasi, `GET_LOCATIONCONSTRAINT( )` akan kembali. `NopeNopeNope`

 **`HAS_field( )`** 

`HAS_field( )`metode adalah cara untuk mengetahui apakah bidang tersebut memiliki nilai atau tidak. Lihat contoh berikut ini.

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

Jika bidang tertentu diketahui selalu memiliki nilai, tidak akan ada `HAS_field( )` metode.

 **`ASK_field( )`** 

`ASK_field( )`Metode mengembalikan nilai bidang atau menimbulkan pengecualian jika tidak memiliki nilai. Ini adalah cara yang mudah untuk memproses sejumlah bidang, dan menyelamatkan logika dan mengambil pendekatan yang berbeda jika salah satu bidang tidak memiliki nilai.

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

Perhatikan bahwa `/AWS1/CX_RT_VALUE_MISSING` ini adalah pengecualian statis dan Anda akan mendapatkan peringatan jika Anda memilih untuk tidak menangkapnya.

 **Praktik terbaik** 

Secara umum, Anda dapat menggunakan `GET_field( )` metode ini karena memperlakukan string null sebagai string kosong dan merupakan yang paling mirip ABAP dari tiga opsi. Namun, itu tidak memungkinkan Anda dengan mudah membedakan antara situasi di mana bidang memiliki nilai kosong dan di mana bidang tidak memiliki nilai. Jika logika bisnis Anda bergantung pada membedakan data yang hilang versus data kosong, maka `ASK` metode `HAS` atau memungkinkan Anda menangani kasus ini.

## Array
<a name="arrays"></a>

Array direpresentasikan sebagai tabel standar objek ABAP.

Sebuah array JSON dapat berisi nilai-nilai null, seperti array berikut:. `[‘cat’, ‘dog’, null, ‘horse’]` Ini disebut sebagai array jarang. Ini direpresentasikan dalam ABAP sebagai tabel internal referensi objek, dan `null` nilainya direpresentasikan dalam tabel sebagai nilai ABAP `null` yang sebenarnya. Saat melakukan iterasi melalui tabel jarang, Anda harus memeriksa `null` nilai untuk menghindari mengakses `null` objek dan mendapatkan pengecualian. `CX_SY_REF_IS_INITIAL` Dalam praktiknya, array jarang terjadi dalam AWS layanan.

Untuk menginisialisasi array objek, akan lebih mudah untuk menggunakan konstruksi ABAP 7.40 baru. Pertimbangkan peluncuran EC2 instans Amazon ini dengan beberapa grup keamanan yang ditetapkan:

```
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' )
)
```

## Peta
<a name="maps"></a>

Peta JSON direpresentasikan dalam ABAP sebagai `Hashed Tables` di mana setiap baris tabel hanya memiliki dua komponen.
+  `KEY`— string yang `UNIQUE KEY` merupakan tabel.
+  `VALUE`— objek yang mengandung nilai.

Peta adalah salah satu dari sedikit kasus di mana AWS SDK menggunakan struktur yang benar, bukan kelas. Ini diperlukan karena tabel hashed ABAP tidak dapat memiliki referensi objek sebagai bidang kunci, dan kunci AWS peta selalu string non-null.

## Fungsi tingkat yang lebih tinggi
<a name="higher-level-functions"></a>

Yang [Kelas API](#api-classes) dijelaskan di bagian sebelumnya secara tepat mencerminkan AWS layanan APIs dan mewakili mereka APIs sebagai kelas ABAP yang sudah dikenal. Dalam beberapa kasus, SDK juga menyertakan fungsi tingkat yang lebih tinggi yang dibangun di atas kelas API untuk menyederhanakan operasi tertentu. Fungsi tingkat yang lebih tinggi disertakan untuk kenyamanan programmer dan tidak menggantikan kelas API tingkat rendah.

Jika SDK menyertakan fungsi tingkat yang lebih tinggi untuk modul, mereka disertakan dalam transportasi yang sama dan dapat diakses melalui kelas pabrik yang disebut`/AWS1/CL_TLA_L2_FACTORY`. Kelas pabrik menyertakan metode untuk membuat berbagai klien tingkat yang lebih tinggi untuk modul yang didokumentasikan bersama dengan API lainnya dengan [dokumentasi API](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html).

# AWS SDK for SAP ABAP fitur
<a name="features"></a>

AWS SDK for SAP ABAP menyediakan fitur-fitur berikut.

**Topics**
+ [Konfigurasi terprogram](#programmatic-configuration)
+ [Pelayan](#waiters)
+ [Paginator](#paginators)
+ [Coba lagi perilaku](#retry-behavior)
+ [Presigners](#presigners)
+ [Rantai peran IAM lintas akun](#source-profile)

## Konfigurasi terprogram
<a name="programmatic-configuration"></a>

Gunakan transakasi `/n/AWS1/IMG` IMG untuk AWS SDK untuk SAP ABAP, dan aplikasi Custom Business Configuration untuk AWS SDK untuk SAP ABAP - edisi BTP untuk konfigurasi terprogram.

Untuk memulai konfigurasi terprogram, mulailah dengan mengambil objek konfigurasi dengan perintah. `get_config( )`

```
data(lo_config) = lo_s3->get_config( ).
```

Setiap objek konfigurasi mengimplementasikan `/AWS1/IF_RT_CONFIG` antarmuka yang mencakup `GET` ters dan `SET` ters yang sesuai dengan. `IMG` Misalnya, wilayah default dapat diganti. Lihat contoh perintah berikut.

```
lo_s3->get_config( )->/aws1/if_rt_config~set_region( 'us-east-1' ).
```

Beberapa objek konfigurasi tidak memiliki `IMG` representasi dan hanya dapat diatur secara terprogram, seperti upaya coba ulang maksimum. Lihat contoh perintah berikut.

```
lo_s3->get_config( )->/aws1/if_rt_config~set_max_attempts( 10 ).
```

Objek konfigurasi juga Layanan AWS dapat mencakup metode khusus layanan yang tidak diwakili dalam`/aws1/if_rt_config`. Misalnya, Amazon S3 dapat menangani bucket bernama `foobucket` menggunakan titik akhir `foobucket.s3.region.amazonaws.com` virtual atau `s3.region.amazonaws.com/foobucket` gaya jalur. Anda dapat menerapkan penggunaan gaya jalur dengan perintah contoh berikut.

```
lo_s3->get_config( )->set_forcepathstyle( abap_true ).
```

Untuk informasi selengkapnya tentang konfigurasi layanan, lihat [AWS SDK for SAP ABAP — Panduan Referensi API](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html).

## Pelayan
<a name="waiters"></a>

Saat bekerja dengan asinkron AWS APIs, Anda harus menunggu sumber daya tertentu tersedia sebelum mengambil tindakan lebih lanjut. Misalnya, `CREATETABLE()` API Amazon DynamoDB merespons langsung dengan status `CREATING` tabel. Anda dapat memulai operasi baca atau tulis hanya setelah status tabel berubah menjadi`ACTIVE`. Pelayan memberi Anda kemampuan untuk mengonfirmasi bahwa AWS sumber daya berada dalam keadaan tertentu sebelum melakukan tindakan terhadapnya.

Pelayan menggunakan operasi layanan untuk polling status sumber AWS daya sampai sumber daya mencapai status yang diinginkan atau sampai ditentukan bahwa sumber daya tidak mencapai status yang diinginkan. Ini bisa memakan waktu dan rawan kesalahan untuk menulis kode ke sumber daya polling AWS terus menerus. Pelayan membantu menyederhanakan kompleksitas ini dengan mengambil tanggung jawab melakukan jajak pendapat atas nama Anda.

Lihat contoh Amazon S3 berikut menggunakan pelayan.

```
DATA(lo_session) = /aws1/cl_rt_session_aws=>create( cv_pfl ).
DATA(lo_s3) = /aws1/cl_s3_factory=>create( lo_session ).
 
" Create a bucket - initiates the process of creating an S3 bucket and might return before the bucket exists
lo_s3→createbucket( iv_bucket = |amzn-s3-demo-bucket| ).
 
" Wait until the newly created bucket becomes available
lo_s3->get_waiter( )->bucketexists(
    iv_max_wait_time = 200
    iv_bucket = |amzn-s3-demo-bucket|
).
```
+ Dalam contoh ini, klien Amazon S3 digunakan untuk membuat bucket. `get_waiter()`Perintah diimplementasikan untuk menentukan kapan`bucketexists`.
+ Anda harus menentukan `iv_max_wait_time` parameter untuk setiap pelayan. Ini mewakili jumlah total waktu seorang pelayan harus menunggu sebelum selesai. Dalam contoh sebelumnya, seorang pelayan dapat berlari selama 200 detik.
+ Anda mungkin perlu memberikan input tambahan untuk parameter yang diperlukan. Pada contoh sebelumnya, nama bucket Amazon S3 diperlukan untuk parameter. `iv_bucket`
+ `/AWS1/CX_RT_WAITER_FAILURE`pengecualian menunjukkan bahwa pelayan melebihi waktu maksimum yang ditentukan dalam `iv_max_wait_time` parameter.
+ `/AWS1/CX_RT_WAITER_TIMEOUT`pengecualian menunjukkan bahwa pelayan telah berhenti karena tidak mencapai kondisi yang diinginkan.

## Paginator
<a name="paginators"></a>

Beberapa Layanan AWS operasi menawarkan tanggapan halaman. Mereka diberi paginasi untuk mengembalikan jumlah data tetap dengan setiap respons. Anda perlu membuat permintaan berikutnya dengan token atau penanda untuk mengambil seluruh rangkaian hasil. Misalnya, operasi `ListObjectsV2` Amazon S3 mengembalikan hingga 1.000 objek sekaligus. Anda harus membuat permintaan berikutnya dengan token yang sesuai untuk mendapatkan halaman hasil berikutnya.

Pagination adalah proses pengiriman permintaan berturut-turut untuk mengambil di mana permintaan sebelumnya ditinggalkan. Paginator adalah iterator hasil yang disediakan oleh SDK untuk SAP ABAP. Anda dapat menggunakan paginated APIs dengan mudah, dan tanpa memahami mekanisme dasar API menggunakan token pagination.

**Bekerja dengan paginator**

Anda dapat membuat paginator dengan `get_paginator()` metode yang mengembalikan objek paginator. Objek paginator memanggil operasi yang dipaginasi. Objek paginator menerima parameter yang diperlukan untuk diberikan ke API yang mendasarinya. Proses ini mengembalikan objek iterator yang dapat digunakan untuk mengulangi hasil paginasi, menggunakan metode dan`has_next()`. `get_next()`
+ `has_next()`mengembalikan nilai boolean yang menunjukkan jika ada lebih banyak tanggapan atau halaman yang tersedia untuk operasi yang disebut.
+ `get_next()`mengembalikan respon operasi.

Contoh berikut mencantumkan semua objek dalam bucket S3 diambil dengan menggunakan paginator.

```
DATA(lo_session) = /aws1/cl_rt_session_aws=>create( 'DEMO' ).
DATA(lo_s3) = /aws1/cl_s3_factory=>create( lo_session ).

TRY.
    DATA(lo_paginator) = lo_s3->get_paginator( ).
    DATA(lo_iterator) = lo_paginator->listobjectsv2(  
        iv_bucket = 'example_bucket'
    ).
    WHILE lo_iterator->has_next( ). 
        DATA(lo_output) = lo_iterator->get_next( ).
        LOOP AT lo_output->get_contents(  ) INTO DATA(lo_object).
            WRITE: / lo_object->get_key( ), lo_object->get_size( ).
        ENDLOOP.
    ENDWHILE.
CATCH /aws1/cx_rt_generic INTO DATA(lo_ex).
    MESSAGE lo_ex->if_message~get_text(  ) TYPE 'I'.
ENDTRY.
```

## Coba lagi perilaku
<a name="retry-behavior"></a>

SDK untuk SAP ABAP memungkinkan Anda mengonfigurasi jumlah maksimum percobaan ulang untuk permintaan Layanan AWS yang gagal karena kesalahan pelambatan atau sementara. Jumlah percobaan ulang yang diizinkan di tingkat klien layanan, yaitu berapa kali SDK mencoba ulang operasi sebelum gagal dan memunculkan pengecualian ditentukan oleh `AV_MAX_ATTEMPTS` atribut dalam objek konfigurasi layanan. Saat objek klien layanan dibuat, SDK mengonfigurasi `AV_MAX_ATTEMPTS` atribut ke nilai default 3. Objek konfigurasi layanan dapat digunakan untuk secara terprogram mengatur upaya coba ulang maksimum ke nilai yang diinginkan. Lihat contoh berikut untuk lebih jelasnya.

```
" Retrieve configuration object using Amazon S3 service’s get_config( ) method
DATA(lo_config) = lo_s3->get_config( ).

" Set the maximum number of retries to 5
lo_config->/aws1/if_rt_config~set_max_attempts( 5 ).
 
" Get the value of the maximum retry attempt.
DATA(lv_max_retry_attempts) = lo_config->/aws1/if_rt_config~get_max_attempts( ).
```

**catatan**  
Meskipun objek konfigurasi ABAP SDK memungkinkan *mode coba lagi* disetel dengan `/AWS1/IF_RT_CONFIG~SET_RETRY_MODE()` metode ini, SDK hanya mendukung mode coba lagi. `standard` Untuk informasi selengkapnya, lihat [Coba lagi perilaku](https://docs.aws.amazon.com/sdkref/latest/guide/feature-retry-behavior.html) di AWS SDKs dan Panduan Referensi Alat.

## Presigners
<a name="presigners"></a>

Anda dapat menggunakan presigned URLs untuk memberikan akses terbatas waktu ke beberapa. Layanan AWS URL presigned dapat dimasukkan dalam browser atau digunakan oleh program untuk melakukan operasi layanan. Anda dapat menggunakan URL yang telah ditandatangani beberapa kali, hingga tanggal dan waktu kedaluwarsa. Untuk informasi selengkapnya, lihat [Bekerja dengan URLs SDK presigned](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-presigned-url.html) untuk klien SAP ABAP untuk layanan yang mendukung presigner akan memiliki metode khusus yang dipanggil `GET_PRESIGNER()` untuk membuat presigner untuk layanan tersebut. Kemudian panggil metode presigner, yang sesuai dengan metode klien API, kecuali mereka mengembalikan URL yang telah ditentukan sebelumnya alih-alih benar-benar melakukan operasi.

```
" Retrieve a presigner for Amazon S3
DATA(lo_presigner) = lo_s3->get_presigner( iv_expires_sec = 600 ).

" the presigner getobject() method has the same signature as
" lo_s3->getobject(), but it doesn't actually make the call.
" to the service.  It just prepares a presigned URL for a future call
DATA(lo_presigned_req) = lo_presigner->getobject( iv_bucket = iv_bucket_name iv_key = iv_key ).

" You can provide this URL to a web page, user, email etc so they
" can retrieve the file.  The URL will expire in 10 minutes.
ov_url = lo_presigned_req->get_url( ).
```

## Rantai peran IAM lintas akun
<a name="source-profile"></a>

Dukungan rantai peran IAM lintas akun memungkinkan akses tanpa batas ke sumber daya di beberapa AWS akun melalui konfigurasi profil sumber. Fitur ini memungkinkan Anda mengonfigurasi beberapa asumsi peran, di mana satu profil mengasumsikan peran yang kemudian mengambil peran lain, memungkinkan pola akses lintas akun yang kompleks.

Untuk informasi selengkapnya, lihat [Menggunakan Profil Sumber untuk Akses Lintas Akun](https://docs.aws.amazon.com/sdk-for-sapabap/latest/developer-guide/source-profile.html).

# Membangun produk dengan SDK
<a name="building-products"></a>

Produk atau add-on ABAP yang dikonsumsi Layanan AWS dapat meningkatkan dan memperluas kemampuan SDK. Anda dapat membangun produk tersebut untuk digunakan dengan SDK.

**Topics**
+ [Menetapkan ID produk](#product-id)

## Menetapkan ID produk
<a name="product-id"></a>

Disarankan agar Anda menetapkan ID produk saat membuat sesi di dalam produk atau add-on. Lihat contoh berikut untuk lebih jelasnya.

```
DATA(lo_session) = /aws1/cl_rt_session_aws=>create( 'DEMO' ). 
lo_session->set_product_id( 'INVOICE_ANALYZER' ).
```

ID produk hanya boleh berisi huruf, angka, dan garis bawah tanpa spasi atau karakter khusus. Anda dapat mencocokkannya dengan nama teknis produk atau pengenal lainnya. Jika Anda mengembangkan beberapa produk atau add-on, ID produk harus unik untuk setiap produk. Misalnya, produk IDs untuk Invoice Analyzer, Tax Calculator, dan produk Pricing Engine dapat berupa`INVOICE_ANALYZER`,`TAX_CALCULATOR`, dan. `PRICING_ENGINE`

Menambahkan ID produk ke sesi meningkatkan telemetri yang dikirim AWS dengan setiap panggilan layanan. ID produk dan namespace objek yang membuat panggilan disertakan dalam telemetri. Dengan telemetri ini, Dukungan dapat mengidentifikasi produk yang melakukan panggilan jika pelanggan Anda menghadapi masalah dengan SDK. Ini dapat membantu memperjelas bahwa panggilan sebenarnya dilakukan oleh produk, dan bukan kode pelanggan Anda.

# Sesuaikan permintaan HTTP ke AWS
<a name="customize-http-request"></a>

 AWS SDK for SAP ABAP Menangani proses pembuatan permintaan HTTP, mengirim payload, dan menerima respons. Anda dapat menyesuaikan perilaku atau konten permintaan HTTP untuk memenuhi persyaratan TI Anda sendiri. SDK mendefinisikan titik peningkatan `/AWS1/RT_EHN_HTTP_CLIENT` sebagai tempat sentral untuk meningkatkan komunikasi HTTP. Tempat peningkatan mendukung penambahan header HTTP ke permintaan yang dibuat. AWS

## Menerapkan peningkatan
<a name="implement-enhancement"></a>

SAP menyediakan instruksi berikut untuk menerapkan tempat peningkatan:
+ [ABAP klasik](https://help.sap.com/doc/saphelp_nw75/7.5.5/en-US/5f/103a4280da9923e10000000a155106/frameset.htm)
+ [BTP ABAP](https://help.sap.com/docs/abap-cloud/abap-development-tools-user-guide/creating-badi-implementations)

## Filter peningkatan
<a name="filter-enhancement"></a>



Tempat peningkatan mendukung beberapa implementasi yang dapat aktif secara bersamaan. Anda dapat memfilter eksekusi BAdi berdasarkan atribut berikut, jika Anda perlu memastikan bahwa penyempurnaan Anda hanya berjalan pada panggilan ke AWS layanan atau tindakan API tertentu:
+ `TLA`- Singkatan tiga huruf dari layanan, dalam huruf besar.
+ `OPERATION`- Nama tindakan API. Misalnya, operasi untuk mendapatkan objek dari bucket S3 adalah [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html). Nama tindakan peka huruf besar/kecil dan mungkin tidak sama persis dengan nama metode ABAP.

## Kode peningkatan
<a name="code-enhancement"></a>

Peningkatan ini menyediakan metode berikut.

### MODIFY\$1REQ\$1HEADERS
<a name="modify-req-headers"></a>

```
CHANGING CT_HEADERS TYPE /AWS1/RT_STRINGMAP_TT
```

Anda dapat menambahkan dan memodifikasi header di tabel `CT_HEADERS` internal. Kami tidak menyarankan memodifikasi header, karena ini mengubah data yang digunakan layanan. AWS Setiap header yang Anda tambahkan diabaikan oleh AWS layanan, tetapi dapat diproses oleh infrastruktur TI Anda, seperti server proxy atau middleware lainnya.

Titik peningkatan dipanggil sebelum perhitungan header otentikasi dan telemetri, jadi ini tidak dapat dimodifikasi oleh peningkatan.

Berikut ini adalah contoh implementasi.

```
METHOD /aws1/if_rt_badi_http_client~modify_req_headers.
  APPEND VALUE /aws1/rt_stringpair_ts( name = 'x-test-example' value = 'value' ) 
    TO ct_headers.
ENDMETHOD.
```

# Batasan
<a name="limitations"></a>

AWS SDK for SAP ABAP termasuk modul SDK untuk semua Layanan AWS. Beberapa modul ini mungkin memiliki keterbatasan, seperti yang dijelaskan di sini.
+ Modul yang mengandalkan binding `MQTT` protokol, seperti`iotevents`, tidak akan berfungsi. `MQTT`bukan protokol berbasis HTTP dan saat ini tidak didukung oleh. AWS SDK for SAP ABAP
+ Operasi yang mengembalikan aliran peristiwa didukung, tetapi akan menunggu hingga seluruh aliran diterima sebelum mengembalikan kontrol ke ABAP. Contohnya adalah Amazon Bedrock Agents Runtime `InvokeAgent` dan AWS Lambda `InvokeWithResponseStream`
+ Operasi yang menerima aliran peristiwa tidak didukung karena keterbatasan dalam platform ABAP yang mendasarinya. Contohnya adalah Amazon Q Business `Chat` dan Amazon Lex `StartConversation`

AWS SDK for SAP ABAP memiliki batasan fitur berikut.
+ Fitur Amazon S3 berikut belum didukung.
  + Titik akses Multi-Region
  + Enkripsi di sisi klien Amazon S3

AWS SDK untuk SAP ABAP - edisi BTP memiliki batasan berikut selama pratinjau pengembang.
+ Beberapa modul mungkin tidak tersedia.
+ Itu tidak dapat dihapus.
+ Ini diperbarui lebih jarang.