为了能快速实现客户的数据报文处理,同时考虑后续新的报文格式及扩展,我们选用了bots-edi 系统 作为 EDI 系统,用来处理 EDI 报文数据。
bots-edi 官方文档
安装
此处是基于 linux 系统安装,如有其他需要请参考官方文档
需要使用 python2.6 或者 2.7
依赖
- django >= 1.4.0, django <= 1.7.0
- cherrypy > 3.1.0
源码 (从此处下载源码)
- 解压
tar bots-3.2.0.tar.gz
- 安装
cd bots-3.2.0
python setup.py install
运行
- 使用 python 运行 bots-webserver.py
python2.7 bots-webserver.py
- 访问 http://localhost:8080 即可进入后台
主要文件路径
- 配置文件
- ./bots/config/bots.ini
- ./bots/config/settings.py
- 日志
- ./bots/botssys/logging/
系统主要结构
bots-monitor
- 用户界面
bots-webserver
- web 服务器
bots-engine
- EDI 服务器的核心,在这里处理 EDI 业务
bots-jobququeserver
- 是EDI的队列
开发流程
- 我们使用 bots-edi 进行 EDI 处理时,需要通过脚本实现
- 在脚本内我们可以定义规则和逻辑,实现解析或者生成 EDI 的流程
- 在bots-edi 官方文档中,可以找到开发案例进行参考
bots-edi 脚本思路
解析 EDI 脚本

- 客户使用 AS2 发送 EDI报文到我们的 AS2 服务器
- AS2 服务器接到数据后,进行验证,保存数据
- EDI 服务器监听到指定目录有变化,启动解析流程
- 解析流程中触发对应的脚本,执行相应逻辑,映射订单到 ERP
生成 EDI 脚本

- ERP 中处理订单,完成发货、开票
- EDI 系统脚本定时检查 ERP 单据
- 当监控到有需要处理的单据,执行EDI 生成流程
- 根据脚本定义的逻辑,映射 ERP 单据为 EDI 文件,同时把文件放到指定目录(AS2 待发目录)
- AS2 服务器监听到待发目录有文件,自动发送给指定客户
脚本文件结构

communicationscripts
- 定义通信脚本
- 用于传入/传出数据
grammars
- 定义edi格式
- 可以从这里下载已经定义好的edi格式:
- https://sourceforge.net/projects/bots/files/grammars/
- 根据需要选择对应的格式,保存到grammars中即可
mappings
- 映射脚本,用于将文件按grammars定义的规范解析/生成为指定文件
- mappings中的处理是需要遵循grammars定义的规范的
routescripts
- 路由脚本
- 在路由中做一些扩展,实现附加操作
botsindex
- 脚本定义文件
- 定义channel
- 定义translate
- 定义route
- 定义translate
创建脚本
(方法一)直接在bots中修改代码/脚本
- 进入bots的源码文件,找到usersys
- 可以看到communicationscripts、grammars、mappings等文件,根据需要更新代码即可
(方法二)使用 Web 界面创建独立脚本
这种方式适用于需要将脚本打包成模块导出的情况
- 因为make出来的脚本需要重新导入才生效
- 实际上导入脚本,就相当于把文件放到了bots中
- 所以开发的原理也是一致的,如果不是为了打包/导出脚本,直接在bots中修改代码即可


保存后,系统会生成一个压缩包,这个压缩文件就是脚本的代码基础结构,我们解压后用 IDE 打开即可
导入脚本
- 这一步是针对通过 web 界面单独创建的独立脚本,如果不是,则不需要这一步导入
独立脚本开发完成后,需要进行导入才能在 bots 中使用对应的脚本

- 导入成功后,可以在route、channel、translate中查看相关信息
- 【注意】导入route后,如果没有设置active的话,默认为False,如果需要使用,需要在配置中勾选开启active
脚本配置和使用
- 配置说明
- 执行脚本的时候实际是以 Route 为入口,可以通过 Route 来控制是否启用相关的功能
- Route
- 指定 incoming channel 和 outgoing channel
- Channel
- 定义如何收发文件,包括协议、地址、登录信息等
- Translation
- 定义要将文件从什么格式转换成什么格式
- Mapping
- 定义字段如何转换
- 实际配置需要根据开发的脚本需要,这里仅供参考
- 配置route

- 配置channel



- 执行脚本的时候实际是以 Route 为入口,可以通过 Route 来控制是否启用相关的功能
- Route
- 指定 incoming channel 和 outgoing channel
- Channel
- 定义如何收发文件,包括协议、地址、登录信息等
- Translation
- 定义要将文件从什么格式转换成什么格式
- Mapping
- 定义字段如何转换
- 配置route
- 配置channel
- 可以通过手动触发 Run 菜单来运行所有已启动的 Route
- 也可以通过定时队列来触发
定时解析
通过linux的crontab -e实现定时解析功能
- 0 * * * * /usr/bin/python2 /usr/bots-3.2.0/bots-engine.py --new
这个定时功能需要结合队列使用
- 日志:bots/botssys/logging/jobqueue.log
- 流程
- 在bots.ini中开启队列,jobqueue - enabled=True
- 开启队列服务器 bots-jobqueueserver.py
邮件通知
在bots/config/settings 中配置





