如何匹配ABAP选择查询中的模式?

时间:2017-04-12 00:09:18

标签: regex abap

我正在为客户实施ReSTful SICF服务。 SICF服务有一个处理程序(实现IF_HTTP_EXTENSION~HANDLE_REQUEST),这会调用更多的API处理类。 API处理类是针对传入路径存储的,如此

DDIC Table: ZAPI_HNLDRS
    /animals/:id           | ZCL_HANDLE_ANIMALS
    /animals/:id/tiger/:id | ZCL_HANDLE_TIGER

调用API时,/animals/:id/tiger/:id看起来像/animals/4545152/tiger/1423331

如何调用ZAPI_HNDLRS以获取ZCL_HANDLE_TIGER?

当然,这不会有帮助,

select single HANDLING_CLASS from ZAPI_HNDLRS
  into <wa> where uri = '/animals/4545152/tiger/1423331'

我相信我必须以某种形式使用REGEX - 我不确定如何。如何匹配ABAP选择查询中的模式?

更新

我有一个存储API处理程序的表的原因是因为我希望整个过程是动态的。

我们可以在一段时间内添加更新的网址,这可能看起来像这样。

感谢您使用SPLIT的答案 但这仍然不是完全动态的。未来可能会出现多个新网址。 E.g。

/animals/:id/tiger/:id/claws
/animals/:id/tiger/:id/claws/:id
:id - is an unique id

出现这种情况时,表ZAPI_HNDLRS中会有新的处理程序条目。

因此,我需要一个通用逻辑来转换任何传入的资源路径。让我们说:/animals/1234243242423/tiger/32423443344/claws它存储的模式/animals/:id/tiger/:id/claws 所以我知道从表中选择正确的处理程序。

3 个答案:

答案 0 :(得分:2)

如果你真的想使用REGEX,你可能正在寻找这个

REPLACE ALL OCCURRENCES OF REGEX '/\d+/' IN lv_input WITH '/:id/'

对于Regex,请参阅SAP Help:

https://help.sap.com/http.svc/rc/abapdocu_740_index_htm/7.40/en-US/abenregex_syntax_specials.htm

答案 1 :(得分:1)

您可以使用正则表达式来分割URI,但在这种情况下,它似乎位于顶部,因为简单的SPLIT就足够了。将URI拆分为不同的部分后,您可以将其重新组合在一起,并使用':id'字符串替换实际的ID。如果需要,您还可以在ID部件上添加一些检查。

答案 2 :(得分:1)

我认为在一行代码中执行此操作非常困难。 这是一个供您参考的演示:

handleFormSubmitted() {
  this.setState({ isSaving: true })
  yourFetchCall({ formData: this.props.formData })
    .then(payload => this.props.dispatchFormSaved(payload))
    .catch(error => this.props.dispatchSavingFormErrored(error))
    .finally(() => this.setState({ isSaving: false }))
}