真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SAPABAP字符變量和字符串變量怎么理解-創(chuàng)新互聯(lián)

本篇內(nèi)容主要講解“SAP ABAP字符變量和字符串變量怎么理解”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“SAP ABAP字符變量和字符串變量怎么理解”吧!

創(chuàng)新互聯(lián)建站始終堅持【策劃先行,效果至上】的經(jīng)營理念,通過多達10年累計超上千家客戶的網(wǎng)站建設總結(jié)了一套系統(tǒng)有效的全網(wǎng)營銷推廣解決方案,現(xiàn)已廣泛運用于各行各業(yè)的客戶,其中包括:成都效果圖設計等企業(yè),備受客戶贊譽。

使用ABAP strlen函數(shù)計算下列這4個字符和字符串變量中包含的字符個數(shù)。

SAP ABAP字符變量和字符串變量怎么理解

大家先別急著滑動屏幕,先試著自己計算一下,看和標準答案是否有出入。也許大家覺得這些小的知識點沒什么用,但Jerry馬上會分享一個我實際處理過的客戶incident,正是由于類似這種看似不起眼的小知識點沒有留意,最后影響了項目進展。

正確答案,依次是:

  • 2

  • 1

  • 19

  • 17

逐一解釋。

strlen( lv_s ) = 2

整型變量的值,整數(shù)1,賦給字符串變量lv_s, 這里發(fā)生一個隱式類型轉(zhuǎn)換。

SAP幫助文檔里聲明,整型變量賦給字符串變量時,如果整數(shù)為負數(shù),則字符串變量末尾為"-";如果整數(shù)為正數(shù),則字符串變量末尾為空白字符。換言之,當整型變量到字符串變量的隱式類型轉(zhuǎn)換發(fā)生時,字符串變量末尾會多出一位,代表賦值源頭的整型數(shù)的符號位。

SAP ABAP字符變量和字符串變量怎么理解

lv_s多出來的這個空白字符在調(diào)試器里看得很清楚,2000正是空白字符的16進制編碼。同時調(diào)試器里也能看到lv_s的字符串個數(shù)為2.

SAP ABAP字符變量和字符串變量怎么理解

strlen( lv_s2 ) = 1

和前一例相比,lv_s2的復制操作沒有出現(xiàn)隱式類型轉(zhuǎn)換,而是直接被賦以了一個字符常量,故字符個數(shù)為1.

strlen( lv_ss) = 19

lv_ss的類型為SSTRING,實際就是一個CHAR20:

SAP ABAP字符變量和字符串變量怎么理解

在調(diào)試器里,lv_ss有18個前導空白(leading blank)字符,字符"1"和1個尾部空白(trailing blank)字符組成,總共20個字符,調(diào)試器里的Technical Type顯示為C(20).

SAP ABAP字符變量和字符串變量怎么理解

那為什么strlen(lv_ss)不等于20,而等于19?SAP幫助文檔里給出了答案——SSTRING即CHAR20這種變量,屬于固定長度(fixed length)類型變量。當使用strlen函數(shù)計算這種變量的字符串個數(shù)時,尾部空白字符不應參加計數(shù),所以要減一。

SAP ABAP字符變量和字符串變量怎么理解

strlen( lv_s3) = 17

有了例三的基礎(chǔ),這個就很容易了。變量lv_s3類型是CHAR18,屬于固定長度類型變量,因此strlen計算出的字符串個數(shù)為18 - 1 = 17.

第一個例子中,我們把一個整數(shù)直接賦給了一個字符串變量,發(fā)生了隱式類型轉(zhuǎn)換。在實際項目中,這種隱式類型轉(zhuǎn)換很容易出現(xiàn)在函數(shù)或者ABAP類方法的參數(shù)傳遞中。對于函數(shù)或ABAP類方法的形式參數(shù),如果我們傳遞的實際參數(shù)類型和其類型不匹配,就會發(fā)生隱式類型轉(zhuǎn)換,這種自動轉(zhuǎn)換有時并非我們期望發(fā)生的,甚至容易被忽略。

看一個真實的例子。我曾經(jīng)擔任過一個俄羅斯的SAP CRM客戶項目的Dev Angel,收到過一個性能相關(guān)的incident,客戶打開某個UI的速度極其緩慢,甚至經(jīng)常超時。

我通過調(diào)試,最終發(fā)現(xiàn)罪魁禍首位于下段代碼。該代碼從SAP CRM發(fā)起RFC調(diào)用,去SAP ERP讀取數(shù)據(jù),Max Hit設置為15,意思是期望ERP端至多返回15條記錄。

SAP ABAP字符變量和字符串變量怎么理解

然而從ERP端返回了總共408093條記錄。顯然,雖然通過硬編碼指定Max Hit為15,卻完全沒有起到限制作用。

SAP ABAP字符變量和字符串變量怎么理解

起初我想當然地認為這是ERP函數(shù)的bug,沒有正確處理CRM調(diào)用端傳遞過來的Max Hit. 然而當我在調(diào)試器里單步執(zhí)行到CRM函數(shù)內(nèi)部查看iv_max_entries時,一下傻了眼:

SAP ABAP字符變量和字符串變量怎么理解

它的值從15一下變成了3473457. 這個數(shù)字是什么鬼?!

再看函數(shù)的形式參數(shù)定義,iv_max_entries類型為整型,而二次開發(fā)顧問傳入的硬編碼值'15', 是一個字符值,我頓時恍然大悟。

SAP ABAP字符變量和字符串變量怎么理解

'15'是怎么變成魔幻數(shù)字3473457的?

Jerry先不解釋,而是請大家看下面這段代碼:

SAP ABAP字符變量和字符串變量怎么理解

執(zhí)行,正好輸出3473457這個魔幻數(shù)字。那么代碼第四行31003500是哪里來的?其實就是字符串'15'的十六進制編碼。

SAP ABAP字符變量和字符串變量怎么理解

也就是說,二次開發(fā)顧問在RFC調(diào)用時,將硬編碼的'15'傳給了接受整型變量的函數(shù)參數(shù)IV_MAX_ENTRIES. 應該該參數(shù)類型為整型,所以'15'的十六進制編碼'31003500'被自動轉(zhuǎn)換成了對應的整型數(shù)3473457. 顯然這不是開發(fā)顧問期望的行為,但因為程序能夠繼續(xù)運行,所以這個問題暫時被掩蓋了。

而RFC調(diào)用完成之后,緊接著是一個嵌套的LOOP. 在Max Hit能按照期望工作的前提下,對于最多包含15條記錄的內(nèi)表,就算進行嵌套的LOOP操作也能很快完成。但如今因為Max Hit不工作,內(nèi)表記錄從最多15條一下子變成了超過40萬條,在這么龐大規(guī)模的內(nèi)表上進行嵌套LOOP操作,性能可想而知。

到此,相信大家對“SAP ABAP字符變量和字符串變量怎么理解”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!


本文題目:SAPABAP字符變量和字符串變量怎么理解-創(chuàng)新互聯(lián)
新聞來源:http://weahome.cn/article/dgeihj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部