Material Number Field Length Extension: Code Adaptions

note 2215852
note 2215424
离散制造行业note 2381633
激活物料编码扩展只会影响到物料号的输入,激活不激活字段的技术长度都已经变成40位了。物料号虽然数据库表的长度变成了40位,但它的存储没有任何变化,也不需要做Data migration,原来如果是纯数字的,最长仍是18位,也有例外,就是如果激活了DIMP(离散制造)长物料编号或制造商部件编号功能,就需要更改存储在数据库中的物料编号内容了。更多信息请参见SAP note 2381633
接口要不要做调整取决于对方系统,如果对方系统没有激活长字段,因为系统转换到S4 HANA后原来 的短字段都还是可以正常使用的,发送和接收都可以,即使是那些使用扩展字段做拼接的字段也可以正常用,同时,SAP会提供长版本的字段,供外部接口选择,他们想调整就调整,不调整也可以。
欢迎小伙伴加我微信一起讨论学习S4HANA开发或是S4升级相关的问题:wb21648513, 2020年的目标之一,建一个公众号之类的和朋友一起学习,希望能达成哈

在SAP S/4HANA中,物料编号的最大字段长度已从18个字符扩展到40个字符。此外,还扩展了非纯物料编号但可能偶尔包含材料编号的字段,这些扩展主要是通过扩展domain实现的,就确保影响最小,字段长度扩展同样适用于所有接口的参数,但对于通常由远程系统调用的已发布接口,选择了一种不同的方法来保持这些接口与相应的SAP ERP接口兼容,参考2215424.
由于使用了远程函数调用(RFC)协议,因此无法更改已经发布的接口参数的字段长度,这将是一个不兼容的变化。此时长度必须保持稳定,并引入一个具有适当长度的附加参数。我们要注意BAPI和已经发布的RFC,其中发生了一些变化,细节如下。
分几种情况 :

在S4 HANA调用调用本地已扩展的BAPI和RFC。

这类场景是CALL RFC(或BAPI)时不指定destination,或是 destination ‘NONE’,或是指向了本机的那种RFC call。

简单讲,这些远程调用的接口函数参数列表中如果含有扩展字段,会相应增强几个同名+后缀"_LONG"的字段,请注意,字段的短版本仅在远程通信场景中适用,其中目标系统可能是没有为字段的扩展版本启用的系统。
在内部,SAP S/4HANA系统能够处理该字段的扩展版本。这还意味着,在以本地BAPI或已发布的RFC模块调用导出数据时,必须填充字段的长版本,并且在从本地导入数据时,必须解释字段的扩展版本。意思是,本地调用导出数据时,一定要填充长字段,本地调用导入数据时,也要用长字段。
示例:

在这里插入图片描述
在这里插入图片描述

从S4HANA 远程调用其它系统的函数

以兼容的格式发送数据是很重要的。此外,还必须考虑这样一个事实,即从远程系统检索到的数据是旧格式的。这是两种场景:以调用方的身份发送数据和以调用方的身份取数据
两种case需要考虑调整代码:

  • 被调用方是S4HANA,或是SAP ERP,即 SAP S/4HANA – SAP S/4HANA 和 SAP S/4HANA – SAP ERP
  • 被调用方不属于 SAP S/4HANA code line的一部分,属于其他类型的集成场景,如 SAP S/4HANA - SAP CRM
    下面分别解释这两种case:
1. SAP S/4HANA – SAP S/4HANA 和 SAP S/4HANA – SAP ERP

如果被调用的函数已经被扩展了,就像上面介绍那样,字段有两个版本,长字段和短字段。本地调用,短版本是不相关的,只用长版本,但是远程调用时,这个短版本是非常相关的,因为目标系统可能只能解析短版本。
如上所说,S4HANA的程序只处理长版本,这样导致的后果就是在远程调用时,如果物料编号扩展功能没有激活,并且数据被发送(导出)到目标系统,那么字段的短版本也必须被发送。如果材料编号扩展功能被激活,则只能发送字段的短版本,前提是物料号Fit字段(以避免截断)。当从目标系统检索(导入)数据时,相关数据可能只在字段的短版本中找到,因为目标系统可能是一个无法处理长字段版本的系统。因此,必须将数据移动到字段的长版本,以便SAP S/ 4hana对检索到的数据进行进一步的内部处理。
为了支持远程函数调用的一致调整,SAP提供了几个“mapper”类,它们提供了在远程接口中扩展字段的短版本和长版本之间进行数据交换的方法。它们适用不同的对象,每个映射器类处理一个语义类型,例如,有一个映射器类用于特征值的转换。还有最常用的物料号转换, CL_MATNR_CHK_MAPPER- BAPI_TABLES_CONV_TAB方法允许处理必须发送到远程系统或从远程系统取到的内表数据。其中使用IV_INT_TO_EXTERNAL 参数来用于不同场景,IV_INT_TO_EXTERNAL = ‘X’ 用于发送数据前的转换,字段的短版本将被填充(如果材料编号扩展功能没有激活)。或是IV_INT_TO_EXTERNAL = ‘’将远程取的数据转换为进一步的内部处理,根据短版本填充长版本(如果材料编号扩展功能没有激活)。映射类的方法已经考虑了扩展的物料编号功能是否已经激活。
简单说,给数据时一定填充好短字段,接数据时记得把对方传过来的短字段转到长字段里
示例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. SAP S/4HANA - SAP CRM

这种情况 ,用于服务远程调用的参数结构类型很可能没有扩展字段的长版本和短版本。最可能的情况是,他们只有一个长字段版本(由于使用了SAP数据类型,通过更改使用的域的长度对其进行了扩展),这种情况下,
一种方法是:用添加后缀“_SHORT”的字段名重命名结构类型中的长字段,并使用SAP提供的short数据类型替换该类型,比如MATNR18是物料编号的短版本。如此修改后结构现在可以与目标系统期望的结构兼容了,然后在具有长版本类型的结构的末尾添加一个新参数字段,这个参数使用原始名称,例如MATNR用于长版本的材料号。使用这种方法,你的“SAP S/4HANA-internal”代码仍然可以使用原始字段名。当使用结构类型在远程调用中发送(导出)数据时,可以在执行远程调用之前调用相应的mapper类方法来填充结构的短版本。当使用结构类型来接收(导入)来自远程调用的数据时,再调用相应的mapper类方法,以在远程调用执行后填充较长的结构版本。大白话再说一次,以物料号举例,1. 先用MATNR18替换现在的MATNR域,把字段名后面加一个"_SHORT"。 2. 然后用原来的字段名新加一个字段,参考域用40位的MATNR。如此以后S4 HANA内的相关程序就可以方便的使用MATNR字段,接下来就还是那句给数据时一定填充好短字段(用mapper类),接数据时记得把对方传过来的短字段转到长字段里
另一种方法是现有字段用短版本的Domain来替换,再建一个后缀是”_LONG“的字段存长版本。与前一种方法的不同之处在于,这样的话还必须调整自己SAP S/ 4hana内部代码的方法,以便始终使用新字段名而不是原始字段,因为具有原始名称的字段现在对于内部处理来说太短了。

在接口中提供具有扩展字段的已启用远程功能的Function

也就是做为被调用方,提供RFC函数方,如果函数中有扩展的字段,这时候也要分两种情况,如果调用方也是S4 HANA系统或是本地调用,那就什么也不需要调整。如果对方系统没有启用扩展字段,就会有兼容性问题。

  • 如果调用系统中的代码在你的控制之下,你可以通过使用调用系统中RFC执行的数据类型的长版本来调整远程函数调用。就是修改调用方的程序。
  • 另外,也可以在SAP S/4HANA系统中将字段类型重置为其短版本。例如,结构包含一个数据类型为MATNR的物料编号字段。您可以将数据类型更改为MATNR18。
  • 第三种选择是以一种兼容的方式扩展数据结构,即SAP以同样的方式扩展了BAPI结构:将数据类型的短版本分配给原始字段,并在结构的末尾添加一个具有长版本数据类型的新字段。此方法的优点是,对于未启用长版本字段的调用系统,接口是兼容的;对于启用长版本字段的调用系统,接口也是兼容的。这种方法甚至可以处理混合系统的情况,在这种情况下,为扩展字段启用的系统和未启用扩展字段的系统都调用启用了远程功能模块。使用这种方法,你还可以使用mapper类方法转换要导入到你的remote-enabled 函数的数据(在函数的一开始)和转换要从remote-enabled函数导出的数据(在函数的最后)。
在OpenFI/BTE事件中调用自己的远程函数模块

一般来说,OpenFI/BTE事件的接口参数没有以兼容的方式更改。字段只是被扩展了,就像它们对任何其他本地功能模块所做的一样。假设在这样的事件中实现的大多数功能都是本地功能。如果已经注册了一个由这样的事件远程调用的函数模块,那么在远程调用中使用的接口可能不兼容,因为该接口是从事件的接口获取的。如果无法在远程系统中调整远程函数模块,则可能需要用一个本地函数把远程调用包一下,使该本地函数模块接受扩展参数并映射到远程函数模块所理解的本地定义的参数。

BAPI扩展

有几个BAPI有EXTENSIONIN/EXTENSIONOUT参数来发送和接收BAPI中额外的数据。

Mapper Classes

class CL_MATNR_CHK_MAPPER

几个重要的方法:

  • CONVERT_ON_OUTPUT
  • CONVERT_ON_INPUT
  • BAPI_TABLES_CONV_TAB (…_X_IDX, …_XNUM, …_X_NAMES, …_X_NAM_MAT)
    BAPI_TABLE_CONV_TAB
    BAPI_TABLES_CONV_TAB_X_IDX
    BAPI_TABLES_CONV_TAB_X_NUM
    BAPI_TABLES_CONV_TAB_X_NAMES
    BAPI_TABLES_CONV_TAB_X_NAM_MAT
  • BAPI_TABLES_CONV_RNG
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值