通过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 字…

Python 类方法注解 @classmethod 作用和意义

classmethod 在Python中,为类的方法使用classmethod装饰器具有以下作用和用途: 访问类属性而不实例化: 类方法能够直接通过cls参数访问类级别的属性、常量或类变量,而无需创建类的实例。这在需要基于类的状态进行操作时非常有用&…

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 个子数组…

【python】ptthon函数自学

print("Hello Python world!") # 变量 message"Hello" print(message) message"Hello Python world!" print(message)# 引号:可以是单,可以是双 messageI told my friend, "Python is my favorite language!" p…

C# 字段和属性的区别

区别 在C#中,字段(Field)和属性(Property)都是用来封装对象状态的方式,但它们有以下区别: 访问级别: 字段通常是private,而属性可以有不同级别的访问限制(…

JavaScript 实现大数简化,带单位显示

一、场景 在前端展示的数据时,如果数据数值太大,会导致展示的数据非常长,不仅用户不能迅速读出数值大小而且影响美观,此时我们需要将这种大数简化为带单位的数值,如 250000 转为 25.0万。 二、实现函数 // 大数简化函…

各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…

【JS】数组去重

方式一:使用 Set const handler (array) > {return [...new Set(array)]; } const array [1, 2, 2, 3, 3, 4, 5, 5]; console.log(handler(array)); // [1, 2, 3, 4, 5]方式二:使用filter const handler (array) > {return array.filter((ite…

pytest的request fixture:实现个性化测试需求

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号:互联网杂货铺,回复1 ,免费获取软件测试全套资料,资料在手,涨薪更快 在前文章中,我们看到pytest_repeat源码中有这…

Android 13 有线以太网静态ip保存逻辑梳理分析

源码环境:高通Android 13 这里特别说明,Android13中,ipconfig.txt配置文件目录有改变 以前:/data/misc/ethernet/ipconfig.txt 最新的有线网配置文件保存目录: /data/misc/apexdata/com.android.tethering/misc/ethe…

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)是一个…