扁平化成信息对象

2020-09-21 09:10发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)嗨 我有一个客户,...

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

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


我有一个客户,需要采用0ORGUNIT层次结构并将其定义为平面层次结构。 这意味着每个节点都将成为一个信息对象,其中包含表示节点级别(TLEVEL)的数据。 我已经创建了代码,但是我需要一些专家进行质量检查,以查看该代码是否有效。 或者,如果有人对如何解决这个问题有其他想法。

下面是代码和步骤:

步骤1:

-创建信息对象,每个节点级别一个(TLEVEL)。 使用0ORGUNIT作为模板

-将新的信息对象作为属性添加到0ORGUNIT主数据。 定义为导航属性。

建议重新输入密码

表:/bi0/PORGUNIT。
 --------------------------------------------------  ---------------------
 * ORGUNIT内部表
 * ic =输入区域
 * wa =工作区域
 *上=更新区域
 *它=内部表
 --------------------------------------------------  ---------------------
 数据:ic_data类似于/bi0/PORGUNIT的标准表。
 数据:wa_ic_data,例如/bi0/PORGUNIT。
 数据:up_data类似于/bi0/PORGUNIT的标准表。
 --------------------------------------------------  ---------------------
 *分层声明
 * HASHED TABLE OF =当您具有读取次数很多但写入次数较少的大型数据集时使用。 声明哈希表时,还必须声明一个UNIQUE KEY。
 * HEADER LINE,意味着存在一个隐式的标题行或工作区,因此您无需创建一个单独的显式工作区来将数据读入其中。
 --------------------------------------------------  ---------------------
 数据:it_orgunit类似于/bi0/horgunit的哈希表,具有唯一键hieid objvers nodeid iobjnm nodename。
 数据:do_orgunit类似于/bi0/horgunit的哈希表,具有唯一键hieid objvers nodeid iobjnm节点名。
 数据:wa_orgunit,例如/bi0/horgunit,
       do_wa_orgunit类似于/bi0/horgunit。
 数据:i/bi0/porgunit像/bi0/porgunit一样在标题行出现0。
 数据:p/bi0/porgunit的开头出现100。
         包括结构/bi0/porgunit。
 数据:索引类型i,
       p/bi0/porgunit的结尾。
 --------------------------------------------------  --------------------------------
 *将组织层次结构复制到内存中
 --------------------------------------------------  ---------------------------------
 从/bi0/horgunit选择表i_orgunit中的hieid objvers nodeid iobjnm节点名tlevel链接parentid childid nextid intervl。
 do_orgunit [] = it_orgunit []。
 --------------------------------------------------  ---------------------------------
 *搜索组织节点的父节点,并用新的行更新P表
 --------------------------------------------------  ---------------------------------
 数据:doloop(2)。
 按orgunit排序ic_data。
 刷新up_data。
 从ic_data循环到wa_ic_data。
 --------------------------------------------------  -------------------------------
 *阅读等级表
 --------------------------------------------------  -------------------------------
   用键OBJVERS ='A'将表it_orgunit读入wa_orgunit。
   doloop = wa_orgunit–tlevel – 2。
   检查doloop gt 0。
   do_wa_orgunit–parentid = wa_orgunit–parentid。
   做doloop时间。
     将表do_orgunit读入do_wa_orgunit
         键objvers ='A'
     nodeid = do_wa_orgunit-parentid。
     检查sy–subrc = 0。
     案例do_wa_orgunit–tlevel。
     ‘12’时
       wa_ic_data–/bic/zorgl12 = do_wa_orgunit–节点名。
     当" 11"。
       wa_ic_data–/bic/zorgl11 = do_wa_orgunit–节点名。
     当" 10"。
       wa_ic_data–/bic/zorgl10 = do_wa_orgunit–节点名。
     当" 09"。
       wa_ic_data–/bic/zorgl09 = do_wa_orgunit–节点名。
     ‘08’
       wa_ic_data–/bic/zorgl08 = do_wa_orgunit–节点名。
     ‘07’
       wa_ic_data–/bic/zorgl07 = do_wa_orgunit–节点名。
     " 06"时。
       wa_ic_data–/bic/zorgl06 = do_wa_orgunit–节点名。
     ‘05’时。
       wa_ic_data–/bic/zorgl05 = do_wa_orgunit–节点名。
     ‘04’
       wa_ic_data–/bic/zorgl04 = do_wa_orgunit–节点名。
     当" 03"时
       wa_ic_data–/bic/zorgl03 = do_wa_orgunit–节点名。
     ‘02’
       wa_ic_data–/bic/zorgl02 = do_wa_orgunit–节点名。
     尾箱。
     do_wa_costcenter–tlevel = do_wa_orgunit–tlevel – 1。
   恩多。


   将wa_ic_data附加到up_data。
 --------------------------------------------------  -------------------
 *更新数据库
 --------------------------------------------------  -------------------
   从wa_ic_data更新/bi0/porgunit。


 结束循环。
 

1条回答
土豆飞人
2020-09-21 09:55

1。 您正在使用过时的ABAP。 永远不要定义带有标题行的表。 标题行和表具有相同的名称,因此您很容易混淆两者。 含糊不清。 始终定义一个单独的工作区。 但也请参见LOOP AT ASSIGNING和READ ... ASSIGNING ...

TABLES也已过时。

2。 您正在直接更新P表,但是没有检查是否有人在使用它。 阅读有关ENQUEUE/DEQUEUE和SAP表锁定的信息。

3。 您可以使用字段符号和ASSIGN来简化CASE

如果您想知道它是否可以工作-请运行它并查看它是否达到了您的预期。 如果它不使用调试。

个人而言,我会在BW系统上编写一个通用提取器,并将其用作数据源,并使用标准BW流来更新InfoObject,而不是直接进行操作。

一周热门 更多>