ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Routine in DTP Filter

Routine in DTP Filter

原创 Linux操作系统 作者:vivike 时间:2011-07-05 10:26:10 0 删除 编辑
本以為在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.
問題在哪裡呢?
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(2TYPE 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.
 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23947343/viewspace-701345/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 将RMB转换成KUSD
请登录后发表评论 登录
全部评论

注册时间:2010-06-01

  • 博文量
    37
  • 访问量
    88589