Validate端口使用手册

news2024/11/13 9:37:43

知行之桥EDI系统从2020版本开始引入了Validate端口,用来实现对XML数据文件进行一些规则的验证,保证XML数据文件的有效性。本文将介绍如何使用Validate端口。

端口创建

同其他功能性端口一样,只需要将Validata端口从左侧的端口清单拖拽到右侧的工作空间就可以创建一个Validate端口进行使用,如下图创建一个端口名称为Validate_Test的Validate端口:

端口功能

Validate端口通过设置一些校验规则,对输入的XML数据文件进行有效性校验,比如数据转换过程中常见的数据库XML、EDI标准XML、自定义XML,所以使用该端口需要保证数据源文件为XML文件。

Validate端口支持对输入的XML文件进行xpath验证和Header验证:
xpath验证:对输入的XML文件结构,比如节点路径、节点值进行校验。
Header验证:对输入文件消息头部信息进行校验,比如文件名称(filename)

本文将用以下示例XML进行演示:

<Items>
    <Header>
        <po_number>POTEST001</po_number>
        <po_date>20221221</po_date>
        <BY_name>TESTC</BY_name>
        <BY_code>A123</BY_code>
        <SU_name>TESTB</SU_name>
        <SU_code>B456</SU_code>
        <PO_QTY>100</PO_QTY>
        <PO_unit>EA</PO_unit>
        <PO_price>10.12</PO_price>
        <Detail>
            <line_no>01</line_no>
            <line_QTY>60</line_QTY>
            <ship_date>20230103</ship_date>
        </Detail>
        <Detail>
            <line_no>02</line_no>
            <line_QTY>40</line_QTY>
            <ship_date>20230120</ship_date>
        </Detail>
    </Header>
</Items>

校验规则

Validate端口主要支持以下规则的设置:

1.等于与不等于规则

等于:指定条件等于一个固定值
不等于:指定条件不等于一个固定值
示例:Items/Header/BY_name 等于TESTA

当输入的BY_name字段值为TESTA时,输入的XML文件成功处理,并进行后续端口的处理。

当输入的BY_name字段值不为TESTA时,抛出异常:The value at xpath “/Items/Header/BY_name/” does not satisfy a validation rule. Expected: == TESTA Actual: TESTC,并停止处理该XML文件。

2.包含规则

包含规则:指定条件包含指定的字符串

示例1:Items/Header/BY_name 包含TEST

当输入的BY_name字段值 包含TEST字符串时,输入的XML文件成功处理,并进行后续端口的处理。
当输入的BY_name字段值不包含TEST字符串时,抛出异常:The value at xpath “/Items/Header/BY_name/” does not satisfy a validation rule. Expected: =~ TEST Actual: C,并停止处理该XML文件。

示例2:判断文件名是否包含test

当输入的文件名 包含test字符串时,输入的XML文件成功处理,并进行后续端口的处理。
当输入的文件名不包含test字符串时,抛出异常:The value at header “filename” does not satisfy a validation rule. Expected: =~ test Actual: TEST-20221220-2.txt,并停止处理该XML文件。

3.前缀和后缀规则:

前缀为:指定条件是否以指定字符串开头
后缀为:指定条件是否以指定字符串结尾
示例:Items/Header/BY_name 前缀为TEST

当输入的BY_name字段值以TEST开头时,输入的XML文件成功处理,并进行后续端口的处理。
当输入的BY_name字段值不是以TEST开头时,抛出异常:The value at xpath “/Items/Header/BY_name/” does not satisfy a validation rule. Expected: =~ TEST* Actual: C,并停止处理该XML文件。

4.小于大于等于规则:

小于:指定条件小于固定值
小于或等于:指定条件小于或等于固定值
大于:指定条件大于固定值
大于或等于:指定条件大于或等于固定值
示例:Items/Header/PO_QTY 与100进行比较

当输入的PO_QTY字段值小于100时,输入的XML文件成功处理,并进行后续端口的处理。
当输入的PO_QTY字段值不小于100时,抛出异常:The value at xpath “/Items/Header/PO_QTY/” does not satisfy a validation rule. Expected: < 100 Actual: 100,并停止处理该XML文件。

5.指定条件是否为空规则(该指定条件存在,对指定条件的值进行校验):

为空:指定条件存在,并且指定条件的值为空
不为空:指定条件存在,并指定条件的值不为空
示例:/Items/Header/PO_unit 为空

当输入的PO_unit字段存在,但是值为空时,输入的XML文件成功处理,并进行后续端口的处理。
当输入的PO_unit字段存在,但是值不为空时,抛出异常:The value at xpath “/Items/Header/PO_unit/” does not satisfy a validation rule. Expected: == Actual: EA,并停止处理该XML文件。

6.指定条件是否存在规则:
为Null:指定条件存在,对指定条件的值是否存在没有限制
不为Null:指定条件不存在
示例:/Items/Header/PO_unit 为Null


当输入的PO_unit字段不存在时,输入的XML文件成功处理,并进行后续端口的处理。
当输入的PO_unit字段存在时,抛出异常:The value at xpath “/Items/Header/PO_unit/” does not satisfy a validation rule. Expected: IS NULL Actual:,并停止处理该XML文件。

需要注意与上一个规则组“指定条件是否为空”的区别。

7.属于:指定条件是否属于指定数组中的值(区分大小写)
属于:指定条件属于指定数组中的值
不属于:指定条件不属于指定数组中的值
示例:/Items/Header/BY_name 属于 (TESTA,TESTB,TESTC)中的一个


当输入的BY_name字段值属于数组(TESTA,TESTB,TESTC)中的一个值时,输入的XML文件成功处理,并进行后续端口的处理。
当输入的BY_name字段值不属于数组(TESTA,TESTB,TESTC)中的一个值时,抛出异常:The value at xpath “/Items/Header/BY_name/” does not satisfy a validation rule. Expected: IS IN [TESTA,TESTB,TESTC] Actual: TESTD,并停止处理该XML文件。

8.正则匹配:设置一些正则匹配规则
示例:/Items/Header/BY_name 节点值为TESTA,忽略大小写,可以设置(?i)TESTA来实现


当输入的BY_name字段值为TESTA,不对大小写进行校验,输入的XML文件成功处理,并进行后续端口的处理。
当输入的BY_name字段值不为TESTA(大小写都支持)时,抛出异常:The value at xpath “/Items/Header/BY_name/” does not satisfy a validation rule. Expected: =# (?i)TESTA Actual: testB,并停止处理该XML文件。

9.Glob匹配:设置一些简单的正则规则
示例:/Items/Header/BY_name 为A开头的字符串,可以设置A来实现



当输入的BY_name字段值为A开头的字符串时,输入的XML文件成功处理,并进行后续端口的处理。
当输入的BY_name字段值不为A开头的字符串时,抛出异常:The value at xpath “/Items/Header/BY_name/” does not satisfy a validation rule. Expected: < A
 Actual: BA123,并停止处理该XML文件。

配置多条规则

以上示例都是设置的一条校验规则,针对同一个XML文件可以同时设置多个规则,通过and或者or进行组合来实现,所以对于同一种格式的XML文件的校验,可以使用一个Validate端口实现需要设置的所有校验规则,如下图:

以上便是本次项目案例的全部内容了,了解更多 EDI 信息,请参阅: EDI 是什么?

阅读原文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/384189.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

子数组达到规定累加和的最大长度系列问题

文章目录1、题目一&#xff1a;正整数数组中子数组累加和 KKK 最大长度1.1 题目描述1.2 思路分析1.3 代码实现2、题目二&#xff1a;整数数组中子数组累加和为 KKK 的最大长度2.1 题目描述2.2 思路分析2.3 代码实现2.4 引申变形2.5 技巧应用题2.5.1 剑指 Offer II 010. 和为 k …

关于HTTP/3的小知识点

客户端用 TCP 发送了三个包&#xff0c;但服务器所在的操作系统只收到了后两个包&#xff0c;第一个包丢了。那么内核里的 TCP 协议栈就只能把已经收到的包暂存起来&#xff0c;“停下”等着客户端重传那个丢失的包&#xff0c;这样就又出现了“队头阻塞”。由于这种“队头阻塞…

Kubernetes之存储管理(中)

NFS网络存储 emptyDir和hostPath存储&#xff0c;都仅仅是把数据存储在pod所在的节点上&#xff0c;并没有同步到其他节点&#xff0c;如果pod出现问题&#xff0c;通过deployment会产生一个新的pod&#xff0c;如果新的pod不在之前的节点&#xff0c;则会出现问题&#xff0c…

CV——day81(1) 读论文: 基于自监督一致性学习的驾驶场景交通事故检测(有源码)

Traffic Accident Detection via Self-Supervised Consistency Learning in Driving Scenarios 基于自监督一致性学习的驾驶场景交通事故检测I. INTRODUCTIONIII. OUR APPROACHA. 帧预测B. 物体位置预测C. 驾驶场景上下文表示(DSCR)D. 协作多任务一致性学习E.交通事故判定IV. E…

UART串口通信协议

一、协议 1.1 消息格式 串口协议是一种全双工、异步通信协议&#xff0c;不需要同步时钟&#xff0c;数据的发送是一位一位的发送&#xff0c;完整的一帧数据通常由起始位、数据、奇偶校验位和停止位组成 1.2 波特率 为确保正确的收发信息&#xff0c;双方必须设置相同的波…

火山引擎 DataLeap:揭秘字节跳动数据血缘架构演进之路

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 DataLeap 是火山引擎数智平台 VeDI 旗下的大数据研发治理套件产品&#xff0c;帮助用户快速完成数据集成、开发、运维、治理、资产、安全等全套数据中台建设&#x…

MySQL 中的锁有哪些类型,MySQL 中加锁的原则

锁的类型MySQL 找那个根据加锁的范围&#xff0c;大致可以分成全局锁&#xff0c;表级锁和行级锁。全局锁全局锁&#xff0c;就是对整个数据库加锁。加锁flush tables with read lock解锁unlock tables全局锁会让整个库处于只读状态&#xff0c;之后所有的更新操作都会被阻塞&a…

OB运维 | 连接 kill 中的 session_id

作者&#xff1a;姚嵩 外星人… 本文来源&#xff1a;原创投稿 *爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。 背景&#xff1a; 通过 obproxy 连接 OB 后&#xff0c;发现&#xff1a; kill 命令使⽤ show processli…

如何写出让人看不懂的MATLAB代码?

最近呢有不少好奇的伙伴私下问咱这是怎么实现大幅度降低matlab代码可读性。于是咱准备将相关的资源分享给大家&#xff0c;这个工具的根来源于大神thrynae (Rik)公开分享一款名叫minify的小工具图片。 咱也不藏着掖着&#xff0c;其实大家用minify作为关键词检索&#xff0c;不…

学生成绩管理系统/学生信息管理系统

文章目录项目介绍一、技术栈二、项目功能介绍三、功能页面展示四、获取代码项目介绍 一、技术栈 编程语言&#xff1a;Java 技术栈&#xff1a;ServletJspJdbcEasyUIjQueryAjax面向接口编程 二、项目功能介绍 用户角色&#xff1a;学生、教师、系统管理员。&#xff1b; 管…

Nuxt 3.0 全栈开发

Nuxt 3.0 全栈开发 - 杨村长 - 掘金小册核心知识 工程架构 全栈进阶 项目实战&#xff0c;快速精通 Nuxt3 开发&#xff01;。「Nuxt 3.0 全栈开发」由杨村长撰写&#xff0c;299人购买https://s.juejin.cn/ds/S6p7MVo/ 这门课我会全面讲解 Nuxt3 核心知识&#xff0c;然后…

【uni-app教程】一、UniAPP 介绍

一、UniAPP 介绍 (1) 什么是 UniAPP? uni-app 是一个使用 Vue.js 开发所有前端应用的框架&#xff0c;开发者编写一套代码&#xff0c;可发布到 iOS&#xff0c;Android&#xff0c;HS&#xff0c;以及各种小程序&#xff08;微信/支付宝/百度/头条/QQ/钉钉》等多个平台&#…

Docker之部署Canal

Canal 就是一个同步增量数据的一个工具。 目录概念Mysql开启binlog是否开启binlog开启binlog日志创建授权用户部署Canal拉取镜像挂载properties配置文件创建容器概念 canal是阿里巴巴旗下的一款开源项目&#xff0c;纯Java开发。基于数据库增量日志解析&#xff0c;提供增量数…

VTK例子--使用不同的vtkActor同时显示灰度图、体渲染、多边形

在实际项目中&#xff0c;常遇到不同类型的数据在同一个渲染窗口显示&#xff1b;如网格多边形与灰度图像的显示、体渲染与多边形的显示、体渲染与灰度图像的显示&#xff0c;如下面几张图的效果&#xff1b;多边形灰度图像体渲染多边形体渲染灰度图像如何实现这种混合显示的效…

怎么连接同局域网下的其他同事的mysql

**一、双击运行MySQL 5.5 Command Line Client。**然后输入你这个设备的MySQL的root账户密码 二、输入grant all privileges on *.* to root% identified by"root";&#xff08;identified by后面的是别人要登入的密码&#xff09;后回车。这样就设置局域网内所有ip都…

【NLP相关】NLP的发展历程

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️&#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

C++实现AVL树

目录 一、搜索二叉树 1.1 搜索二叉树概念 二、模拟实现二叉搜索树 2.1 框架 2.2 构造函数 2.2.1 构造函数 2.2.2 拷贝构造 2.2.3 赋值拷贝 2.3 插入函数 2.3.1 insert() 2.3.2 RcInsert() 递归实现 2.4 删除结点函数 2.4.1 Erase() 2.4.2 RcErase() 2.5 中序遍历…

Nuxt 3.0 全栈开发:五种数据获取 API 选择和应用最佳实践

Nuxt 3.0 全栈开发 - 杨村长 - 掘金小册核心知识 工程架构 全栈进阶 项目实战&#xff0c;快速精通 Nuxt3 开发&#xff01;。「Nuxt 3.0 全栈开发」由杨村长撰写&#xff0c;299人购买https://s.juejin.cn/ds/S6p7MVo/ 上一讲我们学习了如何基于 API Route 编写接口&#…

12.2 基于Django的服务器信息查看应用(CPU信息)

文章目录CPU信息展示图表展示-视图函数设计图表展示-前端界面设计折线图和饼图展示饼图测试折线图celery和Django配合实现定时任务Windows安装redis根据数据库中的数据绘制CPU折线图CPU信息展示 图表展示-视图函数设计 host/views.py def cpu(request):logical_core_num ps…

【Unity VR开发】结合VRTK4.0:创建人工按钮

语录&#xff1a; 人生需要准备的&#xff0c;不是昂贵的茶&#xff0c;而是喝茶的心情。 前言&#xff1a; 按钮按下抬起是虚仿中经常会出现的功能&#xff0c;那么如何去表现呢&#xff0c;我们可以使用线性变换驱动器对人工按钮进行装箱&#xff0c;以对来自交互器的碰撞做…