Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Need explanation of the following code

Former Member
0 Kudos

HI All,

I need your help on explanation of the following code :

what I don't understand is how it route the request (all the benefit of the replace statement )

If the input is /scarr/LH/SPFLI/402

how he know to route it and

what is the benefit for using the wild card and the concatenate CONCATENATE '^' lv_verif_pattern '$'

Edited by: James Herb on Apr 13, 2010 9:53 AM

Edited by: James Herb on Apr 13, 2010 9:53 AM

2 REPLIES 2

Former Member
0 Kudos
DATA: lt_routing_tab TYPE z_resource_routing_tab,
      
  CONSTANTS: param_wildcard TYPE string VALUE '([^/])*'.

  FIELD-SYMBOLS: <ls_routing> LIKE LINE OF lt_routing_tab.

  CALL METHOD get_routing
    RECEIVING
      rt_routing_tab = lt_routing_tab.

  LOOP AT lt_routing_tab ASSIGNING <ls_routing>.
*   replace all parameters placeholders by regex
    lv_verif_pattern = <ls_routing>-url_info.
    lv_signature = <ls_routing>-url_info.
    REPLACE ALL OCCURRENCES OF REGEX '\{([A-Z]*[_]*[a-z]*[0-9]*)*\}'
    IN lv_verif_pattern WITH param_wildcard.

    CONCATENATE '^' lv_verif_pattern '$'  INTO lv_verif_pattern.

*   check if pattern matches current entry
    FIND ALL OCCURRENCES OF REGEX lv_verif_pattern
    IN url_info MATCH COUNT lv_count.

*   pattern matched
    IF lv_count > 0.
*     get controller class name
      lv_controller_name = <ls_routing>-handler_class.
      ls_class-clsname = lv_controller_name.
*     check if class exists
 
*     class found
      IF sy-subrc = 0.
*       create controller
        CREATE OBJECT eo_controller TYPE (lv_controller_name).
*       create parameter table
        SHIFT lv_verif_pattern RIGHT DELETING TRAILING '$'.
        SHIFT lv_verif_pattern LEFT DELETING LEADING ' ^'.

        SPLIT lv_verif_pattern AT param_wildcard INTO TABLE lt_url_parts.
        lv_url_info = url_info.

        LOOP AT lt_url_parts INTO lv_url_part.
          SHIFT lv_signature LEFT DELETING LEADING lv_url_part.
          SHIFT lv_signature LEFT DELETING LEADING '{'.
          SHIFT lv_url_info LEFT DELETING LEADING lv_url_part.



Edited by: James Herb on Apr 13, 2010 9:56 AM

Former Member
0 Kudos

the get routing is

DATA ls_routing LIKE LINE OF rt_routing_tab.

  ls_routing-clnt = sy-mandt.
  ls_routing-guid = '123'.
  ls_routing-url_info = '/scarr/{PARAM_CARR_ID}'.
  ls_routing-handler_class = 'ZCL_RESOURCE_SCARR'.
  APPEND ls_routing TO rt_routing_tab.

  ls_routing-clnt = sy-mandt.
  ls_routing-guid = '456'.
  ls_routing-url_info = '/scarr/{PARAM_CARR_ID}/spfli/{PARAM_CONNID}'.
  ls_routing-handler_class = 'ZCL_RESOURCE_SPFLI'.
  APPEND ls_routing TO rt_routing_tab.

i take this code from the following link

/people/community.user/blog/2009/06/09/restful-webservices-in-abap-using-a-generic-controller

Regards

James

Edited by: James Herb on Apr 13, 2010 2:43 PM