SAP cloud sdk针对javascript多个语言和过滤器直接附加:导致后端的“表达式无法转换为ABAP选择选项”

问题描述

我对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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...