SAP PI/PO中使用UDF解决按字节拆分字符串的需求

需求背景:

SAP需要将采购订单信息通过PI发送到SFTP服务器上,生成文件,一般对日项目上文件内容通常都是按照指定的字节数拆分的,而不是字符数,类似下面的格式。

问题点:

如果是使用FTP适配器,则可以使用FCC进行转换,而且FTP适配器的FCC是支持按照字节数进行拆分的,但SFTP适配器所支持的FCC参数比较少,其中就不支持按照字节数进行拆分,同时也不支持字符超长自动截取等参数设置,所以只能使用UDF进行解决。

官方文档:

Converting XML in the Receiver File/FTP Adapter to Text Formaticon-default.png?t=N7T8https://help.sap.com/docs/SAP_NETWEAVER_750/5cf7d2de571a45cc81f91261668b7361/44686e687f2a6d12e10000000a1553f6.html?locale=en-US我的其他的一些相关总结:

SAP ABAP端实现解析具有深层结构的文件内容(类似SAP PO中的FCC功能)icon-default.png?t=N7T8https://blog.csdn.net/DeveloperMrMeng/article/details/133316299?spm=1001.2014.3001.5501SAP PI/PO Soap2File 接收方使用StrictXml2PlainBean将XML转换为文本格式icon-default.png?t=N7T8https://blog.csdn.net/DeveloperMrMeng/article/details/130856851?spm=1001.2014.3001.5501SAP PI/PO File2Soap 发送方使用Content Conversion将文本格式转换为XML格式icon-default.png?t=N7T8https://blog.csdn.net/DeveloperMrMeng/article/details/130868786?spm=1001.2014.3001.5501

实现过程:

IR中的配置:

在Message Mapping中的Function页签,创建自定义方法:

源码如下,核心方法就是通过字符串对应的字符范围来判定是全角字符还是半角字符:

		//Fill the byte length with the return length
		ImportString = ImportString.format("%-" + TotalLength + "s", ImportString);
					
		//Return String
		String retStr = "";
		
		//String length
		int length = ImportString.length();
		
		//Get String Array List
		char[] arr = ImportString.toCharArray();
		
		//Initial Length
		int length_character = 0;
		
		//Check the number of bytes per character
		for(int i = 0;i<length;i++) {
			
			//'\u0020'~'\u007E'  and  '\uFF61'~'\uFF9F' is Half corner character
			if((arr[i]>='\u0020' && arr[i]<='\u007E') || (arr[i]>='\uFF61' && arr[i]<='\uFF9F')) {
				length_character = length_character + 1;
			}else {
				length_character = length_character + 2;
			}
			
			//If the cumulative length same with Return length, returned
			if(length_character == TotalLength) {
				retStr = retStr + String.valueOf(arr[i]);
				break;
			}else {
				//If the cumulative length is greater than the return length, one byte is still needed    eg:5 > 4
				if(length_character > TotalLength) {
					retStr = retStr + " ";
					break;
				}else {
					retStr = retStr + String.valueOf(arr[i]);
				}
			}
		}	
		return 	retStr;

然后为每一个字段做mapping映射,通过一个常量字符串指定字节长度,经过ConvertString方法后,即可得到处理后的字符串,超过长度的截取掉,不足的则以空格补充长度,经过映射之后,在ID中再进行简单的配置即可完成。

ID中的配置: 

因为IR中通过UDF将每个字段已经转换为正确的长度,所以此处直接按照字段进行拆分即可达到效果。

以上。

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

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

相关文章

教你简单几步,轻松下载微信视频号里的视频

在如今社交媒体上&#xff0c;视频内容越来越受到人们的喜爱。微信视频号作为一个新兴平台&#xff0c;以其丰富的视频内容吸引着越来越多的用户。然而&#xff0c;许多人在观看完喜欢的视频后&#xff0c;都希望能够将其下载到本地进行保存或分享。那么&#xff0c;微信视频号…

联想领像M102W激光打印机报错E0问题的描述

速印机(理想、荣大等)、复印机(夏普、东芝、理光、佳能、震旦等全系列)、打印机、扫描仪、传真机、多媒体教学一体机、交互式电子白板、报警器材、监控、竞业达监考设备及其它监考设备、听力考试设备、特种安防设备维护及维修。 联想领像M102W打印机是理光SP系列的衍生机器…

gamingtcui.dll 丢失的全面解决方案指南,快速修复gamingtcui.dll文件

在使用计算机进行工作或娱乐时&#xff0c;我们可能会遇到一些需要技术解决的问题。其中&#xff0c;"gamingtcui.dll找不到"是一种比较常见的DLL文件相关的问题&#xff0c;许多用户在面对它时会感到疑惑&#xff0c;首先&#xff0c;我们需要理解问题的本质 —— 什…

《洛谷深入浅出进阶篇》P1995 程序自动分析——并查集,离散化

上链接&#xff1a;P1955 [NOI2015] 程序自动分析 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P1955 上题干&#xff1a; 首先给你一个整数t&#xff0c;代表t次操作。 每一次操作包含以下内容&#xff1a; 1.给你一个整数n&#xff0c;让…

挖掘PostgreSQL事务的“中间态”----更加严谨的数据一致性?

1.问题 今天在上班途中&#xff0c;中心的妹纸突然找我&#xff0c;非常温柔的找我帮忙看个数据库的报错。当然以我的性格&#xff0c;妹子找我的事情对我来说优先级肯定是最高的&#xff0c;所以立马放下手中的“小事”&#xff0c;转身向妹子走去。具体是一个什么样的问题呢…

这才是 SpringBoot 统一登录鉴权、异常处理、数据格式的正确打开姿势

本篇将要学习 Spring Boot 统一功能处理模块&#xff0c;这也是 AOP 的实战环节 用户登录权限的校验实现接口 HandlerInterceptor WebMvcConfigurer 异常处理使用注解 RestControllerAdvice ExceptionHandler 数据格式返回使用注解 ControllerAdvice 并且实现接口 Response…

阿尔法狗的算法解析-增强学习和蒙特卡洛树搜索算法

阿尔法狗(AlphaGo)是谷歌旗下DeepMind开发的一个著名的增强学习算法,它在围棋领域取得了显著的成就。本文主要探讨其中两个重要的算法:增强学习算法和蒙特卡洛树搜索算法。 AlphaGo涉及的算法 AlphaGo是DeepMind团队开发的一个由多种算法和技术组合而成的系统,其包括以下…

【Linux网络】典型NAS存储方式:NFS网络共享存储服务

一、关于存储的分类 二、NFS的介绍 nfs的相关介绍&#xff1a; 1、原理 2、nfs的特点 3、nfs软件学习 4、共享配置文件的书写格式 关于权限&#xff0c;学习&#xff1a; 5、关于命令的学习&#xff1a; 三、实验操作 1、nfs默认共享权限&#xff08;服务端设置&#…

大数据-之LibrA数据库系统告警处理(ALM-12049 网络读吞吐率超过阈值)

告警解释 系统每30秒周期性检测网络读吞吐率&#xff0c;并把实际吞吐率和阈值&#xff08;系统默认阈值80%&#xff09;进行比较&#xff0c;当检测到网络读吞吐率连续多次&#xff08;默认值为5&#xff09;超过阈值时产生该告警。 用户可通过“系统设置 > 阈值配置 >…

【数据结构】C语言实现栈

&#x1f388;个人主页&#xff1a;库库的里昂 &#x1f390;C/C领域新星创作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏✨收录专栏&#xff1a;数据结构与算法&#x1f91d;希望作者的文章能对你有所帮助&#xff0c;有不足的地方请在评论区留言指正&#xff0c;大家…

软件开发和软件测试,到底学哪个好呢?

写在前面&#xff1a;买车没有最好&#xff0c;只有最适合。 类似这类“很难选择”的问题&#xff0c;在知乎上其实有很多。 比如&#xff1a;“该去年薪10w的国家电网&#xff0c;还是去年薪40w的互联网大厂”&#xff1b; 比如&#xff1a;“城里有房&#xff0c;剩下的100…

Sentinel规则

一、服务熔断测试 例子: application.properties配置文件 server.port8083spring.application.nameorder#spring.cloud.nacos.discovery.server-addrhttp://192.168.44.64:80spring.cloud.nacos.discovery.server-addrlocalhost:8848spring.cloud.sentinel.transport.port999…

C++之map和set模拟实现

前言 在map和set的使用文章中提到了CSTL中的map和set的底层其实就是用的红黑树来实现的,所以可以用红黑树来简单模拟实现一下STL中的map和set. STL源码中map和set的实现 map: 我们看到它的底层这个成员变量其实就是一棵红黑树, 之前说过map其实就对应搜索树的KV模型&#x…

面向企业的人脸属性检测技术方案

人脸识别技术已经成为企业提升服务质量、优化用户体验的重要工具。美摄科技&#xff0c;作为领先的人工智能技术提供商&#xff0c;我们致力于为企业提供最先进、最全面的人脸属性检测技术解决方案。 我们的AI人脸检测与属性分析技术&#xff0c;能够快速准确地检测人脸并返回…

安全狗云安全体系为高校提升立体化纵深防御能力

客户情况 某高校有服务器500台&#xff0c;对外站点200个&#xff0c;核心交换流量20G。 客户痛点 校园网系统分类较多&#xff0c;并且每类网站中安全级重要程度又各不相同&#xff0c;同时有多个网络出口(如&#xff1a;教育网、电信网、移动网等)&#xff0c;二级学院存在…

物联网网关在工业行业的应用案例

物联网网关在工业行业的应用案例 随着物联网技术的不断发展&#xff0c;物联网网关在工业行业的应用越来越广泛。本文将介绍一个物联网网关在工业行业的应用案例&#xff0c;以期为相关领域的研究和实践提供借鉴和启示。 一、案例背景 某大型制造企业是一家全球知名的汽车制…

vscode中git拉取、提交代码、解决冲突,以及合并代码的操作

vscode中git拉取、提交代码、解决冲突&#xff0c;以及合并代码的操作 场景&#xff1a;本地有修改代码&#xff0c;远程仓库没有更新&#xff0c;这时本地想要提交代码。 步骤&#xff1a;本地修改了testA文件内容->本地先暂存提交->拉取->推送&#xff1b; 本地修改…

2023.11.14 hivesql的容器,数组与映射

目录 https://blog.csdn.net/m0_49956154/article/details/134365327?spm1001.2014.3001.5501https://blog.csdn.net/m0_49956154/article/details/134365327?spm1001.2014.3001.5501 8.hive的复杂类型 9.array类型: 又叫数组类型,存储同类型的单数据的集合 10.struct类型…

SpringNative遇到的问题

问题1 org.apache.catalina.LifecycleException: An invalid Lifecycle transition was attempted ([before_stop]) for component 用不了反射&#xff0c;所以需要这个文件去 package org.wxy.example.sqlite.config;import java.lang.reflect.Constructor; import java.lan…

【机器学习基础】多元线性回归(适合初学者的保姆级文章)

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;机器学习 欢迎订阅&#xff01;后面的内容会越来越有意思~ &#x1f4a1;往期推荐&#xff1a; 【机器学习基础】机器学习入门&#xff08;1&#xff09; 【机器学习基…