首页 > 其他分享 >为什么EDI工作流中围绕XML做EDI报文数据解析/生成?

为什么EDI工作流中围绕XML做EDI报文数据解析/生成?

时间:2023-09-11 12:33:15浏览次数:35  
标签:XML 处理 流中 报文 EDI 端口 节点

经常有客户问起,为什么在处理EDI文件时不一次到位,而需要使用多个端口来分次进行处理呢,是不是想要多占用几个端口好多卖钱呀?

实际上,在一开始的知行EDI产品中,功能还没有这么完善,当时只支持EDI常见的传输协议,那个时候我们在做报文翻译时,还不能仅通过简单的配置来实现,需要手写代码,去读取报文,然后获取每一行的数据,再逐一去读对应的业务值。参考之前的实施经验,觉得实施过程漫长、前期开发代码量大、后期维护成本也高,经过产品部门多次考量,在一次次的产品升级过程中,不停的进行功能新增、完善,才形成了现在这样的一套报文处理模式。

那么,到底是不是直接对报文进行处理更简单呢?

假设我们现在通过AS2传输,接收850采购订单EDI报文,采用自定义XML方案。

直接处理EDI报文

我们来回顾一下直接处理业务报文的步骤:

首先,通过AS2收到850采购订单后,要直接进行处理,完成报文翻译,我们的代码逻辑大约如下:

  1. 先读取当前850采购订单报文的内容
  2. 对内容进行分割,将850采购订单的内容按照节点分割,例如:ST节点,BEG节点等等,每个节点代表不同的信息
  3. 开始逐一读取节点,匹配节点所属的业务含义,并将每个节点中的详细业务数据读取出来
  4. 一边读取数据,一边输出自定义XML
  5. 调试程序,确认业务逻辑和取值正确

以上步骤中我们可以看出,所有的处理都要使用代码来实现,那么代码量一定是非常大的。同时,因为EDI报文中数据比较多,而且结构复杂,所以代码逻辑也会非常复杂。在初步完成代码之后,后续的业务测试过程中,若是因为对EDI报文理解不到位,想要修改某一部分的处理逻辑或是取值方式,将会造成很大的工作量,而且往往都是牵一发而动全身,修改可能会造成其他本来正确的数据出错。同时,在切换生产环境之后,如果贸易合作伙伴对EDI规范做了某些升级或者调整,后来的维护人员需要将整个的代码整体通读一遍,完全理解之后,才能进行修改。

分步处理EDI报文

如果在目前的知行EDI产品中,我们分多个端口去完成报文翻译,每个端口都只负责各自的功能部分,那么整体步骤如下:

  1. AS2端口收到850采购订单后,直接转发到X12端口(直接配置实现)
  2. X12端口将EDI报文转换为标准XML,并转发到XMLMap端口(直接配置实现)
  3. XMLMap端口通过界面拖拽,并辅以少许简单code,实现转换为自定义XML文件(简单coding)

以上步骤中我们可以看出,通过这种方式,一方面,代码量非常少,大家知道,写的越多,容易出错的地方越多,代码量少了,大部分功能依赖于产品,所以出错概率会降低。如果有EDI报文结构更改或是升级的情况,前两步我们不用做任何修改,只要在最后一步,仅修改需要调整的部分即可。

标准XML文件

在知行EDI系统中,几乎所有的EDI报文处理都是以标准XML文件为媒介的。

XML(可扩展标记语言)是一种标记语言,提供了一种简单,灵活的文本格式。XML描述文档的数据结构,并为所有其他规范提供通用语法。XML的主要应用程序之一就是处理B2B和B2C数据交换。

这是部分EDI报文采购订单和标准XML采购订单:

850 原始EDI文件:

..
BEG*00*DS*0476696888**20150708~
REF*SB*ZZ11~
REF*6P*ZZ~
...

  经X12端口标准XML:

<pre>...
<BEG type="Segment">
    <!--Transaction Set Purpose Code-->
    <BEG01>
<!--Original-->00</BEG01>
<!--Purchase Order Type Code-->
    <BEG02>
<!--Dropship-->DS</BEG02>
<!--Purchase Order Number-->
    <BEG03>0476696888</BEG03>
<!--Release Number-->
    <BEG04 xsi:nil="true"/>
<!--Date-->
    <BEG05>20150708</BEG05>
</BEG>
<REF type="Segment">
<!--Reference Identification Qualifier-->
    <REF01><!--Sales Region Number-->SB</REF01>
<!--Reference Identification-->
    <REF02>ZZ11</REF02> 
</REF>
...
</pre>

  

我们可以看出,标准XML包含解释每个节点含义的注释。最重要的是,对于标准XML文件,可以直接将其映射到目标格式,而不必查找EDI文档中每个节点的含义,只需参考标准XML文档中提供的说明和贸易伙伴提供的规范即可。

显而易见,在处理EDI报文时,并不是直接对EDI报文进行处理一步到位就更好。先将EDI报文转换为标准XML,再对标准XML进行后续处理存在以下优点:

  • 代码逻辑简单,工作量较小

  • 可以自动检查贸易合作伙伴传来的EDI报文是否符合国际标准

  • 易于调试,进行业务测试

  • 易于后期维护

  • 易于和其他目标格式文档做转换,比如自定义XML,CSV,PSV,Excel等

  • 增加功能模块的独立性,降低耦合性

阅读原文:为什么工作流中围绕XML做 EDI 报文数据解析生成

标签:XML,处理,流中,报文,EDI,端口,节点
From: https://www.cnblogs.com/edi-ka/p/17693210.html

相关文章

  • redis集群
    Redis集群本章是基于CentOS7下的Redis集群教程,包括:单机安装RedisRedis主从Redis分片集群1.单机安装Redis首先需要安装Redis所需要的依赖:yuminstall-ygcctcl然后将课前资料提供的Redis安装包上传到虚拟机的任意目录:例如,我放到了/tmp目录:解压缩:tar-xzfredis-6......
  • 分享一个 SpringBoot + Redis 实现「查找附近的人」的小技巧
    前言SpringDataRedis提供了十分简单的地理位置定位的功能,今天我就用一小段代码告诉大家如何实现。正文1、引入依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>2、更......
  • redis-实战篇-商户查询缓存
    基本思路添加缓存的原则:动态数据不要加缓存缓存cache:数据交换的缓冲区。一般读写性能较高。比如浏览器缓存,浏览器会将一些经常使用的数据缓存到本机,这样在多次加载时就不需要访问服务器,而浏览器未命中的缓存则会去tomcat获取。缓存的作用:降低后端负载、提高读写效率、降低响应......
  • Go每日一库之3:go-homedir
    简介今天我们来看一个很小,很实用的库go-homedir。顾名思义,go-homedir用来获取用户的主目录。实际上,使用标准库os/user我们也可以得到这个信息:packagemainimport("fmt""log""os/user")funcmain(){u,err:=user.Current()iferr!=nil{log.Fata......
  • Redis的缓存穿透、缓存雪崩、缓存击穿问题及解决方案
    Redis的缓存穿透、缓存雪崩、缓存击穿问题及解决方案缓存穿透问题及解决思路缓存穿透:缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。因为我们查数据通常是现在redis缓存查数据,如果redis没有这个数据,就会去数据库查。如......
  • vue使用富文本编辑器vue-quill-editor,含拖拽图片,调整默认高度
    这两天的工作用到了vue\-quill-editor,来记录一下使用心得/踩过的坑供大家参考。1、安装npminstall vue-quill-editornpminstallquill2、引入main.js里样式也记得引入:importVueQuillEditorfrom'vue-quill-editor'import'quill/dist/quill.core.css'import'quill/dist/qu......
  • Linux下安装Redis的详细安装步骤
    一.Redis安装1.下载linux压缩包【redis-5.0.5.tar.gz】2.通过FlashFXP把压缩包传送到服务器3.解压缩tar-zxvfredis-5.0.5.tar.gz4.进入redis-5.0.5可以看到redis的配置文件redis.conf5.基本的环境安装使用gcc-v命令查看gcc版本已经是4.8.5了,于是就没有再次安装,直接......
  • 查询Redis
            ......
  • python学习笔记-redis缓存数据库
    一、缓存数据库介绍NoSQL(notonlysql)redis是业界主流的Key-valuenosql数据库之一,和memcached类似redis优点:速度快,每秒可执行大约110000设置操作,81000个/每秒的读取操作支持丰富的数据类型,列表,结合,可排序集合,哈希等操作是原子的二、redis操作安装redisubuntu安装$......
  • 多级缓存-Redis缓存预热
            ......