通常,SAP最终用户无权访问SE16或SE16n。这个程序允许分析人员通过指向现有的CDS视图、视图或SAP表来配置自己的报告,而无需编写代码。他们通过导入Excel电子表格来配置他们的选择屏幕。最后,创建一个指向报表的SAP事务代码,并为新事务分配特定用户的授权。此程序适用于那些安装了HANA的SAP。
在我以前的博客中,这里…
https://blogs.sap.com/2018/10/18/dynamic-selection-screen-with-alv-ida-and-excel/
…我们结合了Excel上传、动态选择选项生成,在弹出屏幕上显示,并在为HANA创建的ALV IDA中显示结果。要完全理解这个博客,52返现网,建议你先阅读上面的博客。但是,如果您想跳过详细信息,只需转到下面的"程序演练"部分,了解其工作原理,然后获取代码。
在本博客中,我们将从上述博客中增强此程序,使其可以重新运行,而无需每次重新导入Excel文件。我们还将添加一个新的列,您可以在其中指定一个事务代码,以允许程序根据输入的事务代码动态生成报告,并在您的配置表中存储许多报告。
此博客的组织方式如下:
软件版本:
S/4HANA(SAP_BASIS 752,SAP_ABA 75C)SAPGUI版本750Eclipse版本:Oxygen.3a发行版(4.7.3a)Microsoft Excel(.xlsx支持)
原始程序流程图
新程序流程图
Excel文件格式
Excel文件将包含一个表、视图或CD视图,其中包含您希望在弹出窗口中显示为选择选项的字段。作为对上一个程序的增强,我们将为事务代码添加新行。这将允许我们通过事务代码执行报告,而无需每次重新加载Excel电子表格。此外,我们可以存储多个报表的配置设置及其对应的事务代码。
包含3个报表的Excel文件示例:
A列将包含每个报表的3个标签:
事务代码表、视图或视图名称选择字段
B列包含实际交易代码、表/视图/CDS视图名称以及要作为弹出窗口上的选择选项包含的字段列表。
例如,第一个报表:
B1=自定义SAP交易代码B2=表、视图或CDS视图名称B3+=要作为选择选项包括的字段列表
对于CDS视图"S\U BOOKINGS",每当我们执行自定义SAP事务代码ZBOOKINGS时,在弹出窗口中作为选择选项包括CARRIERID、FLIGHTDATE、CUSTOMERID、LOCALCURRENCYAMOUNT字段。
上述的弹出窗口,如下所示:
新建Z表
首先,为了支持这些新特性,让我们创建一个新的Z表,它将保存报表的配置。对于单个报表,我们的Excel输入有以下格式:
让我们将结构展平,创建一个模式,如下:
您可以转到SE11并以经典方式创建表。本着使用最新工具的精神,让我们将Eclipse IDE与ABAP开发工具(ADT)结合使用:
在项目浏览器中,右键单击"Dictionary"节点和菜单路径"New">"Database Table"
输入以下内容并单击"Finish":
注意,物联网+,您可以选择ZREPORT以外的其他表名。如果是这样,您可以简单地更新这个表名,不管它在代码中引用到哪里。
我们现在得到一个新表的通用模板:
用以下数据定义覆盖上面的表:
保存并激活
您现在可以转到SE11,查看我们刚刚创建的上面的表:
查看我们表中的数据,我们可以进入我们的Eclipse项目浏览器,右击表名和菜单路径"Open with>Data Preview":
当然,人工智能有哪些领域,我们的表当前是空的,但是稍后我们可以在这里查看导入的记录:
除了上面提到的,创建一个名为ZTTY_REPORT的表类型,其中包含作为线型ZREPORT的上述内容:
我们将在方法参数中使用此表类型ZTTY_REPORT,以提高可读性。
新方法和代码
接下来,让我们添加程序所需的附加代码。
首先,我们需要屏幕上的一些新选择选项来支持我们的操作新功能。我们的新选择屏幕将是:
选项将执行以下操作:
仅运行报告:报告将通过读取ZREPORT中输入的事务代码的现有配置表条目来运行。如果选中,我们将隐藏"Excel SelOpt File"和"Refresh Table(all entries)"参数
只更新表:读取Excel文件,更新表ZREPORT。如果选中,我们将隐藏"交易代码"选择参数
更新表和运行报告:执行上述两个选项–更新表并运行输入的任何交易代码的报告
刷新表(所有条目):
选中:如果启用复选框,则首先删除ZREPORT表中的所有条目。接下来,将插入Excel文件中的所有条目。也就是说,从Excel文件进行完全刷新。未选中:如果复选框被禁用–如果Excel文件中的条目在ZREPORT表中尚不存在,则将插入它们(即添加新报告)。如果条目已经存在,它们将用相应的条目更新(覆盖)。
新的选择屏幕代码是:
在初始化部分,为新的选择屏幕元素添加标签:
根据我们选择的单选按钮,让我们隐藏不相关的选择。初始化事件之后,将新事件"AT SELECTION-SCREEN OUTPUT"添加到程序中,并添加以下代码:
在我们原来的程序中,我们只是传递了Excel文件,并通过以下调用运行了报表:
为了支持我们的新选项,让我们添加一个可能传递给execute方法的新结构。在类的public部分,添加以下代码:
重命名execute方法的import参数并使用此类型:
调整execute方法对以下对象的调用:
我们将为该类提供2个入口点,执行方法和执行报告方法。
新执行方法:
这里是我们新执行方法的代码:
当从常规选择屏幕(即SE38)运行程序时调用此方法。
新执行报告方法:
每当用户输入事务代码时调用此方法。然后,它将通过读取该TCode的config表来自动启动报告。此方法的代码是:
我们只是实例化报表,但只有TCode和run\u only选项。
有关所有其他更改,请参阅完整程序,包括以下方法:
BUILD\u SELECT\u options:调整此方法以处理表格,而不是Excel电子表格。
GET\u CONFIG\u table:获取内容的新方法配置表(ZREPORT)的一部分,将被传递到更新的BUILD\u SELECT\u OPTIONS方法。
EXECUTE\u REPORT:一个新的公共类方法,允许从事务代码执行程序。稍后我们将演练此设置。
更新配置数据:读取Excel输入文件后更新ZREPORT配置表的新方法。
运行报告:我们原来的执行方法被重命名为此方法。我们新的EXECUTE方法将评估select选项,并执行各种方法,见下文。
初始设置