2009/02/19

SY-SUBRC 的含义

http://blog.csdn.net/xiaohutushen/archive/2008/12/25/3603707.aspx

在网上和书上就是找不到多少RFC的实例,现在将这个实例公开给大家,希望能给大家带来启发!

 

================= FUNCTION MODULE (或RFC中) SY-SUBRC 的含义 ================
使用SELECT语句选择查询:
SY-SUBRC = 0: 至少有一行数据,当ENDSELECT语句执行完,SY-DBCNT中保存着记录的个数。
SY-SUBRC = 4: 没有数据。
SY-SUBRC = 8: 只有使用"SELECT SINGLE FOR UPDATE"时才会有,
              表示: WHERE条件指定的记录不止一行,结果是没有记录被选中。

使用INSERT语句,向表中插入一行,必须注意INSERT的顺序与表中字段的顺序一致:
SY-SUBRC = 0: 插入成功,SY-DBCNT包含了插入的行数,0或1。
SY-SUBRC = 4: 由于有相同的KEY存在,所以插入失败。

使用LOOP语句来遍历一个内表:
SY-SUBRC = 0: 循环至少被执行一次。
SY-SUBRC = 4: 循环没有被执行,可能是没有数据,也可能是没有符合条件的记录。

使用DELETE语句来删除一条记录:
SY-SUBRC = 0: 找到一行并删除之,如果该表有不唯一主键,也就是有多条重复的记录,则只删除第一条记录。
SY-SUBRC = 4: 没有找到符合条件的记录,也没有删除。

使用UPDATE语句来更新一条记录:
SY-SUBRC = 0: 找到记录并更新,(如果有多条记录呢?)
SY-SUBRC = 4: 没有找到符合条件的记录,也没有更新。


+++++++++++++++++++++++ 实例RFC ++++++++++++++++++++++++++++++++++++++++++++++
*建立临时表ZTEST1,字段为:
* ZUSERID CHAR 20
* ZPASSWD CHAR 20
*-------------------------------------------------
FUNCTION ZRFC_01.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(ACTION) TYPE  /1SAP1/CL_ACH0001  传入参数ACTION,表示CREATE、EDIT、DELETE记录
*"     VALUE(WHEREUSERID) TYPE  /GC1/DTE_MSG_TXT 传入参数WHEREUSERID,按照USERID来查找关键字
*"  EXPORTING
*"     VALUE(RETURN) TYPE  /AIN/ACT_PUB_PARAMNAME 传出参数RETURN,返回是否成功,空串表示成功,非空串表示未成功
*"     VALUE(ERRNUM) TYPE  /AIN/ACTIVITY_COUNTER 传出参数ERRNUM,返回错误代码
*"  TABLES
*"      ZTEMPTABLE STRUCTURE  ZTEST1    传入、传出表,以表为参数
*"----------------------------------------------------------------------

  TABLES:ZTEST1.

  DATA:
  WA_ZTEMPTABLE LIKE ZTEMPTABLE,
  TRANSACTION_ID LIKE ARFCTID,
  V_VAILD(1) TYPE C.

  V_VAILD = 'X'.

* OPEN A DATA TRANSACTION
  CALL FUNCTION 'TRANSACTION_BEGIN'
    IMPORTING
      TRANSACTION_ID = TRANSACTION_ID.


  CASE ACTION .
  *按照关键字ZUSERID查询
     WHEN 'QUERY'.
      SELECT * FROM ZTEST1 INTO TABLE ZTEMPTABLE where ZUSERID = WHEREUSERID.
        IF SY-SUBRC = 0.
        ELSE.
          V_VAILD = ''.
          ERRNUM = SY-SUBRC.
        ENDIF.
       
  *选择所有的记录
    WHEN 'SELECTALL'.
      SELECT * FROM ZTEST1 INTO TABLE ZTEMPTABLE.
        IF SY-SUBRC = 0.
        ELSE.
          V_VAILD = ''.
          ERRNUM = SY-SUBRC.
        ENDIF.
       
 *插入记录
    WHEN 'CREATE'.

      LOOP AT ZTEMPTABLE INTO WA_ZTEMPTABLE.
        INSERT ZTEST1 FROM WA_ZTEMPTABLE.
        IF SY-SUBRC = 0.
        ELSE.
          V_VAILD = ''.
          ERRNUM = SY-SUBRC.
        ENDIF.
      ENDLOOP.

 *修改记录
    WHEN 'EDIT'.

      LOOP AT ZTEMPTABLE INTO WA_ZTEMPTABLE.
        UPDATE ZTEST1 FROM WA_ZTEMPTABLE.
        IF SY-SUBRC = 0.
        ELSE.
          V_VAILD = ''.
          ERRNUM = SY-SUBRC.
        ENDIF.
      ENDLOOP.
 
 *删除记录
    WHEN 'DELETE'.

      LOOP AT ZTEMPTABLE INTO WA_ZTEMPTABLE.
        DELETE ZTEST1 FROM WA_ZTEMPTABLE.
        IF SY-SUBRC = 0.
        ELSE.
          V_VAILD = ''.
          ERRNUM = SY-SUBRC.
        ENDIF.
      ENDLOOP.

    WHEN OTHERS.

  ENDCASE.

  *如果V_VALID为X,则表示成功,否则表示失败,并返回RETURN错误代码
  IF V_VAILD = 'X'.
    CALL FUNCTION 'TRANSACTION_END'
      EXPORTING
        TRANSACTION_ID = TRANSACTION_ID.
    RETURN = ''.
  ELSE.
    CALL FUNCTION 'TRANSACTION_ABORT'
      EXPORTING
        TRANSACTION_ID = TRANSACTION_ID.
    RETURN = 'THE CURRENT ACTION IS FAILURE!'.


  ENDIF.


ENDFUNCTION.

2 comments:

oakleyses said...

gucci handbags, polo ralph lauren, louis vuitton outlet, polo ralph lauren outlet online, longchamp outlet, oakley sunglasses, polo outlet, nike free, louis vuitton outlet, prada handbags, kate spade outlet, prada outlet, ugg boots, christian louboutin, air max, tiffany and co, louboutin pas cher, louis vuitton, cheap oakley sunglasses, christian louboutin shoes, replica watches, replica watches, louis vuitton outlet, ray ban sunglasses, longchamp outlet, ugg boots, nike outlet, nike roshe, christian louboutin outlet, nike air max, tiffany jewelry, jordan pas cher, longchamp outlet, ray ban sunglasses, louis vuitton, longchamp pas cher, nike free run, jordan shoes, chanel handbags, michael kors pas cher, nike air max, ray ban sunglasses, uggs on sale, christian louboutin uk, oakley sunglasses, sac longchamp pas cher, oakley sunglasses, tory burch outlet, oakley sunglasses wholesale

oakleyses said...

moncler, links of london, juicy couture outlet, louis vuitton, montre pas cher, karen millen uk, ugg uk, moncler, supra shoes, canada goose, ugg,ugg australia,ugg italia, canada goose outlet, ugg pas cher, louis vuitton, canada goose, thomas sabo, moncler, canada goose outlet, pandora charms, coach outlet, canada goose uk, ugg, replica watches, pandora jewelry, hollister, canada goose outlet, swarovski crystal, canada goose jackets, moncler, pandora uk, moncler uk, moncler outlet, canada goose, juicy couture outlet, ugg,uggs,uggs canada, louis vuitton, doudoune moncler, marc jacobs, pandora jewelry, wedding dresses, louis vuitton, louis vuitton, swarovski, toms shoes, moncler outlet