前言

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范围.

(当然,我们也可以用一个从表去维护这个复杂数据限定. 但是就会从之前的单表维护变成主从表维护(可以用视图簇实现), 维护方式变得更复杂.)

为了实现这种复杂的数据限定. 引入了字段内容的复杂数据限定,如图二.

  • 单值
  • 多值
  • 通配符
  • 复杂设置

android限制字段不为空_android限制字段不为空

图一

android限制字段不为空_搜索_02

图二

实现

要实现一个配置字段限定复杂的数据内容, 需要考虑如下两个方面的逻辑

  • 转换
  • 输入帮助

01

转换

单值转换成特殊内表

特殊内表转换成单值

通过SELECT-OPTION 或 RANGES 定义内表.

如下示例程序完成了单值<->内表的互相转换. 在实际使用配置表内容时会用到. 

android限制字段不为空_字段_03

android限制字段不为空_字段_04

02

输入帮助

在示例表中ZTMM_BP_C1中, 正确维护字段内容是比较麻烦的, 虽然字段帮助中给出了样例, 但实际使用还是比较麻烦并且容易出错,因此考虑使用动态选择创建一个搜索帮助,实现这一类的字段的数据输入帮助,避免出现错误.

为了维护简单,最好使用一个通用搜索帮助实现数据输入帮助. 

如下图,在SE16N中,可以通过搜索帮助把维护的内容放到一个选择屏幕中,用来校验复杂限制条件是否输入正确. 

同时在选择屏幕中填写的内容, 也会转换成单一字段内容,填入该字段. 

android限制字段不为空_搜索_05

android限制字段不为空_搜索_06

确认选择条件后, 通过搜索帮助输出这个拼接的字符串.双击后覆盖原字段内容

android限制字段不为空_搜索_07

缺陷

目前搜索帮助没有识别字段的显示/修改模式, 呈现的动态选择屏幕都允许修改. 但是通过搜索帮助的机制限定了显示模式无法最终更新数据.

实现方式

如果字段有特定的业务含义 (比如示例的字段ZBU_GROUP,表达了合作伙伴分组的复杂限制 ),可以通过下述方式简单实现搜索帮助功能

01

建立参考关系

设置字段与参考表/参考字段的关系

需维护配置表ZTBC_FIELD_REF, 建立改字段与系统表/字段的关系. 以便后续动态生成选择屏幕

android限制字段不为空_android限制字段不为空_08

02

设置搜索帮助

特定字段的数据元素分配通用搜索帮助ZSH_RANGES

因为搜索帮助的参数需要限定类型. 目前固定为CHAR 200. 因此此类字段的类型需要限定为 CHAR 200. 

android限制字段不为空_字段_09

03

通用搜索帮助

通用搜索帮助ZSH_RANGES,使用了搜索帮助出口实现上述功能

android限制字段不为空_数据_10

更复杂的场景

在动态报表中使用的场景中.

详见链接

无峰,公众号:ABAP 技巧与实战动态报表D-Query简介

允许用户设置选择字段的默认选择条件

默认选择内容字段没有具体的业务含义(无法直接关联到一个参考表/参考字段),需要通过当前行的表名/字段名建立参考关系

android限制字段不为空_字段_11

此时需要为它单独创建一个搜索帮助

添加参考表/参考字段 ,勾选IMP标记(改标记表示同一行中关联字段内容自动输入)

android限制字段不为空_android限制字段不为空_12

给结构中的字段分配搜索帮助

这里可以把包含当前结构的上层结构作为表名,如下图

android限制字段不为空_字段_13

实现效果

android限制字段不为空_数据_14

执行后,可以看到搜索帮助生成的复杂数据限定字符串, 双击回写到默认选择内容字段中

android限制字段不为空_android限制字段不为空_15

代码实现

有偿获取源代码.

对源码感兴趣的朋友可以给文章打赏(200微信豆)后,联系微信号392077索取

总结

通过在单个字段中维护复杂的数据限定条件,可以简化配置表结构(主从->单表). 当多字段都需要这种复杂数据限定时,极大的简化了配置表.

通过搜索帮助辅助实现复杂数据限定的内容,提供了一个良好的界面给用户使用.避免用户维护错误.

搜索帮助设定在数据元素或表字段层级. 会自动带入相应的屏幕界面及ALV字段中.