SAP FREE_SELECTIONS_INIT多表动态选择演示
1.实现
- 基于视图 SFLIGHTS
- 代码
DATA: ls_selid TYPE rsdynsel-selid,lt_rsdtab TYPE TABLE OF rsdstabs.DATA: lt_cond TYPE rsds_twhere,lt_field TYPE TABLE OF rsdsfields. DATA: dref TYPE REF TO data.FIELD-SYMBOLS <table> TYPE STANDARD TABLE. FIELD-SYMBOLS <cond> LIKE LINE OF lt_cond.SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE l_text.PARAMETERS: p_pritab TYPE tabname DEFAULT 'SFLIGHTS' OBLIGATORY, "这是一个视图p_stab1 TYPE tabname DEFAULT 'SCARR' OBLIGATORY, "这是一个表p_stab2 TYPE tabname DEFAULT 'SPFLI' OBLIGATORY, "这是一个表p_stab3 TYPE tabname DEFAULT 'SFLIGHT' OBLIGATORY. "这是一个表SELECTION-SCREEN END OF BLOCK b1.INITIALIZATION.l_text = '选择透明表'.START-OF-SELECTION.PERFORM frm_check_existence USING p_pritab 'X'. "'X' VIEWPERFORM frm_check_existence USING p_stab1 ''.PERFORM frm_check_existence USING p_stab2 ''.PERFORM frm_check_existence USING p_stab3 ''.PERFORM frm_generate_condition.PERFORM frm_show_alv.end-of-SELECTION. *&---------------------------------------------------------------------* *& Form FRM_check_existence *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM frm_check_existence USING p1 p2.IF p2 = 'X'.TRY.p1 = cl_abap_dyn_prg=>check_table_or_view_name_str(val = p1packages = 'SAPBC_DATAMODEL_SERVICE' ).CATCH cx_abap_not_a_table.MESSAGE |视图:{ p1 }不存在!| TYPE 'I' DISPLAY LIKE 'E'.LEAVE PROGRAM.CATCH cx_abap_not_in_package.MESSAGE |只能输入 PACKAGE: SAPBC_DATAMODEL_SERVICE 中的视图!| TYPE 'I' DISPLAY LIKE 'E'.LEAVE PROGRAM.ENDTRY.ELSE.TRY.p1 = cl_abap_dyn_prg=>check_table_name_str(val = p1packages = 'SAPBC_DATAMODEL' ).CATCH cx_abap_not_a_table.MESSAGE |透明表:{ p1 }不存在!| TYPE 'I' DISPLAY LIKE 'E'.LEAVE PROGRAM.CATCH cx_abap_not_in_package.MESSAGE |只能输入 PACKAGE: SAPBC_DATAMODEL 中的视图!| TYPE 'I' DISPLAY LIKE 'E'.LEAVE PROGRAM.ENDTRY.ENDIF.ENDFORM. *&---------------------------------------------------------------------* *& Form frm_Generate_condition *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM frm_generate_condition .lt_rsdtab = VALUE #( ( prim_tab = p_pritab sec_tab = p_stab1 prim_fname = 'CARRID' sec_fname = 'CARRID' )( prim_tab = p_pritab sec_tab = p_stab2 prim_fname = 'CARRID' sec_fname = 'CARRID' )( prim_tab = p_pritab sec_tab = p_stab2 prim_fname = 'CONNID' sec_fname = 'CONNID' )( prim_tab = p_pritab sec_tab = p_stab3 prim_fname = 'CARRID' sec_fname = 'CARRID' )( prim_tab = p_pritab sec_tab = p_stab3 prim_fname = 'CONNID' sec_fname = 'CONNID' )( prim_tab = p_pritab sec_tab = p_stab3 prim_fname = 'FLDATE' sec_fname = 'FLDATE' ) ).DATA lt_11 TYPE rsds_texpr.CALL FUNCTION 'FREE_SELECTIONS_INIT'EXPORTINGkind = 'T'IMPORTINGselection_id = ls_selidTABLEStables_tab = lt_rsdtabEXCEPTIONSOTHERS = 4.IF sy-subrc <> 0.MESSAGE '初始化动态选择失败!' TYPE 'I' DISPLAY LIKE 'E'.LEAVE PROGRAM.ENDIF.PERFORM frm_selections_dialog.ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_SELECTIONS_DIALOG *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM frm_selections_dialog .CALL FUNCTION 'FREE_SELECTIONS_DIALOG'EXPORTINGselection_id = ls_selidtitle = '屏幕字段动态选择对话窗口'as_window = ' 'IMPORTINGwhere_clauses = lt_condTABLESfields_tab = lt_fieldEXCEPTIONSOTHERS = 4.IF lt_field IS INITIAL AND sy-subrc = 0.MESSAGE '未选择任何字段,请重新输入!' TYPE 'S'.PERFORM frm_selections_dialog.ENDIF.ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_SHOW_ALV *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM frm_show_alv .CREATE DATA dref TYPE TABLE OF (p_pritab).ASSIGN dref->* TO <table>.IF lt_cond IS NOT INITIAL.ASSIGN lt_cond[ tablename = p_pritab ] TO <cond>."get dataTRY.SELECT *FROM (p_pritab)WHERE (<cond>-where_tab)INTO TABLE @<table>.CATCH cx_sy_dynamic_osql_error.MESSAGE 'Error in dynamic Open SQL' TYPE 'I' DISPLAY LIKE 'E'.LEAVE PROGRAM.ENDTRY.ENDIF."show alvTRY.cl_salv_table=>factory(IMPORTING r_salv_table = DATA(alv)CHANGING t_table = <table> ).alv->display( ).CATCH cx_salv_msg.MESSAGE 'Error in ALV display' TYPE 'I' DISPLAY LIKE 'E'.ENDTRY. ENDFORM.
2.
- 选择界面
- 动态参数选择
- 执行结果
XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
SAP FREE_SELECTIONS_INIT多表动态选择演示相关推荐
- SAP ABAP 动态选择屏幕
常规实现方式: 1. 动态控制属性,使用如下语句代码控制. 2. 标准模块实现的free selection 3. 结合逻辑数据库的动态选择屏幕 具体实现: 第一种大致通过如下代码实现 AT SELE ...
- 动态选择屏幕(FREE_SELECTIONS_INIT)
使用标准的函数来动态创建选择屏幕 *动态选择屏幕 DATA: lv_selection_id TYPE rsdynsel-selid, lt_tables_tab TYPE STAND ...
- 关于程序变式中动态选择的一点说明
今天在做一个程序,功能是调用FBL3N(总账科目行项目显示),并且向这个程序传入相应的选择屏幕值,直接展示报表.但是,遇到了一个问题,就是这里面的动态选择中的屏幕选项,无法写入值,废了好大的周折,才搞 ...
- 动态加载子节点_省市区递归嵌套子流程动态选择实现
5.省市区递归嵌套子流程动态选择实现 5.0 流程特色 展开子流程(容器)中可以无限的嵌套子流程.嵌套子流程可以无限的进行嵌套,类似递归流程. 子流程的实例可以有上一个节点进行动态选择. 子流程完成条 ...
- excel按条件选择工作表_在Excel工作表中选择“实际使用范围”
excel按条件选择工作表 It's easy to select the current range in Excel – just press Ctrl + A. That shortcut se ...
- SAP字段与表的对应关系
SAP字段与表的对应关系 MASTER DATA-主数据 Customer Master KNA1 Customer Basic Data KNB1 ...
- oracle 合并多个不同结构的表_视频演示| 如何将多个工作簿合并为一张工作表
* 西玛小课堂·免费视频课 * 电子表格实用技能演示 PPT课件制作技巧 照片图像处理实战 语音文件编辑技巧 公众号文章排版实战 标志.字体设计技巧 平面广告设计技能 快 ...
- SAP abap内表分类与增删改查操作
SAP abap内表分类与增删改查操作 1.内表的分类 1.1.标准表 (standard table ) 系统为该表每一行生成一个院级索引.填表是可以将数据附加在现有行之后,也可以插入到指定的位置, ...
- IBatis.Net学习笔记九--动态选择Dao的设计分析
在IBatis.Net中可以通过配置文件动态选择数据库.动态选择Dao对象. Dao对象也就是操作数据库的类,通过配置文件我们可以选择DataMapper的方式.Ado的方式.NHibernet的方式 ...
最新文章
- 12年后,人工智能和人类会是什么样?这是900位专家的看法|报告
- ELK结合logback搭建日志中心
- 数据中心着火,工程师用嘴一吹就灭了?
- 简单,方便,功能全的php分页类
- 接口测试(java+testng+ant+jenkins)第三篇ant
- php 获取config,PHP MVC如何自动调用config?
- Hadoop系列-分布式集群
- AI队列长度检测:R-CNN用于使用Keras进行自定义对象检测
- 解决bootstrap dropdown 下拉菜单有时候不能显示的问题
- python请求url非阻塞_python 如何连续读取一个由服务器发来的非阻塞请求?
- Win10 CMD命令大全—超好用快捷键
- dompdf中文乱码、换行解决方案
- Spring Bean生命周期(简单易懂)
- python基础语法学习一
- 数据结构大作-学生信息管理系统
- 紫光云这匹黑马,了解一下
- php视频怎么看,教你“如何巧看PHP中文网课程视频,悄悄成为高手?”
- linux yum 安装的路径在哪,yum 下载软件的存放位置
- 安装试用国产系统 ——中标麒麟V7.0
- 【分享】QT读取EXCEL文件(附代码)