Fiori UI上my contact加了Dr. 後搜尋不出資料的奇怪問題

i042416發表於2020-02-20

在My task UI上維護了Account後,再點Contact F4 value help:

Fiori UI上my contact加了Dr. 後搜尋不出資料的奇怪問題


我們發現在GM6上,只要在search field里加了”Dr”, 就搜尋不出來contact,如下圖。但是換成諸如“Florianna Adler”就可以。

Fiori UI上my contact加了Dr. 後搜尋不出資料的奇怪問題


昨晚我們糾結了好久,想知道為什麼會有這種奇怪的behavior。

上午經過debug找到了原因:

起初我們懷疑加了Dr之後的search沒出來結果,是因為DB 沒query到資料。今早經過驗證,發現不是。Contact 的open sql是下列這個方法裡動態生成的:

Fiori UI上my contact加了Dr. 後搜尋不出資料的奇怪問題


主要就是這4張表做inner join:

Fiori UI上my contact加了Dr. 後搜尋不出資料的奇怪問題


然後在下列這個方法裡動態執行OPEN SQL,命中40條資料。

Fiori UI上my contact加了Dr. 後搜尋不出資料的奇怪問題

命中40條的原因就是OPEN SQL的where條件是掃描account的mc_name1和contact的mc_name1, mc_name2這三個欄位。

Fiori UI上my contact加了Dr. 後搜尋不出資料的奇怪問題

因此,像下圖中第一行和第三行這種資料也命中了,只因為它們的三個column中有一個column的value包含”DR”:

Fiori UI上my contact加了Dr. 後搜尋不出資料的奇怪問題


DB search做完後,對結果集做filter.

逐一遍歷結果集的40條entry,對每個entry,執行三輪掃描,掃描條件定義在lt_search_f­裡, 每個entry只有通過所有三輪掃描,才會最後返回給UI。

Fiori UI上my contact加了Dr. 後搜尋不出資料的奇怪問題 Fiori UI上my contact加了Dr. 後搜尋不出資料的奇怪問題


掃描的具體邏輯:檢查某個entry的這三個紅色的field裡是否包含每輪掃描指定的key word。如果不包含,將該行entry從結果集中刪除,再處理下一個。

Fiori UI上my contact加了Dr. 後搜尋不出資料的奇怪問題 Fiori UI上my contact加了Dr. 後搜尋不出資料的奇怪問題


因此,加了Dr後搜不出來結果的原因:

Contact F4 search仍然將Dr作為一個free text傳入後臺,在後臺從DB取回來資料做filter之後,如果結果集的三個column裡沒有包含DR這個字串的話,就會從結果集裡過濾掉。只有name1 & name2裡面形如Andrew,Dragon的contact才有機會唄search出來。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2676312/,如需轉載,請註明出處,否則將追究法律責任。

相關文章