04-13-2010 8:49 AM
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
04-13-2010 8:54 AM
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
04-13-2010 8:57 AM
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