如何實現輸入的密碼顯示為*號
這幾天做一個系統維護的程式,需要用戶輸入用戶名和密碼登錄。可怎樣實現輸入密碼顯示星號的框呢?在其它語言中簡單的選那個文字框控制元件作為“Password”框顯示就OK了(一般會有單行、密碼和多行供選)。可在ABAP中,把I/O欄位屬性查了個遍,沒找見類似的屬性,鬱悶!
網上一搜,前人已經實現了。一看,更鬱悶!居然是設置“不可見”屬性!!(原以為選上他控制元件會消失呢!)寫在這裡,留個備份,也給需要的朋友作個參考。
下面分別介紹不同介面編程的具體實現方法:
(1)選擇螢幕(Selection-Screen)中實現密碼框:
假設選擇螢幕中有如下宣告:
PARAMETERS: txt_pass type string.
“txt_pass“是要接收密碼的欄位,則在選擇螢幕的輸出事件中加入如下代碼,修改這個欄位“不可見”:
AT SELECTION-SCREEN OUTPUT.
loop at screen.
if screen-name = 'TXT_PASS'.
screen-invisible = '1'.
modify screen.
endif.
endloop.
經過上面修改,txt_pass在介面上將顯示成帶星號的文字域。
(2)在螢幕(Screen)中實現密碼框:
與選擇螢幕上面一樣,還是設置“不可見”屬性,只是更簡單(不用寫代碼了)。
假設在螢幕設計器上放了個名叫“txt_pass”的I/O域來接收密碼輸入,則雙擊這個欄位,在屬性視窗下面的“顯示”頁勾選“不可見”(如右圖所示),啟用,OK!
總結:
(1)SAP這個屬性搞的變態(不過想一下,也有道理);
(2)自己以後可不能想當然了,要注重動手實踐。
(3)上面密碼資料類型我使用了string,SAP資料字典中還提供了個叫“XUNCODE”的文字元素專門用於密碼資料類型,可以使用它。
(4)如果要實現螢幕某個元素不顯示的話,screen-invisible = '1'.必須與screen-input搭配使用,如果單獨使用screen-invisible = '1'.
只能實現顯示密碼為星號這種style。