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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解锁创意灵感,探索FlutterExampleApps项目的奥秘

解锁创意灵感&#xff0c;探索FlutterExampleApps项目的奥秘 项目简介 FlutterExampleApps项目是一个包含各种示例应用链接的仓库&#xff0c;旨在演示Flutter应用开发中的各种功能、特性和集成。 项目包含了以下几个部分&#xff0c;每个部分都涵盖了不同的内容和主题&…

使用 Next.js 连接 mysql 数据库

前言 本文主要为大家介绍&#xff0c;如何使用 Next 框架实现一个简单的后端接口&#xff0c;并且从数据库中请求数据返回给前端。 实现 创建api/getData文件夹 项目创建完成后在 app 文件下新建api文件夹&#xff0c;在 api 文件夹下新建 getData 文件夹&#xff0c;在 ge…

L1-047 装睡-java

输入格式&#xff1a; 输入在第一行给出一个正整数N&#xff08;≤10&#xff09;。随后N行&#xff0c;每行给出一个人的名字&#xff08;仅由英文字母组成的、长度不超过3个字符的串&#xff09;、其呼吸频率和脉搏&#xff08;均为不超过100的正整数&#xff09;。 输出格…

实现Slider 滑块组件标记动态变化

实现以上效果&#xff0c;下拉框、slider滑块、按钮都在同一行&#xff0c;设置flex布局后&#xff0c;发现silider滑块最右边的标记数字一直都如下竖着显示&#xff0c;后来通过给源组件的标记区.el-slider__marks-text增加一个宽度后解决该问题。 <template><div>…

如何使用IP代理解决亚马逊账号IP关联问题?

亚马逊账号IP关联问题是指当同一个IP地址下有多个亚马逊账号进行活动时&#xff0c;亚马逊会将它们关联在一起&#xff0c;从而可能导致账号被封禁或限制。 为了避免这种情况&#xff0c;许多人选择使用IP代理。 IP代理为什么可以解决亚马逊IP关联问题&#xff1f; IP代理是…

2.20 day2 QT

自由发挥登录窗口的应用场景&#xff0c;实现一个登录窗口界面 #include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {//窗口相关设置this->setWindowTitle("登入页面"); //设置 窗口 标题this->setWindowIcon(QIcon("D:…

算法项目(2)—— LSTM、RNN、GRU(SE注意力)、卡尔曼轨迹预测

本文包含什么? 项目运行的方式(包教会)项目代码LSTM、RNN、GRU(SE注意力)、卡尔曼四种算法进行轨迹预测.各种效果图运行有问题? csdn上后台随时售后.项目说明 本文实现了三种深度学习算法加传统算法卡尔曼滤波进行轨迹预测, 预测效果图 首先看下不同模型的指标: 模型RM…

佳能2580的下载手册

凡是和电子产品有关的产品其内部都开始不断地进行内卷&#xff0c;在不断地内卷背后&#xff0c;意味着科技更新和换代&#xff0c;自己也入手了一台佳能2580的打印机&#xff0c;一台相对比较老式的打印机&#xff0c;以此不断地自己想要进行打印的需要。 下载的基础步骤&…

调用接口时不时出现 Error: socket hang up

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 今天采用golang创建了一个http服务&#xff0c;准备对若干接口进行测试。 问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 在测试第一个接口时&#xff0c;发现采用postman调用接口…

Jenkins 2.426.3新版设置中文

1. 插件页面显示无法联网 &#xff0c;点击Plugins一直提示连接超时&#xff0c;设置公司代理后 2. 稍等一会儿点击如下图&#xff0c;插件就出来了&#xff0c;然后输入Locale进行下载 3. 以下是我下载安装好的 4.打开设置&#xff0c;找到Locale选项&#xff0c;设置成zh_CN…

禁止电子邮箱地址登录WordPress后台的插件No Login by Email Address

WordPress 4.5及之后的版本增加了使用注册用户的电子邮件地址代替用户名登录的功能&#xff0c;但是大多数个人站长的管理员邮箱地址都是固定&#xff0c;而且到其他站点进行评论留言也是同一个邮箱地址&#xff0c;很容易给一些别有用心的可乘之机&#xff0c;所以禁止WordPre…

Java后端底座从无到有的搭建(随笔)

文章目录 开发模式的演变草创时期1.0时期&#xff08;基座时期&#xff09;1.1时期&#xff08;低代码时期&#xff09;2.0时期&#xff08;无代码时期&#xff09; 前言&#xff1a;本文是笔者在初创公司&#xff0c;一年多来Java后端服务底座搭建过程的总结&#xff0c;如有不…

Java 最全面试总结——4.Spring篇

1、什么是spring? Spring 是个 java 企业级应用的开源开发框架。 Spring 主要用来开发 Java 应用&#xff0c;但是有些扩展是针对 构建 J2EE 平台的 web 应用。 Spring 框架目标是简化 Java 企业级应用开发&#xff0c;并通过 POJO 为基础的编程 模型促进良好的编程习惯。…

Gradle统一管理依赖

背景 随着项目越来越大&#xff0c;module 越来越多&#xff0c;依赖的库也越来越多&#xff0c;依赖管理也越来越混乱。 我们一般会有以下需求&#xff1a; 1. 项目依赖统一管理&#xff0c;在单独文件中配置 2. 不同 Module 中的依赖版本号统一 管理 Gradle 依赖 说明&a…

【动态规划专栏】专题二:路径问题--------6.地下城游戏

本专栏内容为&#xff1a;算法学习专栏&#xff0c;分为优选算法专栏&#xff0c;贪心算法专栏&#xff0c;动态规划专栏以及递归&#xff0c;搜索与回溯算法专栏四部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握算法。 &#x1f493;博主csdn个人主页&#xff1a;小…

区块链游戏解说:什么是 Nine Chronicles

作者&#xff1a;lesleyfootprint.network 编译&#xff1a;cicifootprint.network 数据源&#xff1a; Nine Chronicles Dashboard 什么是 Nine Chronicles Nine Chronicles 是一款去中心化的在线角色扮演游戏&#xff0c;标志着在线游戏和区块链技术的发展。 Nine Chroni…

IMS audio codec的优先级

IMS voice call过程中&#xff0c;UE端的 audio codec也是有优先级规定的&#xff0c;具体规定如下。 如RFC 4566或8866 SDP 协议中的描述&#xff0c;如果<proto>是“RTP/AVP”或“RTP/SAVP”&#xff0c;则<fmt>会包含RTP paylaod type。 当给出paylaod type nu…

第2.4章 StarRocks表设计——分区分桶与副本数

目录 一、数据分布 1.1 概述 1.2 数据分布方式 1.2.1 Round-Robin 1.2.2 Range 1.2.3 List 1.2.4 Hash 1.3 StarRocks的数据分布方式 1.3.1 不分区 Hash分桶 1.3.2 Range分区Hash分桶 三、分区 3.1 分区概述 3.2 创建分区 3.2.1 手动创建分区 3.2.2 批量创建分区…

单片机学习笔记---红外遥控红外遥控电机调速(完结篇)

目录 低电平触发中断和下降沿触发中断的区别 红外遥控 Int0.c Int.h Timer0.c Timer0.h IR.c IR.h main.c 红外遥控电机调速 Timer1.c Timer.h Motor.c Motor.h main.c 上一节讲了红外发送和接收的工作原理&#xff0c;这一节开始代码演示&#xff01; 提前说…

Linux-ls命令

目录 ls&#xff1a;查看目录下文件/文件夹 ls -l&#xff1a;列表显示文件 ls -a&#xff1a;显示所有文件正常情况下‘ . ’开头的文件是隐藏的 ls -la&#xff1a;以列表形式显示所有文件包括隐藏文件 ls -lt&#xff1a;按时间倒序查看文件 ls -R&#xff1a;递归方式…