SDK for SAP ABAP 개념 - AWS SDK... 에 대한 SAP ABAP

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

SDK for SAP ABAP 개념

이 섹션에서는 의 기본 개념을 다룹니다 AWS SDK for SAP ABAP.

API 클래스

각 문자에는 세 글자로 된 두문자어 또는 AWS 서비스 가 지정됩니다. TLA 서비스는 /AWS1/IF_<TLA> 형식의 인터페이스로 표시됩니다. 이를 서비스 인터페이스라고 부릅니다. API 클래스는 /AWS1/API_<TLA> 패키지에 있습니다. 서비스 인터페이스는 각 작업에 대해 하나의 메서드로 구성됩니다. 이 메서드를 AWS Operation Methods라고 부릅니다. AWS SDK for SAP ABAP TLA의 전체 모듈 목록을 보려면 AWS SDK for SAP ABAP - 모듈 목록을 참조하십시오.

각 작업 메서드에는 몇 개의 IMPORTING 인수가 있으며 최대 하나의 RETURNING 인수가 있습니다. 이러한 인수는 생성자가 복잡하고 긴 GET…() 메서드 세트가 포함된 객체인 경우가 많습니다. 대부분의 경우 객체에는 중첩된 객체, 재귀 참조, 객체 테이블, 표 등이 포함됩니다. 이는 단순한 인수 집합으로 표현할 수 없는 딥 XML 및 JSON 구조를 전달하기 때문입니다 AWS 서비스 .

클래스에 속성이 하나뿐인 경우에도 RETURNING 인수는 항상 클래스입니다.

추가 객체

각 API 패키지에는 기본 API 클래스를 포함하는 것 외에도 다양한 관련 리포지토리 및 데이터 사전 객체가 포함되어 있습니다.

  • 각 구조 유형 객체의 클래스입니다.

  • 표에 나타나는 모든 기본 데이터 유형의 클래스입니다. 예를 들어 서비스가 문자열 표를 반환하면 ABAP API는 이를 객체 표로 표현합니다. 여기서 각 객체는 문자열을 캡슐화하는 래퍼 클래스입니다. 이는 ABAP에서 기본적으로 표현할 수 없는 null 문자열을 나타내는 세부 정보를 래퍼 클래스에서 숨길 수 있도록 하기 위한 것입니다.

  • 서비스에서 정의한 특정 오류에 대한 예외 클래스입니다.

  • 각 기본 데이터 유형의 데이터 요소입니다. 각 데이터 유형에는 자체 문서화가 가능하도록 자체 데이터 요소가 있습니다.

  • XML 및 JSON 페이로드를 직렬화 및 역직렬화하기 위한 XSLT 변환과 같은 내부 처리를 위한 추가 객체입니다.

구조 클래스

서비스에서 보내고 받는 대부분의 AWS 데이터는 AWS SDK에 의해 클래스로 표시됩니다. 이러한 클래스는 데이터 구조를 나타내며 스토리지의 내부 세부 정보를 숨깁니다. 특히 클래스는 SDK가 값이 없는 필드를 나타내는 방식을 숨깁니다.

구조 클래스의 각 필드에는 세 가지 메서드가 있습니다.

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 문자열을 빈 문자열로 취급하며며 세 가지 옵션 중 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(으)로 표시되며 각 테이블 행에는 구성 요소가 두 개만 존재합니다.

  • KEY – 테이블의 UNIQUE KEY 문자열입니다.

  • VALUE— 값을 포함하는 객체입니다.

맵은 AWS SDK에서 클래스 대신 실제 구조를 사용하는 몇 안 되는 사례 중 하나입니다. 이는 ABAP 해시된 테이블이 객체 참조를 키 필드로 사용할 수 없고 AWS 맵 키는 항상 null이 아닌 문자열이기 때문에 필요합니다.

상위 수준 함수

이전 섹션에서 API 클래스 설명한 내용은 AWS 서비스 API를 정확히 미러링하고 이러한 API를 친숙한 ABAP 클래스로 나타냅니다. 경우에 따라 SDK에는 특정 작업을 단순화하기 위해 API 클래스를 기반으로 빌드되는 상위 수준 함수도 포함되어 있습니다. 상위 수준 함수는 프로그래머 편의를 위해 포함되었으며 하위 수준 API 클래스를 대체하지 않습니다.

SDK에 모듈에 대한 상위 수준 함수가 포함된 경우 이러한 함수는 동일한 전송에 포함되며 라는 팩토리 클래스를 통해 액세스할 수 있습니다. /AWS1/CL_TLA_L2_FACTORY 팩토리 클래스에는 모듈에 사용할 다양한 상위 수준 클라이언트를 만드는 메서드가 포함되어 있으며, 이러한 메서드는 API 설명서와 함께 나머지 API와 함께 문서화되어 있습니다.