據(jù)字典轉(zhuǎn)換例程:Domain的輸入輸出轉(zhuǎn)換機(jī)制詳解)
1. 從一次數(shù)據(jù)展示的“詭異”現(xiàn)象說起如果你在SAP ABAP開發(fā)中曾經(jīng)遇到過這樣的場景在SE11數(shù)據(jù)字典里你定義了一個(gè)字段比如物料類型MATNR或者訂單狀態(tài)STATUS它的底層存儲(chǔ)值可能是一個(gè)簡單的字符比如“A”、“B”、“C”。然而當(dāng)你在SE16N事務(wù)碼里查看這張表的數(shù)據(jù)或者在報(bào)表的WRITE語句中輸出這個(gè)字段時(shí)屏幕上顯示的卻是“成品”、“半成品”、“原材料”或者“已創(chuàng)建”、“已批準(zhǔn)”、“已發(fā)貨”這樣清晰易懂的描述文本。你可能會(huì)想是不是數(shù)據(jù)庫里存了兩套數(shù)據(jù)一套是代碼一套是描述或者是不是程序里寫死了轉(zhuǎn)換邏輯其實(shí)很多時(shí)候這個(gè)“魔法”就發(fā)生在數(shù)據(jù)字典層而施展這個(gè)魔法的核心機(jī)制之一就是Domain 的 Conversion Routine轉(zhuǎn)換例程。簡單來說Conversion Routine 是 SAP ABAP 數(shù)據(jù)字典中為 Domain域定義的一套“輸入/輸出轉(zhuǎn)換規(guī)則”。它就像一個(gè)貼在數(shù)據(jù)字段上的“智能標(biāo)簽”告訴SAP系統(tǒng)“當(dāng)這個(gè)字段的值要從內(nèi)部存儲(chǔ)格式比如短的代碼展示給用戶看時(shí)請(qǐng)按照我的規(guī)則轉(zhuǎn)換成可讀的描述反之當(dāng)用戶輸入一個(gè)描述時(shí)也請(qǐng)按照我的規(guī)則轉(zhuǎn)換回內(nèi)部存儲(chǔ)的代碼。”理解 Conversion Routine是理解SAP數(shù)據(jù)一致性和用戶友好性的關(guān)鍵。它不僅僅是讓界面看起來更美觀更是確保業(yè)務(wù)邏輯正確、數(shù)據(jù)錄入規(guī)范、多語言支持得以實(shí)現(xiàn)的基礎(chǔ)設(shè)施。對(duì)于ABAP開發(fā)者、功能顧問甚至高級(jí)用戶搞懂它就能看懂很多數(shù)據(jù)流向背后的“潛規(guī)則”在調(diào)試、增強(qiáng)和報(bào)表開發(fā)時(shí)少走很多彎路。2. 庖丁解牛Conversion Routine 的構(gòu)成與工作原理一個(gè)完整的 Conversion Routine 并不是一個(gè)單一的函數(shù)而是一個(gè)命名約定下的函數(shù)對(duì)。這套機(jī)制深深植根于SAP ABAP的早期架構(gòu)體現(xiàn)了其通過約定優(yōu)于配置來管理大量數(shù)據(jù)轉(zhuǎn)換的思想。2.1 核心組件CONVERSION_EXIT_XXXXX_INPUT與CONVERSION_EXIT_XXXXX_OUTPUT這是Conversion Routine的核心。XXXXX是一個(gè)最多5位字符的標(biāo)識(shí)符例如ALPHA,MATN1,CUNIT等。CONVERSION_EXIT_XXXXX_OUTPUT輸出轉(zhuǎn)換函數(shù)。當(dāng)數(shù)據(jù)從數(shù)據(jù)庫內(nèi)部存儲(chǔ)格式讀取出來準(zhǔn)備顯示在屏幕SAP GUI、報(bào)表或者任何輸出界面時(shí)系統(tǒng)會(huì)自動(dòng)調(diào)用此函數(shù)。它的職責(zé)是將“內(nèi)部格式”轉(zhuǎn)換為“外部顯示格式”。內(nèi)部格式Internal Format通常是為優(yōu)化存儲(chǔ)和索引而設(shè)計(jì)的簡短形式如去零的物料號(hào)“123”單位代碼“EA”。外部格式External Format用戶友好、符合習(xí)慣的格式如帶前導(dǎo)零的物料號(hào)“0000000123”單位描述“Each”。CONVERSION_EXIT_XXXXX_INPUT輸入轉(zhuǎn)換函數(shù)。當(dāng)用戶在界面上輸入數(shù)據(jù)并確認(rèn)如按回車或保存時(shí)系統(tǒng)會(huì)自動(dòng)調(diào)用此函數(shù)。它的職責(zé)是將用戶輸入的“外部格式”清洗、驗(yàn)證并轉(zhuǎn)換為“內(nèi)部格式”進(jìn)行存儲(chǔ)。這個(gè)過程通常包括去除前導(dǎo)零、補(bǔ)充前導(dǎo)零、大小寫轉(zhuǎn)換、根據(jù)輸入描述查找對(duì)應(yīng)代碼等。為什么是函數(shù)對(duì)這保證了轉(zhuǎn)換的可逆性和一致性。OUTPUT把 A 變成 B 顯示INPUT就必須能把 B 變回 A 存儲(chǔ)。系統(tǒng)依賴這種可逆性來確保數(shù)據(jù)在存儲(chǔ)和展示間的無損轉(zhuǎn)換。2.2 數(shù)據(jù)字典中的掛載點(diǎn)Domain 的屬性Conversion Routine 本身是一段ABAP函數(shù)代碼但它需要被“激活”才能生效。這個(gè)激活開關(guān)就在Domain的定義里。創(chuàng)建/修改 Domain在事務(wù)碼 SE11 中進(jìn)入 Domain 維護(hù)界面。找到“轉(zhuǎn)換例程”字段在 Domain 的“定義”標(biāo)簽頁中有一個(gè)名為“轉(zhuǎn)換例程”的輸入框。填寫例程名在這里填入那個(gè)最多5位的標(biāo)識(shí)符XXXXX。例如你輸入ALPHA。生效當(dāng)你激活這個(gè) Domain以及所有引用了這個(gè) Domain 的 Data Element數(shù)據(jù)元素和 Table Field表字段后這套轉(zhuǎn)換規(guī)則就對(duì)所有使用該字段的地方自動(dòng)生效了。關(guān)鍵點(diǎn)你填寫的只是標(biāo)識(shí)符XXXXX而不是完整的函數(shù)名。系統(tǒng)會(huì)根據(jù)CONVERSION_EXIT_XXXXX_INPUT/OUTPUT的命名約定去查找和執(zhí)行對(duì)應(yīng)的函數(shù)。這是一種典型的“約定大于配置”的設(shè)計(jì)。2.3 系統(tǒng)自動(dòng)調(diào)用的時(shí)機(jī)FM 與 Function Module這里有一個(gè)重要的技術(shù)細(xì)節(jié)。系統(tǒng)并不是直接去調(diào)用CONVERSION_EXIT_XXXXX_INPUT/OUTPUT。在SAP的底層存在兩個(gè)固定的、通用的函數(shù)模塊Function ModuleCONVERT_TO_FOREIGN用于輸出轉(zhuǎn)換。當(dāng)需要顯示數(shù)據(jù)時(shí)系統(tǒng)會(huì)調(diào)用此FM它再根據(jù)Domain上配置的XXXXX去動(dòng)態(tài)調(diào)用對(duì)應(yīng)的CONVERSION_EXIT_XXXXX_OUTPUT。CONVERT_TO_LOCAL用于輸入轉(zhuǎn)換。當(dāng)需要處理用戶輸入時(shí)系統(tǒng)調(diào)用此FM它再動(dòng)態(tài)調(diào)用對(duì)應(yīng)的CONVERSION_EXIT_XXXXX_INPUT。作為開發(fā)者你幾乎不需要直接調(diào)用CONVERT_TO_FOREIGN或CONVERT_TO_LOCAL更不需要直接調(diào)用具體的CONVERSION_EXIT_...函數(shù)。你只需要在Domain上配置好例程名系統(tǒng)就會(huì)在屏幕處理PBO/PAI、數(shù)據(jù)庫讀寫OPEN SQL、以及WRITE語句等環(huán)節(jié)自動(dòng)完成轉(zhuǎn)換。注意這種自動(dòng)轉(zhuǎn)換主要發(fā)生在SAP標(biāo)準(zhǔn)屏幕控件如PARAMETERS,SELECT-OPTIONS和WRITE輸出時(shí)。如果你在ABAP程序內(nèi)部直接用WRITE輸出一個(gè)內(nèi)部表字段轉(zhuǎn)換會(huì)自動(dòng)發(fā)生。但如果你用WRITE輸出一個(gè)單純的字符變量即使它的內(nèi)容符合某個(gè)Conversion Routine的規(guī)則也不會(huì)被自動(dòng)轉(zhuǎn)換因?yàn)橄到y(tǒng)不知道這個(gè)變量應(yīng)該關(guān)聯(lián)哪個(gè)Domain。3. 經(jīng)典例程深度剖析以ALPHA和MATN1為例理論講完了我們通過兩個(gè)最常用、也最典型的Conversion Routine來加深理解。你可以用事務(wù)碼SE37直接查看這些函數(shù)模塊的代碼這是最好的學(xué)習(xí)方式。3.1ALPHA例程處理數(shù)字字符串的“零”煩惱ALPHA例程可能是SAP中使用最廣泛的轉(zhuǎn)換例程專門用于處理像物料號(hào)、客戶號(hào)、供應(yīng)商號(hào)、訂單號(hào)等這類數(shù)字字符串。內(nèi)部格式Internal去掉前導(dǎo)零的緊湊格式。例如物料號(hào)0000000123在數(shù)據(jù)庫里可能就存為123。這節(jié)省了存儲(chǔ)空間提高了索引效率。外部格式External帶前導(dǎo)零的完整格式。例如0000000123。這符合用戶的視覺習(xí)慣和業(yè)務(wù)文檔規(guī)范。CONVERSION_EXIT_ALPHA_OUTPUT邏輯檢查輸入字符串。如果它是純數(shù)字可能包含正負(fù)號(hào)則在左側(cè)用零填充到字段定義的長度比如18位。如果它包含非數(shù)字字符如字母則原樣返回。輸出填充后的字符串。CONVERSION_EXIT_ALPHA_INPUT邏輯檢查輸入字符串。去除左側(cè)的所有前導(dǎo)零。如果去除零后字符串為空則根據(jù)字段是否允許空值Initial返回空或全零。輸出去除前導(dǎo)零的字符串。實(shí)操場景 你在程序里寫SELECT matnr FROM mara INTO TABLE lt_mara WHERE matnr 123.即使數(shù)據(jù)庫里存的是0000000123這個(gè)查詢也能正確工作因?yàn)镺pen SQL在比較時(shí)可能會(huì)隱式處理轉(zhuǎn)換或者更常見的是123會(huì)被ALPHA的INPUT邏輯轉(zhuǎn)換為內(nèi)部格式進(jìn)行比較。而在用WRITE輸出lt_mara-matnr時(shí)你會(huì)看到漂亮的0000000123。踩坑點(diǎn)在動(dòng)態(tài)拼接SQL語句Native SQL或使用WHERE條件直接比較字符時(shí)如果忘記處理前導(dǎo)零會(huì)導(dǎo)致查不到數(shù)據(jù)。例如用WHERE matnr 123去查存儲(chǔ)為0000000123的記錄在Native SQL中就會(huì)失敗。正確的做法是在程序里用函數(shù)CONVERSION_EXIT_ALPHA_INPUT手動(dòng)處理一下變量。3.2MATN1例程物料號(hào)的專屬管家MATN1是物料號(hào)Material Number的專用轉(zhuǎn)換例程。它比ALPHA更復(fù)雜因?yàn)槲锪咸?hào)可以是純數(shù)字也可以是包含字母數(shù)字的“工業(yè)”編號(hào)。內(nèi)部格式統(tǒng)一為大寫、去除前導(dǎo)零針對(duì)數(shù)字部分的格式。外部格式根據(jù)物料類型可能顯示為帶前導(dǎo)零的數(shù)字或保持原樣的字母數(shù)字混合形式但通常統(tǒng)一為大寫。CONVERSION_EXIT_MATN1_OUTPUT邏輯首先調(diào)用ALPHA的OUTPUT例程處理可能的前導(dǎo)零。然后將結(jié)果強(qiáng)制轉(zhuǎn)換為大寫。輸出轉(zhuǎn)換后的字符串。CONVERSION_EXIT_MATN1_INPUT邏輯將輸入字符串強(qiáng)制轉(zhuǎn)換為大寫。然后調(diào)用ALPHA的INPUT例程去除前導(dǎo)零。輸出轉(zhuǎn)換后的字符串。你會(huì)發(fā)現(xiàn)MATN1實(shí)際上是ALPHA例程的增強(qiáng)版在ALPHA的基礎(chǔ)上增加了大小寫規(guī)范化。這確保了無論用戶如何輸入大小寫混用物料號(hào)在系統(tǒng)內(nèi)部都以統(tǒng)一的大寫、無前導(dǎo)零格式存儲(chǔ)。為什么需要這個(gè)因?yàn)槲锪咸?hào)是核心主數(shù)據(jù)其唯一性是關(guān)鍵。如果不進(jìn)行大小寫轉(zhuǎn)換AB-123和ab-123會(huì)被系統(tǒng)視為兩個(gè)不同的物料這會(huì)導(dǎo)致數(shù)據(jù)混亂。MATN1例程強(qiáng)制了存儲(chǔ)的一致性。4. 超越顯示Conversion Routine 的深層價(jià)值與影響Conversion Routine 的作用遠(yuǎn)不止于美化界面。它是SAP數(shù)據(jù)一致性和完整性的重要守護(hù)者。4.1 數(shù)據(jù)一致性與完整性的基石存儲(chǔ)優(yōu)化通過ALPHA這樣的例程系統(tǒng)可以用最精簡的方式無前導(dǎo)零存儲(chǔ)海量業(yè)務(wù)數(shù)據(jù)如訂單、物料顯著節(jié)省數(shù)據(jù)庫空間提升索引性能。輸入驗(yàn)證與清洗INPUT例程是一個(gè)天然的數(shù)據(jù)清洗層。例如MATN1的INPUT會(huì)強(qiáng)制轉(zhuǎn)大寫這防止了因大小寫不同導(dǎo)致的重復(fù)數(shù)據(jù)。一些更復(fù)雜的例程如針對(duì)國家、地區(qū)、單位的例程還會(huì)包含查表驗(yàn)證確保輸入的值是存在于配置表中的有效值。業(yè)務(wù)邏輯透明化轉(zhuǎn)換規(guī)則在Domain層統(tǒng)一定義所有使用該Domain的字段都自動(dòng)繼承這套規(guī)則。這意味著無論這個(gè)字段出現(xiàn)在哪個(gè)程序、哪張屏幕、哪個(gè)接口中它的轉(zhuǎn)換行為都是一致的。這從根本上避免了不同程序?qū)ν粯I(yè)務(wù)數(shù)據(jù)做不同處理的風(fēng)險(xiǎn)。4.2 對(duì)ABAP程序開發(fā)的直接影響作為ABAP開發(fā)者你必須意識(shí)到Conversion Routine的存在否則會(huì)掉進(jìn)坑里。WRITE語句的“魔法”當(dāng)你用WRITE語句輸出一個(gè)帶有Conversion Routine的字段時(shí)轉(zhuǎn)換會(huì)自動(dòng)發(fā)生。這是最方便的特性。屏幕字段的自動(dòng)綁定在SELECT-OPTIONS、PARAMETERS中引用帶有Data Element的變量屏幕上的輸入輸出會(huì)自動(dòng)應(yīng)用轉(zhuǎn)換例程。用戶輸入描述回車后變量里得到的是代碼。Open SQL的隱式轉(zhuǎn)換在大多數(shù)情況下Open SQLSELECT ... INTO ... WHERE ...能夠很好地處理Conversion Routine。例如你用WHERE matnr 123去查系統(tǒng)能正確匹配到內(nèi)部存儲(chǔ)為123對(duì)應(yīng)外部0000000123的記錄。但這并非絕對(duì)在復(fù)雜條件或動(dòng)態(tài)SQL中仍需小心。字符串操作時(shí)的“失真”這是最常見的坑。當(dāng)你直接操作一個(gè)帶有Conversion Routine的字段的字符串值時(shí)你操作的是它的內(nèi)部格式。DATA: lv_matnr TYPE matnr. matnr 類型關(guān)聯(lián)的Domain有 MATN1 例程 lv_matnr AB-123. WRITE lv_matnr. 顯示為 AB-123 但如果進(jìn)行字符串操作 DATA(lv_sub) lv_matnr0(2). 試圖取前兩位 WRITE lv_sub. 你期望看到 AB但實(shí)際可能看到內(nèi)部存儲(chǔ)格式的前兩位這可能不是AB教訓(xùn)對(duì)于有Conversion Routine的字段盡量避免直接的字符串函數(shù)操作如SHIFT,SPLIT, 偏移量訪問。如果必須操作先將其賦值給一個(gè)純粹的字符類型變量如STRING或CHAR但要注意這可能會(huì)丟失轉(zhuǎn)換信息。4.3 如何查找和創(chuàng)建自定義轉(zhuǎn)換例程查找現(xiàn)有例程SE11查看某個(gè)Domain的“轉(zhuǎn)換例程”屬性。SE16N查看表DDDOM中的CONVEXIT字段。SE37直接搜索函數(shù)組CONVERSION_EXIT_XXXXX。創(chuàng)建自定義例程謹(jǐn)慎 創(chuàng)建自定義Conversion Routine是一項(xiàng)高級(jí)功能通常用于滿足特殊的、跨系統(tǒng)的數(shù)據(jù)格式轉(zhuǎn)換需求且需謹(jǐn)慎評(píng)估對(duì)現(xiàn)有系統(tǒng)的影響。步驟 a. 在SE37中創(chuàng)建函數(shù)組命名必須為CONVERSION_EXIT_XXXXXXXXXX自定不超過5位。 b. 在該函數(shù)組下創(chuàng)建兩個(gè)函數(shù)模塊 *CONVERSION_EXIT_XXXXX_INPUT*CONVERSION_EXIT_XXXXX_OUTPUTc. 函數(shù)接口是固定的一個(gè)INPUT參數(shù)一個(gè)OUTPUT參數(shù)。FUNCTION CONVERSION_EXIT_XXXXX_INPUT. *--------------------------------------------------------- **Local Interface: * IMPORTING * VALUE(INPUT) TYPE ANY * EXPORTING * VALUE(OUTPUT) TYPE ANY *--------------------------------------------------------- 你的轉(zhuǎn)換邏輯 ENDFUNCTION.激活激活函數(shù)組和函數(shù)模塊。掛載在自定義Domain的“轉(zhuǎn)換例程”字段中填入XXXXX。測試務(wù)必進(jìn)行全面測試包括輸入、輸出、邊界值、以及所有使用該Domain的屏幕和報(bào)表。重要警告創(chuàng)建全局性的自定義Conversion Routine影響范圍極廣。一旦有大量表、字段和程序使用了這個(gè)Domain修改其Conversion Routine將是高風(fēng)險(xiǎn)操作。通常建議優(yōu)先考慮通過校驗(yàn)表Check Table、搜索幫助Search Help或在程序邏輯中顯式轉(zhuǎn)換來實(shí)現(xiàn)類似功能。5. 實(shí)戰(zhàn)排坑當(dāng) Conversion Routine 不按預(yù)期工作時(shí)即使理解了原理在實(shí)際開發(fā)中依然會(huì)遇到Conversion Routine帶來的“驚喜”。下面是一些常見問題和排查思路。5.1 問題一報(bào)表中字段顯示為內(nèi)部代碼而非描述場景你寫了一個(gè)ALV報(bào)表某個(gè)應(yīng)該顯示狀態(tài)描述的字段如訂單狀態(tài)VBUK-STATUS卻顯示為“A”、“B”、“C”這樣的代碼。排查與解決檢查Data Element和Domain用SE11查看該字段如STATUS對(duì)應(yīng)的Data Element和Domain。確認(rèn)Domain上是否設(shè)置了正確的Conversion Routine例如一個(gè)名為STATUS的例程。檢查ALV字段目錄在構(gòu)建ALV字段目錄FIELD CATALOG時(shí)你是否正確指定了字段名確保FIELDNAME屬性指向的是帶有Data Element的字典結(jié)構(gòu)字段而不是一個(gè)手動(dòng)定義的字符變量。錯(cuò)誤做法直接從內(nèi)表工作區(qū)賦值一個(gè)字符變量到ALV輸出。正確做法ALV的輸出內(nèi)表結(jié)構(gòu)最好通過TYPE或LIKE引用字典表或結(jié)構(gòu)這樣系統(tǒng)能自動(dòng)識(shí)別字段的元數(shù)據(jù)包括Conversion Routine。檢查WRITE語句如果是在簡單的列表報(bào)表中用WRITE確保你WRITE的是結(jié)構(gòu)化的字段而不是它的某個(gè)子串或經(jīng)過函數(shù)處理后的變量。5.2 問題二用戶輸入描述后程序變量里仍是描述不是代碼場景你在屏幕上用PARAMETERS: p_werks TYPE werks_d.定義了一個(gè)工廠字段希望用戶輸入工廠描述后變量p_werks里自動(dòng)得到工廠代碼。但用戶輸入“上海工廠”并回車后p_werks里還是“上海工廠”導(dǎo)致后續(xù)查詢失敗。排查與解決確認(rèn)Domain是否有例程檢查werks_d類型對(duì)應(yīng)的Domain。工廠通常有對(duì)應(yīng)的轉(zhuǎn)換例程可能關(guān)聯(lián)到表T001W但并非所有有描述的字段都有Conversion Routine。Conversion Routine主要用于代碼和描述的固定映射如單位、國家而像工廠這種其描述可能很長且不固定通常用搜索幫助F4 Help來實(shí)現(xiàn)輸入搜索幫助返回的是代碼。使用搜索幫助對(duì)于這類字段正確的做法是在PARAMETERS或SELECT-OPTIONS語句中通過MATCHCODE OBJECT附加搜索幫助。PARAMETERS: p_werks TYPE werks_d MATCHCODE OBJECT H_T001W.這樣用戶可以通過F4選擇選擇后p_werks里存儲(chǔ)的就是工廠代碼。理解機(jī)制Conversion Routine的INPUT轉(zhuǎn)換發(fā)生在屏幕的“回車”或“命令”事件后但前提是輸入的值能通過例程邏輯映射回代碼。如果例程邏輯只是在數(shù)字字符串前補(bǔ)零如ALPHA那么輸入“上海工廠”顯然無法轉(zhuǎn)換系統(tǒng)會(huì)原樣傳遞。對(duì)于需要查表轉(zhuǎn)換的例程里會(huì)寫死邏輯去查特定的表。5.3 問題三在接口或增強(qiáng)中手動(dòng)處理轉(zhuǎn)換場景你在編寫一個(gè)BAPI、RFC接口或一個(gè)增強(qiáng)如USEREXIT需要處理來自外部系統(tǒng)或手動(dòng)賦值的物料號(hào)。外部系統(tǒng)可能傳來帶前導(dǎo)零的物料號(hào)而你的程序需要用它去查詢數(shù)據(jù)庫。解決方案 這時(shí)你需要顯式調(diào)用轉(zhuǎn)換函數(shù)。DATA: lv_matnr_ext TYPE char18, 外部格式如 0000000123 lv_matnr_int TYPE matnr. 內(nèi)部格式 lv_matnr_ext 0000000123. 將外部格式轉(zhuǎn)換為內(nèi)部格式模擬 INPUT 過程 CALL FUNCTION CONVERSION_EXIT_MATN1_INPUT EXPORTING input lv_matnr_ext IMPORTING output lv_matnr_int. 現(xiàn)在 lv_matnr_int 應(yīng)該是 123可用于數(shù)據(jù)庫查詢 SELECT SINGLE * FROM mara INTO DATA(ls_mara) WHERE matnr lv_matnr_int. 反之將內(nèi)部格式轉(zhuǎn)換為外部格式用于輸出 CALL FUNCTION CONVERSION_EXIT_MATN1_OUTPUT EXPORTING input lv_matnr_int IMPORTING output lv_matnr_ext. WRITE: / 外部格式, lv_matnr_ext.核心要點(diǎn)在非SAP自動(dòng)管理的上下文如純內(nèi)存計(jì)算、文件處理、外部接口中操作這類字段時(shí)心中必須時(shí)刻清楚你當(dāng)前持有的是內(nèi)部格式還是外部格式并在需要時(shí)手動(dòng)調(diào)用轉(zhuǎn)換函數(shù)進(jìn)行切換。Conversion Routine 是SAP ABAP底層一個(gè)精巧而強(qiáng)大的設(shè)計(jì)。它像一層透明的濾鏡讓數(shù)據(jù)在“機(jī)器友好”的存儲(chǔ)格式和“用戶友好”的展示格式之間無縫切換。深入理解它不僅能讓你寫出更健壯、更符合SAP慣例的代碼更能讓你在調(diào)試復(fù)雜數(shù)據(jù)問題時(shí)快速定位到問題是否出在這層“濾鏡”上。記住這個(gè)口訣Domain定義轉(zhuǎn)換規(guī)輸入輸出成雙對(duì)內(nèi)部外部格式換屏幕報(bào)表自動(dòng)美程序操作需留意手動(dòng)調(diào)用方不累。下次再看到屏幕上自動(dòng)跳出來的友好描述時(shí)你會(huì)知道這背后是Conversion Routine在默默工作。