天天看點

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

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

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

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

上午經過debug找到了原因:

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

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

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

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

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

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

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

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

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

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

本文來自雲栖社群合作夥伴“汪子熙”,了解相關資訊可以關注微信公衆号"汪子熙"。