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.
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/barongbachi123/archive/2009/05/19/4201521.aspx
分享到:
相关推荐
在字段<c>中搜索<str>中的字符串,如果成功,则将SY-SUBRC的返回代码值设置为0并将SY-FDPOS设置为字段<c>中的该字符串的偏移量,否则将SY-SUBRC设置为4。搜索串<str>可为以下格式之一:<str>目的<pattern>搜索...
* SY-SUBRC:系统执行传回值,0 表示成功 * SY-UNAME:用户 * SY-DATUM:系统日期 * SY-UZEIT:系统时间 * SY-TCODE:当前执行程序的 Transaction code * SY-INDEX:当前 LOOP 循环过的次数 * SY-TABIX:当前处理的...
- **移动字段串到给定串**:使用`SHIFT <c> UP TO <str> <mode>`可以查找特定子串并移动字符串到边缘,`SY-SUBRC`用于记录操作状态。 - **根据第一个或最后一个字符移动**:`LEFT DELETING LEADING`和`RIGHT ...
SY-SUBRC = 0: 至少有一行数据,当ENDSELECT语句执行完,SY-DBCNT中保存着记录的个数。 SY-SUBRC = 4: 没有数据。 SY-SUBRC = 8: 只有使用“SELECT SINGLE FOR UPDATE”时才会有, 表示: WHERE条件指定的记录不止...
- SY-SUBRC:系统返回码,0表示成功。 - SY-UNAME:当前登录用户的用户名。 - SY-DATUM:系统日期。 - SY-UZEIT:系统时间。 - SY-TCODE:当前执行的事务代码。 - SY-INDEX:循环计数。 - SY-TABIX:内部表当前行号...
变量声明的语法格式为:DATA <F> [<length>] <type> [<value>] [<decimals>]。 其中:<F> 是变量名称,最大长度为 30 个字符,不能包含特殊字符。<length> 是变量的长度。<type> 是变量的数据类型。<value> 是变量...
DATA <f> [<length>] <type> [<value>] [<decimals>] 其中:<f> 是变量名称,长度最长为 30 个字符,不能包含 + , . , : ( ) 等字符:<length> 是变量的长度:<type> 是变量的数据类型:<value> 是变量的初始值:...
STATICS <c> [<Length>] <type> [<value>] [<decimals>] ``` 例如: ```sql STATICS TEMP TYPE I VALUE 10. ``` 这将声明一个名为 TEMP 的临时变量,类型为整数,值为 10。 系统变量 ABAP 中有许多系统变量,用于...
DATA <F> [<LENGTH>] <TYPE> [<VALUE>] [<DECIMALS>] ``` - `<F>`: 变量名称,最长为 30 个字符,不能包含 +, ., :, () 等特殊字符。 - `<LENGTH> <TYPE>`: 变量类型及其长度。 - `<VALUE>`: 初始值。 - `<DECIMALS>...
其中,<F> 是变数名称,<Length> 是变数长度,<type> 是变数类型,<value> 是变数初始值,<decimals> 是小数位数。 例如: DATA: COUNTER TYPE P DECIMALS 3. NAME(10) TYPE C VALUE 'DELTA'. S_DATE TYPE D VALUE ...
其中,`<F>`是变量名称,`<length>`和`<type>`定义变量的长度和类型,`<value>`是初始值,`<decimals>`指定位数。例如: ```abap DATA: COUNTER TYPE P DECIMALS 3. NAME (10) TYPE C VALUE 'Delta'. S_DATE TYPE ...
DATA <F> [ <LENGTH> ] <TYPE> [ <VALUE> ] [ <DECIMALS> ] ``` 其中,`<F>`是变量名称,最长可达30个字符;`<LENGTH><TYPE>`定义变量类型及其长度;`<VALUE>`为初始化值;`<DECIMALS>`表示小数位数。示例: ```...
其中,<变量名> 是变量的名称:<长度> 是变量的长度:<类型> 是变量的类型:<初值> 是变量的初始值:<小数位数> 是变量的小数位数。 例如: ``` DATA COUNTER TYPE P DECIMALS 3. ``` 这条语句声明了一个名为 ...
其中,<F>是变量名,<length>和<type>定义变量的长度和类型,<value>是初始值,<decimals>是小数位数。例如: DATA: COUNTER TYPE P DECIMALS 3, NAME(10) TYPE C VALUE 'Delta', S_DATE TYPE D VALUE '19991203'。 ...
DATA <F> [ <LENGTH> ] <TYPE> [ <VALUE> ] [ <DECIMALS> ] ``` - `<F>`:变量名称,最多可以有 30 个字符,不能包含特殊字符如 `+`, `.`, `:`, `()`. - `<LENGTH> <TYPE>`:变量类型及其长度。 - `<VALUE>`:...
1. 比较运算符:如=、<、>、<>、<=、>=等,以及相应的关键字,如EQ、NE、LT、GT、LE、GE等。 2. 范围限定运算符:如BETWEEN g1 AND g2,表示字段值在g1和g2之间。 3. 字符比较运算符:如LIKE g [ESCAPE h],使用...
- **DATA** 声明:`DATA<F>[<length>]<type>[<value>][<decimals>]`,其中: - `<F>`: 变量名称,最长 30 个字符,不允许包含特殊字符如 +、.、:、() 等。 - `<length><type>`: 变量类型及其长度。 - `<value>`: ...
DATA: <变量名> [LENGTH <长度>] TYPE <类型> [VALUE <值>] [DECIMALS <小数位数>]. ``` 例如: ```abap DATA: COUNTER TYPE P DECIMALS 3. DATA: NAME(10) TYPE C VALUE 'DELTA'. DATA: S_DATE TYPE D VALUE '...
- **SY-SUBRC**: 执行某条指令后的返回码,`0`表示成功。 - **SY-UNAME**: 当前登录用户的用户名。 - **SY-DATUM**: 当前系统日期。 - **SY-UZEIT**: 当前系统时间。 - **SY-TCODE**: 当前执行程序的事务代码。 - **...
IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ELSE. INSERT (TABLE) FROM TABLE <lt_dtab>. MESSAGE i101 WITH 'Insert successful.'. ...