【问题标题】:Casting from a Packed(8) type to a TMSTMP (DEC15) type in a Unicode system (and back)在 Unicode 系统中从 Packed(8) 类型转换为 TSTMMP (DEC15) 类型(并返回)
【发布时间】:2013-06-05 15:59:42
【问题描述】:

背景:

我有几个表在视图集群 (SE54) 中连接以进行维护。这些表中的每一个都有标准的创建/更改者/日期字段。对于创建的数据,更新字段很容易,我在表维护生成器中使用事件 05(创建时)。对于默认更改的字段,它涉及更多一点。我必须使用事件 01(保存前),然后根据需要使用字段值更新表 TOTAL[]EXTRACT[]

在 SM30 中维护表时,TOTAL[]EXTRACT[] 的格式与我正在维护的视图相同,并带有一个额外的标志来标识所做的更改类型(更新/创建/删除)

但是,在SM54(这是业务需求)中维护时,TOTAL[]EXTRACT[]的格式只是一个字符行的内部表。

问题:

我可以弄清楚正在编辑的表格的类型是什么。但是当我尝试将字符行移动到类型行时,出现以下运行时错误:(取决于我尝试移动/分配它的方式)

ASSIGN_BASE_TOO_SHORT
UC_OBJECTS_NOT_CONVERTIBLE
UC_OBJECTS_NOT_CHAR

我所有的结构都采用以下格式:

*several generic (flat) types
CREATED    TYPE TMSTMP,  "not a flat type
CHANGED    TYPE TMSTMP,  "not a flat type
CREATED_BY TYPE ERNAM,
CHANGED_BY TYPE AENAM,

问题的根源在于这两个时间戳字段不是平面类型。我可以在字符行中看到,时间戳由 8 个字符表示。

编辑:只有在找到解决方案后,我才能将 Length(8) 字段识别为已打包。

我尝试了以下徒劳:

"try the entire structure - which would be ideal
assign ls_table_line to <fs_of_the_correct_type> casting.  

"try isolating just the timestamp field(s)
assign <just_the_8char_representation> to <fs_of_type_tmpstmp> casting.

我已经尝试了“仅单个字段”选项的其他一些变体,但都没有成功。

有什么想法可以从 Character 类型转换为 TSTMMP 类型,然后再返回以更新内部表值?

【问题讨论】:

  • 您是否有任何理由选择对数据库字段使用时间戳,而不是广泛使用的单独日期/时间字段(ERDAT/ERTIM,...)?
  • @vwegert 没有其他人被要求设计:(。ERDAT/ERTIM 本来会很棒,因为它们是平面结构,这反过来使整个事情消失了。我们确实与 Java 系统交互,但我怀疑使用时间戳是否有任何真正的技术原因(它甚至不是多时区系统)。

标签: abap


【解决方案1】:

我发现以下工作:

而不是使用:

field-symbols: <structure> type ty_mystructure,
               <changed>   type tmstmp.

assign gv_sapsingle_line to <structure> casting. "causes a runtime error
assign gv_sap_p8_field   to <changed> casting.   "ditto

我用过这个:

field-symbols: <structure> type any,
               <changed>   type any.

assign gv_sapsingle_line to <structure> casting type ty_mystructure.
assign gv_sap_p8_field   to <changed> casting type ty_tmstmp.   

由于某种原因,我不喜欢我预定义字段符号。

我觉得这很奇怪,因为 the documentation 声明如下:

使用隐式类型声明进行强制转换 如果字段符号是 完全类型化或具有通用内置 ABAP 类型之一 - C, N、P 或 X - 您可以使用以下语句:

ASSIGN ... TO <FS> CASTING.

当系统访问字段符号时, 分配的数据对象被解释为与 字段符号。

我只能假设我的结构不兼容(由于 P8 -> TSTMMP 转换)

数据对象的长度和对齐方式必须是 与字段符号类型兼容。否则系统返回一个 运行时错误。如果字段符号或数据的类型 对象是 - 或包含 - 字符串、引用类型或内部表, 这些组件的类型和位置必须完全匹配。 否则会出现运行时错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多