本篇內(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)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(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個字符和字符串變量中包含的字符個數(shù)。
大家先別急著滑動屏幕,先試著自己計(jì)算一下,看和標(biāo)準(zhǔn)答案是否有出入。也許大家覺得這些小的知識點(diǎn)沒什么用,但Jerry馬上會分享一個我實(shí)際處理過的客戶incident,正是由于類似這種看似不起眼的小知識點(diǎn)沒有留意,最后影響了項(xiàng)目進(jìn)展。
2
1
19
17
逐一解釋。
整型變量的值,整數(shù)1,賦給字符串變量lv_s, 這里發(fā)生一個隱式類型轉(zhuǎn)換。
SAP幫助文檔里聲明,整型變量賦給字符串變量時,如果整數(shù)為負(fù)數(shù),則字符串變量末尾為"-";如果整數(shù)為正數(shù),則字符串變量末尾為空白字符。換言之,當(dāng)整型變量到字符串變量的隱式類型轉(zhuǎn)換發(fā)生時,字符串變量末尾會多出一位,代表賦值源頭的整型數(shù)的符號位。
lv_s多出來的這個空白字符在調(diào)試器里看得很清楚,2000正是空白字符的16進(jìn)制編碼。同時調(diào)試器里也能看到lv_s的字符串個數(shù)為2.
和前一例相比,lv_s2的復(fù)制操作沒有出現(xiàn)隱式類型轉(zhuǎn)換,而是直接被賦以了一個字符常量,故字符個數(shù)為1.
lv_ss的類型為SSTRING,實(shí)際就是一個CHAR20:
在調(diào)試器里,lv_ss有18個前導(dǎo)空白(leading blank)字符,字符"1"和1個尾部空白(trailing blank)字符組成,總共20個字符,調(diào)試器里的Technical Type顯示為C(20).
那為什么strlen(lv_ss)不等于20,而等于19?SAP幫助文檔里給出了答案——SSTRING即CHAR20這種變量,屬于固定長度(fixed length)類型變量。當(dāng)使用strlen函數(shù)計(jì)算這種變量的字符串個數(shù)時,尾部空白字符不應(yīng)參加計(jì)數(shù),所以要減一。
有了例三的基礎(chǔ),這個就很容易了。變量lv_s3類型是CHAR18,屬于固定長度類型變量,因此strlen計(jì)算出的字符串個數(shù)為18 - 1 = 17.
第一個例子中,我們把一個整數(shù)直接賦給了一個字符串變量,發(fā)生了隱式類型轉(zhuǎn)換。在實(shí)際項(xiàng)目中,這種隱式類型轉(zhuǎn)換很容易出現(xiàn)在函數(shù)或者ABAP類方法的參數(shù)傳遞中。對于函數(shù)或ABAP類方法的形式參數(shù),如果我們傳遞的實(shí)際參數(shù)類型和其類型不匹配,就會發(fā)生隱式類型轉(zhuǎn)換,這種自動轉(zhuǎn)換有時并非我們期望發(fā)生的,甚至容易被忽略。
看一個真實(shí)的例子。我曾經(jīng)擔(dān)任過一個俄羅斯的SAP CRM客戶項(xiàng)目的Dev Angel,收到過一個性能相關(guān)的incident,客戶打開某個UI的速度極其緩慢,甚至經(jīng)常超時。
我通過調(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時,一下傻了眼:
它的值從15一下變成了3473457. 這個數(shù)字是什么鬼?!
再看函數(shù)的形式參數(shù)定義,iv_max_entries類型為整型,而二次開發(fā)顧問傳入的硬編碼值'15', 是一個字符值,我頓時恍然大悟。
Jerry先不解釋,而是請大家看下面這段代碼:
執(zhí)行,正好輸出3473457這個魔幻數(shù)字。那么代碼第四行31003500是哪里來的?其實(shí)就是字符串'15'的十六進(jìn)制編碼。
也就是說,二次開發(fā)顧問在RFC調(diào)用時,將硬編碼的'15'傳給了接受整型變量的函數(shù)參數(shù)IV_MAX_ENTRIES. 應(yīng)該該參數(shù)類型為整型,所以'15'的十六進(jìn)制編碼'31003500'被自動轉(zhuǎn)換成了對應(yīng)的整型數(shù)3473457. 顯然這不是開發(fā)顧問期望的行為,但因?yàn)槌绦蚰軌蚶^續(xù)運(yùn)行,所以這個問題暫時被掩蓋了。
而RFC調(diào)用完成之后,緊接著是一個嵌套的LOOP. 在Max Hit能按照期望工作的前提下,對于最多包含15條記錄的內(nèi)表,就算進(jìn)行嵌套的LOOP操作也能很快完成。但如今因?yàn)镸ax Hit不工作,內(nèi)表記錄從最多15條一下子變成了超過40萬條,在這么龐大規(guī)模的內(nèi)表上進(jìn)行嵌套LOOP操作,性能可想而知。
到此,相信大家對“SAP ABAP字符變量和字符串變量怎么理解”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!