本以為在DPT Filter裏面寫routine跟infopackage裏面應該是一樣的,昨天去試了一下,發現還是有差異的,剛進入routine,系統給的默認代碼如下:
SPAN { font-family: "Courier New"; font-size: 10pt; color: #000000; background: #FFFFFF; } .L4S31 { font-style. italic; color: #808080; } .L4S32 { color: #3399FF; } .L4S33 { color: #4DA619; } .L4S52 { color: #0000FF; }
form compute_
tables l_t_range structure rssdlrange
using i_r_request type ref to IF_RSBK_REQUEST_ADMINTAB_VIEW
i_fieldnm type RSFIELDNM
changing p_subrc like sy-subrc.
* Insert source code to current selection field
*$*$ begin of routine - insert your code only below this line *-*
data: l_idx like sy-tabix.
read table l_t_range with key
fieldname = ' '.
l_idx = sy-tabix.
*....
if l_idx <> 0.
modify l_t_range index l_idx.
else.
append l_t_range.
endif.
p_subrc = 0.
tables l_t_range structure rssdlrange
using i_r_request type ref to IF_RSBK_REQUEST_ADMINTAB_VIEW
i_fieldnm type RSFIELDNM
changing p_subrc like sy-subrc.
* Insert source code to current selection field
*$*$ begin of routine - insert your code only below this line *-*
data: l_idx like sy-tabix.
read table l_t_range with key
fieldname = ' '.
l_idx = sy-tabix.
*....
if l_idx <> 0.
modify l_t_range index l_idx.
else.
append l_t_range.
endif.
p_subrc = 0.
問題在哪裡呢?
1.fieldname =
' '.,這個人讓人鬱悶了···我去Debug這段代碼,會發現l_t_range 也為空;
2.
form compute_----居然沒給咱參數,後來發現這個參數就是我們需要的fieldname
因此,需要注意以上2點。以下是OK 的代碼:
SPAN { font-family: "Courier New"; font-size: 10pt; color: #000000; background: #FFFFFF; } .L0S31 { font-style. italic; color: #808080; } .L0S32 { color: #3399FF; } .L0S33 { color: #4DA619; } .L0S52 { color: #0000FF; } DATA: l_idx LIKE sy-tabix.
READ TABLE l_t_range WITH KEY
fieldname = 'PSTNG_DATE'.
l_idx = sy-tabix.
***....
** IF l_idx <> 0.
** MODIFY l_t_range INDEX l_idx.
** ELSE.
** APPEND l_t_range.
** ENDIF.
DATA: l_date TYPE sy-datum.
DATA: t_date(2) TYPE c.
DATA:l_edate TYPE sy-datum.
DATA:l_year TYPE t009b-bdatj.
DATA: l_month TYPE t009b-bumon.
DATA: l_days TYPE t009b-butag.
* BREAK-POINT.
l_date = sy-datum.
t_date = l_date+4(2).
l_date+6(2) = '01'.
IF t_date = '01'.
l_date+4(2) = '12'.
l_date+0(4) = l_date+0(4) - 1.
l_year = l_date+0(4) - 1.
l_month = '12'.
ELSE.
l_date+4(2) = l_date+4(2) - 1.
l_year = l_date+0(4) .
l_month = t_date - 1.
ENDIF.
CALL FUNCTION'/SDF/RBE_GET_DAYS_PER_MONTH'
EXPORTING
par_month = l_month
par_year = l_year
IMPORTING
par_days = l_days.
CONCATENATE l_year l_month '01' INTO l_date.
CONCATENATE l_year l_month l_days INTO l_edate.
l_t_range-sign = 'I'.
l_t_range-option = 'BT'.
l_t_range-fieldname = 'PSTNG_DATE'.
l_t_range-low = l_date.
l_t_range-high = l_edate .
IF l_idx <> 0.
MODIFY l_t_range INDEX l_idx.
ELSE.
APPEND l_t_range.
ENDIF.
* MODIFY l_t_range INDEX l_idx.
p_subrc = 0.
READ TABLE l_t_range WITH KEY
fieldname = 'PSTNG_DATE'.
l_idx = sy-tabix.
***....
** IF l_idx <> 0.
** MODIFY l_t_range INDEX l_idx.
** ELSE.
** APPEND l_t_range.
** ENDIF.
DATA: l_date TYPE sy-datum.
DATA: t_date(2) TYPE c.
DATA:l_edate TYPE sy-datum.
DATA:l_year TYPE t009b-bdatj.
DATA: l_month TYPE t009b-bumon.
DATA: l_days TYPE t009b-butag.
* BREAK-POINT.
l_date = sy-datum.
t_date = l_date+4(2).
l_date+6(2) = '01'.
IF t_date = '01'.
l_date+4(2) = '12'.
l_date+0(4) = l_date+0(4) - 1.
l_year = l_date+0(4) - 1.
l_month = '12'.
ELSE.
l_date+4(2) = l_date+4(2) - 1.
l_year = l_date+0(4) .
l_month = t_date - 1.
ENDIF.
CALL FUNCTION'/SDF/RBE_GET_DAYS_PER_MONTH'
EXPORTING
par_month = l_month
par_year = l_year
IMPORTING
par_days = l_days.
CONCATENATE l_year l_month '01' INTO l_date.
CONCATENATE l_year l_month l_days INTO l_edate.
l_t_range-sign = 'I'.
l_t_range-option = 'BT'.
l_t_range-fieldname = 'PSTNG_DATE'.
l_t_range-low = l_date.
l_t_range-high = l_edate .
IF l_idx <> 0.
MODIFY l_t_range INDEX l_idx.
ELSE.
APPEND l_t_range.
ENDIF.
* MODIFY l_t_range INDEX l_idx.
p_subrc = 0.
至於怎麼知道參數名字,開始還去transfermation去找,結果是錯誤的,後來發現我們可以先通過下常量,然後在Monitor裏面去查看,就可以知道參數的名字了。
哦,還有一點需要說明,如果l_idx=0,直接用modify語句,會報錯,所以會有這段代碼:
IF l_idx <> 0.
MODIFY l_t_range INDEX l_idx.
ELSE.
APPEND l_t_range.
ENDIF.
MODIFY l_t_range INDEX l_idx.
ELSE.
APPEND l_t_range.
ENDIF.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23947343/viewspace-701345/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/23947343/viewspace-701345/