ABAP基础知识 多主键码表

前言

把对象的属性用编码表达是一个数据库定义的常见方式.

编码一般存放在特定的表中.一般情况下会有一个文本表,用来存储多语言的描述. 通过外键关系表达属性的限制. 比如销售订单的类型属性 AUART ,外键编码表 TVAK ,编码文本表TVAKT

另外一种稍显不灵活的限定方式是通过域值限定. 比如销售订单的订单类别 VBTYP 使用域VBTYPL限定编码.

上述对象只有一个关键字.

还有一种特殊的编码,存在依赖关键字. 比如库位 LGORT 库位描述或其它属性依赖于关键字工厂 WERKS .详见表T001L

本文主要介绍对于多关键字的码表管理

a0aa328f7e8614287065efe42da91dc0.png

单主关键字码表管理

详见链接

无峰,公众号:ABAP开发技巧SAP开发框架系列之 码表框架

5af7c232b17ec2d8520211965aaba40c.png

多关键字码表管理

因为多关键字码表应用场景不多. 所以拖到现在才着手解决这个问题

管理表ZTMD006RM

c6d25320e2b5675a85975061dbe425e8.png

TABLENAME码表场景

c6a92cce2d69a41f3b0be7f4210e4ab6.png

FIELDNAME 字段名(码表类型) 

SPRAS 语言代码

REF_FIELDS 读取描述的关联字段(允许多字段,通过逗号分割)

d71525c4246fcfcf1b2711488fc50403.png

FIELDTEXT 资源库对象的简短描述

CODETABLE 字段的参考表

KEYFIELDNAME 编码字段名

LANFIELDNAME 语言码字段

TXTFIELDNAME 描述字段

SQL_CONDI 附加SQL条件

d7217e7cfd80165f8c0cda75f3c20f63.png

BUFFLE_ALL 缓存方式

c489ddb56a9119a85348704ca8b72529.png

配置示例

84f89e0fdc44033ee83122457e5df02c.png

应用

码表主要应用在下面两个功能中

  • SE16N中附加描述

  • 动态报表关键字附加描述

01

SE16N中附加描述

配置ZTBC051后, 字段编码内容的描述会被显示. 这里就同时应用了单主键码表及多主键码表, 确保字段描述能被显示

899838ebc083ab23a5e983fd2fdaa40c.png

8a68a3289fef5d7ac56744874839c083.png

再比如,配置VBAP的地点/库位的附带描述

b7084d76b5506d62fe23a182ac44c2e2.png

显示VBAP时 ,工厂/库位字段后会补充描述, 其中库位描述依赖于工厂字段,通过多主键码表配置

fd0f3c55a0f0d641d0abd5a99da42199.png

02

动态报表

详见链接

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

对于存在码表的字段(单主键或多主键),允许勾选附带描述

669316caa4f454c8efc4f129f62a5dea.png

输出时会补充编码的描述字段及描述内容

119bf5f14f9ab778dfd4f63511f957ed.png

核心逻辑

核心逻辑封装在类 ZCL_COMM_MABIAO 中

缓存读取ZTMD006RM的方法

dc63282849cee13ff13f8e5d757bc452.png

读取多主键码表描述的方法

cb5d7c0e13e9b32bd7e2aede4a249472.png

d62d002d3c4e9e2eb28f51208fe8dc87.png

b9f0df86ddee21377d079f5635af396b.png

通用码表存储

ZTMD006RD

对于单主键的编码/描述, 可以集中通过ZTMD006RD保存编码,描述内容.

0ec69660a25a53913e80ab18e8a1c5f2.png

使用通用码表后, 需要特别处理搜索帮助及外键关系.

因为外键关系或搜索帮助分配依赖于字段的长度.

为表ZTMD006RD创建视图ZDDL_ZTMD006RD .

通用码表视图(编码截尾处理,以便实现特定码长的搜索帮助)显示常见编码长度字段

d93c0c5b4b7f42f2c70e30b82d8d7225.png

基于该视图创建一组搜索帮助,具体应用时根据编码字段长度分配对应的搜索帮助.

0553bc4a44e49ef1e5e9a48ef64caa64.png

e92e6c540012fe9a0708c075eb657dd9.png

通用外键

基于ENTITY 视图ZDDL_ZTMD006RD 创建视图 ZDDL_ZTMD006RDN 获取字段的最大编码长度作为字段的编码长度

创建一组视图

分别存放特定编码长度的字段.

ZDDL_ZTMD006R1

ZDDL_ZTMD006R2

ZDDL_ZTMD006R3

ZDDL_ZTMD006R4

……

注意:这组视图不能用ENTIT视图( ENTITY事务没有ABAP的数据字典结构对象,无法作为外键)

应用这组视图作为外键表(对应字段的长度使用特定的视图)

f4663104b719175bd13093d8bb4c4506.png

设置通用码表外键后, 在ALV中(包括SE16N)会自动带出外键检查报错

fcf2768e0db41f0bb95516993f09fedd.png

总结

单主键码表/多主键码表完整了码表的设置. 

整合了所有在系统中的码表(编码/描述)信息.

再通过通用的函数/类方法获取指定字段的编码的描述. 

可以在应用中动态设置编码的描述内容获取(动态报表,SE16N配置). 

THE

END

约定

如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.       

请微信联系管理员: 

syjf1976 

sharry_xlp  

Yannick_Duan 

申请进入公众号讨论群提问或者参与话题讨论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值