Skip to content

Commit 5efe274

Browse files
authored
SAP ABAP examples for IAM and IoT Dataplane (#7858)
1 parent 0b6d823 commit 5efe274

11 files changed

Lines changed: 627 additions & 38 deletions

.doc_gen/metadata/iam_metadata.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1487,6 +1487,14 @@ iam_GetPolicyVersion:
14871487
- description:
14881488
snippet_tags:
14891489
- python.example_code.iam.GetPolicyVersion
1490+
SAP ABAP:
1491+
versions:
1492+
- sdk_version: 1
1493+
github: sap-abap/services/iam
1494+
excerpts:
1495+
- description:
1496+
snippet_tags:
1497+
- iam.abapv1.get_policy_version
14901498
services:
14911499
iam: {GetPolicyVersion}
14921500
iam_Scenario_RollbackPolicyVersion:

.doc_gen/metadata/iot-data_metadata.yaml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,14 @@ iot-data-plane_GetThingShadow:
4343
- description:
4444
snippet_tags:
4545
- cpp.example_code.iot.GetThingShadow
46+
SAP ABAP:
47+
versions:
48+
- sdk_version: 1
49+
github: sap-abap/services/iop
50+
excerpts:
51+
- description:
52+
snippet_tags:
53+
- iop.abapv1.get_thing_shadow
4654
services:
4755
iot-data-plane: {GetThingShadow}
4856
iot-data-plane_UpdateThingShadow:
@@ -89,5 +97,13 @@ iot-data-plane_UpdateThingShadow:
8997
- description:
9098
snippet_tags:
9199
- cpp.example_code.iot.UpdateThingShadow
100+
SAP ABAP:
101+
versions:
102+
- sdk_version: 1
103+
github: sap-abap/services/iop
104+
excerpts:
105+
- description:
106+
snippet_tags:
107+
- iop.abapv1.update_thing_shadow
92108
services:
93109
iot-data-plane: {UpdateThingShadow}

.tools/readmes/config.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,7 @@
211211
"firehose": "sap-abap/services/frh",
212212
"glue": "sap-abap/services/glu",
213213
"healthlake": "sap-abap/services/hll",
214+
"iot-data-plane": "sap-abap/services/iop",
214215
"iotsitewise": "sap-abap/services/ios",
215216
"keyspaces": "sap-abap/services/kys",
216217
"kinesis": "sap-abap/services/kns",

sap-abap/services/iam/#awsex#cl_iam_actions.clas.abap

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,15 @@ CLASS /awsex/cl_iam_actions DEFINITION
280280
RAISING
281281
/aws1/cx_rt_generic.
282282

283+
METHODS get_policy_version
284+
IMPORTING
285+
!iv_policy_arn TYPE /aws1/iamarntype
286+
!iv_version_id TYPE /aws1/iampolicyversionidtype
287+
EXPORTING
288+
!oo_result TYPE REF TO /aws1/cl_iamgetpolicyvrsrsp
289+
RAISING
290+
/aws1/cx_rt_generic.
291+
283292
PROTECTED SECTION.
284293
PRIVATE SECTION.
285294
ENDCLASS.
@@ -1027,4 +1036,25 @@ CLASS /AWSEX/CL_IAM_ACTIONS IMPLEMENTATION.
10271036
ENDTRY.
10281037
" snippet-end:[iam.abapv1.delete_policy_version]
10291038
ENDMETHOD.
1039+
1040+
1041+
METHOD get_policy_version.
1042+
CONSTANTS cv_pfl TYPE /aws1/rt_profile_id VALUE 'ZCODE_DEMO'.
1043+
1044+
DATA(lo_session) = /aws1/cl_rt_session_aws=>create( cv_pfl ).
1045+
DATA(lo_iam) = /aws1/cl_iam_factory=>create( lo_session ).
1046+
1047+
" snippet-start:[iam.abapv1.get_policy_version]
1048+
TRY.
1049+
oo_result = lo_iam->getpolicyversion(
1050+
iv_policyarn = iv_policy_arn
1051+
iv_versionid = iv_version_id ).
1052+
MESSAGE 'Retrieved policy version information.' TYPE 'I'.
1053+
CATCH /aws1/cx_iamnosuchentityex.
1054+
MESSAGE 'Policy or version does not exist.' TYPE 'E'.
1055+
CATCH /aws1/cx_iaminvalidinputex.
1056+
MESSAGE 'Invalid input provided.' TYPE 'E'.
1057+
ENDTRY.
1058+
" snippet-end:[iam.abapv1.get_policy_version]
1059+
ENDMETHOD.
10301060
ENDCLASS.

sap-abap/services/iam/#awsex#cl_iam_actions.clas.testclasses.abap

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ CLASS ltc_awsex_cl_iam_actions DEFINITION FOR TESTING DURATION LONG RISK LEVEL D
6767
list_saml_providers FOR TESTING RAISING /aws1/cx_rt_generic,
6868
create_service_linked_role FOR TESTING RAISING /aws1/cx_rt_generic,
6969
list_policy_versions FOR TESTING RAISING /aws1/cx_rt_generic,
70+
get_policy_version FOR TESTING RAISING /aws1/cx_rt_generic,
7071
set_default_policy_version FOR TESTING RAISING /aws1/cx_rt_generic,
7172
delete_policy_version FOR TESTING RAISING /aws1/cx_rt_generic.
7273

@@ -1507,6 +1508,56 @@ CLASS ltc_awsex_cl_iam_actions IMPLEMENTATION.
15071508
msg = |Policy should have a default version| ).
15081509
ENDMETHOD.
15091510

1511+
1512+
METHOD get_policy_version.
1513+
DATA lo_result TYPE REF TO /aws1/cl_iamgetpolicyvrsrsp.
1514+
DATA lv_version_id TYPE /aws1/iampolicyversionidtype.
1515+
1516+
" Use test policy created in class_setup
1517+
" First get the list of versions to find the default version ID
1518+
DATA(lo_list_result) = ao_iam->listpolicyversions( iv_policyarn = av_test_policy_arn ).
1519+
DATA(lt_versions) = lo_list_result->get_versions( ).
1520+
1521+
" Find the default version
1522+
LOOP AT lt_versions INTO DATA(lo_version).
1523+
IF lo_version->get_isdefaultversion( ) = abap_true.
1524+
lv_version_id = lo_version->get_versionid( ).
1525+
EXIT.
1526+
ENDIF.
1527+
ENDLOOP.
1528+
1529+
cl_abap_unit_assert=>assert_not_initial(
1530+
act = lv_version_id
1531+
msg = |Default policy version ID should be found| ).
1532+
1533+
" Now get the policy version details
1534+
ao_iam_actions->get_policy_version(
1535+
EXPORTING
1536+
iv_policy_arn = av_test_policy_arn
1537+
iv_version_id = lv_version_id
1538+
IMPORTING
1539+
oo_result = lo_result ).
1540+
1541+
cl_abap_unit_assert=>assert_bound(
1542+
act = lo_result
1543+
msg = |Get policy version result should not be initial| ).
1544+
1545+
DATA(lo_policy_version) = lo_result->get_policyversion( ).
1546+
cl_abap_unit_assert=>assert_bound(
1547+
act = lo_policy_version
1548+
msg = |Policy version should not be initial| ).
1549+
1550+
cl_abap_unit_assert=>assert_equals(
1551+
exp = lv_version_id
1552+
act = lo_policy_version->get_versionid( )
1553+
msg = |Version ID should match| ).
1554+
1555+
cl_abap_unit_assert=>assert_not_initial(
1556+
act = lo_policy_version->get_document( )
1557+
msg = |Policy document should not be initial| ).
1558+
ENDMETHOD.
1559+
1560+
15101561
METHOD set_default_policy_version.
15111562
DATA lv_new_policy_doc TYPE string.
15121563
DATA lv_version_id TYPE /aws1/iampolicyversionidtype.

sap-abap/services/iam/README.md

Lines changed: 39 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -33,44 +33,45 @@ For prerequisites, see the [README](../../README.md#Prerequisites) in the `sap-a
3333

3434
Code excerpts that show you how to call individual service functions.
3535

36-
- [AttachRolePolicy](%23awsex%23cl_iam_actions.clas.abap#L689)
37-
- [AttachUserPolicy](%23awsex%23cl_iam_actions.clas.abap#L573)
38-
- [CreateAccessKey](%23awsex%23cl_iam_actions.clas.abap#L377)
39-
- [CreateAccountAlias](%23awsex%23cl_iam_actions.clas.abap#L782)
40-
- [CreatePolicy](%23awsex%23cl_iam_actions.clas.abap#L472)
41-
- [CreatePolicyVersion](%23awsex%23cl_iam_actions.clas.abap#L549)
42-
- [CreateRole](%23awsex%23cl_iam_actions.clas.abap#L613)
43-
- [CreateServiceLinkedRole](%23awsex%23cl_iam_actions.clas.abap#L972)
44-
- [CreateUser](%23awsex%23cl_iam_actions.clas.abap#L298)
45-
- [DeleteAccessKey](%23awsex%23cl_iam_actions.clas.abap#L397)
46-
- [DeleteAccountAlias](%23awsex%23cl_iam_actions.clas.abap#L802)
47-
- [DeletePolicy](%23awsex%23cl_iam_actions.clas.abap#L496)
48-
- [DeletePolicyVersion](%23awsex%23cl_iam_actions.clas.abap#L1015)
49-
- [DeleteRole](%23awsex%23cl_iam_actions.clas.abap#L636)
50-
- [DeleteUser](%23awsex%23cl_iam_actions.clas.abap#L320)
51-
- [DetachRolePolicy](%23awsex%23cl_iam_actions.clas.abap#L710)
52-
- [DetachUserPolicy](%23awsex%23cl_iam_actions.clas.abap#L594)
53-
- [GenerateCredentialReport](%23awsex%23cl_iam_actions.clas.abap#L871)
54-
- [GetAccessKeyLastUsed](%23awsex%23cl_iam_actions.clas.abap#L454)
55-
- [GetAccountAuthorizationDetails](%23awsex%23cl_iam_actions.clas.abap#L837)
56-
- [GetAccountPasswordPolicy](%23awsex%23cl_iam_actions.clas.abap#L913)
57-
- [GetAccountSummary](%23awsex%23cl_iam_actions.clas.abap#L854)
58-
- [GetCredentialReport](%23awsex%23cl_iam_actions.clas.abap#L890)
59-
- [GetPolicy](%23awsex%23cl_iam_actions.clas.abap#L532)
60-
- [GetRole](%23awsex%23cl_iam_actions.clas.abap#L655)
61-
- [ListAccessKeys](%23awsex%23cl_iam_actions.clas.abap#L416)
62-
- [ListAccountAliases](%23awsex%23cl_iam_actions.clas.abap#L820)
63-
- [ListAttachedRolePolicies](%23awsex%23cl_iam_actions.clas.abap#L729)
64-
- [ListGroups](%23awsex%23cl_iam_actions.clas.abap#L765)
65-
- [ListPolicies](%23awsex%23cl_iam_actions.clas.abap#L515)
66-
- [ListPolicyVersions](%23awsex%23cl_iam_actions.clas.abap#L972)
67-
- [ListRolePolicies](%23awsex%23cl_iam_actions.clas.abap#L747)
68-
- [ListRoles](%23awsex%23cl_iam_actions.clas.abap#L672)
69-
- [ListSAMLProviders](%23awsex%23cl_iam_actions.clas.abap#L932)
70-
- [ListUsers](%23awsex%23cl_iam_actions.clas.abap#L339)
71-
- [SetDefaultPolicyVersion](%23awsex%23cl_iam_actions.clas.abap#L992)
72-
- [UpdateAccessKey](%23awsex%23cl_iam_actions.clas.abap#L434)
73-
- [UpdateUser](%23awsex%23cl_iam_actions.clas.abap#L356)
36+
- [AttachRolePolicy](%23awsex%23cl_iam_actions.clas.abap#L698)
37+
- [AttachUserPolicy](%23awsex%23cl_iam_actions.clas.abap#L582)
38+
- [CreateAccessKey](%23awsex%23cl_iam_actions.clas.abap#L386)
39+
- [CreateAccountAlias](%23awsex%23cl_iam_actions.clas.abap#L791)
40+
- [CreatePolicy](%23awsex%23cl_iam_actions.clas.abap#L481)
41+
- [CreatePolicyVersion](%23awsex%23cl_iam_actions.clas.abap#L558)
42+
- [CreateRole](%23awsex%23cl_iam_actions.clas.abap#L622)
43+
- [CreateServiceLinkedRole](%23awsex%23cl_iam_actions.clas.abap#L981)
44+
- [CreateUser](%23awsex%23cl_iam_actions.clas.abap#L307)
45+
- [DeleteAccessKey](%23awsex%23cl_iam_actions.clas.abap#L406)
46+
- [DeleteAccountAlias](%23awsex%23cl_iam_actions.clas.abap#L811)
47+
- [DeletePolicy](%23awsex%23cl_iam_actions.clas.abap#L505)
48+
- [DeletePolicyVersion](%23awsex%23cl_iam_actions.clas.abap#L1024)
49+
- [DeleteRole](%23awsex%23cl_iam_actions.clas.abap#L645)
50+
- [DeleteUser](%23awsex%23cl_iam_actions.clas.abap#L329)
51+
- [DetachRolePolicy](%23awsex%23cl_iam_actions.clas.abap#L719)
52+
- [DetachUserPolicy](%23awsex%23cl_iam_actions.clas.abap#L603)
53+
- [GenerateCredentialReport](%23awsex%23cl_iam_actions.clas.abap#L880)
54+
- [GetAccessKeyLastUsed](%23awsex%23cl_iam_actions.clas.abap#L463)
55+
- [GetAccountAuthorizationDetails](%23awsex%23cl_iam_actions.clas.abap#L846)
56+
- [GetAccountPasswordPolicy](%23awsex%23cl_iam_actions.clas.abap#L922)
57+
- [GetAccountSummary](%23awsex%23cl_iam_actions.clas.abap#L863)
58+
- [GetCredentialReport](%23awsex%23cl_iam_actions.clas.abap#L899)
59+
- [GetPolicy](%23awsex%23cl_iam_actions.clas.abap#L541)
60+
- [GetPolicyVersion](%23awsex%23cl_iam_actions.clas.abap#L1047)
61+
- [GetRole](%23awsex%23cl_iam_actions.clas.abap#L664)
62+
- [ListAccessKeys](%23awsex%23cl_iam_actions.clas.abap#L425)
63+
- [ListAccountAliases](%23awsex%23cl_iam_actions.clas.abap#L829)
64+
- [ListAttachedRolePolicies](%23awsex%23cl_iam_actions.clas.abap#L738)
65+
- [ListGroups](%23awsex%23cl_iam_actions.clas.abap#L774)
66+
- [ListPolicies](%23awsex%23cl_iam_actions.clas.abap#L524)
67+
- [ListPolicyVersions](%23awsex%23cl_iam_actions.clas.abap#L981)
68+
- [ListRolePolicies](%23awsex%23cl_iam_actions.clas.abap#L756)
69+
- [ListRoles](%23awsex%23cl_iam_actions.clas.abap#L681)
70+
- [ListSAMLProviders](%23awsex%23cl_iam_actions.clas.abap#L941)
71+
- [ListUsers](%23awsex%23cl_iam_actions.clas.abap#L348)
72+
- [SetDefaultPolicyVersion](%23awsex%23cl_iam_actions.clas.abap#L1001)
73+
- [UpdateAccessKey](%23awsex%23cl_iam_actions.clas.abap#L443)
74+
- [UpdateUser](%23awsex%23cl_iam_actions.clas.abap#L365)
7475

7576

7677
<!--custom.examples.start-->
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
" Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
" SPDX-License-Identifier: Apache-2.0
3+
CLASS /awsex/cl_iop_actions DEFINITION
4+
PUBLIC
5+
FINAL
6+
CREATE PUBLIC .
7+
8+
PUBLIC SECTION.
9+
" Updates the shadow for an AWS IoT thing
10+
" @parameter iv_thing_name | The name of the thing (e.g., 'MyIoTDevice')
11+
" @parameter iv_shadow_state | The shadow state as JSON string
12+
" @raising /aws1/cx_rt_generic | Thrown when operation fails
13+
METHODS update_thing_shadow
14+
IMPORTING
15+
!iv_thing_name TYPE /aws1/iopthingname
16+
!iv_shadow_state TYPE string
17+
RAISING
18+
/aws1/cx_rt_generic.
19+
20+
" Gets the shadow for an AWS IoT thing
21+
" @parameter iv_thing_name | The name of the thing (e.g., 'MyIoTDevice')
22+
" @parameter ov_shadow | The shadow state as JSON string
23+
" @raising /aws1/cx_rt_generic | Thrown when operation fails
24+
METHODS get_thing_shadow
25+
IMPORTING
26+
!iv_thing_name TYPE /aws1/iopthingname
27+
RETURNING
28+
VALUE(ov_shadow) TYPE string
29+
RAISING
30+
/aws1/cx_rt_generic.
31+
32+
PROTECTED SECTION.
33+
PRIVATE SECTION.
34+
ENDCLASS.
35+
36+
37+
38+
CLASS /awsex/cl_iop_actions IMPLEMENTATION.
39+
40+
METHOD update_thing_shadow.
41+
CONSTANTS cv_pfl TYPE /aws1/rt_profile_id VALUE 'ZCODE_DEMO'.
42+
43+
DATA(lo_session) = /aws1/cl_rt_session_aws=>create( cv_pfl ).
44+
DATA(lo_iop) = /aws1/cl_iop_factory=>create( lo_session ).
45+
46+
" snippet-start:[iop.abapv1.update_thing_shadow]
47+
TRY.
48+
" Convert JSON string to xstring for payload
49+
DATA(lv_payload) = /aws1/cl_rt_util=>string_to_xstring( iv_shadow_state ).
50+
51+
lo_iop->updatethingshadow(
52+
iv_thingname = iv_thing_name
53+
iv_payload = lv_payload ).
54+
MESSAGE 'Thing shadow updated successfully.' TYPE 'I'.
55+
CATCH /aws1/cx_iopresourcenotfoundex.
56+
MESSAGE 'Thing not found.' TYPE 'E'.
57+
CATCH /aws1/cx_rt_generic INTO DATA(lo_exception).
58+
DATA(lv_error) = |{ lo_exception->get_text( ) }|.
59+
MESSAGE lv_error TYPE 'E'.
60+
ENDTRY.
61+
" snippet-end:[iop.abapv1.update_thing_shadow]
62+
ENDMETHOD.
63+
64+
METHOD get_thing_shadow.
65+
CONSTANTS cv_pfl TYPE /aws1/rt_profile_id VALUE 'ZCODE_DEMO'.
66+
67+
DATA(lo_session) = /aws1/cl_rt_session_aws=>create( cv_pfl ).
68+
DATA(lo_iop) = /aws1/cl_iop_factory=>create( lo_session ).
69+
70+
" snippet-start:[iop.abapv1.get_thing_shadow]
71+
TRY.
72+
DATA(lo_result) = lo_iop->getthingshadow( iv_thingname = iv_thing_name ).
73+
74+
" Convert xstring payload to JSON string
75+
DATA(lv_payload) = lo_result->get_payload( ).
76+
ov_shadow = /aws1/cl_rt_util=>xstring_to_string( lv_payload ).
77+
MESSAGE 'Thing shadow retrieved successfully.' TYPE 'I'.
78+
CATCH /aws1/cx_iopresourcenotfoundex.
79+
MESSAGE 'Thing shadow not found.' TYPE 'E'.
80+
CATCH /aws1/cx_rt_generic INTO DATA(lo_exception).
81+
DATA(lv_error) = |{ lo_exception->get_text( ) }|.
82+
MESSAGE lv_error TYPE 'E'.
83+
ENDTRY.
84+
" snippet-end:[iop.abapv1.get_thing_shadow]
85+
ENDMETHOD.
86+
87+
ENDCLASS.

0 commit comments

Comments
 (0)