TKCORE框架学习之入门篇(四)--代码表介绍

代码表介绍

在应用开发中,常常存在着这种情况。在数据存储时,我们存储的是一个 Id 值,而显示时,是一个具体的汉字。比如,性别,我们存储在记录中可能是 1 或者 2,但是显示时,1 则显示成“男",2 着显示成“女"。这种情况,我们叫做编码。

在 Toolkit 中,有两种编码形态。一种叫代码表(CodeTable),另外一种叫 EasySearch。这里,我们先介绍 CodeTable。
在编码中,存在一种数量比较小(一般不超过 50 个),内容相对固定不变,我们把这种称之为 CodeTable。

Toolkit 中提供了多种形式的代码表,比如将枚举类型定义为代码表,以 Xml 的方式定义代码表,按照数据库规范定义标准的代码表,用 Sql 的方式提取代码表。下面将介绍这些类型:

标准代码表

在数据库命名规范中,有如下定义:

代码表名称的命名为"CD*"+代码表的逻辑名称。(例如:性别代码表为 CD_SEX)。在 Toolkit 中,CD*开始的代码表,如无特别配置,可以不做 CodeTable 或者 EasySearch 的声明,系统自动注册。

代码表的字段名规定如下:字段名必须包含代码值、代码名称、代码拼音、代码排序和代码删除标记五个个字段。代码值、代码名称、代码拼音对应的字段名必须是"CODE_VALUE"、“CODE_NAME”、“CODE_PY”。字段代码排序和代码删除标记对应的字段名必须是"CODE_SORT"、“CODE_DEL”。其它附加字段也以"CODE_"为前缀。

关于字段的类型,CODE_DEL 是 smallint 类型,CODE_SORT 是 int 类型。其他三个都是 varchar 类型,根据具体业务需要确定长度。
例如,下面就是创建性别代码表的 SQL:

CREATE TABLE CD_SEX (
  CODE_VALUE int NOT NULL,
  CODE_NAME varchar(10) NULL,
  CODE_PY varchar(5) NULL,
  CODE_DEL smallint NULL,
  CODE_SORT int NULL
)

通常情况下,标准代码表都是不需要做特别注册,但是如果需要数据进行一定的过滤,那么就需要进行 Xml 定义。需要在 Xml/Decoder 目录下创建 Xml 文件,并以 CodeTable.xml 作为结尾。
以下是具体的例子

<?xml version="1.0" encoding="utf-8"?>
<tk:Toolkit version="5.0" xsi:schemaLocation="http://www.qdocuments.net ..\..\schema\v5\CodeTable.xsd" xmlns:tk="http://www.qdocuments.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <tk:StandardCodeTable TableName="CD_SX">
    <tk:FilterSql>CODE_VALUE LIKE '3100%'</tk:FilterSql>
  </tk:StandardCodeTable>
</tk:Toolkit>

枚举类型代码表

在代码中,常常会定义一些枚举类型,而枚举类型本身也可以作为一种代码表。由于枚举类型本身只是一个值定义。因此,Toolkit 提供了自定义的 Attribute 进行扩展。下面是枚举类型代码表的例子

[EnumCodeTable(Author = "YJC", CreateDate = "2015-10-21", Description = "插件类型的代码表")]
public enum PlugInType
{
    [DisplayName("代码")]
    Code,
    [DisplayName("实例")]
    Instance,
    [DisplayName("配置")]
    Xml
}

在每个枚举值上定义 DisplayNameAttribute,说明对应枚举值的中文说明,那么解码显示就对应显示相应的中文。同时必须在类型上标记 EnumCodeTableAttribute,这样系统就识别了,它是一个枚举代码表,会进行相应的注册。这里,没有在 EnumCodeTableAttribute 显式的说明 RegName 的值,那么类型名 PlugInType 就是这个代码的注册名。

采用 Xml 方式定义代码表

一些内容非常简单,而且保证不会变的内容,可以不用专门建一个数据库表,而是用 Xml 存放,这样简单方便。(当然,喜欢定义数据库表的,可以无视这个功能)

在 Xml/Decoder 目录下,可以定义这种结构的文件,需要注意,该文件名必须以CodeData.xml结尾。

下面就是相关的例子:

<?xml version="1.0" encoding="utf-8"?>
<tk:Toolkit version="5.0" xsi:schemaLocation="http://www.qdocuments.net ..\..\schema\v5\CodeData.xsd" xmlns:tk="http://www.qdocuments.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <tk:CodeData RegName="CodeSex" Author="YJC" CreateDate="2014-07-12" Description="性别代码表">
    <tk:Row>
      <tk:Value>01</tk:Value>
      <tk:Name>
        <tk:Content></tk:Content>
      </tk:Name>
    </tk:Row>
    <tk:Row>
      <tk:Value>02</tk:Value>
      <tk:Name>
        <tk:Content></tk:Content>
      </tk:Name>
    </tk:Row>
    <tk:Row>
      <tk:Value>03</tk:Value>
      <tk:Name>
        <tk:Content>其他</tk:Content>
      </tk:Name>
    </tk:Row>
  </tk:CodeData>
  <tk:CodeData RegName="CodeWhether" Description="是否代码表" Author="YJC" CreateDate="2014-07-12">
    <tk:Row>
      <tk:Value>1</tk:Value>
      <tk:Name>
        <tk:Content></tk:Content>
      </tk:Name>
    </tk:Row>
    <tk:Row>
      <tk:Value>2</tk:Value>
      <tk:Name>
        <tk:Content></tk:Content>
      </tk:Name>
    </tk:Row>
  </tk:CodeData>
</tk:Toolkit>

上面定义了两个代码表,一个是性别,一个是是否,注册名分别是 CodeSex 和 CodeWhether。需要注意,注册名必须在所有的代码表(包括各种类型)中保证唯一。对于重名的,系统只会加载一个,而踢掉另外一个。这样,可能会出现很古怪的界面效果。

使用 Sql 方式定义代码表

有时,需要通过 Sql 提取一段数据,作为代码表。这时,我们也需要进行 Xml 的配置。类似于标准代码表,在 Xml/Decoder 目录下,创建文件名以CodeTable.xml结尾的文件(也可以定义在已有的这样的文件中,看归类需要)

需要注意,Sql语句中,需要把Id的字段重命名为Value,把显示的名称的字段重命名为Name。

下面是 Sql 定义的例子:

<?xml version="1.0" encoding="utf-8"?>
<tk:Toolkit version="5.0" xsi:schemaLocation="http://www.qdocuments.net ..\..\schema\v5\CodeTable.xsd" xmlns:tk="http://www.qdocuments.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <tk:SqlCodeTable RegName="CDORG">
    <tk:Sql>SELECT ORG_ID AS Value,ORG_NAME AS Name FROM SYS_ORGANIZATION</tk:Sql>
  </tk:SqlCodeTable>
</tk:Toolkit>
关于TKCore的更多信息请点击: http://www.tkcore.net
关注微信公众号获取TKCore最新资讯:

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TkCore

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值