Saturday, May 11, 2024

Creation of RESTful Webservice in SAP

 

What is REST ful web service?

It’s a named resource which can be accessed using the URL containing the ID (In our case Sales order number ) of the resource in distributed environment.


Step1: Create a handler class which is having the business logic to get the sales order details

           Go to se24 enter the class name



Step 2: Now we need to implement the interface IF_HTTP_EXTENSION



You can see the method HANDLE_REQUEST from the interface IF_HTTP_EXTENSION.We will use this method in future to implement business logic.



Step 3:Write below code in the HANDLE_REQUEST method




Source code:

method IF_HTTP_EXTENSION~HANDLE_REQUEST.

  data:lv_path type string,

       lv_data type string,

       lt_data type table of string.

  types:begin of ty_head,

        VBELN type vbak-VBELN,

        KUNNR type vbak-KUNNR,

        VKORG type vbak-VKORG,

        end of ty_head.

  data:ls_head type ty_head,

       lt_list type table of BAPIORDERS,

       ls_list type BAPIORDERS,

       XML_OUT type string.

* get the request attributes

  lv_path = server->REQUEST->get_header_field( name = ‘~PATH_INFO’ ).

  SHIFT lv_path LEFT BY 1 PLACES.

* Get the sales order details

  select single vbeln

                kunnr

                vkorg

           into ls_head

           from vbak

          where vbeln = lv_path.

* Convert the data to  XML format

  CALL TRANSFORMATION ID

               SOURCE TAB = ls_head

           RESULT XML XML_OUT

              OPTIONS XML_HEADER = ‘WITHOUT_ENCODING’.

* Set the converted data to Browser

  server->response->set_cdata( data = XML_OUT ).

endmethod.

Step4: Go to transaction SICF and click on Execute button



Step 5: Create a child node under the services hierarchy by right click on the node. I have created services in the following path

Default host->SAP->bc



Step 6: Enter the service name click to continue



Added service will be under the respective hierarchy as below



Step 7: Double click on the service zrest_service then below screen will appear



Step 8: Go to Handler list tab and give the handler name which we created earlier as ZCL_SALES_ORDER_HANDLER



Step 9: Save and activate the service as below



Step 10: Now test the service



Step 11:Give sales order number in URL and click F5



Note: To debug the web service you have to put external break point in the method HANDLE_REQUEST

Create Purchase Order Using Excel File Upload

 

report zpurchaseorder.

TYPE-POOLS: TRUXS.
*----DATA DECLARATION
TABLES: T001W, LFA1, EKKO, ekpo.
TYPES: BEGIN OF TY_EXCEL,
          MATNR 
TYPE EKPO-MATNR,    
          MENGE 
TYPE EKPO-MENGE,
*          MWSKZ TYPE ekpo-MWSKZ,
       
END OF TY_EXCEL.
DATA: IT_RAW TYPE TRUXS_T_TEXT_DATA.
DATA: LINE_NO TYPE I.
DATA: T_EXCEL TYPE STANDARD TABLE OF TY_EXCEL,
      W_EXCEL 
TYPE TY_EXCEL.
DATA: IT_RETURN2 LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE,
      
RETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE.
DATA: IT_BAPIMEPOITEM TYPE BAPIMEPOITEM OCCURS 0 WITH HEADER LINE,
      IT_BAPIMEPOITEMX 
TYPE BAPIMEPOITEMX OCCURS 0 WITH HEADER LINE,
      IT_POSERVICES 
TYPE BAPIESLLC OCCURS 0 WITH HEADER LINE.
DATA  DISPLAY_TEXT(100) TYPE C.
DATA: PO_NUMBER TYPE BAPIMEPOHEADER-PO_NUMBER.
TABLES: BAPIMEPOHEADER,
        BAPIMEPOHEADERX
.

DATA: IT_BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.

*----DATA DECLARATION FOR PO DATA DOWNLOAD
TYPES: BEGIN OF TY_EKKO_EKPO,
        EBELN 
TYPE EKKO-EBELN,
        LIFNR 
TYPE EKKO-LIFNR,
        AEDAT 
TYPE EKKO-AEDAT,
        MATNR 
TYPE EKPO-MATNR,
        MENGE 
TYPE EKPO-MENGE,
        EMLIF 
TYPE EKPO-EMLIF,
      
END OF TY_EKKO_EKPO,

      
BEGIN OF TY_FINAL,
        AUART 
TYPE VBAK-AUART,
        VKORG 
TYPE VBAK-VKORG,
        VTWEG 
TYPE VBAK-VTWEG,
        SPART 
TYPE VBAK-SPART,
        PODATE
(10)  TYPE C,
        SOLDP       
TYPE NAME2,
        SHIPP       
TYPE NAME2,
        EBELN       
TYPE EKKO-EBELN,
        QTY         
TYPE I,
        MATNR       
TYPE MATNR,
      
END OF TY_FINAL.
DATA: BEGIN OF T_DESC OCCURS 0,
       
HEADER(50) TYPE C,
      
END OF T_DESC,
      FILENAME 
TYPE STRING,
      SOLDP 
TYPE NAME2,
      SHIPP 
TYPE NAME2,
      T_EKKO_EKPO 
TYPE TY_EKKO_EKPO OCCURS 0 WITH HEADER LINE,
      T_FINAL 
TYPE TY_FINAL OCCURS 0 WITH HEADER LINE.


SELECTION-SCREEN BEGIN OF BLOCK DATABASE-SELECTION
          
WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: BSART FOR EKKO-BSART NO-EXTENSION NO INTERVALS OBLIGATORY MODIF ID s1,
                ekgrp 
for ekko-ekgrp No-EXTENSION no INTERVALS OBLIGATORY MODIF ID s1,
                VENDOR 
FOR LFA1-LIFNR NO-EXTENSION NO INTERVALS OBLIGATORY MODIF ID S1,
                PLANT  
FOR ekpo-werks NO-EXTENSION NO INTERVALS OBLIGATORY MODIF ID S1.

PARAMETERS P_FILE TYPE RLGRAP-FILENAME MODIF ID S1.
SELECTION-SCREEN END OF BLOCK DATABASE-SELECTION.


AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.

  
CALL FUNCTION 'F4_FILENAME'
    
EXPORTING
      FIELD_NAME 
= 'P_FILE'
    
IMPORTING
      FILE_NAME  
= P_FILE.

START-OF-SELECTION.


    
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
      
EXPORTING
        I_TAB_RAW_DATA       
= IT_RAW
        I_FILENAME           
= P_FILE
      
TABLES
        I_TAB_CONVERTED_DATA 
= T_EXCEL[]
      
EXCEPTIONS
        CONVERTION_FAILED    
= 1
        
OTHERS               = 0.

    
IF SY-SUBRC <> 0.
      
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
      
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    
ENDIF.
*----START OF SELECTION
    BAPIMEPOHEADER
-COMP_CODE = '1000'.
    BAPIMEPOHEADER
-DOC_TYPE = BSART-LOW.
    BAPIMEPOHEADER
-ITEM_INTVL = '10'.
    BAPIMEPOHEADER
-VENDOR = VENDOR-LOW.
    BAPIMEPOHEADER
-PURCH_ORG = '1010'.
    BAPIMEPOHEADER
-CREAT_DATE = SY-DATUM.
    BAPIMEPOHEADER
-DOC_DATE = SY-DATUM.
    BAPIMEPOHEADER
-PUR_GROUP = EKGRP-LOW.
*    BAPIMEPOHEADER-CURRENCY = 'BDT'.

    BAPIMEPOHEADERX
-COMP_CODE = 'X'.
    BAPIMEPOHEADERX
-DOC_TYPE = 'X'.
    BAPIMEPOHEADERX
-ITEM_INTVL = 'X'.
    BAPIMEPOHEADERX
-VENDOR = 'X'.
    BAPIMEPOHEADERX
-PURCH_ORG = 'X'.
    BAPIMEPOHEADERX
-CREAT_DATE = 'X'.
    BAPIMEPOHEADERX
-DOC_DATE = 'X'.
    BAPIMEPOHEADERX
-PUR_GROUP = 'X'.
*    BAPIMEPOHEADERX-CURRENCY = 'X'.

    
CLEAR: W_EXCEL.
    
LOOP AT T_EXCEL INTO W_EXCEL.
      LINE_NO 
= LINE_NO + 10.
      IT_BAPIMEPOITEM
-PO_ITEM = LINE_NO.

      
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        
EXPORTING
          
INPUT  = W_EXCEL-MATNR
        
IMPORTING
          
OUTPUT = W_EXCEL-MATNR(18).

*      IT_BAPIMEPOITEM-MATERIAL = W_EXCEL-MATNR.
      IT_BAPIMEPOITEM
-MATERIAL = W_EXCEL-MATNR.
      IT_BAPIMEPOITEM
-PLANT = plant-low.
      IT_BAPIMEPOITEM
-QUANTITY = W_EXCEL-MENGE.
*      IT_BAPIMEPOITEM-SUPP_VENDOR = PLANT-LOW.
*      IT_BAPIMEPOITEM-TAX_CODE = W_EXCEL-MWSKZ.

      IT_BAPIMEPOITEMX
-PO_ITEM = LINE_NO.
      IT_BAPIMEPOITEMX
-MATERIAL = 'X'.
      IT_BAPIMEPOITEMX
-PLANT = 'X'.
      IT_BAPIMEPOITEMX
-QUANTITY = 'X'.
*      IT_BAPIMEPOITEMX-SUPP_VENDOR = 'X'.
*      IT_BAPIMEPOITEMX-TAX_CODE = 'X'.

      
APPEND IT_BAPIMEPOITEM TO IT_BAPIMEPOITEM.
      
APPEND IT_BAPIMEPOITEMX TO IT_BAPIMEPOITEMX.
      
CLEAR: IT_BAPIMEPOITEM, IT_BAPIMEPOITEMX, IT_POSERVICES, W_EXCEL.
    
ENDLOOP.

    
CLEAR PO_NUMBER.
    
CALL FUNCTION 'BAPI_PO_CREATE1'
      
EXPORTING
        POHEADER         
= BAPIMEPOHEADER
        POHEADERX        
= BAPIMEPOHEADERX
      
IMPORTING
        EXPPURCHASEORDER 
= PO_NUMBER
      
TABLES
        
RETURN           = IT_RETURN2
        POITEM           
= IT_BAPIMEPOITEM
        POITEMX          
= IT_BAPIMEPOITEMX.

    
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      
EXPORTING
        
WAIT   = 'X'
      
IMPORTING
        
RETURN = RETURN.

    
IF PO_NUMBER IS NOT INITIAL.
      
CONCATENATE 'Purchase Order:' PO_NUMBER 'Created!!' 

INTO DISPLAY_TEXT SEPARATED BY SPACE.
      
MESSAGE DISPLAY_TEXT TYPE 'S' .
    
ENDIF.
    
CLEAR: PO_NUMBER, DISPLAY_TEXT, BAPIMEPOHEADER, BAPIMEPOHEADERX.
    
REFRESH: IT_RETURN2[], IT_BAPIMEPOITEM[], IT_BAPIMEPOITEMX[].