本篇介紹 SAP 后端提供的兩個(gè)調(diào)試工具拗引。
- SAP 外部斷點(diǎn)
- SAP Gateway Service Error Log
外部斷點(diǎn)
在程序中設(shè)置外部斷點(diǎn)串塑,可以在 SAP 側(cè)調(diào)試從外部傳遞的數(shù)據(jù)。比如蛔垢,我們用 SEGW 事務(wù)碼定位到 Create 方法胎挎,右鍵,進(jìn)入 ABAP 代碼三娩。
在 Create 方法中設(shè)置一個(gè)外部斷點(diǎn):
然后在界面中新增一筆記錄,從這個(gè)外部斷點(diǎn)妹懒,可以查看系統(tǒng)新增數(shù)據(jù)的過(guò)程雀监。
有時(shí)候,錯(cuò)誤可能還到不了data model 的 CRUD 相關(guān)方法體代碼中眨唬。比如会前,我們知道 SAP client 是 char4 類型的,如果故意在 UI 中匾竿,將 client 作為 integer 型瓦宜。這個(gè)時(shí)候,出現(xiàn)了錯(cuò)誤岭妖,但不會(huì)進(jìn)入 create_entity
方法體临庇,外部斷點(diǎn)監(jiān)控不到。
saveCreate: function() {
var oView = this.getView();
var oNewEntry = {
"Mandt": 100,
"EmpId": oView.byId("EmpId").getValue(),
"EmpName": oView.byId("EmpName").getValue(),
"EmpAddr": oView.byId("EmpAddr").getValue()
};
...
頁(yè)面得到返回的錯(cuò)誤:
{
"error" : {
"code" : "CX_SXML_PARSE_ERROR/001560AA0E081DEB8CA398CC1690D406",
"message" : {
"lang" : "en",
"value" : "Error while parsing an XML stream"
},
"innererror" : {
"application" : {
"component_id" : "",
"service_namespace" : "/SAP/",
"service_id" : "ZEMPPRJ_SRV",
"service_version" : "0001"
},
"transactionid" : "B853C0BA5D210020E0058FD94B52B6A8",
"timestamp" : "20170628081051.0048810",
"Error_Resolution" : {
"SAP_Transaction" : "Run transaction /IWFND/ERROR_LOG on SAP Gateway hub system and search for entries with the timestamp above for more details",
"SAP_Note" : "See SAP Note 1797736 for error analysis (https://service.sap.com/sap/support/notes/1797736)"
},
"errordetails" : [
]
}
}
}
關(guān)鍵信息: Error while parsing an XML stream
昵慌。此時(shí)假夺,要用 Error log 來(lái)進(jìn)行錯(cuò)誤定位和查找。查找前設(shè)置 security level 為 Full斋攀。
設(shè)置安全級(jí)別 (security level)
通過(guò) Internet 網(wǎng)絡(luò)訪問(wèn)安全設(shè)置非常重要侄泽,SAP 對(duì)外部通過(guò) Gateway service 訪問(wèn)設(shè)置了兩種級(jí)別。需要變更級(jí)別蜻韭,才能看到相關(guān)信息:
Secure Level : 這個(gè)是默認(rèn)的級(jí)別悼尾。如果設(shè)置為安全級(jí)別,有錯(cuò)誤發(fā)生的時(shí)候肖方,很多信息是沒有的闺魏,比如 service name, HTTP 請(qǐng)求和相應(yīng)等。所以我們需要改變 security level俯画。
Full Level : 這個(gè)級(jí)別沒有限制析桥,可以分析到錯(cuò)誤進(jìn)一步的信息。
如何設(shè)置安全級(jí)別
有兩種方法艰垂。方法一是運(yùn)行事務(wù)碼 /IWFND/ERROR_LOG 泡仗,然后通過(guò)菜單:Error log -> Global configuration 來(lái)設(shè)置。
這種方法猜憎,對(duì)所有用戶娩怎,在設(shè)置失效恢復(fù)到 secure 級(jí)別前,一直可用胰柑。
方法 2 是變更某一個(gè)用戶的臨時(shí)權(quán)限截亦,在 2 個(gè)小時(shí)內(nèi)有效爬泥。運(yùn)行事務(wù)碼 /IWFND/TRACES,然后將當(dāng)前用戶的臨時(shí) level 設(shè)為 Full崩瓤。
Replay
設(shè)置上一步后袍啡,重寫運(yùn)行 Web 程序。然后在 /IWFND/ERROR_LOG 事務(wù)碼中可以通過(guò)查看 Request body, Response body 或者 Replay 的方法來(lái)發(fā)現(xiàn)錯(cuò)誤却桶。當(dāng)然境输,如果系統(tǒng)反饋的消息不明確,還要依賴開發(fā)者的判斷颖系。