2016/03/03

abap 程式無法傳送到正式環境


最近在 sap 上用 T# se37 改一支 rfc function 時,有一個奇怪的狀況

一般修改 function 一定是在 dev 環境,prd 不允許修改

而在 dev 環境還必須撘配特定使用者

(題外話: ddic / sap* 這種預設的最高權限帳號,不會有修改程式或系統的權限

這和之前經歷過的內稽內控應該有關;當時的規則有一條就是系統管理人員與程式設計人員及資料庫管理人員的權限是否切開)

這個特定使用者姑且叫 abaper 好了

abaper 使用 se37 / se38 修改程式,存檔、啟動後,sap 會偵測到變更,並詢問你要建立新的 request 還是合併到其他 request

(以程式設計的觀念來說,同一 request 中所包含的修改,越少越好,越相關越好,以免日後查詢資料困難

 這個觀念是在翻 git essential 時學到的)

當時遇到的奇怪狀是修改程式不會有 request 建立的詢問畫面


沒有第一時間發現是因為我做了兩個修改動作

1. 修改 ITAB 的 structure,增加廢品欄位

2. 修改 function 的 open SQL ,增加廢品欄位的處理

由於對程式比較上手了(嗯哼),所以做完第一項的修改,有跳出 request 建立的詢問畫面,接著做第二項的修改,沒有跳出 request 的詢問畫面,讓我不疑有它

我以為 sap 自動把第二項的修改,包含在第一項的 request 中


後來在修改測試完,要 release 到 prd 時,發現了一個問題,我修改的 function 沒有跟著過來,只有 structure 改了

才知道有狀況

用 se10 檢查 devxxxx 的 request number ,一層一層展開來看,可以看到 request 確實只有把 ITAB 的 structure 物件包進去

沒有 function 的物件 (以下為示意圖)



這個問題的解法說來簡單,但可花了我五個小時的寶貴時間在 debug (好吧... 我承認有一半的時間是在看不相干的文章 :P)


我一開始採取的策略是,好吧!既然系統不願意自動幫我作,那我手動作行了吧

於是我找到用 se03 手動建立 request ,把 function 物件包進來的方法 (參考下圖)


到 se10 要 release request 時,有短暫的瞄到訊息,大意是:你所引用的物件 function 已被另一個 request 給 locked

事後推測,系統這樣的動作完全合理

既然那一個 request 還沒 release ,那我針對這個 function 的所有修改,當然會包含在那一個 request

而後面建立的 request ,則完全不包含 function 修改的部份 (合理的行為是,會另外跳一個 request 畫面,詢問建立新的或是合併)

故事的結局很簡單,我在 10 個待修改的 request 中,憑說明找到當初那個未 release 的 request ,稍加修改說明文字,

把它 release 並傳送到正式環境

THE END



最近對寫程式有點認真

倒不是忽然興趣來了

而是實在很無聊

撇開我對領這樣的薪水是否問心無愧不提

這樣的日子過起來實在是痛苦 :P

只好找點事做

沒有留言: