Gateway的OData不可以直接自定义参数传入,filter可以侧面的解决这个问题,后端的开发也比较简单,它只能用的GET_ENTITYSET中,如下例:
/sap/opu/odata/sap/ZGRC_ROLES_SRV/ZROLESet?$filter= XT eq 'ECTCLNT800' and GS eq '10000001' and MK eq 'FI'
在EntitySet后加’?$filter=’,然后接要传入的filter条件,这时个可以看下图,这个data model的getentity方法中有两个参数IV_FILTER_STRING和IT_FILTER_SELECT_OPTIONS可以捕获到传入的值,可以根据需要使用。


如果输入有'就需要转义,比如要传入 ECTCLNT800's server,就需要写成XT eq 'ECTCLNT800''s server'
需要注意的一点是,如果同一个参数要传入多个值,比如这里要传入GS eq ‘10000001’,GS eq ‘10000002’,GS eq ‘10000003’,简单的这样写$filter= XT eq 'ECTCLNT800' and GS eq '10000001' or GS eq '10000002' or GS eq '10000003' and MK eq 'FI'时IT_FILTER_SELECT_OPTIONS参数是没有值的。用or时只能有一个filter参数,多个参数时不要这样用
虽然IV_FILTER_STRING有值,使用起来也很难受。
那同一个参数传入多个值怎么办?
我的测试是这样的,虽然SAP的Gateway Client不能这样用,但实际在前端的使用中是不受影响的。参照下面的写法,是可以正常传入的。
GET_ENTITYSET中的写法,可以用IT_FILTER_SELECT_OPTIONS也可以用方法来取,一样的:
下面放一个实际的代码例子:
filter的operator可以参考下图:
除了这些operator之外,还可以直接用一些函数来转义:
我没有一一测试,大多是可以用的,像startswith这种还是很好用的,它在后端自动会转变为CP,如and startswith(MK,'FI')
$select
$select可以指定要返回的字段,这个参数不需要在后端指定
这里就返回了指定的ROLE和Funarea两个字段
参考
http://www.odata.org/documentation/odata-version-2-0/uri-conventions/