码表设置


什么是码表?

码表是“编码表”的简称。在ERP中,编码是一项重要的管理工作,会有大量的基础数据是基于编码表的,所以PSI中抽象出了码表这一业务对象。

从技术层面来讲,码表是可以用一张数据库表(table)来存储的业务对象。

例如:商品分类、商品、客户分类、客户等等,就是可以用码表来表达的业务对象。

码表由系统固有字段和用户自定义字段两部分组成。

码表的“字段”、“列”是同一个业务含义。用“字段”的时候,更多是从数据库建模的角度;用“列”的时候,多半是从用户界面的角度来表达。

码表系统固有字段

固有字段列中文含义说明
id唯一id
code编码
name名称
record_status记录状态启用或者停用,引用系统数据字典t_sysdict_record_status中的值
date_created创建时间记录创建时间
create_user_id创建人id记录创建人id,引用t_user的id字段
update_dt编辑时间记录最后一次编辑时间
update_user_id编辑人id记录最后一次编辑人的id,引用t_user的id字段
py助记码通常是名称的拼音字头,系统自动生成,也可以再次修改
data_org数据域
company_id公司id引用t_org的id字段

从上表可以看出,code和name是码表的核心业务字段。

码表属性

属性说明
分类分类可以结合编码属性来使用
编码给码表做出恰当的编码,便于管理大量的码表
名称码表的中文名称
模块名称模块名称会用于权限和主菜单中显示当前码表属于哪个模块。例如:码表的名称叫“币别”,模块名称叫“币别管理”。模块名称也可以和码表名称一致,这里根据实际的业务灵活设置。
数据库表名每个码表都对应一个数据库中的表
层级数据当码表需要是多级的时候,需要设置码表为层级数据。通常各种“分类”常为层级数据,例如:商品分类就可以设为层级数据。
编辑布局列数新增或编辑一条码表记录的时候,会弹出页面给用户使用。通常编辑布局列数设置为1,码表的各个字段会从上到下依次排列。如果码表的自定义字段过多,可以把编辑布局列数设置为2,此时布局就会每行显示两个字段。
视图分页当码表是层级数据的时候,即使设置了视图分页,也不会启用分页效果。
自动编码长度值可以为0到20的整数。设置为0,表示不自动编码,编码需要用户手工输入。设置为其他整数,编码会自动生成流水号,例如:设置为5,自动生成长度为5位的类似00001、00002、00003这样的编码。
业务逻辑类名带namespace的完整class名,用于指定该码表的后台业务逻辑插件代码。
例如:\Home\Plugin\CodeTable\DemoBLL 其实现代码见:这里open in new window

具体的用法参考下面的码表自定义业务逻辑
多公司录入通常情况下,码表记录的公司字段(company_id)是在创建的时候,根据当前用户所属公司自动填写的。
当开启多公司录入的时候,创建记录的时候,就可以选择不同的公司(当前用户所见的公司由码表模块名称 - 模块权限这个权限的数据域来决定)。
一个常见的业务场景是:某业务员,管理一个公司和一个事业部的码表数据,这个时候创建记录的时候,就需要选择不同的公司。
再如,财务总账系统中的银行账户,一个银行账户属于某个公司,也需要在创建银行账户的时候,指定所属公司。
针对上述业务场景,在码表设置里面做了多公司录入这个常见的业务模型,用于简化实施配置工作。

码表自定义业务逻辑

通过后台业务逻辑类来插入自定义业务逻辑。

业务逻辑切入点处理函数说明
新增码表记录afterAdd函数返回null表示可以继续执行新增操作;
返回字符串则会作为提示信息返回给用户,同时不执行新增操作(数据库事务会回滚)
编辑码表记录afterUpdate函数返回null表示可以继续执行编辑操作;
返回字符串则会作为提示信息返回给用户,同时不执行编辑操作(数据库事务会回滚)
删除码表记录beforeDelete函数null表示可以执行删除操作;
返回字符串则会作为提示信息返回给用户,同时不执行删除操作(数据库事务会回滚)
获取默认值getDefaultValues函数null表示无默认值;
返回array,array中的键是字段名称,对应的就是该字段的默认值

范例代码见:这里open in new window

码表列属性

属性说明
列标题列的标题会出现在视图列的标题和编辑页面中
列数据库名该列数据库表中的字段名
列数据类型支持varchar、int、decimal、datetime。列一旦创建,其数据类型就不能再修改
列数据长度列数据类型是varchar的时候有效
列小数位数列数据类型是decimal的时候有效
值来源值的来源分为:用户直接录入、引用系统数据字典、引用其他码表、引用自身数据
引用表名当值来源是需要引用其他数据的时候,指定的数据库表名
引用列名(关联用)引用其他表的时候,和其他表关联的字段名。该字段是指引用表中的字段名。通常是码表的id字段。
引用列明(显示用)引用其他表的时候,显示给用户的字段。例如:物料里面引用计量单位,显示计量单位的名称。
编辑界面中对用户可见用户可见的列,在编辑界面会出现,通常是需要用户录入数据。不可见的列,通常会作为后台业务逻辑字段来使用。
必须录入列对用户可见的时候,本属性才有效。
列视图宽度在码表的默认视图界面中,该列的宽度,以px为单位。如何更方便地设置本属性,请参见下面的可视化布局。
编辑界面显示次序该列在编辑界面中出现的次序。如何更方便地设置本属性,请参见下面的可视化布局。
编辑器列占位当码表的编辑布局列数大于1的时候,通过编辑器列占位,可以调整编辑界面布局。例如:编辑布局列数设置为4,编辑器列占位设置为3。可以类比HTML中table的colspan来理解这个属性的用途。
视图界面显示次序该列在默认视图中的显示次序。该值如果是负值,则表明该列在视图中不显示。如何更方便地设置本属性,请参见下面的可视化布局。
编辑器类型编辑器类型,其数据来自系统数据字典t_sysdict_sln0000_ct_editor_xtype
默认值类型列的默认值分为四种:无默认值;固定值;宏值;后台PHP返回值。

后台PHP返回值由其业务逻辑class的方法getDefaultValues返回

可视化布局

目前PSI还没有实现完善的可视化布局功能,而是采用了变通的操作方式。

  • 默认视图列的布局调整

把码表通过主菜单维护加入到主菜单后,该码表可以作为一个独立的模块使用。通过主菜单进入该码表模块,会有开发者工具, 其下有保存列视图布局。拖动列宽度和前后次序后,保存列视图布局,就可以在下次打开该模块的时候,保持当前设置的列宽度和次序。

  • 编辑界面的布局调整

码表设置模块中的有调整编辑界面字段次序,通过拖动列的先后次序来实现设置编辑字段的次序。

工具

提供了一系列工具,用于实施和升级。

把码表转换为系统固有码表

系统固有码表不能删除其元数据,但是仍然可以继续添加新的字段。

举个例子,t_org这个表是目前PSI的组织机构对应的数据库表,当用码表来表示它的时候,就需要把它配置成系统固有码表,以防止被误删除。

系统固有码表不能在用户界面中转换为普通码表,但是可以通过修改后台数据库中元数据调整过来

单个码表的元数据生成SQL语句

应用场景:需要从开发环境向生产环境中迁移最新的码表设置。

因为只是生成元数据的SQL,所以实际数据库表结构的调整,需要和元数据诊断这个功能一起使用。

整个解决方案的码表生成SQL语句

应用场景:开发环境中的版本管理,以及首次部署的时候的数据库初始化脚本的生成

该SQL包括元数据和实际数据库表结构的全部SQL语句。

元数据诊断

TODO