BW数据源创建之从函数模块+提取结构

2023-11-07 03:50

本文主要是介绍BW数据源创建之从函数模块+提取结构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、到SE11创建提取结构(一般与抽取的目标数据字段相同),如图下,输入数据类型名称,点击创建:

然后选择数据类型:结构

创建一个新结构ZMMR0015_JG 

结构中参考表与参考字段可以参考自己结构中的字段

或者;在这里我们要特别注意两个问题:

1. 我们的字段如果用到了QUAN和CURR类型,则必须在【货币/数量字段】页签维护【参考表】与【参考字段】,并且所维护的这两个字段是源字段的【货币/数据字段】中的最原始参考,否则无法激活

 

 

 

2. 在激活的时候还会出现一个警告,提示你没有维护增强目录,此时在菜单栏中选择【转到】->【增强目录】->【Can Be Enhanced(Deep)】,如下图

2.到SE37创建要抽取数据的函数模块,输入名称:可以自己创建

后者复制标准的函数:  RSAX_BIW_GET_DATA_SIMPLE

 

 

然后切换到【TABLES】页签,输入如下参数,其中参数【E_T_DATA】是标准的目标数据参数名称,必填,否则无法创建数据源(在创建的时候会提示你先创建一个名为E_T_DATA的表参数),如下图:

其中1是目标数据表名称,2是提取结构,其中【I_T_SELECT】是抽取的选择条件,【I_T_FIELDS】是选择条件的字段。

 

我们还可以到【IMPORT】页签中添加如下参数:

从上往下依次是:请求次数、数据源名称、数据包大小、是否是初始化、只读标识。这些参数都是来自我们的数据源,系统自动带过来。

 

 

源代码:修改的地方

 

 

 

源代码:

FUNCTION ZMM_GET_DATA_ZMMR0015.

*"----------------------------------------------------------------------

*"*"Local interface:

*"  IMPORTING

*"     VALUE(I_REQUNR) TYPE  SRSC_S_IF_SIMPLE-REQUNR

*"     VALUE(I_DSOURCE) TYPE  SRSC_S_IF_SIMPLE-DSOURCE OPTIONAL

*"     VALUE(I_MAXSIZE) TYPE  SRSC_S_IF_SIMPLE-MAXSIZE OPTIONAL

*"     VALUE(I_INITFLAG) TYPE  SRSC_S_IF_SIMPLE-INITFLAG OPTIONAL

*"     VALUE(I_READ_ONLY) TYPE  SRSC_S_IF_SIMPLE-READONLY OPTIONAL

*"     VALUE(I_REMOTE_CALL) TYPE  SBIWA_FLAG DEFAULT SBIWA_C_FLAG_OFF

*"  TABLES

*"      I_T_SELECT TYPE  SRSC_S_IF_SIMPLE-T_SELECT OPTIONAL

*"      I_T_FIELDS TYPE  SRSC_S_IF_SIMPLE-T_FIELDS OPTIONAL

*"      E_T_DATA STRUCTURE  ZMMR0015_JG OPTIONAL

*"  EXCEPTIONS

*"      NO_MORE_DATA

*"      ERROR_PASSED_TO_MESS_HANDLER

*"----------------------------------------------------------------------

* Example: DataSource for table SFLIGHT

*

  TABLES: ZMMR0015_LOG.

* Auxiliary Selection criteria structure

  DATA: L_S_SELECT TYPE SRSC_S_SELECT.

* Maximum number of lines for DB table

  STATICS: S_S_IF TYPE SRSC_S_IF_SIMPLE,

* counter

          S_COUNTER_DATAPAKID LIKE SY-TABIX,

* cursor

          S_CURSOR TYPE CURSOR.

* Select ranges

  RANGES: S_MANDT  FOR ZMMR0015_LOG-MANDT,

          S_JZDATE FOR ZMMR0015_LOG-JZDATE,

          S_WERKS  FOR ZMMR0015_LOG-WERKS,

          S_MATNR  FOR ZMMR0015_LOG-MATNR,

          S_LGORT  FOR ZMMR0015_LOG-LGORT.

* Initialization mode (first call by SAPI) or data transfer mode

* (following calls) ?

  IF I_INITFLAG = SBIWA_C_FLAG_ON.

************************************************************************

* Initialization: check input parameters

*                 buffer input parameters

*                 prepare data selection

************************************************************************

* Check DataSource validity

    CASE I_DSOURCE.

      WHEN 'ZMMR0015_DS'.

      WHEN OTHERS.

        IF 1 = 2. MESSAGE E009(R3). ENDIF.

* this is a typical log call. Please write every error message like this

        LOG_WRITE 'E'                  "message type

                  'R3'                 "message class

                  '009'                "message number

                  I_DSOURCE   "message variable 1

                  ' '.                 "message variable 2

        RAISE ERROR_PASSED_TO_MESS_HANDLER.

    ENDCASE.

 

    APPEND LINES OF I_T_SELECT TO S_S_IF-T_SELECT.

 

* Fill parameter buffer for data extraction calls

    S_S_IF-REQUNR    = I_REQUNR.

    S_S_IF-DSOURCE = I_DSOURCE.

    S_S_IF-MAXSIZE   = I_MAXSIZE.

 

* Fill field list table for an optimized select statement

* (in case that there is no 1:1 relation between InfoSource fields

* and database table fields this may be far from beeing trivial)

    APPEND LINES OF I_T_FIELDS TO S_S_IF-T_FIELDS.

    DELETE S_S_IF-T_FIELDS WHERE FIELDNM EQ 'WAERS'.

  ELSE.                 "Initialization mode or data extraction ?

************************************************************************

* Data transfer: First Call      OPEN CURSOR + FETCH

*                Following Calls FETCH only

************************************************************************

* First data package -> OPEN CURSOR

    IF S_COUNTER_DATAPAKID = 0.

 

* Fill range tables BW will only pass down simple selection criteria

* of the type SIGN = 'I' and OPTION = 'EQ' or OPTION = 'BT'.

 

      LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'JZDATE'.

        MOVE-CORRESPONDING L_S_SELECT TO S_JZDATE.

        APPEND S_JZDATE.

      ENDLOOP.

 

       LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'WERKS'.

        MOVE-CORRESPONDING L_S_SELECT TO S_WERKS.

        APPEND S_WERKS.

      ENDLOOP.

       LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'MATNR'.

        MOVE-CORRESPONDING L_S_SELECT TO S_MATNR.

        APPEND S_MATNR .

      ENDLOOP.

       LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'LGORT'.

        MOVE-CORRESPONDING L_S_SELECT TO S_LGORT .

        APPEND S_LGORT .

      ENDLOOP.

* Determine number of database records to be read per FETCH statement

* from input parameter I_MAXSIZE. If there is a one to one relation

* between DataSource table lines and database entries, this is trivial.

* In other cases, it may be impossible and some estimated value has to

* be determined.

 

 

      OPEN CURSOR WITH HOLD S_CURSOR FOR

      SELECT (S_S_IF-T_FIELDS) FROM ZMMR0015_LOG

                               WHERE JZDATE IN S_JZDATE AND

                                     WERKS  IN S_WERKS AND

                                     MATNR  IN S_MATNR AND

                                     LGORT  IN S_LGORT.

    ENDIF.                             "First data package ?

* Fetch records into interface table.

*   named E_T_'Name of extract structure'.

    FETCH NEXT CURSOR S_CURSOR

               APPENDING CORRESPONDING FIELDS

               OF TABLE E_T_DATA

               PACKAGE SIZE S_S_IF-MAXSIZE.

 

    IF SY-SUBRC <> 0.

      CLOSE CURSOR S_CURSOR.

      RAISE NO_MORE_DATA.

    ENDIF.

 

    S_COUNTER_DATAPAKID = S_COUNTER_DATAPAKID + 1.

 

  ENDIF.

 

ENDFUNCTION.

 

3.进入RSO2创建数据源,选择事务数据,输入数据源名称,点击创建,如下图:

然后输入所属组,及名称描述,点击【按财务管理提取】,如下图:

点击保存之后,进入字段定义

4进入RSA3进行模拟提取,如下图:

事务代码:RSA6中激活数据源

 

到BW中找到数据源复制元数据

选中自己新建的数据源

 

 

 

 

这篇关于BW数据源创建之从函数模块+提取结构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/361065

相关文章

Python中提取文件名扩展名的多种方法实现

《Python中提取文件名扩展名的多种方法实现》在Python编程中,经常会遇到需要从文件名中提取扩展名的场景,Python提供了多种方法来实现这一功能,不同方法适用于不同的场景和需求,包括os.pa... 目录技术背景实现步骤方法一:使用os.path.splitext方法二:使用pathlib模块方法三

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

Java中实现线程的创建和启动的方法

《Java中实现线程的创建和启动的方法》在Java中,实现线程的创建和启动是两个不同但紧密相关的概念,理解为什么要启动线程(调用start()方法)而非直接调用run()方法,是掌握多线程编程的关键,... 目录1. 线程的生命周期2. start() vs run() 的本质区别3. 为什么必须通过 st

Python中bisect_left 函数实现高效插入与有序列表管理

《Python中bisect_left函数实现高效插入与有序列表管理》Python的bisect_left函数通过二分查找高效定位有序列表插入位置,与bisect_right的区别在于处理重复元素时... 目录一、bisect_left 基本介绍1.1 函数定义1.2 核心功能二、bisect_left 与

java中BigDecimal里面的subtract函数介绍及实现方法

《java中BigDecimal里面的subtract函数介绍及实现方法》在Java中实现减法操作需要根据数据类型选择不同方法,主要分为数值型减法和字符串减法两种场景,本文给大家介绍java中BigD... 目录Java中BigDecimal里面的subtract函数的意思?一、数值型减法(高精度计算)1.

Macos创建python虚拟环境的详细步骤教学

《Macos创建python虚拟环境的详细步骤教学》在macOS上创建Python虚拟环境主要通过Python内置的venv模块实现,也可使用第三方工具如virtualenv,下面小编来和大家简单聊聊... 目录一、使用 python 内置 venv 模块(推荐)二、使用 virtualenv(兼容旧版 P