博泽Brose EDI项目案例
Brose 是一家德国的全球性汽车零部件供应商,主要为全球汽车制造商提供机电一体化系统和组件,涵盖车门、座椅调节系统、空调系统以及电动驱动装置等。Brose 以其高质量的创新产品闻名,在全球拥有多个研发和生产基地,是全球第五大家族企业,也是全球领先的汽车零部件供应商之一。
梳理需求文档
EDI项目开始前,Brose 将会向交易伙伴提供本次对接中需要的EDI规范文档,包括 DELFOR物料需求计划(版本号:D04A)、DESADV发货通知(版本号:D20B)。本案例中,Brose作为采购商,向其供应商汽车行业A公司采购。因此A公司需要接收Brose发来的DELFOR物料需求计划,向Brose发送DESADV发货通知。
EDI连接测试
Brose支持的传输方式包括:OFTP2以及SFTP,由于Brose更推荐交易伙伴使用OFTP2,因此本案例将以OFTP2为例,为大家介绍如何建立OFTP2连接通道。
Brose与供应商需要交换包含OFTP2配置信息的文档,包含SSID、SFID、服务器、IP地址、端口号等信息。通过知行之桥EDI系统搭建对接Brose的OFTP2连接通道,需要先在 个人设置 选项卡下,配置A公司自己的OFTP连接信息。
接下来在 工作流 选项卡下创建一个OFTP端口(功能模块),点击下图左上方的OFTP端口,在右侧弹窗的 设置 选项卡下配置Brose的OFTP连接信息。
在测试阶段,向Brose发文件时,可以在OFTP 端口的 输入 选项卡下,点击 更多,上传测试文件。
接收来自Brose的文件时,可以点击 输入 选项卡旁边的 输出 选项卡,查看EDI系统收到的文件。
实施方案
A公司的EDI系统与Brose的EDI系统之间可以通过OFTP2传输通道建立连接,那么A公司应该如何将业务数据提供给EDI系统呢?
如果A公司内部有ERP系统或者其他业务系统,则可以选择与EDI系统进行集成。知行之桥EDI系统支持的集成方案包括:[中间数据库方案][]、[REST API][]、WebService、SFTP或共享文件夹等,用户可以根据实际需求进行选择。以REST API方案为例,基于知行之桥EDI系统,通过REST API 来集成A公司的ERP系统,EDI和ERP通过对方提供的接口调用文档,使用REST API来调用对方的接口,以JSON或者XML格式来进行业务数据的传输。
主要过程包括:
1.EDI整理所需业务字段
2.EDI实施顾问、ERP顾问以及A公司的业务负责人进行业务字段和结构确认
3.EDI和ERP各自进行接口的开发,提供给对方各自的接口调用文档
4.集成测试,API集成测试一般是与EDI业务测试同步进行的,便于验证能否将Brose发来的DELFOR数据解析进A公司的ERP系统,以及A公司ERP系统中提供的发货通知数据在被EDI系统进行格式转换后生成的DESADV报文能否顺利被Brose处理。
扩展阅读:REST API集成方案
项目成果
根据以上需求,在知行之桥EDI系统中搭建如下所示的工作流:
知行之桥EDI系统将不同的功能封装至一个个成熟的功能端口中,实现低代码操作。通过蓝色连接线连接各个功能端口,清晰展示数据流向,方便用户快速定位问题。
EDI 业务测试
DELFOR 物料需求计划
A公司需要接收Brose发来的DELFOR物料需求计划,在知行之桥EDI系统中,通过搭建如下所示的工作流即可实现:
物料需求计划的处理流程
1.通过OFTP连接通道收到Brose发来的DELFOR报文
2.借助EDIFACT、XML Map以及JSON端口将DELFOR报文转换为Json格式
3.借助REST端口调用A公司提供的接口,将包含物料需求计划数据的Json文档推送至A公司的业务系统中。在REST端口的 设置 选项卡下,配置必要的信息:将 方法&URL 设置为 POST,URL和认证类型由A公司的IT部门提供,正文类型设置为 raw,Content Type为application/json。
4.A公司的业务系统将会根据数据的接收情况回复不同的response,结构如下所示:
5.通过在Notify端口补充自定义脚本实现钉钉通知
为了及时提醒A公司的相关人员,Brose发来的物料需求计划在进入业务系统时保存失败,可以在Script端口添加代码,设置钉钉通知。
代码如下:
<arc:set attr="json.uri" value="[FilePath]" />
<arc:set attr="json.jsonpath" value="/json" />
<arc:call op="jsonDOMSearch" in="json" ><arc:set attr="response.status" value="[jsonpath(RTYPE)]" />
</arc:call>
<arc:if exp="[response.status|equals('E')]"><arc:set attr="check.sslcert" value="*"/><arc:call op="httpGet" in="check"><arc:catch code="*"><arc:set attr="notify.url" value="https://oapi.dingtalk.com/robot/send?access_token=52f30b4d79a6dae6d34d6e0ceb627de91ec33033a59a8bb955ec6c0137730476"/><arc:setm item="notify">url = https://oapi.dingtalk.com/robot/send?access_token=52f30b4d79a6dae6d34d6e0ceb627de91ec33033a59a8bb955ec6c0137730476postdata = {"at": {"isAtAll":false},"text": {"content":"业务警报:知行之桥REST端口调用A公司ERP接口失败,请检查!"},"msgtype":"text"}contenttype = application/json</arc:setm><arc:call op="httpPost" in="notify" /></arc:catch></arc:call>
</arc:if>
扩展阅读:调用REST端口实现钉钉通知
配置成功之后,在钉钉中的通知效果如下:
DESADV 发货通知
A公司需要根据Brose发出的DELFOR物料需求计划回复DESADV发货通知,在知行之桥EDI系统中,通过搭建如下所示的工作流即可实现:
DESADV发货通知的处理流程
1.首先A公司的ERP系统通过调用EDI系统的接口,将Json格式(知行的EDI顾问将会提前设计好Json模板,A公司只需要据此模板填充对应的业务数据即可)的发货通知数据传入知行之桥EDI系统的 Webhook端口。需要在Webhook端口中配置请求格式为json,还需配置 用户 以及受信任的ip地址:
2.借助JSON端口、XML Map端口以及EDIFACT端口,将包含发货通知数据的Json文件转换为Brose要求的DESADV报文。 3.通过OFTP端口,将DESADV报文发送给Brose。
DESADV发货通知的测试注意事项
对于接收到的DESADV发货通知,Brose会通过邮件回复一个PDF格式的VDA 4987错误报告,详细列出了DESADV报文中的每一个字段信息,如果验证成功会在第一列用绿色高亮标记,如果验证失败则会在第一列用红色高亮标记。
1.DESADV报文的协会指定代码为固定值
UNH02的位置需要写入固定值:GAVF30,并且是EDI报文的必填值。示例:
UNH+1+DESADV:D:20B:UN:GAVF30'
2.测试过程中使用的测试数据需要尽可能贴近实际生产数据,以日期格式为例,Brose支持以下两种格式:
当DTM01值为102 时,日期格式为:YYYYMMDD,例如:20241202; 当DTM01值为203时,日期格式为:CCYYMMDDHHMM,例如:202412021539
示例:
DTM+137:202412021539:203'
3.当RFF01的值为ANK时,表示当前传输的数据为由9位数字组成的DUNS编号。示例如下:
RFF+ANK:310010022'
4.LOC字段传输卸货点信息,卸货点ID必须是由5位字符组成的,示例如下:
LOC+11+RAUKC::92'
5.LIN字段传输物料信息,物料编号必须由10位字符组成,示例如下:
LIN+++A62404-110:IN'
6.订单编号必须由10位字符组成,示例如下:
RFF+ON:5508856298'
DESADV发货通知的包装信息
不同版本号的DESADV报文规范中对于包装的描述和规定有很大区别,因此开始EDI项目实施前请务必与Brose确认DESADV报文的版本号。
基于Brose提供的版本号为D20B的EDI报文规范,需要考虑将相同规格的托盘进行合并,这里的相同规格是指:每托箱数相同,每箱数量相同,物料相同。
确认托盘结构:与Brose以及企业内部业务人员确认当前发货通知中有无空箱、盖子或者其他辅材。以下是一个包装示例:
如果您希望了解有关EDI对接的相关信息,欢迎交流。
相关文章:
博泽Brose EDI项目案例
Brose 是一家德国的全球性汽车零部件供应商,主要为全球汽车制造商提供机电一体化系统和组件,涵盖车门、座椅调节系统、空调系统以及电动驱动装置等。Brose 以其高质量的创新产品闻名,在全球拥有多个研发和生产基地,是全球第五大家…...
Macos用brew安装Nodejs亲手教程
首先确保brew已安装,搜索node资源,命令如下: brew search nodejs 演示结果如下: 安装nodejs brew install node22 或 brew install node 出现如下界面 表示正在安装,安装成功后,提示如下信息࿱…...
开发一套ERP 第十弹 图片作为配置文件,本地读取图片,定时更新图片类型
echo Hello World在同一数据库中在建一个图床数据表,产品一,一对应,图片命名 最优的方案,使用 rust 在构建一个 http server 用于管理非数据库资源,也可以将来对接不同的图床,部署方便 考虑到数据库资源和图片资源,都可以被远程访问这种方法最佳...
终端环境下关闭显示器
终端环境下关闭显示器 使用vbetool vbetool 使用 lrmi 来运行视频 BIOS 中的代码。目前,它能够更改 DPMS 状态、保存/恢复视频卡状态并尝试从头开始初始化视频卡。 vbetool dpms off...
基于PySpark 使用线性回归、随机森林以及模型融合实现天气预测
基于PySpark 实现天气预测与模型集成 在大数据分析与机器学习领域,Spark 提供了强大的计算能力和灵活的扩展性。本文将介绍如何利用 PySpark 完成以下任务: 1、数据预处理:清洗和编码天气数据。 2、特征工程:合并数值和分类特征…...
Android Studio 右侧工具栏 Gradle 不显示 Task 列表
问题: android studio 4.2.1版本更新以后AS右侧工具栏Gradle Task列表不显示,这里需要手动去设置 解决办法: android studio 2024.2.1 Patch 2版本以前的版本设置:依次打开 File -> Settings -> Experimental 选项&#x…...
Linux详解:文件权限
文章目录 前言Linux文件权限基础文件成员与三组权限字符 权限的修改修改文件所有者总结 前言 在浩瀚的操作系统世界中,Linux以其开源、灵活和强大的特性,成为了服务器、开发环境以及众多个人用户的首选。而在Linux的众多特性中,文件权限机制…...
Linux条件变量线程池详解
一、条件变量 【互斥量】解决了线程间同步的问题,避免了多线程对同一块临界资源访问产生的冲突,但同一时刻对临界资源的访问,不论是生产者还是消费者,都需要竞争互斥锁,由此也带来了竞争的问题。即生产者和消费者、消费…...
CLIP模型也能处理点云信息
✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…...
编译MT7620 OpenWrt的所有机型的固件
前置条件:准备VMware16Ubuntu16.04的编译环境 安装编译需要的插件 sudo apt-get install gcc g binutils patch bzip2 flex bison make autoconf gettext texinfo unzip sharutils libncurses5-dev ncurses-term zlib1g-dev gawk asciidoc libz-dev git-core uuid…...
C_字符串的一些函数
1.字符串输入函数 scanf("%s",数组名); gets(数组名); 区别: scanf(“%s”,数组名); 把空格识别为输入结束 #include <stdio.h>int main() {char a[10];printf("输入:");scanf("%s",a)…...
pytest自定义命令行参数
实际使用场景:pytest运行用例的时候,启动mitmdump进程试试抓包,pytest命令行启动的时候,传入mitmdump需要的参数(1)抓包生成的文件地址 (2)mitm的proxy设置 # 在pytest的固定文件中…...
【OpenAI库】从0到1深入理解Python调用OpenAI库的完整教程:从入门到实际运用
文章目录 Moss前沿AI一、初识OpenAI API1.1 获取API-Key(两种方案)1.2 安装OpenAI库 二、Python调用OpenAI API的基础设置2.1 设置API密钥和Base URL2.2 参数详解 三、构建一个简单的聊天应用3.1 创建聊天请求3.2 参数详解3.3 处理响应 四、完整代码示例…...
设计模式---建造者模式
建造者模式 一种创建型设计模式,它允许你一步一步地构建复杂对象。通过使用建造者模式,你可以将对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。说白点就是,解决了构造函数创建对象的问题。 适用于那种构造函…...
安装MySQL 5.7 亲测有效
前言:本文是笔者在安装MySQL5.7时根据另一位博主大大的安装教程基础上做了一些修改而成 首先在这里表示对博主大大的感谢 下面附博主大大地址 下面的步骤言简意赅 跟着做就不会出错 希望各位读者耐下心来 慢慢解决安装中出现的问题~MySQL 5.7 安装教程(全…...
delphi 12 idhttpsever(S)+idhttp(C) 实现简单的JSON API服务
这篇博客展示了如何使用Delphi创建一个简单的HTTP服务器,并处理GET和POST请求。服务器监听6600端口,响应JSON格式的数据。客户端通过IdHttp组件进行GET和POST请求,获取并显示服务器响应的内容。 http服务器测试代码 procedure TForm1.FormSh…...
SVM支持向量机分类——基于Python实现
SVM支持向量机分类 1.描述统计 from numpy import * from scipy import * from pandas import * import matplotlib.pyplot as pltimport seaborn as sns glassread_csv(../data/第5章数据/Glass.csv,sep,) glass.head() glass[Type].value_counts()Type 2 76 1 70 7 …...
k8s使用的nfs作为sc。
k8s使用的nfs作为sc。 当前出现一个问题: 1.有一个pod他是通过流进行文件解压并写入到nfs服务器对应的目录中。 2.一个大压缩包下有20多个压缩包,递归解压。解压完成后应该是20多个文件夹,文件夹下有.json文件。 3.pod中的程序解压后去找以.j…...
tp6 合成两个pdf文件(附加pdf或者替换pdf)
最近在做项目有个需求,项目中需要根据设置的html合同模板自动生成PDF合同供客户下载签署,并根据回传的已签署合同尾页来替换原来未签署合同的尾页,合成新的已签署合同文本。 读取两个PDF文件并合成的 具体代码记录如下: use set…...
SpringBoot
SpringBoot简介 SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程 SpringBoot快速入门 新建maven工程,导入SpringBoot父工程以及依赖 <?xml version"1.0" encoding"UTF-8"?>…...
2024第六届金盾信安杯Web 详细题解
比赛一共4道Web题,比赛时只做出三道,那道文件上传没有做出来,所以这里是另外三道题的WP 分别是 fillllll_put hoverfly ssrf fillllll_put 涉及: 绕过exit() 死亡函数 php://filter 伪协议配合base64加解密 一句话木马 题目源码: $content参数在开头被…...
The selected directory is not a valid home for Go SDK
在idea里配置go语言的环境时,选择go语言的安装目录,一直提示这个 The selected directory is not a valid home for Go SDK后来查了一下,发现原来idea识别不出来 需要改一下配置文件,找到go环境的安装目录,我是默认安…...
《智能体雏形开发(高阶实操)》开发计划概述
智能体雏形开发计划 通过本计划,逐步完成一个可以真实运行的智能体雏形。 最终完成一个**“用户日志文件生成日报,日报再进一步汇总成周报”**的任务驱动型智能体雏形 第一阶段:基础准备与环境搭建 1. 学习基础知识 了解智能体的概念、类型和技术框架。学习大模型(如阿里…...
【查询基础】.NET开源 ORM 框架 SqlSugar 系列
💥 .NET开源 ORM 框架 SqlSugar 系列 🎉🎉🎉 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列…...
【Linux】设计文件系统(C实现)
要求: (1)可以实现下列几条命令 dir 列文件目录 create 创建文件 delete 删除文件 read 读文件 write 写文件 (2)列目录时要列出文件名、存取权限(八进制)、文件长度、时间(创建时间,修改时间以及…...
Redis+Caffeine 多级缓存数据一致性解决方案
RedisCaffeine 多级缓存数据一致性解决方案 背景 之前写过一篇文章RedisCaffeine 实现两级缓存实战,文章提到了两级缓存RedisCaffeine可以解决缓存雪等问题也可以提高接口的性能,但是可能会出现缓存一致性问题。如果数据频繁的变更,可能会导…...
SpringMVC(二)
Model 以Map方式进行存储,用于向作用域中存值。 注意:在Model中增加模型数据,若不指定key,则默认使用对象的类型作为key Controller //控制器类 public class IndexController {RequestMapping("/index3")public Strin…...
leetcode--螺旋矩阵
LCR 146.螺旋遍历二维数组 给定一个二维数组 array,请返回「螺旋遍历」该数组的结果。 螺旋遍历:从左上角开始,按照 向右、向下、向左、向上 的顺序 依次 提取元素,然后再进入内部一层重复相同的步骤,直到提取完所有元…...
动手学深度学习10.5. 多头注意力-笔记练习(PyTorch)
本节课程地址:多头注意力代码_哔哩哔哩_bilibili 本节教材地址:10.5. 多头注意力 — 动手学深度学习 2.0.0 documentation 本节开源代码:...>d2l-zh>pytorch>chapter_multilayer-perceptrons>multihead-attention.ipynb 多头注…...
Selenium3+Python如何操作键盘
selenium操作键盘,需要导入Keys类:“from selenium.webdriver.common.keys import Keys” 调用键盘操作的快捷键的方法 : 单键值:直接传入对应的键值“element.send_keys”(快捷键的键值) 组合键:键值之间由逗号分隔…...
数据仓库的概念
先用大白话讲一下,数据仓库的主要目的就是存储和分析大量结构化数据的。 > 那么它的核心目的是:支持商业智能(BI)和决策支持系统,也就是说,它不仅仅是为了存储,更重要的是为了分析提供便利。…...
初级数据结构——二叉搜索树
目录 前言一、定义二、基本操作三、时间复杂度分析四、变体五、动态图解六、代码模版七、经典例题[1.——700. 二叉搜索树中的搜索](https://leetcode.cn/problems/search-in-a-binary-search-tree/)代码题解 [2.——938. 二叉搜索树的范围和](https://leetcode.cn/problems/ra…...
配置宝塔php curl 支持http/2 发送苹果apns消息推送
由于宝塔面板默认的php编译的curl未加入http2的支持,如果服务需要使用apns推送等需要http2.0的访问就会失败,所以重新编译php让其支持http2.0 编译方法: 一、安装nghttp2 git clone https://github.com/tatsuhiro-t/nghttp2.git cd nghttp…...
ARP表、MAC表、路由表的区别和各自作用
文章目录 ARP表、MAC表、路由表的区别和各自作用同一网络内:ARP表request - 请求reply - 响应 MAC地址在同一网络内,交换机如何工作? 不同网络路由表不同网络通信流程PC1到路由器路由器到PC2流程图 简短总结 ARP表、MAC表、路由表的区别和各自作用 拓扑图如下: 同一网络内:…...
限定符使用
正则表达式的元字符一次一般只能匹配一个位置或一个字符,如果想要匹配零个、一个或多个字符时,则需要使用限定符。限定符用于指定允许特定字符或字符集自身重复出现的次数。常用限定符如下: <asp:TextBox [^>]> 正则表达式字符类[^>]匹配除过“>”之外的任何字…...
【k8s】创建基于sa的token的kubeconfig
需求 创建一个基于sa的token的kubeconfig文件,并用这个文件来访问集群。 具体创建sa 和sa的token请参考文章: 【k8s】给ServiceAccount 创建关联的 Secrets-CSDN博客 创建sa apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata:namespace: jtkjdevnam…...
计算机网络——不同版本的 HTTP 协议
介绍 HTTP,即超文本传输协议(HyperText Transfer Protocol),是应用层的一个简单的请求-响应协议,它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。本文将介绍 HTTP 协议各个版本。 HTTP/1.0 HTTP/1…...
【Linux】vim编辑器练习
1.在/tmp目录下建立一个名为mytest的目录,进入mytest目录 (1)进入/tmp目录 cd /tmp (2)创建mytest目录 mkdir mytest (3)查看是否创建成功 ls 或 ls -l (4)进入mytest目录 cd mytest …...
StarRocks关于ConcurrentModificationException 问题的解决
背景 本文基于 StarRocks 3.1.7 目前在基于Starrocks做一些数据分析的操作(主要是做一些简单的查询),同事遇到了一些并发的问题: ontent:2024-11-27 07:04:34,048 WARN (starrocks-mysql-nio-pool-214933|3593819) [StmtExecutor.execute():643] execute Exceptio…...
MySQL MVCC 介绍
MVCC(Multi-Version Concurrency Control)是一种并发控制机制,用于在多个并发事务同时读写数据库时保持数据的一致性和隔离性。MVCC通过在每个数据行上维护多个版本的数据来实现。当一个事务要对数据库中的数据进行修改时,MVCC不会…...
HTML 快速上手
目录 一. HTML概念 二. HTML标签 1. 标题标签 2. 段落标签 3. 换行标签 4. 图片标签 5. 超链接标签 6. 表格标签 7. 表单标签 7.1 form 标签 7.2 input 标签 (1) 文本框 (2) 单选框 (3) 密码框 (4) 复选框 (5) 普通按钮 (6) 提交按钮 8. select标签 9. 无语义…...
【树莓派5】移动热点获取树莓派IP并初次登录SSH
本篇文章包含的内容 1 打开系统热点2 烧录系统设置3 配置 MobaXterm4 初次启动树莓派配置选项4.1 换源4.2 更新软件包4.3 安装vim编辑器4.4 更改CPU FAN温度转速 Windows版本:Windows11 24H2树莓派:树莓派5,Raspberry Pi 5SSH软件:…...
用html+jq实现元素的拖动效果——js基础积累
用htmljq实现元素的拖动效果 效果图如下: 将【item10】拖动到【item1】前面 直接上代码: html部分 <ul id"sortableList"><li id"item1" class"w1" draggable"true">Item 1</li><li …...
Zookeeper的通知机制是什么?
大家好,我是锋哥。今天分享关于【Zookeeper的通知机制是什么?】面试题。希望对大家有帮助; Zookeeper的通知机制是什么? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Zookeeper的通知机制主要通过Watcher实现,它是Zookeeper客…...
VSCode如何关闭Vite项目本地自启动
某些情况下VSCode打开Vite项目不需要自动启动,那么如何关闭该功能 文件>首选项>设置 搜索vite 将Vite:Auto Start 勾选取消即可...
微软表示不会使用你的 Word、Excel 数据进行 AI 训练
微软否认使用 Microsoft 365 应用程序(包括 Word、Excel 和 PowerPoint)收集数据来训练公司人工智能 (AI) 模型的说法。 此前,Tumblr 的一篇博文声称,雷德蒙德使用“互联体验”功能抓取客户的 Word 和 Excel 数据,用…...
Redis缓存设计与性能优化
多级缓存架构 缓存设计 缓存穿透 缓存穿透是指查询一个根本不存在的数据,缓存层和存储层都不会命中,通常出于容错的考虑,如果从存储层查不到数据则不写入缓存层。 缓存穿透将导致不存在的数据每次请求都要到存储层去查询,失去了…...
前端图像处理(三)
目录 一、大文件分片 二、图片添加防篡改水印 2.1、主图水印图(vue2) 2.2、主图文字(vue3) 一、大文件分片 并行传输:多个数据块可以同时并行传输,利用多线程或多路复用技术提高传输效率;减…...
JAVA设计模式,动态代理模式
动态代理(Dynamic Proxy)是Java中一种非常有用的设计模式。它允许在运行时创建一个实现了一组给定接口的新类。这种模式主要用于当需要为某个对象提供一个代理以控制对该对象的访问时。通过这种方式,可以添加额外的功能,如事务管理…...
谈论 PHP与XSS
本文将讨论一些脚本攻击问题,以及如何解决XSS脚本攻击问题 美好的周末就用来学点知识吧!!! ———————————————————————————————————— 文章目录 XSS跨站脚本攻击XSS是什么XSS类型:反…...