================= 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.