本篇內(nèi)容主要講解“SAP ABAP字符變量和字符串變量怎么理解”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“SAP ABAP字符變量和字符串變量怎么理解”吧!
成都創(chuàng)新互聯(lián)長期為上1000家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為蒼溪企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站,蒼溪網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
使用ABAP strlen函數(shù)計(jì)算下列這4個(gè)字符和字符串變量中包含的字符個(gè)數(shù)。
大家先別急著滑動(dòng)屏幕,先試著自己計(jì)算一下,看和標(biāo)準(zhǔn)答案是否有出入。也許大家覺得這些小的知識(shí)點(diǎn)沒什么用,但Jerry馬上會(huì)分享一個(gè)我實(shí)際處理過的客戶incident,正是由于類似這種看似不起眼的小知識(shí)點(diǎn)沒有留意,最后影響了項(xiàng)目進(jìn)展。
2
1
19
17
逐一解釋。
整型變量的值,整數(shù)1,賦給字符串變量lv_s, 這里發(fā)生一個(gè)隱式類型轉(zhuǎn)換。
SAP幫助文檔里聲明,整型變量賦給字符串變量時(shí),如果整數(shù)為負(fù)數(shù),則字符串變量末尾為"-";如果整數(shù)為正數(shù),則字符串變量末尾為空白字符。換言之,當(dāng)整型變量到字符串變量的隱式類型轉(zhuǎn)換發(fā)生時(shí),字符串變量末尾會(huì)多出一位,代表賦值源頭的整型數(shù)的符號(hào)位。
lv_s多出來的這個(gè)空白字符在調(diào)試器里看得很清楚,2000正是空白字符的16進(jìn)制編碼。同時(shí)調(diào)試器里也能看到lv_s的字符串個(gè)數(shù)為2.
和前一例相比,lv_s2的復(fù)制操作沒有出現(xiàn)隱式類型轉(zhuǎn)換,而是直接被賦以了一個(gè)字符常量,故字符個(gè)數(shù)為1.
lv_ss的類型為SSTRING,實(shí)際就是一個(gè)CHAR20:
在調(diào)試器里,lv_ss有18個(gè)前導(dǎo)空白(leading blank)字符,字符"1"和1個(gè)尾部空白(trailing blank)字符組成,總共20個(gè)字符,調(diào)試器里的Technical Type顯示為C(20).
那為什么strlen(lv_ss)不等于20,而等于19?SAP幫助文檔里給出了答案——SSTRING即CHAR20這種變量,屬于固定長度(fixed length)類型變量。當(dāng)使用strlen函數(shù)計(jì)算這種變量的字符串個(gè)數(shù)時(shí),尾部空白字符不應(yīng)參加計(jì)數(shù),所以要減一。
有了例三的基礎(chǔ),這個(gè)就很容易了。變量lv_s3類型是CHAR18,屬于固定長度類型變量,因此strlen計(jì)算出的字符串個(gè)數(shù)為18 - 1 = 17.
第一個(gè)例子中,我們把一個(gè)整數(shù)直接賦給了一個(gè)字符串變量,發(fā)生了隱式類型轉(zhuǎn)換。在實(shí)際項(xiàng)目中,這種隱式類型轉(zhuǎn)換很容易出現(xiàn)在函數(shù)或者ABAP類方法的參數(shù)傳遞中。對(duì)于函數(shù)或ABAP類方法的形式參數(shù),如果我們傳遞的實(shí)際參數(shù)類型和其類型不匹配,就會(huì)發(fā)生隱式類型轉(zhuǎn)換,這種自動(dòng)轉(zhuǎn)換有時(shí)并非我們期望發(fā)生的,甚至容易被忽略。
看一個(gè)真實(shí)的例子。我曾經(jīng)擔(dān)任過一個(gè)俄羅斯的SAP CRM客戶項(xiàng)目的Dev Angel,收到過一個(gè)性能相關(guān)的incident,客戶打開某個(gè)UI的速度極其緩慢,甚至經(jīng)常超時(shí)。
我通過調(diào)試,最終發(fā)現(xiàn)罪魁禍?zhǔn)孜挥谙露未a。該代碼從SAP CRM發(fā)起RFC調(diào)用,去SAP ERP讀取數(shù)據(jù),Max Hit設(shè)置為15,意思是期望ERP端至多返回15條記錄。
然而從ERP端返回了總共408093條記錄。顯然,雖然通過硬編碼指定Max Hit為15,卻完全沒有起到限制作用。
起初我想當(dāng)然地認(rèn)為這是ERP函數(shù)的bug,沒有正確處理CRM調(diào)用端傳遞過來的Max Hit. 然而當(dāng)我在調(diào)試器里單步執(zhí)行到CRM函數(shù)內(nèi)部查看iv_max_entries時(shí),一下傻了眼:
它的值從15一下變成了3473457. 這個(gè)數(shù)字是什么鬼?!
再看函數(shù)的形式參數(shù)定義,iv_max_entries類型為整型,而二次開發(fā)顧問傳入的硬編碼值'15', 是一個(gè)字符值,我頓時(shí)恍然大悟。
Jerry先不解釋,而是請(qǐng)大家看下面這段代碼:
執(zhí)行,正好輸出3473457這個(gè)魔幻數(shù)字。那么代碼第四行31003500是哪里來的?其實(shí)就是字符串'15'的十六進(jìn)制編碼。
也就是說,二次開發(fā)顧問在RFC調(diào)用時(shí),將硬編碼的'15'傳給了接受整型變量的函數(shù)參數(shù)IV_MAX_ENTRIES. 應(yīng)該該參數(shù)類型為整型,所以'15'的十六進(jìn)制編碼'31003500'被自動(dòng)轉(zhuǎn)換成了對(duì)應(yīng)的整型數(shù)3473457. 顯然這不是開發(fā)顧問期望的行為,但因?yàn)槌绦蚰軌蚶^續(xù)運(yùn)行,所以這個(gè)問題暫時(shí)被掩蓋了。
而RFC調(diào)用完成之后,緊接著是一個(gè)嵌套的LOOP. 在Max Hit能按照期望工作的前提下,對(duì)于最多包含15條記錄的內(nèi)表,就算進(jìn)行嵌套的LOOP操作也能很快完成。但如今因?yàn)镸ax Hit不工作,內(nèi)表記錄從最多15條一下子變成了超過40萬條,在這么龐大規(guī)模的內(nèi)表上進(jìn)行嵌套LOOP操作,性能可想而知。
到此,相信大家對(duì)“SAP ABAP字符變量和字符串變量怎么理解”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
網(wǎng)頁題目:SAPABAP字符變量和字符串變量怎么理解
標(biāo)題鏈接:http://www.rwnh.cn/article12/jscogc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、、網(wǎng)站維護(hù)、響應(yīng)式網(wǎng)站、微信公眾號(hào)、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)