一
前言
SAP中有一种特殊定义的内表.
通过SELECT-OPTION 或者 RANGES 定义的内表.
这种内表可以表达丰富的数据限定逻辑.
本文主要介绍怎么通过单字段内容维护并使用这种复杂的数据限制
二
特殊内表结构
包含字段 SIGN / OPTION / LOW / HIGH
其中SIGN值 :
- I 包含
- E 排除
OPTION值:
- EQ Equal 等于
- BT BeTween 区间
- LE Less Equal 小于等于
- GE Greater Equal 大于等于
- CP Contains Pattern 包含
- GT Greater 大于
- LT less 小于
- NE not equal 不等于
LOW:
放单值或区间的低值
HIGH:
放区间的高值
三
业务应用示例
合作伙伴的唯一性检查配置. 如果指定的业务伙伴分组需要检查唯一性(比如用名称检查), 需要限定一个检查范围(也用业务伙伴分组限定).
用户可能需要灵活的范围限定,如下:
- 单值限定
- 多值限定
- 通配符限定
- 单值排除
- 区间限定
- 区间限定+单值排除
- ......
BP唯一性检查配置表(图一),其中字段ZBU_GROUP 用来限定唯一性检查的BU_GROUP范围.
(当然,我们也可以用一个从表去维护这个复杂数据限定. 但是就会从之前的单表维护变成主从表维护(可以用视图簇实现), 维护方式变得更复杂.)
为了实现这种复杂的数据限定. 引入了字段内容的复杂数据限定,如图二.
- 单值
- 多值
- 通配符
- 复杂设置
图一
图二
四
实现
要实现一个配置字段限定复杂的数据内容, 需要考虑如下两个方面的逻辑
- 转换
- 输入帮助
01
转换
单值转换成特殊内表
特殊内表转换成单值
通过SELECT-OPTION 或 RANGES 定义内表.
如下示例程序完成了单值<->内表的互相转换. 在实际使用配置表内容时会用到.
02
输入帮助
在示例表中ZTMM_BP_C1中, 正确维护字段内容是比较麻烦的, 虽然字段帮助中给出了样例, 但实际使用还是比较麻烦并且容易出错,因此考虑使用动态选择创建一个搜索帮助,实现这一类的字段的数据输入帮助,避免出现错误.
为了维护简单,最好使用一个通用搜索帮助实现数据输入帮助.
如下图,在SE16N中,可以通过搜索帮助把维护的内容放到一个选择屏幕中,用来校验复杂限制条件是否输入正确.
同时在选择屏幕中填写的内容, 也会转换成单一字段内容,填入该字段.
确认选择条件后, 通过搜索帮助输出这个拼接的字符串.双击后覆盖原字段内容
五
缺陷
目前搜索帮助没有识别字段的显示/修改模式, 呈现的动态选择屏幕都允许修改. 但是通过搜索帮助的机制限定了显示模式无法最终更新数据.
六
实现方式
如果字段有特定的业务含义 (比如示例的字段ZBU_GROUP,表达了合作伙伴分组的复杂限制 ),可以通过下述方式简单实现搜索帮助功能
01
建立参考关系
设置字段与参考表/参考字段的关系
需维护配置表ZTBC_FIELD_REF, 建立改字段与系统表/字段的关系. 以便后续动态生成选择屏幕
02
设置搜索帮助
特定字段的数据元素分配通用搜索帮助ZSH_RANGES
因为搜索帮助的参数需要限定类型. 目前固定为CHAR 200. 因此此类字段的类型需要限定为 CHAR 200.
03
通用搜索帮助
通用搜索帮助ZSH_RANGES,使用了搜索帮助出口实现上述功能
七
更复杂的场景
在动态报表中使用的场景中.
详见链接
无峰,公众号:ABAP 技巧与实战动态报表D-Query简介
允许用户设置选择字段的默认选择条件
默认选择内容字段没有具体的业务含义(无法直接关联到一个参考表/参考字段),需要通过当前行的表名/字段名建立参考关系
此时需要为它单独创建一个搜索帮助
添加参考表/参考字段 ,勾选IMP标记(改标记表示同一行中关联字段内容自动输入)
给结构中的字段分配搜索帮助
这里可以把包含当前结构的上层结构作为表名,如下图
实现效果
执行后,可以看到搜索帮助生成的复杂数据限定字符串, 双击回写到默认选择内容字段中
八
代码实现
有偿获取源代码.
对源码感兴趣的朋友可以给文章打赏(200微信豆)后,联系微信号392077索取
九
总结
通过在单个字段中维护复杂的数据限定条件,可以简化配置表结构(主从->单表). 当多字段都需要这种复杂数据限定时,极大的简化了配置表.
通过搜索帮助辅助实现复杂数据限定的内容,提供了一个良好的界面给用户使用.避免用户维护错误.
搜索帮助设定在数据元素或表字段层级. 会自动带入相应的屏幕界面及ALV字段中.