我已经用SAP SDK 3.29.1在java中创建了一个CAP VDM。在事件处理程序@On read中,我想将输入过滤器传递给VDM。
Es。
@On(event = CdsService.EVENT_READ, entity = "XXXX")
public void readXXX(CdsReadEventContext context) throws ODataException {
final String filter = context.getParameterInfo().getQueryParameter("$filter");
final List<XXXXX> dati = new DefaultXXXService().getAllXXXX().select().withQueryParameter("$filter", filter).executeRequest(dest);
}
当在日志中运行查询时,我得到错误:"无法为请求路径为的OData请求构造URI"索引95处的查询中存在非法字符">
但是路径和过滤器适合通话,你能帮我吗?
在旧版本的sdk我使用:
FilterExpression filtriFrontEnd =FilterExpressionConverter.convertTo(queryRequest.getQueryExpression());
final List<XXXX> area = new DefaultXXXXService().getAllXXX().filter(new UncheckedFilterExpression<>(filtriFrontEnd)).select().execute(new ErpConfigContext("XXX"));
谢谢。
当在日志中运行查询时,我得到错误:"无法为请求路径为的OData请求构造URI"quot;索引95处的查询中存在非法字符">
你能检查一下以下内容是否适合你吗。。?
import com.sap.cloud.sdk.datamodel.odata.client.request.ODataUriFactory;
final String filter = context.getParameterInfo().getQueryParameter("$filter");
final String encodedFilter = ODataUriFactory.encodeQuery(filter);
final List<XXXXX> dati = new DefaultXXXService().getAllXXXX().select().withQueryParameter("$filter", encodedFilter ).executeRequest(dest);
请告诉我,因为这可能是一个需要解决的问题。
withQueryParameter
的方法合约,它明确警告此API用法:
Using this function to bypass fluent helper method calls can lead to unsupported response handling. There is no contract on the order or priority of parameters added to the query.
请直接使用filter
函数。邮政编码应该有一个实体字段,代码应该类似于以下内容:
new DefaultXXXService()
.getAllXXXX()
.filter(Entity.POSTAL_CODE.eq("16100"))
如果这在您的用例中不可行,我建议像以前一样手动构建这个过滤器表达式,并像Alex在回答中指出的那样对其应用编码。