在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出來。
本文來自雲栖社群合作夥伴“汪子熙”,了解相關資訊可以關注微信公衆号"汪子熙"。