[转]SY-SUBRC 的含义
在网上和书上就是找不到多少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.