API Consumption - JSON Format
API Consumption - JSON Format
FUNCTION zewb_gen_udpate_mode.
*"----------------------------------------------------------------------
*"*"Update Function Module:
*"
*"*"Local Interface:
*" TABLES
*" GT_VBRP STRUCTURE VBRP
*" GT_VBRK STRUCTURE VBRK
*" GT_KOMV STRUCTURE KONV
*"----------------------------------------------------------------------
**********************************************************************
* Preparing Invoice Data.
LOOP AT gt_header INTO gs_header.
it_inv-supplytype = 'O'.
it_inv-subsupplytype = '1'.
it_inv-doctype = gs_header-zdoctyp. "'INV'.
it_inv-docno = gs_header-vbeln.
CONDENSE it_inv-totalvalue.
it_inv-cgstvalue = gs_header-cgstval.
CONDENSE it_inv-cgstvalue.
it_inv-sgstvalue = gs_header-sgstval.
CONDENSE it_inv-sgstvalue.
it_inv-igstvalue = gs_header-igstval.
CONDENSE it_inv-igstvalue.
it_inv-cessvalue = gs_header-cessval.
CONDENSE it_inv-cessvalue.
it_inv-totinvvalue = gs_header-totval. "Net + Tax "gs_header-
totnetval." Net Value "'435678'.
CONDENSE it_inv-totinvvalue.
it_inv-transporterid = ''.
it_inv-transportername = gs_header-ztransname.
it_inv-transdocno = gs_header-ztransdoc.
it_inv-transmode = gs_header-transmode. "'1'.
it_inv-transdistance = gs_header-ztransdist. "'25'. "
CONCATENATE gs_header-ztransdt+6(2) gs_header-ztransdt+4(2) gs_header-
ztransdt+0(4) INTO it_inv-transdocdate SEPARATED BY '/'.
* it_inv-transdocdate = gs_header-ztransdt.
IF token IS INITIAL.
IF token_message IS NOT INITIAL.
gs_log-message = token_message.
ELSE.
gs_log-message = 'Token not Valid'.
ENDIF.
gs_log-status = 'F'.
MODIFY zewb_log FROM gs_log.
EXIT.
ENDIF.
CLEAR: lv_json_char.
CALL FUNCTION 'ZEWB_INV_TO_JSON'
EXPORTING
it_inv = it_inv
IMPORTING
json_out = lv_json_char.
IF lv_json_char IS INITIAL.
gs_log-message = 'JSON Conversion failed'.
gs_log-status = 'F'.
MODIFY zewb_log FROM gs_log.
EXIT.
ENDIF.
* gs_log-JSON = lv_json_char.
lv_fgstin = it_inv-fromgstin.
CALL FUNCTION 'ZEWB_GEN_FROM_JSON'
EXPORTING
json_in = lv_json_char
vbeln = gs_vbrk-vbeln
token = token
f_gstin = lv_fgstin
IMPORTING
response = lv_response
requestid = requestid.
it_alv-docno = gs_vbrk-vbeln.
***************************************************************************
*********************************
************************************************Json to Itab***************
*********************************
***************************************************************************
*********************************
json_out = lv_response.
DATA: res_len(10) TYPE n.
res_len = strlen( lv_response ).
gs_req-requestid = requestid.
gs_req-apitype = 'GEN'.
* gs_req-json = lv_json_char.
* gs_req-response = lv_response.
IF res_len GT 1000.
gs_req-response = lv_response+0(1000).
ELSE.
gs_req-response = lv_response.
ENDIF.
gs_req-cdate = sy-datum.
gs_req-ctime = sy-uzeit.
MODIFY zewb_req FROM gs_req.
IF json_out+0(1) = '{'.
* gs_log-RESPONSE = lv_response.
CLEAR: it_result.
cl_fdt_json=>json_to_data( EXPORTING iv_json = json_out
CHANGING ca_data = it_result ).
IF it_result-success IS NOT INITIAL. "No error for Authorizations.
IF it_result-success = 'true'.
it_alv-status = 'Success'.
ELSE.
it_alv-status = 'Failed'.
ENDIF.
it_alv-ewbno = it_result-result-ewaybillno.
it_alv-ewbdt = it_result-result-ewaybilldate.
it_alv-validfrom = it_result-result-ewaybilldate.
it_alv-validto = it_result-result-validupto.
it_alv-message = it_result-message.
REFRESH:gt_header1[].
gt_header1 = gt_header[].
* DELETE gt_header1 WHERE vbeln NE it_alv-docno. "Addition.
CLEAR:gs_header1.
READ TABLE gt_header1 INTO gs_header1 WITH KEY vbeln = it_alv-
docno.
IF sy-subrc EQ 0.
gs_header1-ewbno = it_alv-ewbno.
*it_alv-ewbdt = '12/06/2018 12:57:00 PM'. "Actual Format.
CONCATENATE it_alv-ewbdt+6(4) it_alv-ewbdt+3(2) it_alv-
ewbdt+0(2) INTO gs_header1-ewbdt.
gs_header1-validfrom = it_alv-validfrom.
gs_header1-validto = it_alv-validto.
IF it_alv-status = 'Success'.
gs_header1-status = 'S'.
ELSE.
gs_header1-status = 'F'.
ENDIF.
gs_header1-message = it_alv-message.
* gs_header1-bukrs = it_alv-bukrs.
gs_header1-ewbby = sy-uname.
* SELECT SINGLE ewbno FROM zewb_inv INTO lv_ewbno WHERE vbeln = it
_alv-docno.
* IF sy-subrc = 0.
* gs_header1-ewbtype = 'REGEN'.
* ELSE.
gs_header1-ewbtype = 'NEW'.
* ENDIF.
gs_header1-requestid = requestid.
MODIFY zewb_inv FROM gs_header1.
* UPDATE zewb_inv FROM gs_header1.
ENDIF.
*Item
REFRESH:gt_item1[].
gt_item1 = gt_item[].
DELETE gt_item1 WHERE vbeln NE it_alv-docno.
CLEAR:gs_item1.
READ TABLE gt_item1 INTO gs_item1 WITH KEY vbeln = it_alv-docno.
IF sy-subrc EQ 0.
gs_item1-ewbno = it_alv-ewbno.
MODIFY zewb_invitem FROM gs_item1.
ENDIF.
***************************************************************************
*****************************************************************
* Update zewb_log.
gs_log-cdate = sy-datum.
gs_log-ctime = sy-uzeit.
gs_log-vbeln = it_alv-docno.
gs_log-tcode = sy-tcode.
gs_log-message = it_alv-message.
gs_log-status = 'S'.
gs_log-ewbno = it_result-result-ewaybillno.
gs_log-ewbdt = gs_header1-ewbdt.
gs_log-ewbtm = gs_header1-ewbtm.
IF res_len GT 1000.
gs_log-response = lv_response+0(1000).
ELSE.
gs_log-response = lv_response.
ENDIF.
* gs_log-json = lv_json_char.
MODIFY zewb_log FROM gs_log.
CLEAR: gs_log.
* gs_log-MESSAGE = it_result-MESSAGE.
***************************************************************************
*****************************************************************
ELSE.
***************************************************************************
*****************************************************************
* Update zewb_log.
gs_log-cdate = sy-datum.
gs_log-ctime = sy-uzeit.
gs_log-vbeln = it_alv-docno.
gs_log-tcode = sy-tcode.
gs_log-message = it_alv-message.
gs_log-status = 'F'.
* gs_log-ewbno = it_result-result-ewaybillno.
* gs_log-ewbdt = gs_header1-ewbdt.
* gs_log-ewbtm = gs_header1-ewbtm.
IF res_len GT 1000.
gs_log-response = lv_response+0(1000).
ELSE.
gs_log-response = lv_response.
ENDIF.
* gs_log-json = lv_json_char.
MODIFY zewb_log FROM gs_log.
CLEAR: gs_log.
* gs_log-MESSAGE = it_result-MESSAGE.
***************************************************************************
*****************************************************************
ENDIF.
ELSE.
CLEAR: it_error.
cl_fdt_json=>json_to_data( EXPORTING iv_json = json_out
CHANGING ca_data = it_error ).
* error_description
CONCATENATE it_error-error ':' it_error-error_description INTO it_
alv-message.
* it_alv-message = it_result-message.
***************************************************************************
*****************************************************************
* Update zewb_log.
gs_log-cdate = sy-datum.
gs_log-ctime = sy-uzeit.
gs_log-vbeln = it_alv-docno.
gs_log-tcode = sy-tcode.
gs_log-message = it_alv-message.
gs_log-status = 'F'.
* gs_log-ewbno = it_result-result-ewaybillno.
* gs_log-ewbdt = gs_header1-ewbdt.
* gs_log-ewbtm = gs_header1-ewbtm.
IF res_len GT 1000.
gs_log-response = lv_response+0(1000).
ELSE.
gs_log-response = lv_response.
ENDIF.
* gs_log-json = lv_json_char.
MODIFY zewb_log FROM gs_log.
CLEAR: gs_log.
* gs_log-MESSAGE = it_result-MESSAGE.
***************************************************************************
*****************************************************************
*End of Coding as per program
***************************************************************************
*****************************************************************
**********************************************************************
ENDIF.
ELSE.
* Update zewb_log.
gs_log-cdate = sy-datum.
gs_log-ctime = sy-uzeit.
gs_log-vbeln = it_alv-docno.
gs_log-tcode = sy-tcode.
gs_log-message = 'Response not in JSON format.'.
gs_log-status = 'F'.
* gs_log-ewbno = it_result-result-ewaybillno.
* gs_log-ewbdt = gs_header1-ewbdt.
* gs_log-ewbtm = gs_header1-ewbtm.
IF res_len GT 1000.
gs_log-response = lv_response+0(1000).
ELSE.
gs_log-response = lv_response.
ENDIF.
* gs_log-json = lv_json_char.
MODIFY zewb_log FROM gs_log.
CLEAR: gs_log.
ENDIF.
CLEAR: it_inv.
REFRESH: it_inv-itemlist.
REFRESH: itemlist.
CLEAR: itemlist.
ENDLOOP.
* ENDIF.
* ENDIF.
ENDFUNCTION.
ZEWB_GEN_FROM_JSON
FUNCTION zewb_gen_from_json.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(JSON_IN) TYPE TBX_STRING
*" REFERENCE(VBELN) TYPE VBRK-VBELN
*" REFERENCE(TOKEN) TYPE TBX_STRING
*" REFERENCE(F_GSTIN) TYPE ZZFGSTIN
*" EXPORTING
*" REFERENCE(RESPONSE) TYPE TBX_STRING
*" REFERENCE(REQUESTID) TYPE CHAR100
*"----------------------------------------------------------------------
lv_payload = json_in.
CLEAR: lv_url.
SELECT SINGLE url FROM zewb_url INTO lv_url WHERE apitype = 'GEN' AND sys
id = sy-sysid.
IF sy-subrc <> 0.
* MESSAGE 'URL not maintained in ZEWB_URL.' TYPE 'E'.
EXIT.
ENDIF.
CLEAR: lo_http_client.
cl_http_client=>create_by_url(
EXPORTING
url = lv_url
IMPORTING
client = lo_http_client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4 ).
IF sy-subrc <> 0.
RETURN.
ENDIF.
IF sy-sysid = 'OCP'.
gstin = f_gstin.
uname = lv_uname.
password = lv_password.
lo_http_client->request->set_method( 'POST' ).
lo_http_client->request->set_content_type( 'application/json' ).
lo_http_client->request->set_data( lv_payload_x ).
IF sy-subrc <> 0.
ENDIF.
SKIP.
response = lo_http_client->response->get_cdata( ).
ENDFUNCTION.
ZEWB_GET_INV_DETAILS
FUNCTION zewb_get_inv_details.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" TABLES
*" GT_VBRP STRUCTURE VBRP
*" GT_VBRK STRUCTURE VBRK
*" GT_KOMV STRUCTURE KONV
*" GT_HEADER STRUCTURE ZEWB_INV
*" GT_ITEM STRUCTURE ZEWB_INVITEM
*"----------------------------------------------------------------------
TYPES:BEGIN OF ty_vbpa,
vbeln TYPE vbeln_va,
kunnr TYPE kunnr,
adrnr TYPE adrnr,
xcpdk TYPE xcpdk,
END OF ty_vbpa.
CLEAR: gs_item,
lv_kstbm,
lv_knumh,
lv_var,
lv_temp,
count(2),
gs_vbpa,
gs_adrc,
gs_t001w,
gs_vbrk,
gs_header,
gs_vbfa,
gs_komv,
gs_vttk,
gs_vbrp,
lv_vsart,
lv_depot,
lv_factory.
REFRESH: gt_vttk,
gt_vttp,
gt_vbfa,
gt_return,
it_ewb,
it_eitem,
gt_header[],
gt_item[].
*---Read Item
READ TABLE gt_vbrp INTO gs_vbrp INDEX 1.
IF gs_vbrp-werks = '1000' OR
gs_vbrp-werks = '2000' OR
gs_vbrp-werks = '3000'.
lv_factory = 'X'.
ELSE.
lv_depot = 'X'.
ENDIF.
SELECT vbelv
posnv
vbeln
posnn
vbtyp_n
vbtyp_v
FROM vbfa
INTO TABLE gt_vbfa
FOR ALL ENTRIES IN gt_vbrp
WHERE vbelv = gt_vbrp-vgbel
AND vbtyp_n = c_8
AND vbtyp_v = c_j.
IF sy-subrc EQ 0.
IF gt_vbfa[] IS NOT INITIAL.
SELECT * FROM vttk
INTO TABLE gt_vttk
FOR ALL ENTRIES IN gt_vbfa
WHERE tknum = gt_vbfa-vbeln.
ENDIF.
ENDIF.
CLEAR:gs_vbrp.
REFRESH:gt_header[].
LOOP AT gt_vbrk INTO gs_vbrk.
gs_header-vbeln = gs_vbrk-vbeln.
gs_header-bukrs = gs_vbrk-bukrs.
gs_header-fkdat = gs_vbrk-fkdat.
REFRESH: gt_return.
CLEAR: count.
LOOP AT gt_vbrp INTO gs_vbrp. " WHERE vbeln = gs_vbrk-vbeln.
gs_header-werks = gs_vbrp-werks.
SELECT SINGLE vsart FROM likp
INTO lv_vsart
WHERE vbeln = gs_vbrp-vgbel.
IF sy-subrc EQ 0.
IF sy-tcode = 'VF01'.
IF lv_vsart = '03'. "Rail not to be included in VF01.
CLEAR: gs_return.
gs_return-type = 'E'.
gs_return-message = 'Rail mode not allowed.'.
count = count + 1.
gs_return-slno = count.
CLEAR:gs_vbpa.
SELECT SINGLE
vbeln
kunnr
adrnr
xcpdk
FROM vbpa INTO gs_vbpa
WHERE vbeln = gs_vbrp-vgbel
AND parvw = 'WE'. "Ship to Party.
IF sy-subrc EQ 0.
IF gs_vbpa-adrnr IS NOT INITIAL.
SELECT SINGLE * FROM adrc
INTO gs_adrc
WHERE addrnumber = gs_vbpa-adrnr.
IF sy-subrc EQ 0.
gs_header-t_name = gs_adrc-name1.
IF gs_vbrk-kunag NE gs_vbpa-kunnr. "Sold to and Ship to di
fferent
gs_header-t_str_suppl1 = gs_adrc-name1.
gs_header-t_str_suppl2 = gs_adrc-str_suppl1.
ELSE.
gs_header-t_str_suppl1 = gs_adrc-str_suppl1.
gs_header-t_str_suppl2 = gs_adrc-str_suppl2.
ENDIF.
gs_header-t_pstlz = gs_adrc-post_code1.
* Destination from Invoice Item.
SELECT SINGLE bezei
FROM tmfgt
INTO gs_header-t_ort01
WHERE mfrgr = gs_vbrp-mfrgr.
SELECT SINGLE
stcd3
name1
FROM kna1
INTO (gs_header-t_gstin,gs_header-t_name)
WHERE kunnr = gs_vbrk-kunag.
IF sy-subrc <> 0.
CLEAR: gs_return.
gs_return-type = 'E'.
gs_return-message = 'To GSTIN not maintained'.
count = count + 1.
gs_return-slno = count.
APPEND gs_return TO gt_return.
ENDIF.
ENDIF.
SELECT SINGLE
gstin
FROM j_1bbranch
INTO gs_header-f_gstin
WHERE branch = gs_vbrk-bupla.
IF sy-subrc EQ 0.
SELECT SINGLE *
FROM t001w
INTO gs_t001w
WHERE werks = gs_vbrp-werks.
IF gs_t001w-pstlz IS INITIAL.
CLEAR: gs_return.
gs_return-type = 'E'.
gs_return-message = 'Postal Code not Maintained for Source Pl
ant'.
count = count + 1.
gs_return-slno = count.
ELSE.
gs_header-f_name1 = gs_t001w-name1.
gs_header-f_adline1 = gs_t001w-stras.
gs_header-f_ort01 = gs_t001w-ort01.
gs_header-f_pstlz = gs_t001w-pstlz.
SELECT SINGLE gov_reg_code FROM zsd_state_gov
INTO gs_header-f_regio
WHERE sap_reg_code = gs_t001w-regio.
* gs_header-fregio = gs_t001w-regio.
ENDIF.
ELSE.
CLEAR: gs_return.
gs_return-type = 'E'.
CONCATENATE 'From GSTIN missed for Bus. Place:' gs_vbrk-bupla I
NTO gs_return-message.
* gs_return-MESSAGE = 'PL'.
count = count + 1.
gs_return-slno = count.
* Item details
gs_item-vbeln = gs_vbrk-vbeln.
gs_item-posnr = gs_vbrp-posnr.
gs_item-matnr = gs_vbrp-matnr.
gs_item-arktx = gs_vbrp-arktx.
gs_item-fkimg = gs_vbrp-fkimg.
gs_item-vrkme = gs_vbrp-vrkme.
gs_item-totval = gs_vbrp-netwr.
LOOP AT gt_komv INTO gs_komv.
CASE gs_komv-kschl.
WHEN c_jocg.
gs_item-cgst = gs_komv-kbetr / 10.
gs_header-cgstval = gs_komv-kwert.
WHEN c_josg.
gs_item-sgst = gs_komv-kbetr / 10.
gs_header-sgstval = gs_komv-kwert.
WHEN c_joig.
gs_item-igst = gs_komv-kbetr / 10.
gs_header-igstval = gs_komv-kwert.
ENDCASE.
CLEAR:gs_komv.
ENDLOOP.
ENDIF.
gs_header-totnetval = gs_vbrk-netwr.
gs_header-totval = gs_vbrk-netwr + gs_vbrk-mwsbk.
APPEND gs_item TO gt_item.
CLEAR: gs_item, gs_vttk.
READ TABLE gt_vbfa INTO gs_vbfa WITH KEY vbelv = gs_vbrp-vgbel.
IF sy-subrc EQ 0.
READ TABLE gt_vttk INTO gs_vttk WITH KEY tknum = gs_vbfa-vbeln.
IF sy-subrc EQ 0.
SELECT SINGLE name1
FROM lfa1
INTO gs_header-ztransname
WHERE lifnr = gs_vttk-tdlnr.
IF sy-subrc EQ 0.
gs_header-signi = gs_vttk-signi.
ENDIF.
IF lv_factory = 'X'.
SELECT SINGLE lrno FROM zsdtinout INTO gs_header-ztransdoc
WHERE sno = gs_vttk-tndr_trkid.
ELSE.
gs_header-ztransdoc = gs_vttk-text4.
CONDENSE gs_header-ztransdoc NO-GAPS.
ENDIF.
ENDIF.
ENDIF.
ELSE.
CLEAR: gs_return.
gs_return-type = 'E'.
gs_return-message = 'Transport Mode is not feasible'.
count = count + 1.
gs_return-slno = count.
gs_header-zsupplytyp = 'O'.
gs_header-zsubsupptyp = '01'.
gs_header-ztransdt = gs_vbrk-fkdat.
*Distance.
DATA: distance(10).
READ TABLE gt_vbrp INTO gs_vbrp INDEX 1.
CALL FUNCTION 'ZEWB_GET_TRANS_DIST'
EXPORTING
ls_vbrk = gs_vbrk
ls_vbrp = gs_vbrp
IMPORTING
e_kstbm = distance.
CONDENSE distance.
gs_header-ztransdist = distance.
IF gs_header-transmode = '1'.
IF gs_header-signi IS INITIAL.
CLEAR: gs_return.
gs_return-type = 'E'.
gs_return-message = 'Vehicle No. Missing.'.
count = count + 1.
gs_return-slno = count.
APPEND gs_return TO gt_return.
ENDIF.
ENDIF.
IF gs_header-f_regio = gs_header-t_regio.
gs_header-ttype = 'INTRA'.
IF gs_vbrk-vtweg <> '30'. "SEZ Case.
IF gs_header-igstval NE 0.
CLEAR: gs_return.
gs_return-type = 'E'.
gs_return-message = 'Invalid Tax Rate for Intra State Transaction
'.
count = count + 1.
gs_return-slno = count.
IF gs_header-ztransdist = 0.
CLEAR: gs_return.
gs_return-type = 'E'.
gs_return-message = 'Transport Distance missing'.
count = count + 1.
gs_return-slno = count.
ENDFUNCTION.
ZEWB_GET_TOKEN
FUNCTION zewb_get_token.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" EXPORTING
*" REFERENCE(TOKEN) TYPE TBX_STRING
*" REFERENCE(MESSAGE) TYPE CHAR100
*"----------------------------------------------------------------------
FUNCTION ZEWB_INV_TO_JSON.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(IT_INV) TYPE ZEWB_STR_INV
*" EXPORTING
*" REFERENCE(JSON_OUT) TYPE TBX_STRING
*"----------------------------------------------------------------------
lv_json_in = lo_writer->get_output( ).
JSON_OUT = JSON_OUT+10(len).
ENDFUNCTION.
ZSD_SMS2
FUNCTION ZSD_SMS2.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(MOBILE) TYPE AD_TLNMBR1
*" TABLES
*" GIT_SMS STRUCTURE SOLISTI1
*"----------------------------------------------------------------------
"CLEAR: gfl_sms.
"lv_text = input.
"CONCATENATE 'Text:' lv_text into gfl_sms SEPARATED BY space.
"APPEND gfl_sms TO git_sms.CLEAR: gfl_sms.
"CLEAR: gfl_sms.
doc_data-doc_size = 1.
doc_data-obj_langu = sy-langu.
doc_data-obj_name = 'SMS'.
******************
CLEAR git_pack_list.
REFRESH git_pack_list.
git_pack_list-transf_bin = space.
git_pack_list-head_start = 1.
git_pack_list-head_num = 1.
git_pack_list-body_start = 1.
DESCRIBE TABLE git_sms LINES git_pack_list-body_num.
git_pack_list-doc_type = 'RAW'.
APPEND git_pack_list.
******************
"mobile = '9177692333'.
CONCATENATE '0000 SMS 0091' mobile INTO git_recive-receiver.
git_recive-rec_type = 'K'.
git_recive-com_type = 'PAG'.
git_recive-notif_del = ''.
git_recive-notif_ndel = ''.
git_recive-express = 'X'.
APPEND git_recive.
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = doc_data
put_in_outbox = 'X'
commit_work = 'X'
TABLES
packing_list = git_pack_list
contents_txt = git_sms
receivers = git_recive
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
OTHERS = 8.
*ENDIF.
ENDFUNCTION.