点击此处---> 群内免费提供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。 您正在使用过时的ABAP。 永远不要定义带有标题行的表。 标题行和表具有相同的名称,因此您很容易混淆两者。 含糊不清。 始终定义一个单独的工作区。 但也请参见LOOP AT ASSIGNING和READ ... ASSIGNING ...
TABLES也已过时。
2。 您正在直接更新P表,但是没有检查是否有人在使用它。 阅读有关ENQUEUE/DEQUEUE和SAP表锁定的信息。
3。 您可以使用字段符号和ASSIGN来简化CASE
如果您想知道它是否可以工作-请运行它并查看它是否达到了您的预期。 如果它不使用调试。
个人而言,我会在BW系统上编写一个通用提取器,并将其用作数据源,并使用标准BW流来更新InfoObject,而不是直接进行操作。
一周热门 更多>