SAP BW层级结构小结属性数据源+专家例程实现层级结构增强加载

作者 idan lian  如需转载备注出处

BW信息对象-层级结构

RSH1 维护信息对象层级

这里的文本描述对应T表中的描述,文本数据源加载之后有数据

信息对象层级H表

以上描述都是根据自我理解翻译的,非官方翻译

层级标识:自动生成,其实就是创建的层级标题的技术编码,这上面就是H1,H2创建生成的标识

版本:自动生成,A激活版本 如下图

节点编码:创建数据源时需要给值,每一个层级标题下,每一个节点都对应唯一一个编码,向下延续,如何在RSH1中维护节点后会自动生成,正序排列

等级编码:自动生成,根据节点编码,父节点编码,来决定是哪一个等级的,通俗就是展开是第几层

父节点编码:创建数据源时需要给值,上一级的编码,在RSH1时把节点挂在另一个节点下面,那么另一个节点就是他的父节点

子节点的第一个编码:创建数据源时不用给值,自动生成,就是下一等级的第一个编码

兄弟节点下一个编码: 同一级别的下一个编码

数据源

层次结构文本数据源

标准层次数据源

例如成本中心等层级数据源,在S4中有标准的,没用过,暂时不写

转换&DTP

对应五个转换

1层级标题,层级结构技术名称比需有值,就是H1,H2

不是必须的

必须维护,尤其是NODEID,父节点,信息对象等,常用的链接如下,其他可以不维护

文本,可以不维护

文本,可以不维护

文本层级数据源

DTP转换选择层级标题,这里层级标题是创建数据源时生成的,也就是H1,H2,只有文本层级数据源的转换才有这个选项

专家例程实现案例 利用属性数据源实现层级结构的加载

需求:

SUBJECT-CRD8UDZ

文本

H1层次结构

S02

在建工程项目

默认值:SALL

ZTFI_HB_CIP-PSPID(项目定义)

ZTFI_HB_CIP-

默认值:S02

ZTFI_HB_CIP-AUFNR(订单)

ZTFI_HB_CIP- KTEXT

默认值:S02

将项目ID与描述保存在与维度SUBJECT的CRD8UDZ、中,父项固定为“S02”。再用处理链,将成员复制到BPC维度SUBJECT中去。

其实就是生成父节点,并根据来源的数据源根据 向下进行编码,这里我们通过专家例程实现,最重要的是理解我们需要处理哪些字段,还有各个字段对应的含义,不懂可以再2参考上面写的。

创建属性数据源,实现自动编码,固定父节点,其他规则搞懂各个字段含义照葫芦画瓢即可

专家例程实现,代码如下:

IF SOURCE_PACKAGE IS NOT INITIAL.

      " 定义一些常量

      CONSTANTS: lc_hier      TYPE rshienm    VALUE 'PARENTH1',

                 lc_act       TYPE rsobjvers  VALUE 'A',

                 lc_ZSUB  TYPE rsiobjnm   VALUE 'ZSUB_TEXT',

                 lc_ZH       TYPE c LENGTH 1 VALUE '1'.

      " Data Declaration

      DATA: lv_prnt_id    TYPE rshienodid,

            lv_max_nodeid TYPE rshienodid,

            lv_PARENTID TYPE rshienodid.

      " 定义宏 +1 用于之后的编码

      DEFINE increment.

        &1 = &1 + 1.

      END-OF-DEFINITION.

      break-point.

      " 查出层级对应的唯一技术标识 rshiedir是记录层级信息的标准表 有所有层级

      SELECT SINGLE hieid

        FROM rshiedir

        INTO @DATA(lv_hieid_hier_ZSUB_TEXT)

        WHERE hienm = @lc_hier AND IOBJNM = @lc_ZSUB.

      " 获取层级表最大的nodeid 后语基于这个多nodeid顺序编码

      SELECT SINGLE MAX( nodeid )

        FROM /BIC/HZSUB_TEXT

        WHERE HIEID = @lv_hieid_hier_ZSUB_TEXT

        INTO @lv_max_nodeid.

      " 查出需要固定为父节点的NODEID

 " 查询目前的层级结构H表字段,用于之后赋值

      SELECT *

        FROM /BIC/HZSUB_TEXT

        INTO TABLE @DATA(lt_existing_parents)

        WHERE hieid = @lv_hieid_hier_ZSUB_TEXT

        AND   objvers = @lc_act.

SORT lt_existing_parents BY NODEID.

 " 把层级H表赋值给结构包

        LOOP AT lt_existing_parents INTO DATA(LS_H).

           RESULT_PACKAGE_3 = VALUE #( BASE RESULT_PACKAGE_3 (

           OBJECTID = lv_hieid_hier_ZSUB_TEXT

            H_NODEID = LS_H-NODEID

            H_IOBJNM = LS_H-IOBJNM

            H_PARENTID = ls_h-PARENTID

    "        H_CHILDID = ls_h-CHILDID

     "       H_NEXTID = ls_h-NODEID

            H_TLEVEL = ls_h-TLEVEL

            H_LINK = ls_h-LINK

            H_HIERNODE = ls_h-NODENAME

            /BIC/ZSUB_TEXT = ls_h-NODENAME

            )  ).

        ENDLOOP.

  SORT lt_existing_parents BY hieid nodename.

" 对数据来源进行处理  本项目需求 不通用

      LOOP AT SOURCE_PACKAGE ASSIGNING <source_fields>.

        IF <source_fields>-pspid = ''.

           <source_fields>-pspid = <source_fields>-aufnr.

           <source_fields>-POST1<source_fields>-KTEXT.

         ENDIF.

      ENDLOOP.

      SORT SOURCE_PACKAGE BY PSPID .

"固定父节点

IF RESULT_PACKAGE_3[] IS INITIAL."只有初始化时赋值

RESULT_PACKAGE_3 = VALUE #( BASE RESULT_PACKAGE_3

          ( objectid = lv_hieid_hier_ZSUB_TEXT

            h_nodeid = 00000001

            h_iobjnm = 'ZSUB_TEXT'

            /BIC/ZSUB_TEXT = 'SALL'

            h_parentid = 00000000 " S02nodeid

            h_tlevel = 01 "固定第1层级

            h_hiernode = 'SALL')

          ( objectid = lv_hieid_hier_ZSUB_TEXT

            h_nodeid = 00000002

            h_iobjnm = 'ZSUB_TEXT'

            /BIC/ZSUB_TEXT = 'S02'

            h_parentid = 00000001 "

            h_tlevel = 02 "固定第2层级

            h_hiernode = 'S02')

         ( objectid = lv_hieid_hier_ZSUB_TEXT

            h_nodeid = 00000003

            h_iobjnm = 'ZSUB_TEXT'

            /BIC/ZSUB_TEXT = 'S03'

            h_parentid = 00000001 "

            h_tlevel = 02 "固定第2层级

            h_hiernode = 'S03')

            ).

      " 当前行赋值  作为之后编码使用 之前已固定赋值三行 所以从3开始编码

      DATA(lv_index) = 00000003. "初始化时从3开始编码 有三个固定值

    ELSE.

       lv_index = 00000000."非初始化从000开始

ENDIF.

" 开始循环赋值

      LOOP AT SOURCE_PACKAGE ASSIGNING <source_fields>.

        IF <source_fields>-PSPID <> ''.

          " Fill result_package_1 with the technical name

          " for the hierarchy.

" RESULT_PACKAGE_1 层级标题赋值 其实主要是h_hienm object_ID无所谓

          RESULT_PACKAGE_1 = VALUE #( BASE RESULT_PACKAGE_1 (

          objectid = lv_hieid_hier_ZSUB_TEXT

          h_hienm = lc_hier

          )  ).

          " 通过宏进行对当前行加1

          increment lv_index.

  " 读取H表的内表,判断数据来源中是否已有此数据,没有才进行插入赋值

          READ TABLE lt_existing_parents ASSIGNING

          FIELD-SYMBOL(<ep_sub_text>)

          WITH KEY hieid = lv_hieid_hier_ZSUB_TEXT

                   nodename = <source_fields>-pspid

          BINARY SEARCH.

          IF sy-subrc <> 0.

            " result_package_3.最关键 是关键的层级信息 nodeid 父节点等赋值

            RESULT_PACKAGE_3 = VALUE #( BASE RESULT_PACKAGE_3 (

            objectid = lv_hieid_hier_ZSUB_TEXT

            h_nodeid = lv_max_nodeid + lv_index

            h_iobjnm = 'ZSUB_TEXT'

            /BIC/ZSUB_TEXT = <source_fields>-pspid

            h_parentid = 00000002 " S02nodeid

            h_tlevel = 03 "固定第三层级

            h_hiernode = <source_fields>-pspid

             "Always 02

            )  ).

          ENDIF.

   " RESULT_PACKAGE_4 生成层级文本的 但是没生效 后通过TEXT转换数据源赋值

          RESULT_PACKAGE_4 = VALUE #( BASE RESULT_PACKAGE_4 (

          objectid = lv_hieid_hier_ZSUB_TEXT

          langu = lc_ZH

          h_hiernode = <source_fields>-pspid

          txtlg = <source_fields>-post1

          txtmd = <source_fields>-post1

          txtsh = <source_fields>-post1

          )  ).

        ENDIF.

      ENDLOOP.

ENDIF.

实现之后RSH1中检查是否完成

H表数据如下

注意

1.这里层次结构文本不好用,必须的链接TEXT文本数据源的转换才行。

2.,层级中的特征值都需要在主数据P表中存在,如果需要展示文本需要在信息对象T表中存在,所以除了维护层级的转换之外,还要处理主数据和文本的转换。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/236695.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣283题 移动零 双指针解法

移动零 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]示例 2: 输入: nums [0] 输出…

STC15-串口通信打印输出数据printf函数与sprintf函数

STC15-串口通信打印输出数据printf函数与sprintf函数 1.打印输出数据有二种printf函数与sprintf函数&#xff0c;不同之处有&#xff1a;&#xff08;1&#xff09;函数的声明不同&#xff08;2&#xff09;函数的功能不同&#xff08;3&#xff09;用法举例 该问题引用百度知道…

【JavaScript】3.2 JavaScript性能优化

文章目录 1. 避免全局查找2. 避免不必要的属性查找3. 使用快速的JavaScript方法4. 避免不必要的DOM操作5. 使用Web Workers进行后台处理总结 性能优化是任何编程语言的重要组成部分&#xff0c;JavaScript也不例外。在这个章节中&#xff0c;我们将探讨如何优化JavaScript代码&…

万字解析设计模式之策略模式、命令模式

一、策略模式 1.1概述 先看下面的图片&#xff0c;我们去旅游选择出行模式有很多种&#xff0c;可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。 策略模式&#xff08;Strategy Pattern&#xff09;是一个行为型设计模式&#xff0c;它定义了一组算法家族&#xff0c;分…

【SpringBoot系列】SpringBoot时间字段格式化

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

ROS报错:RLException:Invalid roslaunch XML Syntax: mismatched tag:

运行roslaunch文件提示&#xff1a; RLException:Invalid roslaunch XML Syntax: mismatched tag: line 45&#xff0c; column 2 The traceback for the exception was written to the log file. j 解决办法&#xff1a; line45 行多了标签&#xff1a;</node> 另外…

vue项目下npm或yarn下安装echarts多个版本

最近在大屏展示的时候&#xff0c;用到了百度的echarts图表库&#xff0c;看完效果图后&#xff0c;又浏览了一下echarts官网案例&#xff0c;大同小异。但是搬砖过程中发现实际效果和demo相差甚远&#xff0c;一番折腾发现&#xff0c;项目中安装的是echarts4.x版本&#xff0…

两万字长文详细【C++11 新特性】

C11 新特性 1、关键字explicit explicit 是 Cpp 中的一个关键字&#xff0c;用于指定构造函数或转换函数只能显式调用&#xff0c;不能进行隐式转换。具体来说&#xff0c;如果一个构造函数或转换函数被声明为 explicit&#xff0c;则在使用该函数进行初始化或类型转换时&…

以太网PHY,MAC接口

本文主要介绍以太网的 MAC 和 PHY&#xff0c;以及之间的 MII&#xff08;Media Independent Interface &#xff0c;媒体独立接口&#xff09;和 MII 的各种衍生版本——GMII、SGMII、RMII、RGMII等。 简介 从硬件的角度看&#xff0c;以太网接口电路主要由MAC&#xff08;M…

数据可视化工具APITable:实现强大的多维表格功能并随时随地远程访问

APITable免费开源的多维表格与可视化数据库公网远程访问 文章目录 APITable免费开源的多维表格与可视化数据库公网远程访问前言1. 部署APITable2. cpolar的安装和注册3. 配置APITable公网访问地址4. 固定APITable公网地址 前言 vika维格表作为新一代数据生产力平台&#xff0c…

深度学习黎明时期的LeNet:揭开卷积神经网络的序幕

在深度学习的历史长河中&#xff0c;Yann LeCun 的 LeNet 是一个里程碑式的研究成果&#xff0c;它为后来的卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;CNN&#xff09;的发展奠定了基础。LeNet 的诞生标志着深度学习黎明时期的到来&#xff0c;为人工…

代码人生,养生有道

导言&#xff1a; 在代码的征程中&#xff0c;我们往往忽略了自身的身体健康。这次的活动&#xff0c;我们不妨一同探讨一下&#xff0c;作为程序员&#xff0c;如何通过科学的养生方式&#xff0c;告别亚健康&#xff0c;迎接更健康、更充实的人生。 工作中的挑战 繁忙的工…