我的微信群裡有朋友提問:

如何找到某個 ABAP structure 裡的某個字段,運作時的值是從哪個資料庫表的字段裡寫入的?
以 ABAP structure BAPIAD1VL 為例,假設我們需要查找 字段 DISTRCT_NO 的來源。
其實沒有什麼太好太精确的辦法。我這裡提供一種辦法。
選中 DISTRCT_NO, 點選 SE11 工具欄的 Where used list 圖示:
有4條結果,一條一條人工檢視。如果結果數很多,這種方法就很低效了。
第三條記錄裡,發現是 ADDR1_VAL 結構的 CITYP_CODE 字段,寫入了我們要查找的目标結構 BAPIAD1VL-DISTRCT_NO 字段。
這個 ADDR1_VAL 仍然是一個 ABAP 結構,是以我們這裡有兩種選擇。
一是我們的目标,轉而劃歸為查找結構 ADDR1_VAL 的字段 CITYP_CODE 來自何方。可以遞歸地用 SE11 的 where used list,查找字段 CITYP_CODE, 直至搜尋結果裡,發現真正的資料庫表才結束探索。
第二種選擇是,使用 SE80 的 Repository information system.
打開 SE80, 左邊展開 Fields->Table Fields, 右邊輸入 CITYP_CODE:
在搜尋結果裡,發現 ADRCITYPRT 和 ADRSTREET 這兩張表的 CITYP_CODE 字段最有可能是我們要查找的字段。
此時手動到 SE16 檢視這兩張表的字段來确認。
另外群裡這位朋友還問到了 check table. 這個概念往往容易和另一個 value table 相混淆。
check table
它隻是包含特定外鍵表字段的所有有效條目的表。用于字段級驗證(它限制字段值)。
value table
值表在域(domain)級别維護,也稱為域級别驗證。
二者的差別
check table 将對在任何應用程式中輸入的表字段的輸入值進行檢查,value table 将在 F4 幫助上為該表字段提供值。
check table 定義外鍵并且是表定義的一部分。而 value table 是域定義的一部分。
check table是字段級别的驗證,value table 是域級别的驗證,用于為引用該域的所有字段提供 F4 幫助。