java报表开发工具FineReport中:
1. 描述
在SAP数据连接中建立好SAP的一个连接SAP2,接下来就可以通过该数据连接建立SAP数据集了,如果没有建立数据连接,请先建立一个SAP数据连接,设置过程请查看SAP数据连接
2. SAP数据集
新建好数据连接之后,再在模板中添加一个模板数据集或者是服务器数据集,这里我们以模板数据集为例,直接在模板的数据库查询面板中,点击按钮,选择SAP数据集,或者是点击模板>模板数据集,选择SAP数据集,如下图:
进入SAP数据集配置界面:
注:大数据使用SAP取数,如果取数时间过长,最后取数失败(一般是10分钟),是因为SAP自身对取数的限制,当取数时间过长时,事务会自动中止,此时需要联系sap顾问解决此问题。
SAP数据取数的方式有三种,下面详细介绍该三中取数方式的使用方法。
1、自定义
2、简单通用查询
3、通用查询
自定义取数1. 描述
新建SAP数据集时,默认的为自定义取数方式,使用自定义取数,就是直接调用ABAP Function获取数据。
2. 示例
2.1 函数选择
从定义上看,自定义取数是直接调用ABAP函数,也就是需要选择函数,点击Function后面的设置按钮,进入函数获取界面,输入需要获取的函数名称的一部分,点击搜索,进行模糊查询,比如说输入BAPI_PRIMWT_GETLIST,如下图:
注:function后面的函数输入框不可编辑,只能点击设置按钮,通过函数取数界面选择。
另:这里的ABAP函数均是SAP内置的函数,与FineReport无关。
2.2 参数输入
点击确定按钮,下面的输入和输出面板中会自动刷新,输出列表会显示第一个结果集,首先介绍输入。
输入是指参数输入,即所选函数需要输入的参数列表,如下图:
参数名称:ABAP函数中的参数名称,不可更改,直接从ABAP函数中刷新出来的,可以删除,选中某一个参数,点击删除按钮即可,如果想恢复该参数,点击刷新按钮,
SAP数据类型:ABAP函数中参数的数据类型,不可更爱,直接通过函数刷新出来。
返回集:如果参数是一个结构体参数的一部分,返回集显示这个结构体的名称。
数据类型:指该参数在FR报表中对应的参数数据类型。
对应参数:指该参数在FR报表中对应的参数名称,可手动编辑。
参数默认值:指该参数在FR报表中参数的默认值,可手动编辑。
2.3 结果输出
输出就是所选函数的输出结果集,如下图:
SAP列名:ABAP函数输出结果集中的数据列名称,不可编辑,直接从ABAP函数中结果集中读取出来,可以删除,选中某列,点击删除即可,如果想恢复该列,点击刷新按钮。
SAP数据类型:ABAP函数输出结果及中数据列对应的SAP数据类型,不可编辑,直接通过函数结果集刷新出来。
数据类型:FR报表中数据列对应的数据类型。
目前输出只能输出一个结果集,假如函数输出有多个结果集,可以在输出的下拉框中选择要输出的结果集名称,如果需要输出所有结果集,比如说有2个结果集,那么只能通过新建2个SAP数据集,每个数据集选择一个结果集进行输出。
2.4 结果查看
点击数据集面板上的按钮,可预览SAP数据集,预览结果如下图:
2.5 设置完成后效果
设置完成之后,点击确定按钮,在数据查询面板中就会增加一个SAP1的数据集,如下图:
1. 描述
简单通用查询,即类似SQL语句一样,从某张表中读取出某些列,并列数据满足一些条件,不同于SQL语句的是,简单通用查询并不是全部用语句实现,读取表跟列是可视化界面选择,需要满足的条件是通过语句open sql语句实现的。
注:简单通用查询只支持单表查询,也就是说只能查询一张表。
在Function列表中选择简单通用查询,如下图:
2. 示例
2.1 选择表和列
如上图,选择简单通用查询之后,在表的名称栏里面输入表的名称,由于不支持模糊查询,只能完全自定义输入,所以要求使用者对SAP系统中表名称有一定的了解,这里我们输入表KNA1,然后点击设置按钮,选择需要输出的列,我们这里简单设置一下,只选择前面5列数据,如下图:
注:如果输入表的名称之后,无法取到数据,这是因为该表中的字段过多,需要将SAP的TAB512大小改大,就可以正常取到数据。
2.2 过滤条件不带参数
点击确定,选择的列后面的文本框中会列出所选择的几个列,然后在过滤条件中用open sql语句编写输出数据需要满足的条件,点击后面的格式说明按钮,可查看open sql的基本格式,上图中,我们选择了KNA1表的前面5列,希望输出的NAME2列中没有空数据,过滤条件应该为:
NAME2 <>''
如下图:
点击上面的预览按钮,查看查询结果,如下图:
2.3 过滤条件带参数
在编写过滤条件的时候,如果条件的值是动态变化的,则可用参数来实现,与数据库查询中的参数一样,比如说,上面的过滤条件中再加一个带参数的条件,LAND1列的值为参数LAND,过滤条件如下:
NAME2 <>'' and LAND1='${LAND}'
如下图:
点击预览按钮,结果如下:
3. 设置完成后效果
点击确定,退出SAP数据集对话框,数据集面板如下图:
1. 描述
通用查询较之简单通用查询,增加了表间关联的能力,支持多表查询,但是需要在ECC6以上版本使用,且需要在SAP系统中添加一个我方提供的ABAP Function,并且通用查询相对于简单通用查询来说,设置过程没有简单通用查询那么简单,选择的表和列不再是可视化选择,而完全是通过open sql语句实现。
1.1 添加ABAP Function
我方的ABAP Function的名称为ZEXTRACT_TABLE_DATA,不可改变,将其添加到SAP系统中,函数内容如下:
注:sap数据集支持结构型参数。
2. 示例
在Function列表中选择通用查询(适用于SAP6以上版本),如下图:
我们这里简单做个多表查询,比如说关联KNA1和KNVV这两个表,读取出KNA1表中的NAME2和LAND1两个列以及KNVV表中的KUNNR列,并且NAME2不能为空,用参数动态输入LAND1的值,open sql语句和sql语句的格式是有区别的,点击格式说明,可查看open sql的格式。
2.1 列设置
不同于sql语句,open sql中读取某个列应该用表~列这种格式,即select后面的文本框语句应该为:
KNA1~NAME2,KNVV~KUNNR,KNA1~LAND1。
2.2 表设置
将两张表关联起来,open sql语句中关联表,用inner join on格式,即from后面的文本框语句应该为:
KNA1 INNER JOIN KNVV ON KNA1~KUNNR = KNVV~KUNNR
2.3 条件设置
由上面的描述可知,where条件语句中的语句应该为:
KNA1~NAME2 <>'' AND KNA1~LAND1 = '${land}'
完整的open sql语句为:
select KNA1~NAME2,KNVV~KUNNR,KNA1~LAND1 from KNA1 INNER JOIN KNVV ON KNA1~KUNNR = KNVV~KUNNR where KNA1~NAME2 <>'' AND KNA1~LAND1 = '${land}'
最后结果如下图:
2.4 结果查看
点击预览按钮,可查看上面语句执行的结果,如下图:
3. 设置完成后效果
设置完成后,点击确定,退出SAP数据集对话框,在数据集面板中会增加一个名称为SAP3的数据集,如下图:
1. 描述
FR提供了EXTRACT_TABLE_DATA 的源码及后续的数据集使用过程,本篇对EXTRACT_TABLE_DATA的创建过程及出现的问题解决进行详细说明
先把EXTRACT_TABLE_DATA的源码贴进去
点击左边的table表格tab,新家4个表,FIELDS /FROMCLAUSE /WHERECLAUSE /DATA,类型都为LIKE,后面的结构类型按照文档源码,前三个输入ZSQL_CLAUSE_ELEMENTS,最后一个输入ZTABLEROW
这个时候可能会报错,没有ZSQL_CLAUSE_ELEMENTS和ZTABLEROWS,先保存一下function
展开ABAP 工作台,双击ABAP Dictionary 字典:
选择第三个data type,输入数据结构名称ZSQL_CLAUSE_ELEMENTS,点击创建:
选中structure结构,点击确定:
输入简称,增加一个数据元素TEXT,类型为SO_TEXT
同样的方法,我们创建structure结构ZTABLEROWS,增加一条数据元素,名字任意如ZTABLEROWS,数据元素 CHAR2000
保存这两个structure,然后点击上方的结构树按钮,打开structure所在包目录
展开structure目录,就可以看到我们定义的那两个结构了,分别右击>activate激活
回到EXTRACT_TABLE_DATA,重新点击左边的table表格tab,新加4个表,FIELDS /FROMCLAUSE /WHERECLAUSE /DATA 类型都为LIKE,后面的结构类型按照文档源码,前三个输入ZSQL_CLAUSE_ELEMENTS,最后一个输入ZTABLEROWS
可能会报错,如右图则把function里面的ZALBUS_STRUCT_WHERECLAUSE都改成 ZSQL_CLAUSE_ELEMENTS
没有错误则表示function 可以了,注意还需要设置函数可以远程访问
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞0
添加新评论0 条评论