EDI报文到Excel转换方案详解

news2024/11/23 3:51:33

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,与原报文中的字段进行对比,检查是否遗漏或者取值错误。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1424740.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kore.ai获10亿元融资,提供定制化类ChatGPT助手

1月31日&#xff0c;生成式AI和企业对话平台Kore.ai在官网宣布&#xff0c;获得1.5 亿美元&#xff08;约10.7亿元&#xff09;融资。本次由FTV Capital 领投&#xff0c;英伟达等跟投。 Kore.ai主要提供银行、医疗、零售、营销、人力资源等多种领域的&#xff0c;定制化类Cha…

哪个牌子的头戴式耳机好?推荐性价比高的头戴式耳机品牌

随着科技的不断发展&#xff0c;耳机市场也呈现出百花齐放的态势&#xff0c;从高端的奢侈品牌到亲民的平价品牌&#xff0c;各种款式、功能的耳机层出不穷&#xff0c;而头戴式耳机作为其中的一员&#xff0c;凭借其优秀的音质和降噪功能&#xff0c;受到了广大用户的喜爱&…

微信公众号在线客服源码系统,开发组合PHP+MySQL 带完整的安装代码包以及搭建教程

移动互联网的快速发展&#xff0c;微信公众号成为了企业与用户之间的重要沟通桥梁。为了满足企业对微信公众号在线客服的需求&#xff0c;小编给大家分享一款基于PHP和MySQL的微信公众号在线客服源码系统。这套系统能够帮助企业快速搭建自己的微信公众号在线客服平台&#xff0…

༺༽༾ཊ—Unity之-02-抽象工厂模式—ཏ༿༼༻

首先创建一个项目&#xff0c; 在这个初始界面我们需要做一些准备工作&#xff0c; 建基础通用文件夹&#xff0c; 创建一个Plane 重置后 缩放100倍 加一个颜色&#xff0c; 任务&#xff1a;使用 抽象工厂模式 创建 人物与宠物 模型&#xff0c; 首先资源商店下载 人物与宠物…

中科大计网学习记录笔记(二):网络核心

前言&#xff1a; 学习视频&#xff1a;中科大郑烇、杨坚全套《计算机网络&#xff08;自顶向下方法 第7版&#xff0c;James F.Kurose&#xff0c;Keith W.Ross&#xff09;》课程 该视频是B站非常著名的计网学习视频&#xff0c;但相信很多朋友和我一样在听完前面的部分发现信…

AI 时代如何增强数据保护,来听 Commvault 怎么说

在数据赛道持续火爆&#xff0c;全行业都重视数据产生的价值的时候&#xff0c;数据泄露与窃听、篡改、加密等勒索软件攻击也日益严重。截至 2023 年 10 月&#xff0c;全球勒索软件攻击数量同比增长了 37.75%。 已经连续 12 次被权威分析机构 Gartner 评为企业备份和恢复软件解…

protobuf之带有repeated成员实例使用(四)

1protoc转换为.h和.cc文件 protobuf之实例使用&#xff08;三&#xff09;-CSDN博客 2 .proto文件 syntax "proto2"; package contacts;//定义联系人message message PeopleInfo {required string name 1; //姓名required int32 age 2; //年龄requir…

FPGA高端项目:Xilinx Artix7系列FPGA 多路视频缩放拼接 工程解决方案 提供4套工程源码+技术支持

目录 1、前言版本更新说明给读者的一封信FPGA就业高端项目培训计划免责声明 2、相关方案推荐我这里已有的FPGA图像缩放方案我已有的FPGA视频拼接叠加融合方案本方案的Xilinx Kintex7系列FPGA上的ov5640版本本方案的Xilinx Kintex7系列FPGA上的HDMI版本 3、设计思路框架设计框图…

【服务端性能测试】测试方案设计(实操需要准备的内容)

一般性能测试流程都是&#xff1a;获取测试需求——>测试需求分析——>测试方案设计——>压测环境搭建&#xff08;目前是线上&#xff09;——>测试数据准备——>测试脚本准备、调试——>测试脚本执行——>监控数据录入——>测试结果跟开发一起分析—…

springboot141夕阳红公寓管理系统的设计与实现

基于Spring Boot的夕阳红公寓管理系统的设计与实现 摘 要 如今社会上各行各业&#xff0c;都在用属于自己专用的软件来进行工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。互联网的发展&#xff0c;离不开一些新的技术&#xff0c;而新技术的…

如何在树莓派安装运行Nginx实现无公网ip环境访问内网静态网站

文章目录 1. Nginx安装2. 安装cpolar3.配置域名访问Nginx4. 固定域名访问5. 配置静态站点 安装 Nginx&#xff08;发音为“engine-x”&#xff09;可以将您的树莓派变成一个强大的 Web 服务器&#xff0c;可以用于托管网站或 Web 应用程序。相比其他 Web 服务器&#xff0c;Ngi…

从零开始复现GPT2(四):训练代码的实现

源码地址&#xff1a;https://gitee.com/guojialiang2023/gpt2 GPT2 模型Configuration类定义 Recorder训练框架Trainer训练代码GPT2TrainingSpec 类train_gpt2_model 函数add_subparser 函数 模型 Configuration 这段代码定义了一个名为 TrainConfig 的 Python 类&#xff0c…

TypeScript(十) Map对象、元组、联合类型、接口

1. Map对象 1.1. 简述 Map对象保存键值对&#xff0c;并且能够记住键的原始插入顺序。   任何值都可以作为一个键或一个值。 1.2. 创建 Map 使用Map类型和new 关键字来创建Map&#xff1a; 如&#xff1a; let myMap new Map([["key1", "value1"],[&…

docker私有库

1.registry私有仓库 拉取registry镜像 docker pull registry 修改docker配置文件并重启 vim /etc/docker/daemon.json {"insecure-registries": ["172.16.23.23:5000"], #添加&#xff0c;注意用逗号结尾"registry-mirrors": ["ht…

网络编程之ip地址

目录 1、概念&#xff1a; 2、所属的tcp/ip协议的层 3、IP地址查询 &#xff08;1&#xff09;Linux &#xff08;2&#xff09;windows 4、IP地址结构组成及分类 &#xff08;1&#xff09;组成&#xff08;网络位主机位&#xff09; &#xff08;2&#xff09;分类 1、…

Linux进程控制:进程创建与等待

目录 一、fork函数 1.1fork函数的调用与功能 1.2fork函数的返回值与写实拷贝 1.3fork的常规用法与失败原因 二、进程终止 2.1进程的退出场景和常见退出方法 2.2_exit函数与exit函数 2.2.1_exit函数 2.2.2exit函数 2.3return退出 三、进程等待 3.1wait及waitpid的方法…

MFC串行化的应用实例

之前写过一篇MFC串行化的博文;下面看一个具体例子; 新建一个单文档应用程序;在最后一步,把View类的基类改为CFormView; 然后在资源面板编辑自己的字段; 然后到doc类的头文件添加对应变量, public:CString name;int age;CString sex;CString dept;CString zhiwu;CStrin…

CentOS部署Docker Registry镜像仓库并结合内网穿透实现远程访问

文章目录 1. 部署Docker Registry2. 本地测试推送镜像3. Linux 安装cpolar4. 配置Docker Registry公网访问地址5. 公网远程推送Docker Registry6. 固定Docker Registry公网地址 Docker Registry 本地镜像仓库,简单几步结合cpolar内网穿透工具实现远程pull or push (拉取和推送)…

山海鲸可视化:引领银行管理进入数据可视化新时代

在金融领域&#xff0c;数据是决策的关键。作为山海鲸可视化的开发者&#xff0c;我们深知数据的价值&#xff0c;并致力于通过可视化技术为银行管理提供更为直观、高效的数据分析工具。 应用场景&#xff1a; 风险管理&#xff1a;银行在运营过程中面临各种风险&#xff0c;如…

Collections集合工具类-JAVA

java.util.Collections:是个集合工具类它不是集合&#xff0c;而是集合的工具类 常用 API&#xff1a;注意 binarySearch 方法要求元素有序 方法实现&#xff1a; public class Test01 {public static void main(String[] args) {ArrayList<String>list1new ArrayList…