点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
专家们,
我想知道PI映射中的子字符串函数是否不可靠。 或者也许我只是错误地使用了它(有可能吗?)
我有一个源字段映射到目标。 该映射是到外部数据库的JDBC连接的一部分,这似乎很难解决,因为2个字段的字符串太长。
为了解决这个问题,我在每个数据类型字段上都设置了最大长度(分别为20和12)。 然后,我在涉及子字符串的映射中建立了一个检查。
如果源的长度大于20(或12),则跨子字符串映射(0表示20),否则跨整个源字段进行映射。
看起来相当简单:
真正运行时,没有任何东西可以到达目标。
在测试模式下运行时,该值会传递到目标。
当我更改映射以使用常量时... 当源长度大于20时,跨"大于20"映射,否则为" 20或小于20"。
有趣的是,当我在测试模式下运行时,我的测试数据显示为" 20或更少"(是的),但是当实际运行时,它的数据映射为"大于20"。
除了最后一条注释之外,没有人能提出一个原因,为什么使用子字符串拒绝在实际运行时环境中映射任何内容?
当它是直接映射时,它映射良好,只是无法进入目标数据库。
感谢收到建议。
我附上了一些屏幕截图。
非常感谢
伊丽莎白
(87.9 kB)
伊丽莎白,你好!
首先,尝试在检查长度之前插入Trim函数。 并在传递给子字符串函数时使用修剪后的值。
关于,Evgeniy。
实际上,我可能已经解决了我的最后一条评论。 当长度为20或更短时,我没有使用Trim,只有当长度更大时才使用。 通过我的映射,我在正确和错误路线上都包含了Trim。 当然看起来更好。 因此,最终看起来不可靠的是Length函数,而不是子字符串。
由于测试数据有限,我必须将其放入QA环境中以证明已修复。
感谢您的帮助
Elizabeth
嗨伊丽莎白,
您面临的问题是更大和ifelse函数的存在,所以我们将其分解:
关于"增强"功能,该功能将两个输入值进行比较。 如果第一个值大于第二个值,则输出为" true",否则为" false"。
以你的榜样
SAPCaseHouseID =‘7777 Waverty Read’<-我们的第一个值
长度= 17
我们在这里与您的常数= 20 <-我们的第二个值
进行比较17大于20? 不,所以输出为false,因为二进制将使用0
现在让我们检查一下If ... Else ....功能
如果更大(我们知道这是假的,所以为零),则使用子字符串"位置0…字符.. 20"进行映射,但是由于为零,您得到的是空的...希望这可以回答您的问题。
阿达丽德,大家好!
你好帕特里克
这真的很奇怪。 我按照您的建议做了,创建了一个Java UDF,但是仍然遇到相同的问题。 尽管再次,它在测试模式下仍然可以正常工作,只是没有端到端测试。
最终,我回到了abap程序员那里,解决了这个问题,让他们在2个单独的字段中输出门牌号和街道,然后分别修剪()-处理它们,然后再将它们连接到一个字段中去 数据库。
现在一切正常。
非常感谢您的输入。
Elizabeth
嗨,
首先,谢谢您,Trim解决了在接口的外部数据库端获取截断错误的问题。
但是,这带来了一个新问题。
我们有一个20个字符的字段,是通过abap程序传递的。
20个字符的字段由门牌号和街道名称组成,中间用空格编码
我发现Trim切断了门牌号后的字段内容。
在只有街道名称(例如 22高街以22出炉
但是对于没有门牌号的地址..... Smedley John Street-出现为Smedley John Street。
显然,这两个示例中的"空格"字符有所不同。
我并不是真的想通过让程序员使用另一个定界字符并在映射中替换该定界字符来解决此问题,因为在其他情况下,我们无法控制传递给我们的内容(因此, 找到解决方案)。
我还注意到,当我在测试模式下运行此程序时,它通过了完整的地址行
任何建议将不胜感激
谢谢
伊丽莎白
一周热门 更多>