当前位置:网站首页>query中的customer exit客户出口变量
query中的customer exit客户出口变量
2022-07-23 21:21:00 【xiaomici】
搞Bex变量呢,有五种:
就是建的时候它提示有五种:
- 特性值
- 层级节点
- 文本
- 公式
- 层级

有了参数变量,就得看怎么传值。在query运行时,这个值怎么传来的得看处理类型。
有好几种处理类型:
- 手动输入,默认值
- 替换路径
- 客户出口
- SAP exit
- 授权
- HANA exit

在传值方式上,最后一个是批量导入。
所有变量定义信息都在后台表:RSZGLOBV 看处理类型是3的,是客户出口变量。
现在都用BWMT建,就只有右键New去建一个变量了。以前的Bex Query 淘汰了,就不管了。
客户出口变量的处理方式有两种:
- function module EXIT_SAPLRRS0_001
- BAdI RSROA_VARIABLES_EXIT_BADI
BW7.3 后,都用BADI 。
在不同的application area,用不同的BADI implementations. 比较好分类和维护。
在BADI里面有下面这么多的参数:
一看描述就知道。
I_VNAM: 变量技术名
I_IOBJNM: 变量基于的对象的技术名
I_S_COB_PRO: 基于的对象的属性,比如数据类型,长度
I_S_RKB1D: query技术名
I_T_VAR_RANGE: 需要用到的其他变量的属性值,增强被调用的时候,系统会填充这个表,表类型RRS0_T_VAR_RANGE,结构类型RRS0_S_VAR_RANGE,参考结构RRRANGEEXIT,字段:
I_STEP: 控制变量被调用的时间
C_T_RANGE: 就是写代码要填入的变量值
C_NO_SCREEN: 如果X,就说不会弹出这个变量
C_CHECK_AGAIN: 如果X,就是说尽管i_step= 1 已经调用过了,i_step=2 还会调用一遍
I_STEP = 1: 在变量entry前调用
I_STEP = 2: 变量entry后调用,前提条件它不是个input-ready的,也不会被step1 那给值。
I_STEP = 3: 检查变量值,如果有例外,变量会叫重新输,会重新去call step 2填值。
I_STEP = 0: 这个是在权限检查那用。
step1 是进入query时,但是还没有输一些手动输入的参数变量。
对于我们的客户出口变量,如果你的code里面要基于别的手动输入的变量来传值,那就只能step2去拿值,因为step1那个手动输入的变量还没有填入值。比如我需要根据你输入的日期来获取现在是第多少周这种。
step1之前就给这个变量弄值,比如我就直接根据系统当前跑报表的日期去获取当前月。
这就是我今天要搞的。理论看了下,现在开始搞。系统已经有个FM算闰年啥的了。SN_LAST_DAY_OF_MONTH
所以,so easy.
WHEN '0CALDAY_0'.
l_calmonth2 = sy-datum+4(2).
l_calyear = sy-datum(4).
if l_calmonth2 = 01.
l_calyear = l_calyear - 1.
l_calmonth2 = 12.
else.
l_calyear = l_calyear.
l_calmonth2 = l_calmonth2 - 1.
ENDIF.
CONCATENATE l_calyear l_calmonth2 INTO l_calmonth.
CONCATENATE l_calmonth '01' into ld_input.
CALL FUNCTION 'SN_LAST_DAY_OF_MONTH'
EXPORTING
day_in = ld_input
IMPORTING
END_OF_MONTH = ld_output .
l_s_range-low = ld_output.
clear: l_s_range-high.
l_s_range-sign = 'I'.
l_s_range-opt = 'EQ'.
APPEND l_s_range TO e_t_range.
当然,一般这种不用手动输入的变量可以不展示出来,如果在query里被展示了出来,那么也可以用C_NO_SCREEN这个给赋值成‘X’,下面是个老的截图。
以上是直接调用默认值来改变客户出口变量的。
还有就是调用另一个参数值来改变客户出口变量,也就是step2之后。
在query里,filter分为静态filter和动态filter。就是固定变量值,和默认变量值。
固定变量值肯定是不能改的,在query里面只能改默认变量值。
意思呢也就是,固定的值会直接确定query里的结果集。
你分析query的时候,只能在这个已经被过滤了的结果集里面再去下钻或者去基于结果集过滤。你不能说去分析它这个固定过滤的结果集以外的数据了。
那么变量,就可以放在固定过滤或者默认过滤两个地方了。
如果放在固定过滤值里:比如基于别的input ready变量值读取。
那么这个query的结果集就是完全受这些变量控制的。
对于这两个地方的变量,还有专门名词区分的:固定的叫SPACE,动态的叫STATE。
变量执行的方式呢,在这里定义的:

变量刷新方式要么是动态,要么是as designed。啥意思呢?
Dynamically就是这个customer exit的变量只会被call一次。
但是如果说我这个customer exit的变量是基于query中的另一个input ready的变量的话,我跑报表的时候,我把另一个变量的值要改一下了,那么这另外一个customer exit的变量值,我就要改成 as designed,也就是再去call一次。
否则数据就不对了。
比如说我query有两个变量,第一个input ready的变量,我去输入当前日期,第二个客户出口变量是直接去读取当前日期的所在月。
那么我这个第二个客户出口变量就要调整刷新方式为: as designed. 要不然我跑报表的时候,重新给参数值了,这里去不再重新跑一遍,不就是错了么。
关于query的参数界面重新赋值的时候,要想让customer exit再跑一遍,如果这个customer exit是固定参数,而且不是input ready, 那就咋搞都行。
如果是在step 2后取了别的参数值的,那就要改成Refresh as Designed了。
简言之呢,如果你的客户出口变量是基于其他的手动输入变量的,在固定过滤那里的。那么你改手动输入变量的时候,这个客户出口变量会再去call一次,会基于你改的变量做更改。
这是query的变量执行方式。
但是如果你的客户出口变量是在动态过滤那里的。那么你跑了query之后,然后去改参数窗口的手动输入变量的话,这里的客户出口变量是不会受影响的,是不会去call一遍的。要想让它也跟着变,那就by designed.
所以,一般这种客户出口变量还是都放在固定过滤那里。
在E_CHECK_AGAIN 这个的意思也是再执行一遍:
这个参数赋值,就是说在STEP1跑了之后,还会在STEP2再跑一次:
这需要在STEP2再写一个:如果不再写一段代码,就默认执行到STEP2的时候这个变量是空的了。
当然如果这个变量是个强制必输的,那就会出错说没取到值,如果是个optional可输的,那就是会取到所有满足条件的值。
BADI RSROA_VARIABLES_EXIT
se18去找增强点,创建implementation。

建好之后,双击进去还要填实现BADI的类,然后激活。
激活之后,创建filter:
然后双击Implementing class,然后创建method,写好代码,然后激活。


然后去打断点:RSRT测query
边栏推荐
- 1063 Set Similarity
- Green Tao theorem (3): anti uniform functions and their generated sigma Algebras
- Cluster chat server: creation of project directory
- Jetson nano recording stepping on the pit (it will definitely solve your problem)
- WinDbg practice -- Introduction
- [attack and defense world web] difficulty four-star 12 point advanced question: flatscience
- 集群聊天服务器:Model数据层的框架设计和数据库代码的封装
- Day109.尚医通:集成Nacos、医院列表、下拉列表查询、医院上线功能、医院详情查询
- When we talk about Chen Chunhua and Huawei, what are we talking about?
- Major upgrade of openim - group chat reading diffusion model release group management function upgrade
猜你喜欢

At 12 o'clock on July 23, 2022, the deviation from the top of the line of love life hour appeared, maintaining a downward trend and waiting for the rebound signal.
![[wechat applet] do you know about applet development?](/img/3d/da58255aeb6bf6bc5021d988906bcc.png)
[wechat applet] do you know about applet development?

集群聊天服務器:數據庫錶的設計

手机测试相关基础知识
![[attack and defense world web] difficulty four-star 12 point advanced question: confusion1](/img/ee/3ce5cc3004f9113bbf70e0c52ff4d9.png)
[attack and defense world web] difficulty four-star 12 point advanced question: confusion1

第三届SLAM技术论坛-吴毅红教授

The third slam Technology Forum - Professor wuyihong

集群聊天服务器为什么引入负载均衡器

SQLite database

WinDbg practice -- Introduction
随机推荐
【愚公系列】2022年06月 .NET架构班 084-微服务专题 Abp vNext微服务通信
支付宝常用接口统一封装,可直接支付参数使用(适用于H5、PC、APP)
告诉我十大证券公司?请问网上开户安全么?
深入浅出边缘云 | 1. 概述
高数下|二重积分的计算4|高数叔|手写笔记
Cluster chat server: network module chatServer
Vite3 learning records
如何在面试中介绍自己的项目经验
剑指 Offer II 115. 重建序列 : 拓扑排序构造题
[Yugong series] June 2022.Net architecture class 084- micro service topic ABP vNext micro service communication
(note) learning rate setting of optimizer Adam
【攻防世界WEB】难度四星12分进阶题:FlatScience
scala編程(初級)
Protocol buffers 的问题和滥用
TCP half connection queue and full connection queue (the most complete in History)
模块化开发
2022.7.22 js对象
Unity - 3D mathematics -vector3
1061 Dating
Broadcast (broadcast)