近期知行帮助东风本田Honda的供应商E公司成功实施EDI项目,与以往采用X12、EDIFACT等EDI标准的项目不同,Honda向其供应商提供API接口,以JSON的格式传输库存信息以及生产计划。
EDI需求概览
Honda提供公开的WSRM系统供应商API接口,主要包含三种接口:
1.库存信息
供应商库存接口,每日库存结余不再变化时发送,建议发送时间(如20:00-23:59)。
方向:供应商发送给Honda
接口文档所含信息包括:测试环境地址、请求信息(字段信息以及描述、字段类型、请求格式)以及响应信息(响应结果以及响应格式)。这里需要注意,result 返回结果如果是1,则表示成功;如果是0,则表示失败,会返回错误信息。示例如下:
{
"result": "1",
"message": ""
}
2.生产计划
供应商生产计划接口,当日及未来生产计划变化时发送,默认覆盖上一次,发送时间(00:00-23:59)。
方向:供应商发送给Honda。
接口文档所含信息包括:测试环境地址、请求信息(字段信息以及描述、字段类型、请求格式)以及响应信息(响应结果以及响应格式)。这里需要注意,result 返回结果如果是1,则表示成功;如果是0,则表示失败,会返回错误信息。示例如下:
{
"result": "1",
"message": ""
}
3.生产计划数据查询
供应商库存生产计划接口数据查询,查询已发送的数据是否被接收。方向:Honda发送给供应商,这个功能不是必须要做的,供应商可以根据实际情况选择是否收这个接口数据。
实施方案
针对以上需求,知行的项目经理与E公司的业务以及IT人员沟通后,最终决定采用数据库+API方案。
E公司根据Honda提供的接口字段文档,从本地的业务系统中提出对应字段并存放至一张专用于存放Honda库存信息/生产计划的数据库表中。知行之桥EDI系统将会从指定的数据库表中获取数据进行下一步的格式转换,并自动调用Honda的提供的两个接口,将数据推送给Honda。
基于知行之桥EDI系统对接 Honda EDI
实现与Honda 的EDI对接需要在知行之桥EDI系统中搭建如下所示的工作流:
为了满足Honda需求,需要使用到11个端口(即上图中的方框,一个方框代表一个端口,各自封装了包括连接数据库、文件格式转换以及接口调用等不同的功能),其中2个Branch端口为免费端口,其余9个端口为付费端口。
本项目主要传输两种类型的数据:库存信息以及生产计划,在EDI系统中需要将这两种单据分开处理,并调用不同的接口将数据提供给Honda。
端口及功能
SQL Server端口:负责从指定数据库表中获取数据到EDI系统,选择的操作为 Select。
Batch Merge端口:负责合并数据。从E公司业务系统抓取的数据中,可能会涉及到多个零件,这时一张表中可能会包含多条数据,需要通过Batch Merge端口进行合并,呈现在接口中,便是1条信息,其中包含了多个零件的数据。
XML Map端口:负责实现源文件和目标文件的格式转换。这里主要实现从E公司抓取的数据(通过SQL Server端口已转换为XML格式)到Honda需要的数据(先转换为XML格式)之间的映射处理。
JSON端口:实现XML与JSON之间的格式转换,无需代码。
REST端口:作为REST API中的客户端,对服务器发起操作请求。
Script端口:检查数据是否推送成功,这个端口可以写一些自定义的脚本语言。
在Script端口的设置选项卡下,将 操作 设置为 Legacy。在 脚本 处添加如下代码:
<rsb:set attr="jsonIn.uri" value="[Filepath]"/>
<rsb:set attr="jsonIn.jsonpath" value="/json"/>
<rsb:call op="jsonDOMSearch" in="jsonIn">
<rsb:set attr="message.code" value="[jsonpath('result')]"/>
<rsb:set attr="message.desc" value="[jsonpath('message')]"/>
</rsb:call>
<rsb:notequals attr="message.code" value="1">
<rsb:throw code="noMatached" desc="[message.code]:[message.desc]"/>
</rsb:notequals>
根据用户需要,还可以在Script端口后再添加一个EmailSend端口,用于将推送成功的信息通过邮件发送给指定收件人。
测试流程
API接口连接测试
根据接口文档构造json格式的接口数据,推送至接口,根据返回的参数判断是否成功,result是1表示成功,是0表示失败,失败原因可参考返回的错误信息
常见错误:加密参数不对、时间戳超时(1分钟内有效)
数据库连接测试
根据客户提供的数据库信息配置数据库连接,获取数据,此项目使用select查询功能
业务测试
让客户在数据库表中写入测试数据,通过API接口推送
结果验证:
1.result是1表示成功,是0表示失败
2.通过查询接口查询已推送的数据
项目回顾
1.Honda接口调用的加密要求
Honda要求在sign也就是签名中需要使用用户名+时间戳+经MD5多次加密的密码。
知行之桥EDI系统支持MD5加密,需要在XMLMap端口中,编写如下脚本来实现:
<arc:set attr="supply.timestamp" value="[_|now(yyyyMMddHHmmss)]" />
<arc:set attr="supply.string" value="user_name=namecode×tamp=[supply.timestamp]&password=0123456789" />
<arc:set attr="supply.sign" value="[supply.string | md5hash(false)|tolower()]" />
需要注意,这里的时间戳有时间要求,每个单据都有自己的时间戳,即XMLMap端口接收数据的时间,从生成时间戳到推送数据,需要限时1分钟。在测试流程中,由于借助Postman工具进行测试,并没有直接调用接口,会存在一定的时间延迟。项目上线后,切换至生产接口,每条数据推送的时间基本可以控制在30S内,每次推送30-40个物料。
2.测试阶段的辅助验证
上文我们有提到,库存信息和生产计划的两个接口都能够通过返回结果来判断是否推送成功,如果是1,则表示成功;如果是0,则表示失败,会返回错误信息。
但Honda提供了三个API接口,还有一个接口主要用于供应商库存生产计划接口数据查询,查询已发送的数据是否被接收。在测试阶段,我们可以通过这个接口,可以进行双重验证。
以上便是Honda EDI项目的全部内容了,如果您希望了解更多Honda的对接信息,或者有关EDI对接的相关信息,欢迎交流。