ABAP中Conversion Routine示例
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                ABAP中Conversion Routine示例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                
                            
                            
                            在SAP的Domain定義中,Output Length下面有個Convers. routine的標識,這是SAP用來進行輸入輸出轉換的。我們知道,屏幕上的I/O字段都是字符串形式的,而數據在我們內部則分為C, S, N, P, D等諸多類型,這中間就有個轉換過程。Conversion Routine就是實現這種轉換的一種工具。
 
 
可以在SE12中錄入Domain:MATNR,我們可以看到,這里定義了名為MATN1的轉換方法。這就是為什么我們輸入的物料號都會被系統自動加上前導0。雙擊MATN1,可以看到CONVERSION_EXIT_MATN1_INPUT和CONVERSION_EXIT_MATN1_OUTPUT兩個函數,它們分別負責輸入轉換和輸出轉換。
 
 
下面我們也可以定義個簡單的Conversion Routine實例。假設我們有個類型為NUMC、長度為2的數字,要求其前臺錄入和輸出的必須是英文單詞。
 
 
1,定義函數CONVERSION_EXIT_YTEST_INPUT.
 
可以參考CONVERSION_EXIT_MATN1_INPUT來定義我們的接口:INPUT和OUTPUT。該函數的功能是,當用戶錄入一個字符串形式的屏幕字段后,將其轉化成內部數據的格式。INPUT在這里代表用戶錄入,當被系統調用時,它就是字符串的格式;OUTPUT則代表了內部的數據,函數被調用時它代表的是NUMC(2)格式。
 
我們的代碼如下:
 
 
CHECK input IS NOT INITIAL.
 
 
IF input = 'TEN'.
??? output = 10.
? ELSEIF input = 'ELEVEN'.
??? output = 11.
? ELSEIF input = 'TWELVE'.
??? output = 12.
? ELSE.
??? MESSAGE 'Invalid value.' TYPE 'E' RAISING invalid_value.
? ENDIF. 2,定義函數CONVERSION_EXIT_YTEST_OUTPUT. 可以參考CONVERSION_EXIT_MATN1_OUTPUT來定義我們的接口。該函數的功能是執行輸出轉化,將內部數據轉化成字符串形式。INPUT代表了我們的內部數據,而OUTPUT則代表了輸出到界面上的字符串效果。 代碼如下: IF input = 10.
??? output = 'TEN'.
? ELSEIF input = 11.
??? output = 'ELEVEN'.
? ELSEIF input = 12.
??? output = 'TWELVE'.
? ENDIF. 3,定義我們的Domain和Data element. 我們給domain命名為YCRTEST,類型為NUMC, length為2。Output length為10,Convers. routine則代表我們新編寫的兩個函數,填寫“YTEST”。Data element的創建這里就不贅述。 4,編程測試 DATA: c2 TYPE c LENGTH 2. PARAMETERS: p TYPE ycrtest. c2 = p.
WRITE: 'Now internal value of p is:', c2. p = 12.
WRITE: / 'For p = 12, the output is:', p. 在選擇屏幕上輸入Ten之后,我們可以看到輸出: Now internal value of p is: 10
For p = 12, the output is: TWELVE 5,Conversion Routine的應用 很多人都知道調用函數CONVERTION_ROUTINE_ALPHA_OUTPUT進行輸出,其實這個ALPHA就出自于Domain: VBELN的Conversion Routine。還有為何SAP單位在內部是ST,卻會在界面根據不同語言顯示“PC”,“件”等不同內容,也是Conversion Routine的功勞。 總的來說,建立全新的Conversion Routine并不常見。不過在編程中可以很便捷地利用一些現有Conversion Routine達到某些功能。 比如LIST中: DATA: n2 TYPE num2.
? n2 = 11.
? WRITE (10) n2 USING EDIT MASK '==YTEST'.'注意有2個等號 在SCREEN的LAYOUT上則有Conv. Exit的一個小框框。 在 ALV 的FIELD CATALOG中則有字段EDIT_MASK可用來設置Conversion Routine。如果EDIT_MASK不行,那么再試試字段CONVEXIT吧,有點記不清了:-)
                        
                        
                        ??? output = 10.
? ELSEIF input = 'ELEVEN'.
??? output = 11.
? ELSEIF input = 'TWELVE'.
??? output = 12.
? ELSE.
??? MESSAGE 'Invalid value.' TYPE 'E' RAISING invalid_value.
? ENDIF. 2,定義函數CONVERSION_EXIT_YTEST_OUTPUT. 可以參考CONVERSION_EXIT_MATN1_OUTPUT來定義我們的接口。該函數的功能是執行輸出轉化,將內部數據轉化成字符串形式。INPUT代表了我們的內部數據,而OUTPUT則代表了輸出到界面上的字符串效果。 代碼如下: IF input = 10.
??? output = 'TEN'.
? ELSEIF input = 11.
??? output = 'ELEVEN'.
? ELSEIF input = 12.
??? output = 'TWELVE'.
? ENDIF. 3,定義我們的Domain和Data element. 我們給domain命名為YCRTEST,類型為NUMC, length為2。Output length為10,Convers. routine則代表我們新編寫的兩個函數,填寫“YTEST”。Data element的創建這里就不贅述。 4,編程測試 DATA: c2 TYPE c LENGTH 2. PARAMETERS: p TYPE ycrtest. c2 = p.
WRITE: 'Now internal value of p is:', c2. p = 12.
WRITE: / 'For p = 12, the output is:', p. 在選擇屏幕上輸入Ten之后,我們可以看到輸出: Now internal value of p is: 10
For p = 12, the output is: TWELVE 5,Conversion Routine的應用 很多人都知道調用函數CONVERTION_ROUTINE_ALPHA_OUTPUT進行輸出,其實這個ALPHA就出自于Domain: VBELN的Conversion Routine。還有為何SAP單位在內部是ST,卻會在界面根據不同語言顯示“PC”,“件”等不同內容,也是Conversion Routine的功勞。 總的來說,建立全新的Conversion Routine并不常見。不過在編程中可以很便捷地利用一些現有Conversion Routine達到某些功能。 比如LIST中: DATA: n2 TYPE num2.
? n2 = 11.
? WRITE (10) n2 USING EDIT MASK '==YTEST'.'注意有2個等號 在SCREEN的LAYOUT上則有Conv. Exit的一個小框框。 在 ALV 的FIELD CATALOG中則有字段EDIT_MASK可用來設置Conversion Routine。如果EDIT_MASK不行,那么再試試字段CONVEXIT吧,有點記不清了:-)
總結
以上是生活随笔為你收集整理的ABAP中Conversion Routine示例的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: ABAP选择屏幕权限控制
- 下一篇: 解决SAP中单位转换问题
