问题描述
我对ByDesign系统有读取请求,并通过以下方式创建:
const readRequest = QueryResults.requestBuilder()
.getAll()
.select(
QueryResults.COFFMAT,QueryResults.CMATERIAL
)
.filter(
and(and(
QueryResults.PARA_FISCYEARPER.greaterOrEqual(new BigNumber('0010000')),QueryResults.PARA_FISCYEARPER.lessOrEqual(new BigNumber('0129999'))),and(
QueryResults.CACCPSTDAT.greaterOrEqual(moment(validFrom)),QueryResults.CACCPSTDAT.lessOrEqual(moment(validTo)),QueryResults.CPERMEST.equals(PermanentEstablishmentID),QueryResults.CACCBTT.equals(Constants.code.IssueForProduction)
))
);
然后以以下URL编码生成请求:
\QueryResults?$format=json&$select=COFFMAT,CMATERIAL&$filter=(PARA_FISCYEARPER%20ge%2010000L%20and%20PARA_FISCYEARPER%20le%20129999L%20and%20CACCPSTDAT%20ge%20datetime%272017-12-31T23:00:00.000%27%20and%20CACCPSTDAT%20le%20datetime%272020-12-31T23:00:00.000%27%20and%20CPERMEST%20eq%20%27P1100%27%20and%20CACCBTT%20eq%20%27344%27)
在这里,所有和过滤器都相互附加,导致从后端抛出错误
表达式无法转换为ABAP选择选项
有效的过滤器网址以及我希望生成的URL编码是什么(请注意括号)
\QueryResults?$format=json&$select=COFFMAT,CMATERIAL&$filter=((PARA_FISCYEARPER%20ge%2010000L%20and%20PARA_FISCYEARPER%20le%20129999L)%20and%20(CACCPSTDAT%20ge%20datetime%272017-12-31T23:00:00.000%27%20and%20CACCPSTDAT%20le%20datetime%272020-12-31T23:00:00.000%27%20and%20CPERMEST%20eq%20%27P1100%27%20and%20CACCBTT%20eq%20%27344%27))
可以通过某种方式实现第二种情况,因为在或过滤器的情况下,仅当使用时才正确生成了方括号,而它们不起作用。
解决方法
1.28.1版本最近已发布。它会生成带有更多括号的URL。请参阅发行说明here。