今天继续给大家分享继邮件通知、数据库状态回写后的第三种监控文件发送状态的方案:通过监控997功能性确认文件,进行数据状态回写。
您可能会有这样的疑问:什么情况下需要在知行EDI平台监控交易伙伴的997功能性确认文件来进行数据的状态回写?
首先,您需要对997进行了解:997是X12标准中的一种功能性确认文件,它是接收方EDI系统向发送方EDI系统发出的电子 “收据”,表明文件已被成功接收和阅读,在接收方收到X12文件后会对其结构和语法进行校验,校验后会给发送方回复997确认文件。997文件字段详细信息参考。
其次,需要和您的交易伙伴沟通确认是否启用997功能,以下主要介绍基于知行之桥EDI系统启用997功能后实现对997文件的监控,完成数据的回写。
以上信息都清楚后,接下来给大家介绍下通过监控997进行数据回写的实现原理和步骤:
通过监控997功能性确认文件,进行数据状态回写通常使用在X12标准并启用997功能的方案中。
实现原理
启用997功能后,当发送业务数据X12文件给交易伙伴后,会收到交易伙伴回复的997功能性确认文件,根据997文件匹配成功发送的业务数据X12文件,回写至业务系统,其中业务数据X12文件中GS06的值和收到的997文件中AK102的值对应,本文将介绍收到交易伙伴的997文件后,回写业务数据库表中的状态字段并将997的原始文件名写入数据库表。
实现步骤
一、存储发送成功的业务数据EDI文件的GS06字段、业务主键信息
1.创建数据库表(示例:[dbo].[PO_Sent_Info]),用来存放发出的业务数据EDI文件的GS06字段、业务主键等信息
例如:以采购订单850为例,850文件发出后,将GS06和订单编号的值写入数据库,以下步骤均以采购订单850报文为例
- 在(MFT)传输端口,以AS2端口为例,在AS2端口的事件-发送后(After Send)通过写脚本将发送成功的850 X12文件进行转发,发送到X12端口以便后续解析处理,脚本参考如下:
1 2 3 4 5 |
<arc:check value="[ErrorMessage | def]" > <arc:else> <arc:send connector="T_X12ToXML_SentFile"/><!-- 处理原始文件创建的X12端口ID --> </arc:else> </arc:check> |
3.解析850报文,将报文中的GS06、订单编号字段存入数据库表,参考工作流如下:
(1)T_X12ToXML_SentFile:X12端口,将850 X12文件转换为标准XML;
(2) T_XMLMap850_SentFile:XMLMap端口,将上一步标准XML中的GS06、订单编号BEG03字段映射到数据库表中的GSNO和PONO字段,输出一个数据库XML文件,参考如下:
(3)T_Database_SentFile:数据库端口,连接数据库,配置[dbo].[PO_Sent_Info]表,选择Upsert操作,将上一步生成的数据库XML文件数据写入数据库存储。
二、处理收到的997文件
- 在知行之桥中设置对997文件进行后续处理
设置如下:在X12(X12ToXML)端口的高级设置–其他设置下–功能性ACK:返回入站的功能性ACK
默认情况下,所有功能性ACK(997,999)都将通过“路由ACK到端口”被路由至指定的端口,并且在XML转换时不会接收到X12端口的Receive文件夹。
启用后,XML转换后的ACK文件将被接收到X12端口的Receive文件夹中,以便进行后续处理。
2.997处理回写,参考工作流如下:
(1)T_AS2:AS2端口,与客户进行文件传输,这里用来接收交易伙伴回复的997文件。
(2)T_X12ToXML:X12端口,将接收的997 EDI文件转换为标准XML文件,并存入Receive文件夹下进行后续处理;同时在该端口的事件–AfterSend写脚本,将997的原始文件名放在消息内容中的其他消息头部上。
脚本参考:
实现结果:之后工作流的每个端口的消息内容中的其他消息头部都会显示自定义的originalFilename997(997的原始文件名)
(3)T_Branch997:Branch端口,根据XPath判断文件是否是997文件;
(4)T_DB_Lookup_997:Database端口,连接数据库,配置[dbo].[PO_Sent_Info]表,选择Lookup操作,查询数据库表中是否存在GSNO与997文件中AK102相同的数据,存在时获取其中的业务主键PONO并将其写入到997 XML文件中输出;
(5)T_Branch_Back:Branch端口,判断上一步输出文件中的业务主键PONO是否存在;
(6)T_Notify_NoPONO:Notify端口,当PONO不存在是进行邮件通知。
(7)T_XMLMap_Back:XMLMap端口,对上面业务主键(订单编号)存在的XML文件进行映射,生成采购订单850数据库表对应的XML结构,这里需要映射的字段有订单编号字段(PO_NUMBER)、数据状态字段(Status)和原始997文件名字段(OriginalFilename_997),如下参考:
(在前期创建850业务数据库表时,需要在表中设置了数据状态字段:Status和原始997文件名字段:OriginalFilename_997);
(8)T_DB_LookupID:Database端口,连接数据库,配置PO表(示例为:[dbo].[PO_850]),配置Lookup操作,根据上一步的业务主键PO_NUMBER获取数据库中对应业务数据的主键ID,并输出到文件中ID列。
(9)T_Database_850:Database端口,连接数据库,配置PO表(示例为:[dbo].[PO_850]),配置Upsert操作,根据主键ID更新数据状态字段:Status和原始997文件名字段:OriginalFilename_997。
将上一步生成的数据库XML文件数据写入数据库,更新Status字段数据为:The 997 document from the customer has been successfully received. 、更新OriginalFilename_997字段值为文件名信息,完成回写。
数据库表中数据参考:
参考:
[dbo].[PO_850]表是采购订单数据表,示例中表结构参考如下:
更多EDI信息,请参阅: EDI 是什么?
注:文案部分图片及内容来源于网络,版权归原创作者所有,如有侵犯到您的权益,请您联系我们进行删除,给您带来困扰,我们深感抱歉。