通过ABAP 程序自动创建ADSO模型-第一弹

news2024/11/26 3:38:07

学习新东西从来都是一件快乐的事情!!

前言

今天我讲一个很好玩的东西,那就是通过ABAP程序去自动生成BW的ADSO模型。我相信做过BW建模的小伙伴们都知道,BW模型建模是最基础且核心的部分,一旦设计出错,将会影响后续的一系列开发。

一、实现效果

对于BW顾问来说,模型建模虽然简单,但也会花费不少时间,如果有一个程序快速自动的一步到位,是不是就可以省下很多的时间,比如此刻写写文章,喝喝茶呢

那么下面直接看效果图:

由于模型是由字段或者信息对象所组成的一组结构,进而会衍生出不同类型的模型。由此可见上图中的三个单选,为不同类型的模型,标准的ADSO模型有其1、2、3表,而直接更新ADSO只有其2表,最后的Planing式的对比标准的少了其3表,关于模型的更多知识点我这篇先不描述了。

在该程序中,通过文件上载的方式可以知道指定模型的结构是什么,是用字段创建呢?还是信息对象创建?指定什么类型的模型?以及对应的长度,类型等等信息,有需要该文件模板的朋友们,可以关注私聊我进行领取。

下面看看最终实现的效果图:

二、实现代码

代码如下:

*&---------------------------------------------------------------------*
*& Report ZBW_TEST_DEMO3
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zbw_test_demo3.

TYPES:
  BEGIN OF tn_s_object,
    key                    TYPE abap_bool,
    fieldname              TYPE rsfieldnm,  " => field
    iobjnm                 TYPE rsiobjnm,   " => infoObject (do not specify fieldname or asso_iobjnm)
    asso_iobjnm            TYPE rsiobjnm,   " => field with assoziation (fieldname must be specified, too)
    aggregation            TYPE rsdaggrgen,
    datatp                 TYPE datatype_d,
    length                 TYPE rsdigits, "char / raw : # of characters, numbers: # of places
    decimals               TYPE decimals, "# of decimal places
    sid_determination_mode TYPE rsdsiddetmode,
    dimension              TYPE rsdimension,
    txtsh                  TYPE rsoadsodescr,
    conversion_routine     TYPE convexit,
    uni_curr_for_fields    TYPE rsfieldnm,
    fix_unit_for_fields    TYPE rsfixunit,
    fix_cuky_for_fields    TYPE rsfixcuky,
    navigational_attr_on   TYPE rs_bool,
    is_sid_keyfigure       TYPE rs_bool,
  END OF tn_s_object .

DATA: lt_file_table     TYPE filetable,
      lv_rc             TYPE i,
      lv_escape_char    TYPE char1,
      lv_separator_char TYPE char1,
      lt_output         TYPE table_of_strings,
      lt_key            TYPE cl_rso_adso_api=>tn_t_key,
      lv_hex            TYPE xstring,
      lt_dimension      TYPE cl_rso_adso_api=>tn_t_dimension,
      lv_prev_fieldname TYPE string,
      ls_adso_fields    TYPE tn_s_object,
      lt_adso_fields    TYPE  TABLE OF tn_s_object.


SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
  PARAMETERS : p_rad1 TYPE c RADIOBUTTON GROUP rg1 DEFAULT 'X'  USER-COMMAND uc,
               p_rad2 TYPE c RADIOBUTTON GROUP rg1,
               p_rad3 TYPE c RADIOBUTTON GROUP rg1.
SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK part1 WITH FRAME TITLE TEXT-b01.
  PARAMETERS: pa_path TYPE string LOWER CASE OBLIGATORY MODIF ID ty1,
              pa_line TYPE i OBLIGATORY MODIF ID ty1.
  PARAMETERS: pa_ane  TYPE char10 OBLIGATORY MODIF ID ty1,
              pa_desc TYPE char50 MODIF ID ty1,
              pa_area TYPE rsinfoarea OBLIGATORY MODIF ID ty1.
SELECTION-SCREEN END OF BLOCK part1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR pa_path.

  CALL METHOD cl_gui_frontend_services=>file_open_dialog
    EXPORTING
      file_filter             = '*.CSV'
    CHANGING
      file_table              = lt_file_table
      rc                      = lv_rc
    EXCEPTIONS
      file_open_dialog_failed = 1
      cntl_error              = 2
      error_no_gui            = 3
      not_supported_by_gui    = 4
      OTHERS                  = 5.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.


  IF lt_file_table IS NOT INITIAL.
    pa_path = lt_file_table[ 1 ].
  ENDIF.

  cl_progress_indicator=>progress_indicate(
                       i_text = 'Uploading in progress'
                       i_output_immediately = abap_true ).

START-OF-SELECTION.
  cl_gui_frontend_services=>gui_upload(
   EXPORTING
     filename                = pa_path
   CHANGING
     data_tab                = lt_output
   EXCEPTIONS
     file_open_error         = 1
     file_read_error         = 2
     no_batch                = 3
     gui_refuse_filetransfer = 4
     invalid_type            = 5
     no_authority            = 6
     unknown_error           = 7
     bad_data_format         = 8
     header_not_allowed      = 9
     separator_not_allowed   = 10
     header_too_long         = 11
     unknown_dp_error        = 12
     access_denied           = 13
     dp_out_of_memory        = 14
     disk_full               = 15
     dp_timeout              = 16
     not_supported_by_gui    = 17
     error_no_gui            = 18
     OTHERS                  = 19 ).

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  DATA lo_csv TYPE REF TO  cl_rsda_csv_converter.

  CALL METHOD cl_rsda_csv_converter=>create
    RECEIVING
      r_r_conv = lo_csv.

  pa_line = pa_line + 1.
  LOOP AT lt_output INTO DATA(ls_output) FROM pa_line.
    CALL METHOD lo_csv->csv_to_structure
      EXPORTING
        i_data   = ls_output
      IMPORTING
        e_s_data = ls_adso_fields.
    APPEND ls_adso_fields TO lt_adso_fields.
  ENDLOOP.

  IF p_rad1 = 'X' OR p_rad2 = 'X'.
    LOOP AT lt_adso_fields INTO ls_adso_fields WHERE key = abap_true.
      IF ls_adso_fields-fieldname IS NOT INITIAL.
        APPEND ls_adso_fields-fieldname TO lt_key.
      ELSE.
        APPEND ls_adso_fields-iobjnm TO lt_key.
      ENDIF.
    ENDLOOP.
    IF lines( lt_key ) = 0 .
      MESSAGE 'at least one key is required'
      TYPE 'S' DISPLAY LIKE 'W'.
      EXIT.
    ENDIF.
  ENDIF.

  IF p_rad1 = 'X' .
    DATA(ls_flags) = VALUE cl_rso_adso_api=>tn_s_adsoflags( activate_data = abap_true
                                                            write_changelog = abap_true  ).
  ELSEIF p_rad2 = 'X' .
    ls_flags = VALUE cl_rso_adso_api=>tn_s_adsoflags( direct_update = abap_true  ).
  ELSEIF  p_rad3 = 'X' .
    ls_flags = VALUE cl_rso_adso_api=>tn_s_adsoflags( activate_data = abap_true
                                                      planning_mode =  abap_true
                                                      cubedeltaonly = abap_true  ).
  ENDIF.

  DATA(lv_adso_exists) = cl_rso_adso_api=>exist( i_adsonm = CONV #( pa_ane ) ).

  IF lv_adso_exists = abap_true.
    MESSAGE 'ADSO already exist, please go back and change the name'
    TYPE 'S' DISPLAY LIKE 'W'.
    EXIT.
  ENDIF.

  TRY.
      cl_rso_adso_api=>create(
        EXPORTING
          i_adsonm                      = CONV #( pa_ane )
          i_text                        = CONV #( pa_desc )
          i_infoarea                    = pa_area
          i_s_adsoflags                 = ls_flags
          i_t_object                    = CORRESPONDING #( lt_adso_fields )
          i_t_dimension                 = lt_dimension
          i_t_key                       = lt_key
      IMPORTING
        e_t_msg                       =  DATA(lt_msg)
      ).

    CATCH cx_rs_all_msg INTO DATA(lr_msg).

      cl_demo_output=>display(
        EXPORTING
          data = lr_msg->get_longtext( )
          name = 'Error'  ).
  ENDTRY.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电脑上删除的文件怎么恢复?这三个策略能帮到你!

“我很好奇&#xff0c;如果我在电脑上删除了一个比较重要的文件&#xff0c;还有机会恢复它吗&#xff1f;应该怎么做才能恢复这个文件呢&#xff1f;” 在使用电脑时&#xff0c;我们会将很多重要的数据或文件都保存在电脑上。如果电脑文件删除后我们才意识到文件是误删了&am…

面试官最怕你懂的Kafka面试题,一招致胜!

&#x1f469;&#x1f3fd;‍&#x1f4bb;个人主页&#xff1a;阿木木AEcru &#x1f525; 系列专栏&#xff1a;《Docker容器化部署系列》 《Java每日面筋》 &#x1f4b9;每一次技术突破&#xff0c;都是对自我能力的挑战和超越。 目录 一、前言Kafka的优点Kafka的使用场景…

赞:java使用easy-excel导入模板下载提供用户进行导入

就是我们在点击导入的时候&#xff0c;一般都是有一个模板的&#xff0c;我们需要下载这个模板&#xff0c;然后再按照这个excel模板填充数据之后&#xff0c;再导入。 那么导出模板下载&#xff0c;说白了和前面一篇 赞&#xff1a;java使用easy-excel导出数据的通用模板思路…

Linux——日志的编写与线程池

目录 前言 一、日志的编写 二、线程池 1.线程池基本原理 2.线程池作用 3.线程池的实现 前言 学了很多线程相关的知识点&#xff0c;线程控制、线程互斥、线程同步&#xff0c;今天我们将他们做一个总结&#xff0c;运用所学知识写一个较为完整的线程池&#xff0c;同时…

算法打卡day38

今日任务&#xff1a; 1&#xff09;完全背包理论基础(卡码网52. 携带研究材料) 2&#xff09;518.零钱兑换II 3&#xff09;377. 组合总和 Ⅳ 4&#xff09;复习day13 完全背包理论基础(卡码网52. 携带研究材料) 题目链接&#xff1a;52. 携带研究材料&#xff08;第七期模拟…

go语言是如何实现协程的

写在文章开头 go语言的精华就在于协程的设计&#xff0c;只有理解协程的设计思想和工作机制&#xff0c;才能确保我们能够完全的利用协程编写强大的并发程序。 Hi&#xff0c;我是 sharkChili &#xff0c;是个不断在硬核技术上作死的 java coder &#xff0c;是 CSDN的博客专…

51-M.2 B Key-5G模块 (U)SIM卡电路设计

视频链接 M.2 B Key-5G模块 &&#xff08;U&#xff09;SIM卡电路设计01_哔哩哔哩_bilibili M.2 B Key-5G模块 &&#xff08;U&#xff09;SIM卡电路设计 1、5G模块 &&#xff08;U&#xff09;SIM卡相关概念 1.1、5G模块&#xff08;RM500Q-GL&#xff09; R…

✯✯✯绍兴ISO9001认证:打造卓越质量管理的核心引擎✯✯✯

&#x1f308;绍兴ISO9001认证&#xff1a;&#x1f33a;打造卓越质量管理的&#x1f497;核心引擎&#x1f955; &#x1f688;在绍兴这座历史悠久、&#x1f345;文化底蕴深厚的城市中&#xff0c;&#x1f3e3;企业间的竞争日趋激烈。&#x1f481;‍♂️为了在这场激烈的&a…

LeetCode第797题: 所有可能的路径

目录 1.问题描述 2.问题分析 1.问题描述 给你一个有 n 个节点的有向无环图&#xff08;DAG&#xff09;&#xff0c;请你找出所有从节点 0 到节点 n-1 的路径并输出&#xff08;不要求按特定顺序&#xff09;。 graph[i] 是一个从节点 i 可以访问的所有节点的列表&#xff08…

openai api_key分享

sk-proj-aHU3aSlMAReiF8d6li9BT3BlbkFJsxmlRhLKlR55xIjpeJ10 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

二次元AI绘画生成器免费:教你生成精美图片

二次元AI绘画生成器&#xff0c;无疑是现代技术与艺术完美结合的典范。这些工具不仅将复杂的绘画过程简化&#xff0c;更让每一个艺术爱好者的创意得以充分展现。这些生成器能够精准捕捉大家的创意精髓&#xff0c;将其转化为细腻、独特的二次元画作。无论是角色设计、场景描绘…

波奇学Linux:ip协议

ip报文解析 4位版本&#xff1a;一般是4表示通信的ip版本号是ipv4还是ipv6 4位首部长度&#xff1a;数值*4ip报头长度 取值范围为[0101,1111], 报头长度就是[5*420,15*460] 8位服务类型(TOS)&#xff1a;4位TOS位段和3位优先权字段和一位保留字段 4位TOS相当于给路由器转发…

Redis快速入门操作

启动Redis 进入命令行客户端 字符串命令常用操作&#xff08;redis默认使用字符串来存储数据&#xff09; 列表&#xff08;Lists&#xff09;常用操作 集合&#xff08;Sets&#xff09;常用操作 &#xff08;无序集合且元素不可重复&#xff09; 有序集合&#xff08;So…

windows和虚拟机互传文件

在虚拟机中设置共享文件夹 操作方法&#xff1a;打开VMware–>虚拟机–>设置–>选项–>共享文件夹&#xff08;见下图&#xff09;&#xff0c;大家在共享文件夹当中就可以把Windows当中的D盘或者其它盘共享到虚拟机中。比如我就是将D盘和E盘共享到了虚拟机中。 共…

密码学 | 椭圆曲线密码学 ECC 入门(三)

目录 7 这一切意味着什么&#xff1f; 8 椭圆曲线密码学的应用 9 椭圆曲线密码学的缺点 10 展望未来 ⚠️ 原文地址&#xff1a;A (Relatively Easy To Understand) Primer on Elliptic Curve Cryptography ⚠️ 写在前面&#xff1a;本文属搬运博客&#xff0c;自己留…

pip下载包opencv出错(报错failed building wheel for opencv-python解决方法)

文章目录 1 报错2 原因3 解决方法参考 1 报错 ERROR: Could not build wheels for opencv-python, which is required to install pypr2 原因 版本不兼容的问题,当使用pip install opencv-python命令安装的是最新版本&#xff0c;当前python版本不支持。需要安装当前版本pyth…

「GO基础」在Windows上安装Go编译器并配置Golang开发环境

文章目录 1、安装Go语言编译程序1.1、下载GoLang编译器1.2、安装GoLang编译器 2、配置Golang IDE运行环境2.1、配置GO编译器2.1.1、GOROOT 概述2.1.2、GOROOT 作用2.1.2、配置 GOROOT 2.2、配置GO依赖管理2.2.1、Module管理依赖2.2.2、GOPATH 管理依赖 2.3、运行GO程序2.3.1、创…

Embedding例子:简单NN网络、迁移学习例子

一、简单例子&#xff1a;构造简单NN网络生成Embedding 1、pytorch例子 2、tensorflow例子 # 1导入模块 import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Embedding import numpy as np# 2构建语料库 corpus[[…

配置静态IP【windows+ubuntu】

Windows配置静态IP 如下图所示&#xff0c;通过“网络和Internet进入设置界面”&#xff0c;依次操作“更改适配器选项”->选择要配置静态ip的网络“属性”->选择IPV4的属性->配置静态ip的地址、子网掩码、默认网关。默认网关应和路由器上的设置保持一致。 Ubuntu配…

2024红明谷杯——Misc 加密的流量

2024红明谷杯——Misc 加密的流量 写在前面&#xff1a; 这里是贝塔贝塔&#xff0c;照例来一段闲聊 打比赛但赛前一波三折&#xff0c;又是成功签到的一个比赛 说起来比赛全名叫红明谷卫星应用数据安全场景赛&#xff0c;但好像真的跟卫星的关系不大&#xff0c;没有bin方…