两个内部表不兼容或不可转换-MDG-M

2020-09-07 08:00发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)嗨, 我目前正在使用一些自定...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我目前正在使用一些自定义字段扩展MARM和UNITOFMSR实体。

这就是我所做的:

  • 扩展MARM
  • 扩展了SMEINH(MARM的更改表)
  • 扩展了MARM X和UI结构
  • 将字段添加到T130F
  • 将它们添加到数据模型
  • 生成的结构
  • SMT映射
  • MM调整后的分期
  • 清除了UI元数据缓冲区
  • 已将字段添加到UI
  • 在某些情况下在规则服务中添加了一些规则以默认字段(我知道这不是问题,因为我注释掉了所有新代码,并且该问题仍在发生)

问题来了-每当我尝试在MDG中启动或继续一个过程时,我都会得到简短的转储,内容如下:

两个内部表不兼容或不可转换

我以相同的方式扩展了数百个字段,但从未遇到过此问题。 转储在类CL_USMD_GOV_API的标准方法read_entity_buffer中发生:

创建 DATA lr_data就像et_data的线一样。

*分析请求的数据结构

*必须这样做,因为写缓冲区也需要组件表。

*出于这个原因,我们在此处获取并将结果提供给et_components

*,然后在WRITE_ENTITY_BUFFER中重复使用。

lr_data_struc?= cl_abap_typedescr => describe_by_data_ref(p_data_ref = lr_data)。

lt_components = lr_data_struc->组件。

*尝试从READ BUFFER中读取数据

使用KEY实体= iv_entity_name"键

的mt_entity_read_buffer读取表

entity_key = "密钥

版本= iv_版"密钥"

read_mode = iv_data_source" key

request_mode = iv_request_mode

组件= lt_components

分配

如果sy-subrc = 0。

ASSIGN -结果-> *至

检查sy-subrc =0。 "未调用写操作-> READ/RETRIEVE_CHAR_VALUE引发的异常

et_data =

当它碰到UNITOFMSR缓冲区条目之一时,我以粗体突出显示了该问题。 在转储时,我看不到et_data和之间没有区别,除了et_data是一个排序表,而是标准表。

关于什么可能导致该问题以及如何解决的任何想法?

7条回答
绿领巾童鞋
2020-09-07 08:48

你好,丹尼尔,

按照承诺-现在是星期四,我可以从SAP访问我的笔记:

这是一个罕见的问题,仅发生在Unicode系统中,其中Include以奇数偏移量开始并且具有特定类型的字段,因此这就是为什么它不经常发生的原因。

Governance API的读取实体缓冲区存储从不同来源以及在代码堆栈的不同级别(便捷API,Governance API,模型等)创建的结构。 根据创建这些结构的位置,其中一些可以通过自定义数据模型的数据引用来创建(在本例中为Flat结构),而其他一些则可以通过诸如/MDGMM/_S_MM_PP_MATERIAL之类的主要持久性映射结构来创建


在ABAP包含结构中,由于使用Unicode系统而引入了对位要求,并且由于此原因,将插入对位间隙以满足这些要求。 相反,在这种情况下,平面结构会自动对齐,并且不会插入对齐间隙。

有关对齐的更多信息和规则,您可以检查以下链接:

对齐

https://help.sap.com/abapdocu_70/zh-CN/ABENALIGNMENT_GLOSRY .htm

Unicode系统中的对齐方式

https://help.sap.com/abapdocu_70/zh-CN/ABENUNICODE_ALIGNMENT .htm

数据对象对齐:

https://help.sap.com/abapdocu_70/zh-CN/ABENALIGNMENT .htm

在包含开始处使用数据类型P(或INT4?)将导致插入对齐间隙,直到对齐Include结构为止,而使用数据类型C将自动对齐 ,则不会插入任何空格。

为了检查结构/MDGMM/_S_MM_PP_MATERIAL的每个字段的偏移量,转到事务SE37并执行功能模块DD_SHOW_NAMETAB。 填写以下参数,单击"执行",然后单击"显示功能模块的输出列表"以显示详细的结构信息:

SHORTNT = <空白>

状态= A

TABNAME =/MDGMM/_S_MM_PP_MATERIAL

GETALL = X

将此与结构快照进行比较将显示由对齐间隙引起的任何未对齐。

正如我所说-为了防止这种情况的发生,我所做的就是在包含(在数据模型中)的开头创建一个伪字段ZZADUMMY。 此命名约定将其放在我的结构的Z字段顶部。 而且它是C型的(顺便说一下,我用了长度2,因为这是我对齐间隙的大小,但我认为这并不重要)

谢谢

Ben

一周热门 更多>