問題背景:
業務顧問反饋在使用BDC 進行MEQ1進行供應商配額時,由于以前錄屏時用例只有3行數據,導致現在有5行數據的時候,代碼仍然只獲取了3行數據進行錄入,現在需要更改代碼,使其按照實際情況自動調整行數。
解決記錄:
首先根據業務顧問提供的出錯的案例,進行問題復刻,將CALL事務代碼的時候,模式的值IM_MODE調整為A,就可以將屏幕一步一步點開進行調試。
下面是調試的界面
數據填充結束的時候,我們可以看到下面這里本應該有5條,但是現在只有3條,那應該就是這里的問題,一般情況下,像這種填充表格的時候數據被重復覆蓋,大概率是表格的行數在賦值時重復了,這時候一般可以直接從BDCDATA入手。
在調試時看一下BDCDATA的數據,這里我導出來了,放一個截圖,從下圖可以看到,這個數字02出現了很多次,應該是它的問題,我們將其依次在debug的時候改成02、03、04、05,再進行調試。
調試結果如下,發現數據從3條成功變成了5條,那么數據就可以這樣修改:
下面放一個賦值的思維,這樣填寫就可以根據數據行數進行行數累加了:
這樣就修改完了。
后續思考:
其實這是一個比較偷懶的改法,一點都沒有動腦,直接改變了原有的邏輯。因為我在看代碼的時候,發現上一個開發者在02旁邊寫了一句話“兩條以上的記錄,點擊新增,在第二行里錄入信息”,其實是表明他是考慮到多行輸入數據的情況的,只是出了差錯,每次新填的數據將原有的第2行進行覆蓋了。這是因為在BDC錄屏時,如果上下拉動進度條或者滑動鼠標滾輪,都是需要記錄的,但是滑動鼠標滾輪時不生成記錄代碼,必須改為上下拉動進度條。這里少了拉動進度條的代碼,所以每個02都會覆蓋原有的數據,如果加上拉動進度條的代碼,就可以保證每個02都是新增,因為我不擅長添加拉動進度條的代碼,所以,我老老實實添加的代表數字的代碼。
好吧,最后的最后,我還是又按照原來開發的意思修改了代碼,在代碼原有的基礎上更改了代碼,加上了拉動進度條的代碼BDC_OKCODE = NL,就是拉動進度條的意思,原有代碼的BDC_OKCODE是/00,是回車的意思,現在修改成=NL,就可以了。業務顧問測試后也是可以的,可惡,我寫了這么多代碼,那就還是把以前的代碼放進來做個紀念吧
? ? ?以前的代碼:
???ELSE.?"?兩條以上的記錄,點擊新增,在第二行里錄入信息
*??????????CHANGE?BY?GYX?D20250630,兩條以上數據按照編號依次新增?START-------
**??????????PERFORM?BDC_DYNPRO??????USING?'SAPDM06Q'?'0215'.
**??????????PERFORM?BDC_FIELD???????USING?'BDC_CURSOR'
**????????????????????????????????????????'EQUP-QUOTE(02)'.
**??????????PERFORM?BDC_FIELD???????USING?'BDC_OKCODE'
**????????????????????????????????????????'/00'.
**??????????PERFORM?BDC_FIELD???????USING?'EQUP-BESKZ(02)'
**????????????????????????????????????????W_DATA-BESKZ.
**??????????PERFORM?BDC_FIELD???????USING?'RM06Q-SOBIN(02)'
**????????????????????????????????????????W_DATA-ESOBS.
**??????????PERFORM?BDC_FIELD???????USING?'EQUP-LIFNR(02)'
**????????????????????????????????????????W_DATA-LIFNR.
**??????????WRITE?W_DATA-QUOTE?TO?LC_QUOTE.
**??????????PERFORM?BDC_FIELD???????USING?'EQUP-QUOTE(02)'
**????????????????????????????????????????LC_QUOTE.
**
**??????????"最小批量尺寸
**??????????WRITE?W_DATA-MINLS?TO?L_STR.
**??????????PERFORM?BDC_FIELD???????USING?'EQUP-MINLS(02)'
**????????????????????????????????????????L_STR.PERFORM?BDC_DYNPRO??????USING?'SAPDM06Q'?'0215'.DATA(GV_FIELD)?=??'EQUP-QUOTE('?&&?LV_NUM?&&?')'.PERFORM?BDC_FIELD???????USING?'BDC_CURSOR'GV_FIELD."'EQUP-QUOTE(02)'.PERFORM?BDC_FIELD???????USING?'BDC_OKCODE''/00'.GV_FIELD?=??'EQUP-BESKZ('?&&?LV_NUM?&&?')'.PERFORM?BDC_FIELD???????USING???GV_FIELD"'EQUP-BESKZ(02)'W_DATA-BESKZ.GV_FIELD?=??'RM06Q-SOBIN('?&&?LV_NUM?&&?')'.PERFORM?BDC_FIELD???????USING?GV_FIELD"'RM06Q-SOBIN(02)'W_DATA-ESOBS.GV_FIELD?=??'EQUP-LIFNR('?&&?LV_NUM?&&?')'.PERFORM?BDC_FIELD???????USING?GV_FIELD"'EQUP-LIFNR(02)'W_DATA-LIFNR.WRITE?W_DATA-QUOTE?TO?LC_QUOTE.GV_FIELD?=??'EQUP-QUOTE('?&&?LV_NUM?&&?')'.PERFORM?BDC_FIELD???????USING?GV_FIELD"'EQUP-QUOTE(02)'LC_QUOTE."最小批量尺寸WRITE?W_DATA-MINLS?TO?L_STR.GV_FIELD?=??'EQUP-MINLS('?&&?LV_NUM?&&?')'.PERFORM?BDC_FIELD???????USING?GV_FIELD"'EQUP-MINLS(02)'L_STR.*??????????CHANGE?BY?GYX?D20250630,兩條以上數據按照編號依次新增?END------