2009年5月13日

在BTE 00001030使用call screen 發生E type message

前因:
在台灣的GUI系統客製時,user做FI 立帳的AP時常會用到多張進項發票輸入,想要在傳票過帳時處理通常會使用BTE在event 00001030已經取得傳票號碼時,進行客製畫面呼叫,讓user將進項發票明細補上。

問題點:
這種解法看起來很容易,但是卻忽略了一個情況,就是此時傳票已經取號,發生異常時,系統無法回復。同時還有更嚴重的問題,那就是萬一呼叫出來的screen中發生error message時,無法由自身的機制補捉(chain), 會在之前就被event 00001030補抓,並且程式直接跳出,此情況亦算是一種異常,傳票一樣會發生空號。

解法:
會發生error message情況不外乎是客製欄位在定義時參考日期/金額等有自我檢查機制的資料型態,user光是輸入錯誤格式便會產生error message,慘案也就發生了。針對這種問題,最好是把資料型態設成Char,在chain當中自行撰寫程式碼檢查,若發生格式錯誤時,不可拋出E type message, 改用FM POPUP_TO_DISPLAY_TEXT,將錯誤訊息直接pop up。

例子:
以日期欄位為例,考慮日期在display時會帶有符號,客製欄位直接定義為10碼長度。user輸入後進入chain檢查時,用FM PERIOD_AND_DATE_CONVERT_INPUT將char type的日期直接轉換成D type日期, 若SY-SUBRC = 0時表示輸入的日期格式正確。若SY-SUBRC <> 0時,Call 'POPUP_TO_DISPLAY_TEXT',提示user 重新輸入。
金額欄位略。