0% found this document useful (0 votes)
45 views7 pages

0002 Zu Consume Netsuite API Oauth2.0

Uploaded by

Khalid Ahmed
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
45 views7 pages

0002 Zu Consume Netsuite API Oauth2.0

Uploaded by

Khalid Ahmed
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 7

*&---------------------------------------------------------------------*

*& Report ZU_CONSUME_NETSUITE_API_OAUTH2.0


*&---------------------------------------------------------------------*
*& Created By: SAPYard
*& Date : Feb 2021
*& Desc : Consume NetSuite API using Code & Access Token (3 Steps)
*&---------------------------------------------------------------------*
REPORT ZU_CONSUME_NETSUITE_API_OAUTH2.0.

*---------------------------------------------------------------------*
* Global DATA Declaration *
*---------------------------------------------------------------------*
DATA:
o_http_client TYPE REF TO if_http_client,
gv_access_token TYPE string,
gv_http_status_code TYPE i,
gv_http_status_text TYPE string,
gs_response TYPE string,
gs_raw_response TYPE string,
gv_header_attribute_name TYPE string,
gv_header_attribute_value TYPE string.

CONSTANTS:
gc_cookie TYPE string VALUE 'Cookie',
gc_cookie_value TYPE string VALUE 'NS_ROUTING_VERSION=LEADING',
gc_content_type TYPE string VALUE 'Content-Type',
gc_authorization TYPE string VALUE 'Authorization',
gc_app_form TYPE string VALUE 'application/x-www-form-urlencoded',
gc_app_json TYPE string VALUE 'application/json',
gc_post TYPE string VALUE 'POST'.

*---------------------------------------------------------------------*
* SELECTION SCREEN *
*---------------------------------------------------------------------*
PARAMETERS: p_code TYPE string LOWER CASE.

WRITE:/ 'Step 1: Generated Code from Authentication URL: ', p_code.


*--------------------------------------------------------------------*
*--------------------------------------------------------------------*
*--------------------------------------------------------------------*
*--Logic to get the Access Token
*--Create HTTP Client by Calling Rest API to Send SMS
PERFORM call_auth_token_url.

*--Post Method
PERFORM set_post_method.

*--Authenticate
PERFORM authenticate_netsuite.

*--Set Header data


* Set Cookie as 'NS_ROUTING_VERSION=LEADING'
PERFORM set_header_field USING gc_cookie
gc_cookie_value.

* Set Content Type as 'application/x-www-form-urlencoded'


PERFORM set_header_field USING gc_content_type gc_app_form.
*--Set BODY to get the Access Token
PERFORM set_body_with_code USING p_code.

* Set SEND method to the HTTP Client


PERFORM set_send_method.

* Call RECEIVE method


PERFORM call_receive_method.

* Get Status
PERFORM get_response_status.

**************
SKIP 1.
WRITE:/ 'Step 2: Netsuit Token Return Code/Text : ', gv_http_status_code, '/',
gv_http_status_text.
SKIP 1.

* Get API Token from the response


PERFORM read_api_token_key.
*--------------------------------------------------------------------*
*--------------------------------------------------------------------*
*--------------------------------------------------------------------*
*---STEP 3 --Post the JSON data to NetSuite
PERFORM call_rest_api_send_url.

*--Set Header
* Set Content Type app/json
PERFORM set_header_field USING gc_content_type
gc_app_json.

* Set Authorization and Token


CONCATENATE 'Bearer' gv_access_token INTO gv_access_token SEPARATED BY space.

PERFORM set_header_field USING gc_authorization


gv_access_token.

*--Prepare Body
PERFORM prepare_api_body.

* Set SEND method to the HTTP Client


PERFORM set_send_method.

* Call RECEIVE method


PERFORM call_receive_method.

* Get Response
PERFORM get_response_status.

*--Write the Response


WRITE:/ 'Step 3: Netsuite Return Code/Text : ', gv_http_status_code, '/',
gv_http_status_text.
*SKIP 1.
*WRITE:/ 'Netsuite Reesponse : ', gs_response .

*&---------------------------------------------------------------------*
*& Form call_auth_token_url
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM call_auth_token_url .

DATA: lv_send_url TYPE string.

* URL to get Access Token


* 'https://SAPYard.suitetalk.api.netsuite.com/services/rest/auth/oauth2/v1/token'
SELECT SINGLE low FROM tvarvc INTO lv_send_url
WHERE name = 'NETSUITE_GET_ACCESS_TOKEN_URL'
AND type = 'P'.

CALL METHOD cl_http_client=>create_by_url


EXPORTING
url = lv_send_url
IMPORTING
client = o_http_client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4.
ENDFORM.

*&---------------------------------------------------------------------*
*& Form set_body_with_code
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM set_body_with_code USING p_code.

DATA:
lv_cdata TYPE string,
lv_content_length_value TYPE i,
lv_client_id TYPE tvarv_val,
lv_client_secret TYPE tvarv_val.

CONCATENATE 'code=' p_code '&'


'redirect_uri=https://www.pulsesecure.net/callback' '&'
'grant_type=authorization_code'
INTO lv_cdata.

* Get data length


lv_content_length_value = strlen( lv_cdata ).

* Set Data
CALL METHOD o_http_client->request->if_http_entity~set_cdata
EXPORTING
data = lv_cdata
length = lv_content_length_value
offset = 0.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form SET_SEND_METHOD
*&---------------------------------------------------------------------*
* SEND Method
*----------------------------------------------------------------------*
FORM set_send_method .

CALL METHOD o_http_client->send


EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3
http_invalid_timeout = 4
OTHERS = 5.

ENDFORM. " SET_SEND_METHOD


*&---------------------------------------------------------------------*
*& Form CALL_RECEIVE_METHOD
*&---------------------------------------------------------------------*
* Receive Method
*----------------------------------------------------------------------*
FORM call_receive_method .

CALL METHOD o_http_client->receive


EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3
OTHERS = 5.

ENDFORM. " CALL_RECEIVE_METHOD


*&---------------------------------------------------------------------*
*& Form GET_RESPONSE_STATUS
*&---------------------------------------------------------------------*
* Get Response Status
*----------------------------------------------------------------------*
FORM get_response_status .

* Get Status
CLEAR: gv_http_status_code,
gv_http_status_text,
gs_response.

CALL METHOD o_http_client->response->get_status


IMPORTING
code = gv_http_status_code " HTTP status code
reason = gv_http_status_text. " HTTP status description

gs_response = o_http_client->response->get_cdata( ).
gs_raw_response = o_http_client->response->get_raw_message( ).

ENDFORM. " GET_RESPONSE_STATUS

*&---------------------------------------------------------------------*
*& Form READ_API_TOKEN_KEY
*&---------------------------------------------------------------------*
* Read the Token from the Response
*----------------------------------------------------------------------*
FORM read_api_token_key .

DATA:
lv_xml_result_str TYPE string,
lv_xml_result_xstr TYPE xstring.

* Write the data received back from the POST to the screen:
CLEAR lv_xml_result_str.
lv_xml_result_str = o_http_client->response->get_cdata( ).

sy-tmaxl = strlen( lv_xml_result_str ).

FIELD-SYMBOLS: <fs>.

ASSIGN lv_xml_result_str TO <fs>.

TYPES: BEGIN OF t_result,


str(9999),
END OF t_result.

DATA: itab_result TYPE TABLE OF t_result WITH HEADER LINE.


DATA: lgv_access_token_str_found TYPE boole_d,
lv_expire_str_found TYPE boole_d,
w_strlen TYPE i,
token_expire_seconds TYPE char10.

SPLIT lv_xml_result_str AT '"' INTO TABLE itab_result.


CLEAR: lgv_access_token_str_found,
lv_expire_str_found.

LOOP AT itab_result.
CASE itab_result-str.
WHEN 'access_token'.
lgv_access_token_str_found = abap_true.
WHEN 'expires_in'.
lv_expire_str_found = abap_true.
WHEN OTHERS.
IF lgv_access_token_str_found EQ abap_true AND gv_access_token IS INITIAL.
w_strlen = strlen( itab_result-str ).
IF w_strlen > 30.
gv_access_token = itab_result-str.
ENDIF.
ENDIF.

IF lv_expire_str_found EQ abap_true AND token_expire_seconds IS INITIAL AND


itab_result-str CS '0'.
REPLACE ':' WITH space INTO itab_result-str.
REPLACE '#' WITH space INTO itab_result-str.
REPLACE '}' WITH space INTO itab_result-str.
SHIFT itab_result-str BY 1 PLACES RIGHT CIRCULAR.
WHILE itab_result-str(1) EQ space.
SHIFT itab_result-str BY 1 PLACES RIGHT CIRCULAR.
ENDWHILE.
itab_result-str(1) = ' '.
SHIFT itab_result-str LEFT DELETING LEADING space.
token_expire_seconds = itab_result-str.
ENDIF.
ENDCASE.
ENDLOOP.
*******
WRITE:/ 'Access Token : ', gv_access_token.
SKIP 1.

ENDFORM. " READ_API_TOKEN_KEY

*&---------------------------------------------------------------------*
*& Form SET_HEADER_FIELD
*&---------------------------------------------------------------------*
* Set Header Field
*----------------------------------------------------------------------*
FORM set_header_field CHANGING p_name
p_value.

o_http_client->request->set_header_field(
name = p_name
value = p_value
).

ENDFORM. " SET_HEADER_FIELD


*&---------------------------------------------------------------------*
*& Form SET_POST_METHOD
*&---------------------------------------------------------------------*
* Set POST Method
*----------------------------------------------------------------------*
FORM set_post_method .
* Set up the HTTP Post to Salesforc's AUTH API URL
CALL METHOD o_http_client->request->set_method
EXPORTING
method = gc_post. " 'POST'.
ENDFORM. " SET_POST_METHOD
*&---------------------------------------------------------------------*
*& Form call_rest_api_send_url
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM call_rest_api_send_url .

DATA: lv_send_url TYPE string.

* URL to get Access Token


* 'https://SAPYard.suitetalk.api.netsuite.com/services/rest/record/v1/
customrecord_paer_inter_branch'
SELECT SINGLE low FROM tvarvc INTO lv_send_url
WHERE name = 'NETSUITE_POST_API_URL'
AND type = 'P'.

CALL METHOD cl_http_client=>create_by_url


EXPORTING
url = lv_send_url
IMPORTING
client = o_http_client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form authenticate_netsuite
*&---------------------------------------------------------------------*
*& Put Client Id & Secret
*&---------------------------------------------------------------------*
FORM authenticate_netsuite .

DATA: lv_client_id TYPE string,


lv_client_secret TYPE string.
* Get Client Id
SELECT SINGLE low FROM tvarvc INTO lv_client_id
WHERE name = 'NETSUITE_CLIENT_ID'
AND type = 'P'.

* Get Client Id
SELECT SINGLE low FROM tvarvc INTO lv_client_secret
WHERE name = 'NETSUITE_CLIENT_SECRET'
AND type = 'P'.

CALL METHOD o_http_client->authenticate


EXPORTING
username = lv_client_id "'daca9d57035718f99aa7316453'
password = lv_client_secret. " 'ceb6db752ab933833cf9e'.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form prepare_api_body
*&---------------------------------------------------------------------*
*& Prepare JSON Body
*&---------------------------------------------------------------------*
FORM prepare_api_body .

data: lv_json_c TYPE string.

* You will have to put your logic to get the data from SAP Tables and Serialize
ABAP Data to JSON.
* You may also need to remove and add some characters as per NetSuite Requirement.
* For Demo Purpose, we have hardcoded the JSON data.
lv_json_c = '{ "custrecord_paer_edi_type": "8500", "custrecord_paer_req_type":
"Sales Order Import", "custrecord_paer_rowstate": { "id":
"6" },"custrecord_paer_object":"{ \"name\": \"JS\", \"age\": 32, \"city\": \"New
York\" }" }'.

CALL METHOD o_http_client->request->set_cdata


EXPORTING
data = lv_json_c.
ENDFORM.

You might also like