Blockchain-implementatie in ABAP

Introductie

Met de introductie van Blockchain in SAP Cloud Platform waren de belangrijkste vragen voor SAP-ontwikkelaars de implementatie in SAP ABAP. Alle klantinformatie van SAP is voornamelijk on-premise gebaseerd. De grote hoeveelheid gegevens is al opgeslagen in het backend-systeem en als we deze gegevens niet op blockchain kunnen pushen, heeft de Blockchain op SAP Cloud Platform geen zin. In dit artikel leggen we de Blockchain Implementatie in ABAP uit.

Blockchain op SAP Cloud Platform

In onze vorige artikelen hebben we de blockchaindiensten al uitgelegd (voornamelijk Hyperledger, Multichain en quorum) op SAP Cloud Platform. Deze instanties zijn verbonden met: SAP Blockchain-activeringsservices, die fungeert als interface tussen deze blockchain-services en andere SAP-services.

Blockchain-implementatie in ABAP

We kunnen de blockchain-implementatie in ABAP gemakkelijk begrijpen met behulp van het gegeven blokdiagram:

Blockchain-implementatie in ABAP

In het bovenstaande diagram kunt u zien dat de SAP ABAP samenwerkt met Blockchain Enablement-services en de HANA-database. Deze applicatie kan worden weergegeven met Klassiek ABAP-rapport of met Fiori-applicatie die vervolgens OData gebruikt om te communiceren met SAP ABAP-methoden.

Om een ​​service in het SAP Cloud-platform aan te roepen, moeten we het volgende doen:

  1. Verkrijg Token van de service met behulp van een leesaanroep.
  2. Voer de CRUD-bewerking uit op de service met behulp van het token dat hierboven is ontvangen.

Laten we deze stappen begrijpen met betrekking tot de blockchain-services.

Krijg token van de Blockchain-service

In deze stap zullen we de service aanroepen om het token op te halen en dat token op te slaan in een globale variabele voor later gebruik.

METHODE get_token. GEGEVENS: lo_http_client TYPE REF NAAR if_http_client. DATA: tekenreeks antwoord TYPE, tekenreeks lv_url TYPE. CONSTANTEN: lv_initial_url TYPE tekenreeks VALUE ' ', lv_auth TYPE tekenreeks VALUE 'Basis' '. "maak HTTP-client via url OPROEPMETHODE cl_http_client=>create_by_url EXPORTEREN url = lv_initial_url IMPORTEREN client = lo_http_client UITZONDERINGEN argument_not_found = 1 plugin_not_active = 2 internal_error = 3 OVERIGE = 4. "Beschikbare API-eindpunten-service. .hana.ondemand.com/blockchain/proofOfHistory/api/v1 "https://blockchain-service.cfapps.eu10.hana.ondemand.com/blockchain/proofOfHistory/api/v1 "https://blockchain-service.cfapps .us10.hana.ondemand.com/blockchain/proofOfHistory/api/v1 IF sy-subrc <> 0. "foutafhandeling ENDIF. "verzoekmethode instellen lo_http_client->request->set_method('GET'). "headers toevoegen lo_http_client->request->set_header_field( name = 'Authorization' value = lv_auth ). "Beschikbare beveiligingsschema's voor productieve API-eindpunten "OAuth 2.0 OPROEPMETHODE lo_http_client->send UITZONDERINGEN http_communication_failure = 1 http_invalid_state = 2 http_processing_failed = 3 http_invalid_timeout = 4 OTHERS = 5. IF sy-subrc = 0. CALL METHODE 1 http_invalid_state = 2 http_processing_failed = 3 OVERIGE = 5. ENDIF. IF sy-subrc <> 0. "foutafhandeling ENDIF. response = lo_http_client->response->get_cdata( ). GV_TOKEN = response. "Globale variabele ENDMETHOD.

 

Ontvang bewijsgeschiedenis van de Blockchain-service

In deze stap zullen we de blockchain-service opnieuw aanroepen met behulp van het token dat we in bovenstaande stap hebben opgeslagen. En dan krijgen we de historie van transacties van blockchain.

METHODE get_proof_history.
 GEGEVENS: lo_http_client TYPE REF NAAR if_http_client.
 DATA: respons TYPE-tekenreeks, lv_url TYPE-reeks, lv_auth TYPE-reeks, lv_auth2 TYPE-reeks.
 CONSTANTEN: lv_initial_url TYPE tekenreeks VALUE ' '.
 INDIEN iv_object_id NIET INITIAL IS.
 *** Token TYPES ophalen: BEGIN OF t_entry, access_token TYPE string, token_type TYPE string, expires_in TYPE n LENGTH 8, scope TYPE string, jti TYPE string, END OF t_entry .
 TYPES: t_entry_map TYPE GESORTEERDE TABEL VAN t_entry MET UNIEKE SLEUTEL access_token.
 DATA: m_entry TYPE t_entry.
 GEGEVENS: lr_instance TYPE REF NAAR /ui5/cl_json_parser.
 MAAK OBJECT lr_instance.
 BEL METHODE mij->get_token.
 ALS gv_token NIET INITIAL IS.
 * data: itab TYPE TABEL VAN string.
 * data: access_tok type string.
 * SPLIT gv_token bij ''' IN TAFEL itab.
 * poging.
 * lv_auth2 = itab[ 4 ].
 * catch cx_sy_itab_line_not_found.
 * EINDE.
 /ui2/cl_json=>deserialiseren(Json = gv_token EXPORTEREN pretty_name = /ui2/cl_json=>pretty_mode-camel_case data WIJZIGEN = m_entries ).
 lv_auth2 = m_entries-access_token.
 gv_token = gv_token+17.
 SAMENVOEGEN 'Bearer' lv_auth2 IN lv_auth GESCHEIDEN DOOR spatie.
 STOP ALS.
 DATA lv_object_id TYPE tekenreeks.
 lv_object_id = iv_object_id.
 VERTAAL lv_object_id NAAR KLEINE LETTERS.
 SAMENVOEGEN lv_initial_url lv_object_id IN lv_url.  "Appending Fix-URL en Object-ID om de Request-URL te krijgen "maak HTTP-client via url OPROEPMETHODE cl_http_client=>create_by_url EXPORTEREN url = lv_url IMPORTEREN client = lo_http_client UITZONDERINGEN argument_not_found = 1 plugin_not_active = 2 internal_error = 3 OVERIGE = 4.
 "Beschikbare API-eindpunten "https://blockchain-service.cfapps.sap.hana.ondemand.com/blockchain/proofOfHistory/api/v1 "https://blockchain-service.cfapps.eu10.hana.ondemand.com/blockchain /proofOfHistory/api/v1 "https://blockchain-service.cfapps.us10.hana.ondemand.com/blockchain/proofOfHistory/api/v1 IF sy-subrc <> 0.
 "fout bij het afhandelen van ENDIF.
 "verzoekmethode instellen lo_http_client->request->set_method('GET').
 "creatung Auth-waarde * lv_auth2 = 'Basis' '.
 "headers toevoegen * lo_http_client->request->set_header_field( name = 'Content-Type' value = 'application/x-www-form-urlencoded' ).
 lo_http_client->request->set_header_field( name = 'Accept' value = 'application/json').
 lo_http_client->request->set_header_field (name = 'Autorisatie' waarde = lv_auth ).
 * lo_http_client->request->set_header_field (name = 'APIKey' value = 'zBoCpDtkaT9jexRjtMk0J98Rs8izmQi1').
 "Beschikbare beveiligingsschema's voor productieve API-eindpunten "OAuth 2.0 OPROEPMETHODE lo_http_client->send UITZONDERINGEN http_communication_failure = 1 http_invalid_state = 2 http_processing_failed = 3 http_invalid_timeout = 4 OVERIGE = 5.
 ALS sy-subrc = 0.
 OPROEPMETHODE lo_http_client->receive UITZONDERINGEN http_communication_failure = 1 http_invalid_state = 2 http_processing_failed = 3 OVERIGE = 5.
 STOP ALS.
 ALS sy-subrc = 1.
 "foutafhandeling ev_respons = 'http_communication_failure'.
 ELSEIF sy-subrc = 2.
 ev_response = 'http_invalid_state'.
 ELSEIF sy-subrc = 3.
 ev_response = 'http_processing_failed'.
 ELSEIF sy-subrc = 0.
 response = lo_http_client->response->get_cdata( ).
 *SCHRIJF: 'reactie: ', reactie.
 ev_respons = antwoord.
 ANDERS.
 ev_respons = 'Onbekende fout'.
 STOP ALS.
 STOP ALS.

 

laat een reactie achter

Deze site gebruikt Akismet om spam te verminderen. Ontdek hoe uw reactiegegevens worden verwerkt.