XML Map 端口进阶篇——常用关键字和格式化器详解

XML Map 端口是用于在不同XML之间建立关系映射的工具,允许通过拖拽操作实现源XML和目标 XML之间的数据字段映射,除此之外,XML Map 端口还提供了其它丰富多彩的功能,使用户能够更加灵活和高效的处理XML 数据映射任务,让我们一同深入探索这些功能吧。

以生成850订单为例:

EDI_XMLMap_connector1.png

点击下载850订单的源文件和目标文件

自定义脚本检查必填字段

使用check、else和 throw 三个关键字组合,代码如下:

<arc:check value="[xpath('字段xpath值') | def | trim]">
  <arc:else>
    <arc:throw code="Miss value" desc="Miss 字段名"/>
  </arc:else>
</arc:check>

以知行之桥EDI系统的XMLMap端口下映射编辑器处理的映射关系为例:

EDI_XMLMap_connector2.png

如上图所示,对于850订单来说,po_no订单号是必须要有的,所以我们需要对订单号进行必填校验,操作如下:

鼠标点击BEG02节点,右键选择新增,点击代码脚本

EDI_XMLMap_connector3.png

进入到 脚本 页面中:

EDI_XMLMap_connector4.png

复制上文介绍的代码并补充需要进行必填校验的字段名称:

EDI_XMLMap_connector5.png

脚本名称必须填写,本例写的是‘po_no的必填校验’,可根据自己的实际情况填写,填写后保存,显示如下:

EDI_XMLMap_connector6.png

扩展阅读:

check 关键字的使用方法
else关键字的使用方法
throw关键字的使用方法

条件映射编辑器

对于非必填字段,当其值为空时需要跳过该字段所在的segment,从而避免向客户发一个空的segment。这种灵活性使用户能够更好的控制数据映射过程,确保生成的目标文件符合交易伙伴的预期及要求。

使用【条件】进行跳过,例:鼠标浮在需要跳过的节点上,点击蓝色图标:

EDI_XMLMap_connector7.png

进入到条件映射编辑器,并点击添加条件:

EDI_XMLMap_connector8.png

在InputXML中选择对应的字段:

EDI_XMLMap_connector9.png

在等于处选择条件:

EDI_XMLMap_connector10.png

N1Loop1里涉及到两个字段,需要添加两个条件,当shipto_name或 shipto_no有一个不为空时就可进入N1Loop1,两个都为空时则跳过N1Loop1。

条件名称 可根据自身需求填写,可为空:

EDI_XMLMap_connector11.png

然后点击 保存 即可

EDI_XMLMap_connector12.png

自定义脚本检查物料行信息

代码示例如下:

<rsb:if exp="![hasxpath('')]">
  <rsb:throw code="error" desc="no " />
</rsb:if>

在映射编辑器中涉及到的映射关系如下:

EDI_XMLMap_connector13.png

对于物料部分,按照XML Map的取值逻辑,会先从源文件找PO_ITEM,如果找不到就会跳过,不会进入到具体字段的取值,所以即便你对物料部分的字段值做了必填值校验,也不会进入到这个校验里,所以我们需要对PO_ITEM先进行校验。

点击上图右侧PO1Loop1上面的任何节点,右键选择新增,点击添加代码脚本,弹窗如下:

EDI_XMLMap_connector14.png

复制代码,并根据实际情况修改如下,本例只需要在 脚本名称 下方的方框中填写脚本代码,然后保存即可。

EDI_XMLMap_connector15.png

脚本添加完成后,映射编辑器中将会显示如下内容:

EDI_XMLMap_connector16.png

表达式编辑器

格式化器支持操作不同xpath返回的值,比如当用户传过来的日期格式与目标格式不同,就需要进行日期格式转换,转换方法如下:

[xpath() | trim | todate('要转换的格式','被转换的格式')]

例:对于订单日期,用户传入EDI的格式是yyyy-MM-dd HH:mm:ss,而客户要求的格式是yyyyMMdd。

操作步骤:鼠标悬停在BEG05节点上,选择表达式。

EDI_XMLMap_connector17.png

进入表达式编辑器:

EDI_XMLMap_connector18.png

进行todate处理:

EDI_XMLMap_connector19.png

注意:需要先trim去空,再todate

扩展阅读:

文本格式化器trim的使用方法
日期格式化器todate的使用方法

如果传入的日期为空,todate会转成当前日期,所以当传入日期值为空时根据实际情况进行必填校验或者通过条件映射编辑器跳过。

除了todate之外,还有很多常见的字符串处理,比如split,substring ,toupper等

拆分字符串
split(delimiter,indextoreturn)
delimiter:用作分隔符的字符串,以该字符串对整个字段值进行拆分
indextoreturn:字段值被以分隔符拆分后的索引

例:收到一组服装信息,以 ; 隔开存放在一个字段里,需求是要取第二个颜色值,代码如下:

<rsb:set attr="testString" value="sweater;blue;women; wool"/>
<rsb:set attr="item.color" value="[testString | split(';',2)]"/>
<!—item.color:blue-->

XMLMap端口映射编辑器中对于拆分字符串的映射关系处理如下:

比如用户有多个工厂,对应多个编号,传过来的buyer_no字段包含每个工厂对应的编号,以;隔开,目前这个是A工厂发出的订单,要取的是第二个编号。将鼠标悬浮在N104处,点击表达式:

EDI_XMLMap_connector20.png

进入表达式编辑器:

EDI_XMLMap_connector21.png

参考示例代码进行拆分处理:

EDI_XMLMap_connector22.png

保存后显示如下:

EDI_XMLMap_connector23.png

截取字符串
substring (index[,length])
index:索引,从index处开始截取
length:要截取的长度,如果没有指定,则默认截取到该字段结束

例:需要将输入字段的前两位值读到输出字段里

<rsb:set attr="input.value " value="AB1234"/>
<rsb:set attr="output.value" value="[ input.value | substring(0,2)]"/>

在XML Map中的用法参考split格式化器

获取字符串的长度
getlength()
返回字符串的长度

例:将输入字段的长度写到输出字段里

<rsb:set attr="input.value " value="AB1234"/>
<rsb:set attr="output.value" value="[input.value | getlength()]"/>

在XML Map中的用法参考split格式化器

加减乘除计算
add(value) 
返回数字属性值和参数指定的值之和,默认值为1
multiply(value) 
返回数值属性值与参数的指定值相乘的结果,默认值为2
subtract(value)
返回数值属性值与参数指定值之间的差值
divide(value)
返回数值属性值除以参数指定值的结果

例:将输入字段值乘以1000给输出字段

<rsb:set attr="input.value " value="2"/>
<rsb:set attr="output.value" value="[input.value | multiply(1000)]"/>

在XML Map中的用法参考split格式化器

自定义目标文件名称

将业务类型和关键字段以及当前时间放在文件名上,方便有问题时,快速定位查询
代码如下:

<rsb:set attr="_message.header:filename" value="业务类型_[xpath() | trim]_[_ | now | todate('yyMMddHHmm')].xml"/>

例:对于850订单,一般使用订单号来沟通订单数据。

点击BEG节点,右键选择新增,点击添加代码脚本。

EDI_XMLMap_connector24.png

复制代码,并根据实际情况修改如下,本例脚本名称填写脚本代码,然后保存即可。

EDI_XMLMap_connector25.png

EDI_XMLMap_connector26.png

虚拟节点

虚拟节点就是出现在XML设计器中,但是不会出现在XML输出里的一种特殊节点。
前面提到的脚本代码条件都属于虚拟节点。本章节主要讲解的是XML Map端口中的第三种虚拟节点——循环

循环一般用于减少层级,避免层级结构的重复,将输入文件中的重复元素’扁平化’为输出文件中的非分层结构。常用场景如下:

我们的输入文件如图左,需要的输出文件如图右:

EDI_XMLMap_connector27.png

点开XML Map上传源文件和目标文件,如下图:

EDI_XMLMap_connector28.png

鼠标点击上图右侧的child节点,右键选择 新增,点击 循环 。

EDI_XMLMap_connector29.png

对循环进行命名并保存。

EDI_XMLMap_connector30.png

将左侧源Parent节点拖拽到右侧的循环上创建Foreach关系,然后将源child节点拖拽映射到目标child节点。

EDI_XMLMap_connector31.png

点击右上角的测试映射进行测试,得到所需输入文件:

EDI_XMLMap_connector32.png

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

golang入门介绍-1

今天开始发布关于go语言入门到实战内容&#xff0c;各位小伙伴准备好。 go介绍 Go语言&#xff08;或 Golang&#xff09;起源于 2007 年&#xff0c;并在 2009 年正式对外发布。是由 Google 公司开发的一种静态强类型、编译型、并发型、并具有垃圾回收功能的编程语言。 Go 是…

SQL防止注入工具类,可能用于SQL注入的字符有哪些

SQL注入是一种攻击技术&#xff0c;攻击者试图通过在输入中注入恶意的SQL代码来干扰应用程序的数据库查询。为了防止SQL注入&#xff0c;你需要了解可能用于注入的一些常见字符和技术。以下是一些常见的SQL注入字符和技术&#xff1a; 单引号 ​&#xff1a; 攻击者可能会尝试…

C#分部类的应用:记录学生信息

目录 一、分部类及其用途 二、实例 再发一个分部类的应用&#xff0c;巩固一下。 一、分部类及其用途 C#中的部分类也被称为分部类。 C#中的部分类是一种将类的定义分成多个部分&#xff0c;每个部分都位于自己的文件中&#xff0c;然后在编译时合并在一起的机制。 部分类…

超平面介绍

超平面公式 (1) 超平面是指n维线性空间中维度为n-1的子空间。它可以把线性空间分割成不相交的两部分。比如二维空间中&#xff0c;一条直线是一维的&#xff0c;它把平面分成了两部分&#xff1b;三维空间中&#xff0c;一个平面是二维的&#xff0c;它把空间分成了两部分。(2…

AJAX总结

AJAX 1、什么是Ajax ajax 全名 async javascript and XML(异步JavaScript和XML) 是一种用于创建快速动态网页的技术 是前后台交互的能⼒ 也就是我们客户端给服务端发送消息的⼯具&#xff0c;以及接受响应的⼯具 AJAX 不是新的编程语言&#xff0c;而是一种使用现有标准的…

支持Intel Core i5/i7的高性能三防加固平板|亿道三防onerugged

大家好&#xff01;今天我要向大家推荐一款真正强悍的三防加固平板电脑&#xff0c;它支持Intel Core i5/i7高性能处理器&#xff0c;给你带来无与伦比的高性能体验。是不是心动了呢&#xff1f;那就让我为你揭开这款亿道三防onerugged系列的产品的神秘面纱吧&#xff01; 首先…

缀点成线

1232. 缀点成线 给定一个数组 coordinates &#xff0c;其中 coordinates[i] [x, y] &#xff0c; [x, y] 表示横坐标为 x、纵坐标为 y 的点。请你来判断&#xff0c;这些点是否在该坐标系中属于同一条直线上。 示例 1&#xff1a; 输入&#xff1a;coordinates [[1,2],[2,3…

豆粕贸易商的二次点价策略:如何在价格波动中获得收益补贴?

贸易商如何通过衍生品工具实现二次点价&#xff1f; 贸易商交易惯例&#xff1a;以豆粕贸易商和油厂签订的基差采购合同为例&#xff0c;同理可以类推至其他板块上下游企业。 按照交易惯例&#xff0c;贸易商通常会持有基差合同&#xff0c;但并不会先点价。当价格从高点到低…

CSS3中盒子居中

&#xff08;1&#xff09;利用定位&#xff08;子绝父相&#xff09;、margin-left、和margin-top实现 &#xff08;2&#xff09;利用定位&#xff08;子绝父相&#xff09;、transfrom属性实现 &#xff08;3&#xff09;利用flex布局实现盒子居中

【前端】前端三要素之BOM

写在前面&#xff1a;本文仅包含BOM内容&#xff0c;JavaScript传送门在这里&#xff0c;DOM传送门在这里。 本文内容是假期中刷的黑马Pink老师视频&#xff08;十分感谢Pink老师&#xff09;&#xff0c;原文保存在个人的GitLab中&#xff0c;如果需要写的网页内容信息等可以评…

【PostgreSQL实现psql连接时候提示用户的密码有效时间】

如下内容使用session_exec插件结合自定函数实现。类似于触发器的原理。 功能需要严格在测试环境测试后&#xff0c;才可在正式环境使用。没有相关要求&#xff0c;还是建议直接查询pg_roles/pg_authid/pg_user&#xff1b; 一、判断是否需要修改用户密码和有效期的检查SQL 首…

解锁服务器外联:TinyProxy一键搭建指南

引言 在服务器需要访问外网的情况下&#xff0c;由于网络安全等原因&#xff0c;许多生产服务器限制了对外网的访问。本文介绍如何通过在一台能够访问外网的服务器上部署TinyProxy来实现代理&#xff0c;使得其他服务器可以通过该代理访问外网。 安装 TinyProxy是一个轻量级…

CTFHub技能树web之文件上传(一)

一.前置知识 文件上传漏洞&#xff1a;文件上传功能是许多Web应用程序的常见功能之一&#xff0c;但在实施不当的情况下&#xff0c;可能会导致安全漏洞。文件上传漏洞的出现可能会使攻击者能够上传恶意文件&#xff0c;执行远程代码&#xff0c;绕过访问控制等。 文件类型验证…

代码随想录第二十一天 701.二叉搜索树中的插入操作 108.将有序数组转换为二叉搜索树

701.二叉搜索树中的插入操作 题目描述 给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和要插入树中的值 value &#xff0c;将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 &#xff0c;新值和原始二叉搜索树中的任意节点值都不同。 注意&a…

Tulsimer MB-1518——超纯水抛光树脂的技术应用

超纯水的制备和稳定性一直是相关领域极为重视的&#xff0c;那么超纯水中常会用到的抛光树脂技术&#xff0c;进口和国产对比起来究竟谁更甚一筹呢&#xff1f;接下来为大家分享的技术就是超纯水制备中常会用到的进口品牌&#xff1a;美国Tulsimer杜笙树脂中抛光树脂MB-106UP的…

设计师简历写作指南:教你如何获得高薪offer!

在找工作时&#xff0c;我们如何努力争取更多的主动权&#xff1f;在询问了许多大工厂的人力资源部后&#xff0c;即时设计帮助你总结了答案&#xff1a;请仔细设计你的简历&#xff01;一个好的设计师的简历应该怎么做&#xff1f;虽然简历只有几张纸&#xff0c;但它是你个人…

MyBatis Plus:自定义typeHandler类型处理器

目录 引言&#xff1a;关于TypeHandler PostGreSQL&#xff1a;JSON数据类型 PostGreSQL数据库驱动&#xff1a;PGobject类 TypeHandler类型处理器 自定义类型处理器 类型处理器实现&#xff1a;PGJsonTypeHandler 注册类型处理器 引言&#xff1a;关于TypeHandler MyBa…

【快速搞定Webpack5】基本配置及开发模式介绍(二)

在开始使用webpack之前么&#xff0c;我们需要对Webpack的配置有一定的认识。 一、5大核心概念 1. enty&#xff08;入口&#xff09; 指示webpack从哪个文件开始打包 2. output&#xff08;输出&#xff09; 指示webpack打包完的文件输出到哪里去&#xff0c;如何命名等 …

Java 面向对象进阶 07 继承中成员变量,成员方法的访问特点(黑马)

一、继承中成员变量的访问特点&#xff1a; 打印结果为&#xff1a;zishow 这种情况打印出来的结果是Zi 这种情况打印的是Fu 这种情况就会报错 对于重名的情况&#xff0c;没有关键字&#xff0c;那么就是就近原则&#xff0c;打印出的是ziShow&#xff1b; this.name 指的是Zi…

java导出动态下拉框excel模板

1.原始模板 2.导出模板,下拉框为数据库中得到动态数据 public void downloadTemplate(HttpServletResponse response) throws IOException {// 所有部门List<String, String> departments expertManageMapper.selectAllDepartment();//所有职位List<String, String&g…