我正在为客户实施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
所以我知道从表中选择正确的处理程序。
答案 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 }))
}