在AMDP过程中执行以下选择查询时,我得到了错误的结果。伙伴使用一个地址编号重复两次,该地址编号与WHERE条件中传递的值完全无关。
SELECT score( ) AS score,
partner,
rltyp,
addrnumber,
name,
postalcode,
street,
street4,
country
FROM zcdsbpaddr
WHERE
CONTAINS ( zcdsbpaddr.name, :im_name1, FUZZY(0.8, 'similarCalculationMode=compare, textSearch=compare, bestMatchingTokenWeight=0.3' ) ) AND
CONTAINS ( zcdsbpaddr.postalcode, :im_post_code1, FUZZY(0.8) ) AND
CONTAINS ( ( zcdsbpaddr.street, zcdsbpaddr.street4 ), :im_street, FUZZY(0.7) ) AND
( :im_country = '' OR zcdsbpaddr.country = :im_country )
ORDER BY score( ) DESC;
如果有人能帮忙就太好了。
我很确定这是由CDS视图zcdsbpaddr
引起的,而不是由您描述的SELECT或AMDP引起的。
检查该视图的数据预览(ABAP开发工具中的F8(,以验证它是否生成了所需的记录。
在这种观点中,你所描述的听起来像是一个被误导的JOIN。要获得更多见解,请提供该视图的代码或描述其图形组成的图表。
不管是否FUZZY,SELECT查询只会选择该视图提供的一小部分记录。我看不出它怎么会对重复负责。
我通过以下更改解决了这个问题:
- CDS客户端相关添加
@ClientHandling.type: #CLIENT_DEPENDENT
注释 - 通过添加
AMDP OPTIONS READ-ONLY CDS SESSION CLIENT current
修改了AMDP方法签名 - 在查询WHERE条件中传递了
SESSION_CONTEXT('CLIENT')