我在创建ODATA URL时遇到问题。
对于以下URL,
https://xxxxxxx.xxx.xxxxxxxx.com/sap/c4c/odata/v1/c4codataapi/CorporateAccountHasContactPersonCollection?$ filter =帐户ID等于'1000024'
结果:
- <m:properties>
<d:ObjectID>00163E10AD0B1ED686EF458B4E8C51D5</d:ObjectID>
<d:ParentObjectID>00163E10AD201EE5A4F0B592DE751AE8</d:ParentObjectID
<d:AccountID>1000024</d:AccountID>
<d:ContactID>1002636</d:ContactID>
<d:FunctionCode>Z021</d:FunctionCode>
<d:Mobile>+33 123456789</d:Mobile>
<d:Phone>+33 987654321</d:Phone>
</m:properties>
与我将过滤器更改为FunctionCode
时的结果相同
https://xxxxxxx.xxx.xxxxxxxx.com/sap/c4c/odata/v1/c4codataapi/CorporateAccountHasContactPersonCollection?$ filter = FunctionCode eq'Z021'
但是当我使用过滤器Phone
https://xxxxxxx.xxx.xxxxxxxx.com/sap/c4c/odata/v1/c4codataapi/CorporateAccountHasContactPersonCollection?$ filter =电话号码'+33 123456789'
URL根本不起作用。是因为电话号码中包含特殊字符“ +”
我尝试使用$ filter = endswith(Phone,'123456789'),它工作正常。但这不是我正在寻找的解决方案。
有人可以建议另一种方式吗?
谢谢 问候 普拉特
答案 0 :(得分:1)
原因是这些特殊字符在URL中使用时具有不同的含义。 JavaScript“ encodeUri”或“ encodeUriComponent”无法解决此问题。
以下是在OData查询中使用时需要替换的特殊字符的列表: https://msdn.microsoft.com/en-us/library/aa226544(SQL.80).aspx
特殊字符+
表示一个空格(并且URL中不能使用空格),因此您需要用其十六进制值(在这种情况下为%2B
)替换该字符。
您的校正后的过滤器应为$filter=Phone eq '%2B33 123456789'
。
找到好文章here。