公众号:SAP Technical
本文作者:matinal
 

前言部分

大家可以关注我的公众号,公众号里的排版更好,阅读更舒适。

正文部分


*&---------------------------------------------------------------------*
*& Report Z_IDOC_EDI_CONVERT *
*& *
*&---------------------------------------------------------------------*
REPORT Z_IDOC_EDI_CONVERT .
TABLES:ZEDITAB,EDISDEF,EDSAPPL.
*&---------------------------------------------------------------------*
*& Author: ZHT.
*& paramenters region.(parameters)
*&---------------------------------------------------------------------*
PARAMETERS:
P_FILE LIKE FILEPATH-PATHINTERN OBLIGATORY , "read file path.
W_FILE LIKE FILEPATH-PATHINTERN OBLIGATORY , "write file path
CRITERIA TYPE C LENGTH DEFAULT '*' OBLIGATORY,
IDOC_EDI RADIOBUTTON GROUP RDO, "radio button. idoc convert edi.
EDI_IDOC RADIOBUTTON GROUP RDO. "radio button edi convert idoc. IF IDOC_EDI = 'X'.
" Choose idoc convert to edi.
CALL FUNCTION 'ZIDOC_CONVERT_EDI'
EXPORTING
P_FILE = P_FILE
W_FILE = W_FILE
CRITERIA = CRITERIA.
ELSEIF EDI_IDOC = 'X'.
" Choose edi convert to idoc..
CALL FUNCTION 'ZEDI_CONVERT_IDOC'
EXPORTING
P_FILE = P_FILE
W_FILE = W_FILE
CRITERIA = CRITERIA.
ENDIF. ​

idoc convert edi的代码如下:


FUNCTION ZIDOC_CONVERT_EDI.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" REFERENCE(P_FILE) TYPE FILENAME-FILEINTERN
*" REFERENCE(W_FILE) TYPE FILENAME-FILEINTERN
*" REFERENCE(CRITERIA) TYPE ZCRITERIA
*"----------------------------------------------------------------------
DATA:
readfielname LIKE filepath-pathintern ,writefielname LIKE filepath-pathintern ,
mess TYPE string,segtype LIKE edsappl-segtyp,str_format TYPE c LENGTH ,
str_filedvalue TYPE c LENGTH ,readresult TYPE c LENGTH ,
curr_field_length TYPE i,_index TYPE i VALUE ,INX TYPE i VALUE ,
len TYPE i,
substring_result TYPE c LENGTH ,
count TYPE i,
str TYPE c LENGTH VALUE '&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&',
read_line_index TYPE i VALUE ,write_str TYPE c LENGTH ,strlenth TYPE i ,
write_result TYPE c LENGTH ,itab_lines TYPE i,
gen_filename TYPE STRING , " generate fileName.
read_filename TYPE STRING, " read file name.
ms_type TYPE c LENGTH ,
prefix_path TYPE c LENGTH , "prefix path,
max_length TYPE i, "last a record .
sigent_filename TYPE Z_FILE_NAME,
document_number TYPE EDI4DOCNUC,
idoc_number TYPE EDI4DOCNUC, wname TYPE string, "temp write file name.
fname_write TYPE String,
fname_read(),
many_record TYPE i,
mess_type TYPE zmestype. "message type.
readfielname = p_file. "logical path.
writefielname = w_file. "physical file.
*&Structure region:(work area)Author: ZHT.
DATA:BEGIN OF idoc_doment_wa,
format_str TYPE c LENGTH ,
read_result TYPE c LENGTH ,
fieldvalue TYPE c LENGTH ,
END OF idoc_doment_wa.
DATA:BEGIN OF writestr, "declare a structure ,
str TYPE string,
strlength TYPE i,
END OF writestr.
DATA:str_itab LIKE TABLE OF writestr.
*&Internal Tables Region.*& Author: ZHT.
DATA:zeditab_itab LIKE STANDARD TABLE OF zeditab WITH HEADER LINE,
zeditab_itab_two LIKE STANDARD TABLE OF zeditab WITH HEADER LINE,
itab_edsappl LIKE STANDARD TABLE OF edsappl WITH HEADER LINE ,
idoc_doment_itab LIKE idoc_doment_wa OCCURS WITH HEADER LINE,
tb_list_of_file LIKE TABLE OF rsfillst,
wa_list_of_file LIKE LINE OF tb_list_of_file.
*&file process .parameters: readfielname and writefielname return a writefielname internal table.
CALL FUNCTION 'ZIDOC_EDI_FILEPROCESS_PATH_FUN'
EXPORTING
CRITERIA = CRITERIA
READFIELNAME = readfielname
READ_FILENAME = read_filename
WRITEFIELNAME = writefielname
GEN_FILENAME = gen_filename
IMPORTING
FNAME_WRITE = fname_write
TABLES
TB_LIST_OF_FILE = tb_list_of_file.
prefix_path = fname_write.
"&loop all files.
LOOP AT tb_list_of_file INTO wa_list_of_file.
CONCATENATE wa_list_of_file-dirname wa_list_of_file-name INTO fname_read .
IF wa_list_of_file-name <> '.' AND wa_list_of_file-name <> '..'.
*&open dataset.(read file).
OPEN DATASET fname_read FOR INPUT IN TEXT MODE ENCODING DEFAULT MESSAGE mess.
DO.
READ DATASET fname_read INTO readresult.
IF sy-subrc <> .
EXIT. "if sy-subrc <> 0.
ENDIF.
IF sy-index = .
mess_type = readresult+(). "get Message type.
idoc_number = readresult+(). "get idoc number.
CLEAR: zeditab_itab,idoc_doment_itab.
SELECT * INTO CORRESPONDING FIELDS OF TABLE zeditab_itab FROM zeditab WHERE messagetype = mess_type AND zidefaultidoc = ''. "search data,. return zditab internal table.
itab_lines = LINES( zeditab_itab ).
wname = wa_list_of_file-name.
CALL FUNCTION 'ZGENERATE_FILENAME_FUNCTION'
EXPORTING
MESS_TYPE = MESS_TYPE
READ_FILE_NAME = WNAME
ZTYPE = 'IDOC_EDI'
IMPORTING
WRITE_FINENAME = gen_filename.
sigent_filename = gen_filename.
fname_write = gen_filename.
CLEAR gen_filename.
ENDIF.
"&if is first line.
IF sy-index <> .
idoc_doment_itab-read_result = readresult.
str_format = idoc_doment_itab-read_result+(). "Reading the document. Get top 7 as a format.
IF str_format = 'E2EDL24'.
many_record = many_record + .
ENDIF.
CALL FUNCTION 'ZHT_SEARCH_EDISDEF' "Call function,import format. return a SEGTYPE.
EXPORTING
strformat = str_format
IMPORTING
segtype = segtype.
idoc_doment_itab-format_str = segtype.
idoc_doment_itab-fieldvalue = readresult+().
APPEND idoc_doment_itab.
CLEAR str_format.
ENDIF.
ENDDO.
CLOSE DATASET fname_read. "Close DataSet
"&Automatic single data processing
CALL FUNCTION 'ZSINGLE_RECORD_FUNCTION'
TABLES
ZEDITAB_ITAB_TWO = ZEDITAB_ITAB_TWO
ZEDITAB_ITAB = ZEDITAB_ITAB
IDOC_DOMENT_ITAB = IDOC_DOMENT_ITAB.
"&Automatic many data processing
CALL FUNCTION 'ZMANY_RECORD_FUNCTION'
EXPORTING
many_record = many_record
TABLES
ZEDITAB_ITAB_TWO = ZEDITAB_ITAB_TWO
ZEDITAB_ITAB = ZEDITAB_ITAB
IDOC_DOMENT_ITAB = IDOC_DOMENT_ITAB.
CLEAR: many_record.
DATA:read_index TYPE i VALUE .
DATA:sum_num TYPE i.
LOOP AT zeditab_itab_two.
sum_num = zeditab_itab_two-edi_index.
ENDLOOP.
REFRESH: zeditab_itab,IDOC_DOMENT_ITAB,str_itab.
"&loop all line.
DO sum_num TIMES.
IF sy-subrc <> .
EXIT.
ENDIF.
LOOP AT zeditab_itab_two WHERE edi_index = _index.
"Append space.
IF read_index = .
write_str = zeditab_itab_two-eancomsegment.
IF STRLEN( write_str ) < .
len = - STRLEN( write_str ).
strlenth = STRLEN( str ) - len.
CONCATENATE write_str str+strlenth(len) INTO write_str.
ENDIF.
ENDIF.
IF zeditab_itab_two-qualifiervalue = space.
strlenth = STRLEN( str ) - zeditab_itab_two-length.
CONCATENATE write_str str+strlenth(zeditab_itab_two-length) INTO write_str.
ELSE.
CALL FUNCTION 'ZIDOC_EDI_REPLACE_FUNCTION' "CALL FUNCTION . replace str. return a resullt.
EXPORTING
qualifiervalue = zeditab_itab_two-qualifiervalue
format = zeditab_itab_two-z_format
param_num =
IMPORTING
reploace_result = zeditab_itab_two-qualifiervalue.
CONCATENATE write_str zeditab_itab_two-qualifiervalue INTO write_str.
ENDIF.
read_index = read_index + .
writestr-str = write_str.
ENDLOOP.
APPEND writestr TO str_itab.
read_index = .
_index = _index + .
ENDDO.
_index = . IF itab_lines <> .
"OPEN DATASET .
CONCATENATE prefix_path fname_write INTO fname_write.
OPEN DATASET fname_write FOR OUTPUT IN TEXT MODE ENCODING DEFAULT MESSAGE mess.
LOOP AT str_itab INTO writestr.
count = STRLEN( writestr-str ).
DO count TIMES.
REPLACE '&' WITH ' ' INTO writestr-str LENGTH . "replace #&# with ' '.
ENDDO.
SELECT COUNT(*) INTO document_number FROM ZEDITAB WHERE EDI_INDEX = INX AND MESSAGETYPE = MESS_TYPE.
INX = INX + .
CALL FUNCTION 'IDOC_EDI_LOGDATA_FUN'
EXPORTING
DOCUMENT_NUMBER = idoc_number "idoc number.
IDOC_MESSAGETYPE = MESS_TYPE
IDOC_NUMBER = document_number "document number.
FILE_NAME = sigent_filename.
WRITE: / writestr-str.
TRANSFER writestr-str TO fname_write.
ENDLOOP.
INX = .
CLOSE DATASET fname_write. "close dataset.
IF itab_lines = .
MESSAGE e000(ZIDOC_EDI_MSG).
ELSE.
MESSAGE s001(ZIDOC_EDI_MSG) WITH fname_write.
ENDIF.
WRITE: / sy-uline.
ENDIF.
CLEAR fname_write.
REFRESH: zeditab_itab,str_itab,zeditab_itab_two.
* DATA:filename TYPE filepath-pathintern.
* filename = wa_list_of_file-name.
* IF MESS_TYPE <> 'ORDRSP'.
* CALL FUNCTION 'ZMOVEOUTEDI_IDOCFILEFUNCITON'
* EXPORTING
* resourefilepath = fname_read
* messagetype = mess_type
* filename = filename.
* ENDIF.
ENDIF.
ENDLOOP.
ENDFUNCTION. ​

【ABAP系列】SAP 一个完整的SAP的Abap例子(idoc,edi文件的相互转换)的更多相关文章

  1. 一个完整的JENKINS下的ANT BUILD.XML文件(Jenkins可以参考)

    一个完整的JENKINS下的ANT BUILD.XML文件 <?xml version="1.0" encoding="UTF-8"?> <p ...

  2. 一个完整的SAP RFC调用接口封装

    因为经常需要访问sap操作数据,就封装了一个类方便调用,运行条件需要安装sap客户端,在sap客户端安装之后会带有一个com接口,本接口就通过这个com访问sap,因为com的后期绑定问题故使用了vb ...

  3. Jenkins进阶系列之——16一个完整的JENKINS下的ANT BUILD.XML文件

    网上看见的,确实很全,该有的基本都覆盖到了.自己拿来稍微改改就可以用了. 注:property中的value是你自己的一些本地变量.需要改成自己的 <?xml version="1.0 ...

  4. 一个完整的JENKINS下的ANT BUILD.XML文件

    网上看见的,确实很全,该有的基本都覆盖到了.自己拿来稍微改改就可以用了. 注:property中的value是你自己的一些本地变量.需要改成自己的 <?xml version="1.0 ...

  5. 【ABAP系列】SAP ABAP BAPI_REQUISITION_CREATE创建采购申请

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP BAPI_RE ...

  6. 【ABAP系列】SAP ABAP 字符编码与解码、Unicode

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP 字符编码与解码 ...

  7. 【ABAP系列】SAP ABAP Break Point

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP Break P ...

  8. 【ABAP系列】SAP ABAP替代校验全解析

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP替代校验全解析 ...

  9. 【ABAP系列】SAP ABAP DATA - COMMON PART

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP DATA - ...

随机推荐

  1. 4.3 jmu-Java-03面向对象-06-继承覆盖综合练习-Person、Student、Employee、Company (20 分)中的一些问题

    1.Employee类的equals 由于题目要求//首先调用父类的equals方法,如果返回true.再比较company与salary.//比较salary属性时,使用DecimalFormat ...

  2. SpringMVC优雅的获取HttpSevletRequest及HttpServletResponse简录

    https://cloud.tencent.com/developer/article/1403947 通常情况下,SpringMVC可以通过入参的方式绑定HttpServletRequest和Htt ...

  3. puppet集群

    实验目的:        由于现有的环境中,puppetmaster是单节点,客户端更新时出现了更新失败和时间较长等现象.考虑将puppetmaster做成集群的模式,解决大量客户端更新延时和单节点故 ...

  4. 同余&逆元简单总结

    # 同余&逆元 1. 同余 1. 同余的基本概念及性质 若\(x\)%\(m=a\)即m是 x-a 的一个因子, 则称x与a关于m同余,记作:\[x \equiv a(mod \;m)\] 同 ...

  5. Hibernate 缓存机制详细分析

    在本篇随笔里将会分析一下hibernate的缓存机制,包括一级缓存(session级别).二级缓存(sessionFactory级别)以及查询缓存,当然还要讨论下我们的N+1的问题. 随笔虽长,但我相 ...

  6. Python 正则表达式Ⅴ

    正则表达式实例 字符匹配 字符类 特殊https://www.xuanhe.net/字符类

  7. Python 模块 Ⅱ

    搜索路径 当你导入一个模块,Python 解析器对模块位置的搜索顺序是: 1.当前目录 2.如果不在当前目录,Python 则搜索在 shell 变量 PYTHONPATH 下的每个目录. 3.如果都 ...

  8. 在CentOS/Windows下配置Nginx(以及踩坑)

    在CentOS/Windows下配置Nginx(以及踩坑) 1. 序言 因为这类文章网上比较多,实际操作起来也大同小异,所以我并不会着重于详细配置方面,而是将我配置时踩的坑写出来. 2. CentOS ...

  9. “M_PI_2”: 重复定义的宏

    问题警告:“M_PI_2”: 重复定义的宏 分析:在Visual Studio上使用math.h库时与其他库数学库冲突,我们可以通过添加宏定义“_USE_MATH_DEFINES”来消除math.h定 ...

  10. ES6 Promise使用介绍

    1.什么是Promise Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大. 这么说可能不够直观的理解,看下面的两个例子 // callback回调函数 ...