EDI报文到Excel转换方案详解

2024-01-31 12:04

本文主要是介绍EDI报文到Excel转换方案详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

EDI目前已广泛应用于电子、物流、汽车、零售等行业。

越来越多的交易伙伴要求建立EDI连接,通过EDI来对接上下游交易伙伴,收发业务单据。

当我们与新的交易伙伴建立EDI连接时,有多种实施方案可供选择,如果您的单据量较少,预算也不多的话,Excel方案相对来说就比较适合了。

本文章主要给大家讲解当您自主实施时,如何写将EDI报文解析到Excel中的代码。

以830物料需求预测为例

一、搭建工作流

在知行之桥EDI系统中,所有文件转换的中间格式都是XML,所以在任何格式转前,都需要先转换为XML,再进行下一步处理。 830是ANSI X12报文标准中的一类消息,要将830解析到Excel中,可以先通过X12端口进行预处理,知行之桥EDI系统的X12端口可以进行报文到XML的双向转换,所以先通过X12端口将X12报文格式转换为对应的XML格式,再将转换的XML解析到Excel即可。

根据上述需求,可搭建如下工作流:

EDI_Excel_Translate1.png

二、使用规范中的示例830报文通过X12端口生成对应XML文件

EDI_Excel_Translate2.png

 

EDI_Excel_Translate3.png

示例报文和生成的XML文件见如下附件:

 下载示例报文和生成的XML文件

示例报文可参考如下解析进行阅读:

ISA*00*          *00*          *01*123456789      *01*987654321      *940613*1025*U*04010*000000333*0*P*\'
GS*PS*005346481*005346481*940613*1025*000000433*X*004010'
ST*830*000001048'
BFR*05**123456*DL*A*20230606*20230801'
-929701 版本号
-DL 预测类型
-20230606 预测开始日期
-20230801 预测结束日期
N1*ST*EDI SENDER INC*01*123456789'
-ST  指收货方
-EDI SENDER INC 收货方名称
-123456789 收货方编号
N1*SF*EDI RECEIVING INC*01*987654321'-SF指发货方
-EDI RECEIVING INC 发货方名称
-987654321 发货方编号
LIN**BP*BP001*VP*VP001*PO*PO123'
-BP001 买方物料号
-VP001 供应商物料号
-PO123 订单号
REF*DK*DOCK1'
-DOCK1 码头编号
FST*600*C*D*20230606'
-600 预测数量
-C 预测标识
-D 预测时间标识
-20230606 交付起始日期
FST*5000*D*W*20230704'
FST*10000*D*F*20230905*20231002'
SHP*01*10000*050*20230613'
-10000 上次接收日期
-20230613 接收日期
SHP*02*10000*051*20230606**20230613'
-10000 累计接收数量
-20230606 累计开始日期
LIN**BP*4562*VP*100*EC*123*PO*PO456'
FST*50*C*D*20230606'
FST*50*C*D*20230613'
FST*150*C*W*20230627'
FST*2000*D*W*20230801'
CTT*2*20550'
SE*49*000001048'
GE*1*000000433'
IEA*1*000000333'
三、根据实际业务需求设计Excel模版

根据客户提供的规范整理对应的Mapping,然后参考Mapping和对应XML文件可以自定义一个830的Excel模版,本文提供如下示例:

EDI_Excel_Translate4.png

示例模版见如下附件:

 示例模版

四、写转换代码

通过X12端口获得830报文对应的XML,并且已经设置好Excel目标格式,接下来就可以进行代码解析了

可以通过在Excel模版中添加批注,然后使用xpath从XML文件中取到对应值

注意,逻辑代码和赋值代码写在批注里,只有需要输出的写在单元格里

1.从XML中进行取值

打开830报文生成的XML文件可以看到如下图所示的层级结构

EDI_Excel_Translate5.png

首先需要进入到/Interchange/FunctionalGroup/TransactionSet/TX-00401-830该路径里,然后对header部分进行取值

EDI_Excel_Translate6.png

可通过call关键字(rsb:call或arc:call)和xmlDOMSearch运算器进入到指定目录

<rsb:set attr="xml.uri" value="[FilePath]" />
<rsb:set attr="xml.xpath" value="/Interchange/FunctionalGroup/TransactionSet/TX-00401-830" />
<rsb:call op="xmlDOMSearch" in="xml">...
</rsb:call>

扩展阅读:call关键字的使用方法 xmlDOMSearch运算器的使用方法

取值方式:[xpath("") | def]

EDI_Excel_Translate7.png

[xpath("BFR/BFR03") | def] 即取BFR下的BFR03的值

[xpath(“N1Loop1[N1/N101='ST']/N1/N102″) | def] 即取NILoop1下N1里N101等于 ‘ST’时N102的值, N1Loop1根据N101值的不同,存放不同的信息,N101=’ST’时放的是收货方信息 [N1/N101='ST']即加在取值中的条件,条件的写法如下: 1.位置:条件要加在循环的节点后,可以看到XML文件中有多个N1Loop1,所以N1Loop1就是循环的节点,[N1/N101='ST']需加在N1Loop1后 2.写法:[判断路径='条件值'],注意,条件内不能包含任何空格

整个Item部分都在LINLoop1里,且一个830里可能会包含多个物料信息,所以需要再通过call关键字和xmlDOMSearch运算器进入到LINLoop1里,如果有多个LINLoop1,call关键字就可以进行循环读取

<rsb:set attr="xml.xpath" value="LINLoop1" />
<rsb:call op="xmlDOMSearch" in="xml">...
</rsb:call>

预测部分在”FSTLoop1中,一个Item也可能会对应多组预测信息,所以先进入到FSTLoop1里再进行取值

<rsb:set attr="xml.xpath" value="FSTLoop1" />
<rsb:call op="xmlDOMSearch" in="xml">...
</rsb:call>
五、测试代码

打开Excel端口,选择转换模式为Template,然后上传写好的代码文件

EDI_Excel_Translate8.png

 

EDI_Excel_Translate9.png

在X12端口的输入出上传要解析的830报文并发送

EDI_Excel_Translate10.png

从Excel端口的输出处即可拿到生成的Excel文件

EDI_Excel_Translate12.png

最后打开生成的Excel,与原报文中的字段进行对比,检查是否遗漏或者取值错误。

这篇关于EDI报文到Excel转换方案详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/663698

相关文章

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.

idea的终端(Terminal)cmd的命令换成linux的命令详解

《idea的终端(Terminal)cmd的命令换成linux的命令详解》本文介绍IDEA配置Git的步骤:安装Git、修改终端设置并重启IDEA,强调顺序,作为个人经验分享,希望提供参考并支持脚本之... 目录一编程、设置前二、前置条件三、android设置四、设置后总结一、php设置前二、前置条件

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

python中列表应用和扩展性实用详解

《python中列表应用和扩展性实用详解》文章介绍了Python列表的核心特性:有序数据集合,用[]定义,元素类型可不同,支持迭代、循环、切片,可执行增删改查、排序、推导式及嵌套操作,是常用的数据处理... 目录1、列表定义2、格式3、列表是可迭代对象4、列表的常见操作总结1、列表定义是处理一组有序项目的

python使用try函数详解

《python使用try函数详解》Pythontry语句用于异常处理,支持捕获特定/多种异常、else/final子句确保资源释放,结合with语句自动清理,可自定义异常及嵌套结构,灵活应对错误场景... 目录try 函数的基本语法捕获特定异常捕获多个异常使用 else 子句使用 finally 子句捕获所

C++11范围for初始化列表auto decltype详解

《C++11范围for初始化列表autodecltype详解》C++11引入auto类型推导、decltype类型推断、统一列表初始化、范围for循环及智能指针,提升代码简洁性、类型安全与资源管理效... 目录C++11新特性1. 自动类型推导auto1.1 基本语法2. decltype3. 列表初始化3

SQL Server 中的 WITH (NOLOCK) 示例详解

《SQLServer中的WITH(NOLOCK)示例详解》SQLServer中的WITH(NOLOCK)是一种表提示,等同于READUNCOMMITTED隔离级别,允许查询在不获取共享锁的情... 目录SQL Server 中的 WITH (NOLOCK) 详解一、WITH (NOLOCK) 的本质二、工作

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (

Java Thread中join方法使用举例详解

《JavaThread中join方法使用举例详解》JavaThread中join()方法主要是让调用改方法的thread完成run方法里面的东西后,在执行join()方法后面的代码,这篇文章主要介绍... 目录前言1.join()方法的定义和作用2.join()方法的三个重载版本3.join()方法的工作原