一
前言
把对象的属性用编码表达是一个数据库定义的常见方式.
编码一般存放在特定的表中.一般情况下会有一个文本表,用来存储多语言的描述. 通过外键关系表达属性的限制. 比如销售订单的类型属性 AUART ,外键编码表 TVAK ,编码文本表TVAKT
另外一种稍显不灵活的限定方式是通过域值限定. 比如销售订单的订单类别 VBTYP 使用域VBTYPL限定编码.
上述对象只有一个关键字.
还有一种特殊的编码,存在依赖关键字. 比如库位 LGORT 库位描述或其它属性依赖于关键字工厂 WERKS .详见表T001L
本文主要介绍对于多关键字的码表管理
二
单主关键字码表管理
详见链接
无峰,公众号:ABAP开发技巧SAP开发框架系列之 码表框架
三
多关键字码表管理
因为多关键字码表应用场景不多. 所以拖到现在才着手解决这个问题
管理表ZTMD006RM
TABLENAME码表场景
FIELDNAME 字段名(码表类型)
SPRAS 语言代码
REF_FIELDS 读取描述的关联字段(允许多字段,通过逗号分割)
FIELDTEXT 资源库对象的简短描述
CODETABLE 字段的参考表
KEYFIELDNAME 编码字段名
LANFIELDNAME 语言码字段
TXTFIELDNAME 描述字段
SQL_CONDI 附加SQL条件
BUFFLE_ALL 缓存方式
配置示例
四
应用
码表主要应用在下面两个功能中
SE16N中附加描述
动态报表关键字附加描述
01
SE16N中附加描述
配置ZTBC051后, 字段编码内容的描述会被显示. 这里就同时应用了单主键码表及多主键码表, 确保字段描述能被显示
再比如,配置VBAP的地点/库位的附带描述
显示VBAP时 ,工厂/库位字段后会补充描述, 其中库位描述依赖于工厂字段,通过多主键码表配置
02
动态报表
详见链接
无峰,公众号:ABAP 技巧与实战动态报表D-Query简介
对于存在码表的字段(单主键或多主键),允许勾选附带描述
输出时会补充编码的描述字段及描述内容
五
核心逻辑
核心逻辑封装在类 ZCL_COMM_MABIAO 中
缓存读取ZTMD006RM的方法
读取多主键码表描述的方法
六
通用码表存储
ZTMD006RD
对于单主键的编码/描述, 可以集中通过ZTMD006RD保存编码,描述内容.
使用通用码表后, 需要特别处理搜索帮助及外键关系.
因为外键关系或搜索帮助分配依赖于字段的长度.
为表ZTMD006RD创建视图ZDDL_ZTMD006RD .
通用码表视图(编码截尾处理,以便实现特定码长的搜索帮助)显示常见编码长度字段
基于该视图创建一组搜索帮助,具体应用时根据编码字段长度分配对应的搜索帮助.
通用外键
基于ENTITY 视图ZDDL_ZTMD006RD 创建视图 ZDDL_ZTMD006RDN 获取字段的最大编码长度作为字段的编码长度
创建一组视图
分别存放特定编码长度的字段.
ZDDL_ZTMD006R1
ZDDL_ZTMD006R2
ZDDL_ZTMD006R3
ZDDL_ZTMD006R4
……
注意:这组视图不能用ENTIT视图( ENTITY事务没有ABAP的数据字典结构对象,无法作为外键)
应用这组视图作为外键表(对应字段的长度使用特定的视图)
设置通用码表外键后, 在ALV中(包括SE16N)会自动带出外键检查报错
七
总结
单主键码表/多主键码表完整了码表的设置.
整合了所有在系统中的码表(编码/描述)信息.
再通过通用的函数/类方法获取指定字段的编码的描述.
可以在应用中动态设置编码的描述内容获取(动态报表,SE16N配置).
THE
END
约定
如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.
请微信联系管理员:
syjf1976
sharry_xlp
Yannick_Duan
申请进入公众号讨论群提问或者参与话题讨论