我正试图将SAP内部表以.CSV文件的形式保存到SAP目录中。我已经学会了应该将内容转换为字符类型,但我遇到了一个非法的强制转换错误。这是我的代码:
FORM f_opendata TABLES p_tab TYPE STANDARD TABLE USING
p_work TYPE any.
FIELD-SYMBOLS: <lfs_wa>.
CONCATENATE c_headerfile c_initials sy-datum c_ext INTO v_dtasetfile.
OPEN DATASET v_dtasetfile FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc EQ 0.
LOOP AT p_tab INTO p_work.
ASSIGN p_work TO <lfs_wa> CASTING TYPE c.
TRANSFER <lfs_wa> TO v_dtasetfile.
ENDLOOP.
CLOSE DATASET v_dtasetfile.
MESSAGE i899(f2) WITH 'SUCCESS' v_dtasetfile.
ENDIF.
ENDFORM.
这就是错误:
发生了一个异常,下面将对此进行详细解释。分配给类CX_SY_ASSIGN_CAST_ILLEGAL_CAST
的异常为未在过程F_OPENDATA
中捕获,也未通过RAISING子句传播。由于过程的调用方无法预料如果发生异常,则当前程序终止。异常的原因是:
错误发生在表单的语句中将f分配给铸件
将f分配给铸件类型t。
或
将f分配给像f1一样的铸件。
或
添加了
的at表语句分配铸造可能的错误原因如下:
1.字段f的类型或由t或f1确定的目标类型包含数据引用、对象引用、字符串或内部表作为组件
这些组件必须与其位置(偏移)完全匹配以及它们的类型
2.指定的类型t或f1的类型不适合字段符号
3.相关表的行类型不适合目标类型根据1)中描述的规则来指定
转换与铸造不同。如果表中包含的字段不是CLIKE
,系统将拒绝强制转换整行。此时您有两个选项:
- 确保输出表只包含类似字符的字段或
- 遍历每行的每个字段(可以使用RTTI执行此操作),并根据需要转换内容
在将数据传输到数据集之前,我使用了一个函数转换为文本格式:
CALL FUNCTION 'SAP_CONVERT_TO_TEX_FORMAT'
EXPORTING
I_FIELD_SEPERATOR = c_colon
TABLES
I_TAB_SAP_DATA = ig_final
CHANGING
I_TAB_CONVERTED_DATA = ig_text
EXCEPTIONS
CONVERSION_FAILED = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
OPEN DATASET v_g_dtasetfile FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc EQ 0.
LOOP AT ig_text ASSIGNING <fs_l_wa>.
TRANSFER <fs_l_wa> TO v_g_dtasetfile.
ENDLOOP.
CLOSE DATASET v_g_dtasetfile.
MESSAGE i899(f2) WITH text-020 v_g_dtasetfile text-021.
ENDIF.