通过ABAP程序自动创建信息对象-第二弹

前言

上一篇讲了通过ABAP程序去自动生成BW的ADSO模型,这一篇讲讲信息对象的自动生成,

一、实现效果

对于BW顾问来说,模型建完之后,就要开始选择用字段还是用信息对象进行建模,如果信息对象不存在呢,那么就要一个一个新建了,如果有一个快速批量创建信息对象的,那么这个效率就提高了不少。

那么下面直接看效果图:

信息对象有其对应技术名,描述,类型,长度等等技术信息,这些信息也是通过文件的方式去记录,上面截图可以看出,根据文件的模版填入需要的信息,然后导入到该程序中,进行批量生成。

有需要该文件模板的朋友们,可以关注私聊我进行领取。

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

二、实现代码

代码如下:

*&---------------------------------------------------------------------*
*& Report ZBW_IO_CREATE
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zbw_io_create.
DATA:  BEGIN OF data_final OCCURS 0.INCLUDE STRUCTURE bapi6108.DATA:  END OF data_final.DATA:  BEGIN OF ret_mess OCCURS 0.INCLUDE STRUCTURE bapiret2.DATA:  END OF ret_mess.*data : la_conv_tab like line of lt_conv_tab.DATA: BEGIN OF itab OCCURS 0,f1(10000) TYPE c,END OF itab.DATA:  BEGIN OF data_iobj OCCURS 0.INCLUDE STRUCTURE bapi6108io.DATA:  END OF data_iobj.DATA:  BEGIN OF io_err OCCURS 0.INCLUDE STRUCTURE bapi6108io.DATA:  END OF io_err.PARAMETERS: lp_file TYPE rlgrap-filename OBLIGATORY. " To get the file locationDATA : temp_ch TYPE string,names   TYPE c LENGTH 1000.
DATA : str1         TYPE string, str2 TYPE string, str3 TYPE string, str4 TYPE string,str5         TYPE string, str6 TYPE string, str7 TYPE string, str8 TYPE string,str9         TYPE string, str10 TYPE string,str11 TYPE string,str12 TYPE string,data_final_1 TYPE STANDARD TABLE OF bapi6108 WITH HEADER LINE.DATA: lt_iolist TYPE TABLE OF bapi6108l.*---------------------------------------------------------------------
* AT SELECTION SCREEN ON VALUE REQUEST
*---------------------------------------------------------------------
AT SELECTION-SCREEN ON VALUE-REQUEST FOR lp_file.PERFORM help_local_file USING lp_file.START-OF-SELECTION.temp_ch = lp_file.CALL FUNCTION 'GUI_UPLOAD'EXPORTINGfilename        = temp_chfiletype        = 'ASC'
*     HAS_FIELD_SEPARATOR           = ' 'header_length   = 0read_by_line    = 'X'
*     DAT_MODE        = ' '
*     CODEPAGE        = ' '
*     IGNORE_CERR     = ABAP_TRUE
*     REPLACEMENT     = '#'
*     CHECK_BOM       = ' '
*     IMPORTING
*     FILELENGTH      =
*     HEADER          =TABLESdata_tab        = itabEXCEPTIONSfile_open_error = 1file_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   = 12access_denied   = 13
*     DP_OUT_OF_MEMORY              = 14
*     DISK_FULL       = 15
*     DP_TIMEOUT      = 16
*     OTHERS          = 17.IF sy-subrc = 1.MESSAGE 'FILE IS OPEN; PLEASE CHECK THE FILE.' TYPE 'I'.
*WITH "FILE IS OPEN; PLEASE CHECK THE FILE.".EXIT.ELSEIF sy-subrc = 2.MESSAGE 'ERROR WHILE READING THE FILE' TYPE 'I'.EXIT.ELSEIF sy-subrc = 13.MESSAGE 'ACCESS DENIED.' TYPE 'I'.EXIT.ENDIF.LOOP AT itab FROM 2.names = itab-f1." if there are many columns to be split then make use of the FM 'ALSM_EXCEL_TO_INTERNAL_TABLE'SPLIT names AT ',' INTO str1 str2 str3 str4 str5 str6 str7 str8 str9 str10 str11 str12.IF str3 = 'CHA'. "信息对象类型(CHA;KYF;UNI;XXL)data_final-infoarea = str1.data_final-infoobject = str2.data_iobj-infoobject = str2.data_final-type = str3. "信息对象类型data_final-datatp = str4. "ABAP数据类型data_final-textshort = str5.data_final-textlong = str6.data_final-intlen = str7.data_final-outputlen = str8.data_final-lowercase = str9.data_final-mastauthfl = str10.data_final-txttabfl = '1'. "存在文本表data_final-attribfl = 'X'.data_final-novalfl = ''. "是否启用主数据属性:''为真 'X'为假data_final-hietabfl = 'X'. "是否启用层次结构data_final-nolangu = ''. "是否跟语言相关:''为真 'X'为假data_final-txtshfl = 'X'. "短文本存在标志data_final-txtmdfl = 'X'. "中文本存在标志data_final-txtlgfl = 'X'. "长文本存在标志ELSE.data_final-infoarea = str1.data_final-infoobject = str2.data_iobj-infoobject = str2.data_final-type = str3.data_final-kyftp = str4. "ABAP数据类型 KYFTP(AMO/QUA/NUM/INT/FLO/DAT/TIM)data_final-textshort = str5.data_final-textlong = str6.data_final-fixcuky = str11. "固定货币data_final-uninm = str12."单位信息对象(货币/单位)ENDIF.APPEND data_final TO data_final.ENDLOOP."剔除空行DELETE data_final WHERE infoarea IS INITIAL OR infoobject IS INITIAL."检查系统是否已有CALL FUNCTION 'BAPI_IOBJ_GETLIST'EXPORTINGversion        = rs_c_objvers-activeTABLESinfoobjectlist = lt_iolist."删除重复创建的IOLOOP AT data_final.IF line_exists( lt_iolist[ infoobject = data_final-infoobject ] ).DELETE data_final.ENDIF.ENDLOOP.IF data_final[] IS INITIAL.MESSAGE '请检查模板是否为空或IO已存在于系统!' TYPE 'I'.ELSE.LOOP AT data_final INTO data_final.CLEAR : data_final_1[], data_final_1.MOVE-CORRESPONDING data_final TO data_final_1.APPEND data_final_1 TO data_final_1[].CALL FUNCTION 'BAPI_IOBJ_CREATE'EXPORTINGdetails = data_final_1IMPORTINGreturn  = ret_mess.CLEAR : data_iobj[].data_iobj-infoobject = data_final-infoobject.APPEND data_iobj TO data_iobj[].CALL FUNCTION 'BAPI_IOBJ_ACTIVATE_MULTIPLE'TABLESinfoobjects       = data_iobj[]infoobjects_error = io_err.ENDLOOP."添加成功消息IF io_err[] IS INITIAL.MESSAGE '信息对象创建成功!' TYPE 'I'.ELSE.MESSAGE '信息对象创建失败,请检查模板!' TYPE 'I'.ENDIF.ENDIF.FORM help_local_file  USING filename TYPE dxfile-filename.DATA: lt_file_table TYPE filetable,la_file_table LIKE LINE OF lt_file_table,l_rc          TYPE i,l_pcdsn       TYPE cffile-filename.REFRESH lt_file_table.CLEAR la_file_table.CALL METHOD cl_gui_frontend_services=>file_open_dialogCHANGINGfile_table = lt_file_tablerc         = l_rc.READ TABLE lt_file_table INTO la_file_table INDEX 1.l_pcdsn = la_file_table-filename.MOVE l_pcdsn TO filename.ENDFORM.

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

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

相关文章

SpringBoot整合Activiti7——实战之放假流程(会签)

文章目录 代码实现部署流程启动流程填写放假通知任务投票审批xml文件 会签场景: 开始 - 填写放假通知单(代理人)- 投票审批(指定多个参与人)- 根据设置的完成条件后,全部参与人必须完成后,自动结…

小米su7全力提高产能,小米su7的这几个问题你都知道吗?车载随身wifi哪款最好用?公认最好的随身wifi格行随身wifi怎么样?

小米汽车官方近日回应网友关切,透露小米SU7非创始版交付进度。工厂正处于生产爬坡阶段,正全力提升产能和物料准备节奏,以加快交付效率。对于锁单后能否调整提车时间,小米汽车表示将与销售沟通协商。 当然关于网友们的问题也进行了…

条码的基础知识

条码的基础知识 条码:条码是由一组按一定编码规则排列的条、空符号组成,用以表示一定的字符、数字及符号组成的信息 一维码 Code 128 Code 128 是一种密度很高的字母数字代码系统,可对其进行双向扫描。此代码系统可编码整个 128 ASCII 字…

ERROR in [eslint] reorder to top import/first

情景再现:在react开发的时候,导入组件、函数时报错:Import in body of module; reorder to top import/first … 原因:在import语句前有变量声明 解决: 变量的声明,要放在import之后 // 错误示例 import {…

物联网网络传输,STM32和ESP32

2024.4.17 今天主要是记录一下我这个STM32F407和esp8266组成的互联网板子的一些例程运行心得, 下面这个例程是STM32发AT指令给esp8266,使得esp8266作为tcp client连接到我的手机热点,然后我用电脑连接wifi,打开tcp server&#x…

【CDN产品测评-笔记】探索云服务中的安全和性能增强功能

【CDN产品测评-笔记】探索云服务中的安全和性能增强功能 写在最前面1. DNS管理:核心的域名服务功能2. DDoS防护:构筑坚不可摧的防线3. Web防护:智能化的网络攻击防御4. BOT管理:精准识别与流量控制5. 加速服务:提升全球…

【动态规划 区间dp 位运算】3117. 划分数组得到最小的值之和

本文涉及知识点 动态规划 区间dp 位运算 LeetCode3117. 划分数组得到最小的值之和 给你两个数组 nums 和 andValues,长度分别为 n 和 m。 数组的 值 等于该数组的 最后一个 元素。 你需要将 nums 划分为 m 个 不相交的连续 子数组,对于第 ith 个子数组…

各RAID级别的特点以及对应的容量计算方式

RAID(Redundant Array of Independent Disks)是一种将多个独立的硬盘组合起来以提高数据存储性能、容量或冗余度的技术。在实际项目中,通常采购的磁盘阵列支持设置对应的RAID级别。本人也进行过实战,而现在为了应对软考来总结一下…

【攻防世界】lottery

弱比较代码审计 本题已提供源码,如果没提供,输入/robots.txt,发现/.git function buy($req){require_registered();require_min_money(2);$money $_SESSION[money];//接受用户原有money$numbers $req[numbers];//接受输入的数字$win_num…

C++类和对象第二弹(构造,析构和拷贝构造函数)

目录 前言 1. 类的6个默认成员函数 2. 构造函数 2.1 概念 2.2 特性 3. 析构函数 3.1 概念 3.2 特性 4. 拷贝构造函数 4.1 概念 4.2 特征 总结 前言 本文主要讲解类中构造函数、析构函数和拷贝构造函数。关于这三个类中默认成员函数的知识点很多,有许多…

视觉SLAM学习打卡【10】-后端·滑动窗口法位姿图

本节是对上一节BA的进一步简化,旨在提高优化实时性.难点在于位姿图部分的雅可比矩阵求解(涉及李代数扰动模型求导),书中的相关推导存在跳步(可能数学功底强的人认为过渡的理所当然),笔者参考了知…

【Gradle】Gradle的构建过程

Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,也增加了基于Kotlin语言的kotlin-based DSL,抛弃了基于XML的各种繁琐配置。 面向Java应用为主。当前其支持的语言C、J…

免费网址导航网站源码v1.7.0最新版内置多个模板

效果图 PC端&移动端(共有7款主题) 1.5IUX搜索 2.Onenav主题 六零二开 3.基于彩虹工具网修改 4.默认主题 5.基于default主题开发 6.极简个人主页主题 7.孤客主题 后台管理效果图 项目说明 孤客导航页(LoSFeR)是一个…

Zephyr Windows开发环境搭建

Zephyr 如果有错误或未及时更新,请以官网文档为主 官网:https://docs.zephyrproject.org/latest/develop/getting_started/index.htm 下载安装 Chocolatey 这是一个类似于在Linux系统下 yum 和 apt 那样的包管理器 官网:https://chocolat…

安宝特方案 | AR工业解决方案系列-工厂督查

在工业4.0时代,增强现实(AR)技术正全面重塑传统工业生产,在工厂监督领域,其应用不仅大幅提升了生产效率、监测准确性和规范执行程度,而且为整体生产力带来了质的飞跃。 01 传统挑战与痛点 在制造业生产流程…

未来趋势:探索Facebook在数字化时代的发展方向

在当今日益数字化的时代,社交媒体已经成为人们日常生活中不可或缺的一部分。Facebook,作为全球最大的社交媒体平台,一直处于行业的前沿,不断地探索和引领社交媒体的发展趋势。本文将深入探讨Facebook在数字化时代的发展方向&#…

如何解决Charles抓包乱码?

一、问题:抓包乱码 二、 1、打开Charles安装的目录下,Charles.ini文件, 2、添加内容、保存 vmarg.5-Dfile.encodingUTF-8 三、重启,再次抓包

Object.assign()用法及详细分析到底是浅拷贝还是深拷贝?

Object.assign方法用于对象的合并,将源对象(source )的所有可枚举属性,复制到目标对象(target)。 Object.assign(target,source1,source2) Object.assign方法的第一个参数是目标对象,后面的参数…

Next.js动态路由如何使用

官方解释 Next.js 允许你创建具有 动态路由 的页面。例如,你可以创建一个名为 pages/posts/[id].js 的文件用以展示以 id 标识的单篇博客文章。当你访问 posts/1 路径时将展示 id: 1 的博客文章。 代码 这里先用一个写好的实例代码来展示 import React from react…

Python-Qt上位机设计

1.下载designer软件 2.自己设计一个界面 3.在指定部件加入点击响应命令函数名 鼠标点击目标部件拖出信号线 4.保存生成.ui文件,用pycharm打开 5.生成.py文件 6.新建一个功能文件 上图中class MainWindow的具体代码不予展示。 7.生成exe文件 将写好的py文件保存&a…