如何监控文件已成功通过EDI系统发给客户(二)-数据库状态回写

回顾:邮件通知确认https://blog.csdn.net/weixin_44069425/article/details/123137711

上一篇文章给大家介绍了通过邮件通知的方式监控业务数据文件成功通过EDI系统发送给交易伙伴,本文将给大家介绍第二种方式:通过数据库状态回写来实现。

数据库状态回写较邮件通知方案使用的场景比较有限,主要在中间数据库方案中使用。

实现原理

在创建数据库表时,除了业务字段我们还需要设置一个Status字段,用来记录数据的处理状态,通常数据库中新写入的数据Status = New,EDI系统读取后(即数据库端口获取数据后)将其更新为 Status = EDI-Received,EDI系统成功发送给交易伙伴后状态回写将其更新为Status = EDI-Sent。

实现步骤

1.根据规范整理的Mapping表创建数据库表(PO_TEST),设置Status列
注意:如果一个业务报文设置了多张表,Status字段设置在主表中
在这里插入图片描述
2.在知行之桥EDI系统中创建一个数据库端口,并配置连接中间数据库,用来从数据库获取PO_TEST表的数据
在这里插入图片描述

驱动名称:选择中间数据库对应的驱动名称,示例中使用SQL  Server数据库
驱动类:默认
配置格式:默认使用属性列表
Authentication:连接数据库验证方式,根据中间数据库设置的验证方式进行选择,示例中默认使用SQL Server 验证
Server:中间数据库服务器Host信息
用户名:登录数据库的用户名
密码:登录密码
Database:连接的数据库名称

以上信息都配置后,点击测试连接按钮,进行连接测试,确认连接成功。

设置从数据库获取的数据库表(PO_TEST)、过滤规则(Status=New)、设置处理成功后的状态更新(Status=EDI-Received),参考下图:
在这里插入图片描述
3.在数据库端口后创建一个Script端口,通过写脚本获取数据库表信息及数据的主键ID信息,放在文件处理过程中的消息内容(Message Header)上,以便使用
在这里插入图片描述
脚本参考如下:

<arc:set attr="xml.uri" value="[filepath]" />    <!-- 文件路径,作为下面读取文件的入参 -->
<arc:set attr="xml.xpath" value="/Items/\[1\]" />  <!-- 文件读取结构,作为下面读取文件的入参 -->
<arc:if exp="[filename | startswith('PO_TEST')]">  <!-- 数据库端口获取的文件名是以数据库表名命名的,判断文件名对文件进行分类 -->
  <arc:set attr="out.header:tableName" value="PO_TEST" /> <!-- 输出数据库表名 -->
  <arc:call op="xmlDOMSearch" in="xml">   <!-- 调用知行之桥的运算器读取XML文件 -->
    <arc:set attr="out.header:tableid" value="[xpath('ID') | def]" />  <!-- 输出数据库主键ID -->
    <arc:set attr="file.filename" value="PO_[xpath('PO_NO') | def]_[_ | snowflake(1,1)].xml" />  <!-- 指定文件名 -->
  </arc:call>
</arc:if>

<arc:set attr="out.filename" value="[file.filename]" />   <!-- 输出文件名 -->
<arc:set attr="out.filepath" value="[filepath]" />        <!-- 输出文件路径 -->
<arc:push item="out"/>   <!-- 将所有输出到文件中 -->

4.最后需要在文件传输(MFT)端口的事件页面中的发送后(After Send)中写脚本,当文件成功发送给交易伙伴后,生成回写状态的xml文件到数据库端口。以AS2端口为例:
在这里插入图片描述
脚本参考如下:

<arc:set attr="table.id" value=""/>
<arc:set attr="table.name" value=""/>
<arc:equals attr="ErrorMessage" value="">  <!-- 判断文件发送后没有报错信息时执行以下脚本 -->
  <arc:call op="portGetMessageInfo" in="_input" out="out">  <!-- 调用知行之桥的运算器读取文件消息内容(Message Header)信息 -->
    <arc:equals attr="out.name" value="tableid">   <!-- 判断消息内容(Message Header)信息中的tableid主键信息 -->
      <arc:set attr="table.id" value="[out.value]"/>  <!-- 获取tableid主键信息 -->
    </arc:equals>
    <arc:equals attr="out.name" value="tablename">   <!-- 判断消息内容(Message Header)信息中的tablename表名信息 -->
      <arc:set attr="table.name" value="[out.value]"/>  <!-- 获取tablename表名信息 -->
    </arc:equals>
  </arc:call>
  <arc:if exp="[table.id | def | trim | getlength] >0 && [table.name | def | trim | getlength] >0">  <!-- 判断tableid主键信息和tablename表名信息值都大于0 -->
    <arc:set attr="file.data">  <!-- 设置回写的xml文件格式,将数据存放在file.data中 -->
      <Items>     
        <[table.name]>
          <ID>[table.id | def | trim | xmlencode]</ID>
          <Status>EDI-Sent</Status>
        </[table.name]>
      </Items>
    </arc:set>
    <arc:equals attr='table.name' value="PO_TEST">   <!-- 根据表名信息判断指定处理回写xml文件的数据库端口 -->
       <arc:set attr="portIn.portId" value="T_UpdateDB_PO" />
    </arc:equals>
    <arc:set attr="portIn.workspaceid" value="DB" />  <!-- 指定数据处理的工作空间 -->
    <arc:set attr="portIn.folder" value="Send" />   <!-- 指定回写xml文件存放的目录 -->
    <arc:set attr="portIn.filename" value="update_[table.name | def]_[table.id | def].xml" />  <!-- 指定回写xml文件的文件名 -->
    <arc:set attr="portIn.messageid" value="" />   <!-- 指定回写xml文件的message id,默认给空 -->
    <arc:set attr="portIn.content" value="[file.data | base64encode]" />  <!-- 对回写xml文件内容进行base64编码 -->
    <arc:call op="portSetFiles" in="portIn" out="out1">  <!-- 调用知行之桥的运算器将回写xml文件按照上述指定的信息存放在指定的目录下 -->
    </arc:call>
  </arc:if>
</arc:equals>

5.在知行之桥创建新的数据库端口,用来配置数据回写更新状态的模板,其中数据库连接配置和上面的一致,回写更新模板参考如下:
注意:操作选择Upsert,根据ID字段更新Status字段,参考上一步输出的xml格式,只选择配置表中的ID和Status字段,输入的xml文件与设置的输入模板需要保持一致。
在这里插入图片描述

测试验证

1.将待发送的业务数据写入中间数据库,Status给值为New
在这里插入图片描述
2.EDI系统读取数据(数据库端口获取),并确认Status字段值更新为EDI-Received
数据库端口获取:
在这里插入图片描述
获取成功后数据库中状态更新,将Status列值更新为EDI-Received
在这里插入图片描述
3.Script端口验证获取数据库表信息及数据主键ID信息,
文件成功发送后在输出页面点击文件名,在弹出的消息内容(Message Header)下的其他消息头部查看设置的tableid和tablename
在这里插入图片描述
4.AS2端口发送文件成功后,验证生成的回写xml文件,并完成回写
AS2端口成功发送文件
在这里插入图片描述
在数据库回写端口显示生成的回写xml文件
在这里插入图片描述
回写xml文件内容确认
在这里插入图片描述
发送回写xml文件完成数据库状态更新
在这里插入图片描述
数据库中状态更新为EDI-Sent
在这里插入图片描述

参考信息

下面是完成数据库状态回写的工作流,大家可参考:
在这里插入图片描述
①T_DB_OutPO:数据库端口,连接数据库,获取PO_TEST表中数据;
②T_Script_Header:Script端口,写脚本获取数据库表信息及数据主键ID信息,放在文件处理过程中的消息内容(Message Header)上;
③T_AS2:AS2端口,与交易伙伴进行AS2连接,并在AfterSend下写回写脚本生成回写的xml文件;
④T_UpdateDB_PO:数据库端口,连接数据库,配置数据回写更新状态的模板完成数据回写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值