【JIT/极态云】技术文档--数据表

171 阅读12分钟

一、简介

数据表是模型中的一种类型,作为存储数据的载体,用于管理维护业务数据。数据表依托于关系型数据库,与传统数据表相同,也是由列(字段)与行(记录)组成。但在此基础上做了封装,主要体现在数据表字段类型的丰富性上。根据不同的业务场景,提供了多种形态各异并易于操作的字段类型。

image.png 数据表一方面借助于关系型数据库强大的数据管理功能,一方面又兼顾用户交互体验的友好性。

一言以蔽之,数据表是传统数据库数据与直接呈现给用户展示数据间的桥梁!桥梁的安全与美观决定了开发出应用的稳定性与易用性!数据表的作用不言自明!

二、新建数据表

数据表有两种创建方式,分别应用于不同的场景:

1.新建数据表模型

绝大部分情况都是通过这种方式新建,新建时可以选择数据表存储的数据库,新建模型的同时会在对应的数据库中创建一张数据库表。

image.png

2.基于已有数据表创建

这种创建方式多应用于连接外部数据库,并期望基于已有数据库表在应用中快速生成模型。新建时,选择一个连接的数据库,并关联已有的数据库表即可。

image.png 在进入模型配置区域后,可结合“导入数据库字段”功能,将关联的数据库表中字段同步到当前数据表模型。

导入数据库字段面板会展示数据库表中已有的所有字段,可以选择需要匹配同步的数据表字段类型,确定字段映射后会生成相应的模型字段。

image.png

三、字段设计

新建模型确定后,进入数据表配置区。在配置区主要分为三个部分:字段设计、函数设计、高级配置。其中最重要的就是字段设计,它类似于数据库中的表设计,需要完成对当前数据表的结构定义,如包含哪些字段、分别是什么类型、具体类型有什么限制等等。

一、字段列表配置

1.添加字段

给数据表添加字段有两个入口,分别在:

  • 在设计器的底部点击“+添加字段”,打开添加字段面板,点击需要添加的字段类型,会在数据表最后一行增加对应字段。

    • 若在添加过程中勾选复选框“连续添加”,可以连续添加字段,字段面板不会关闭。此时可以统一添加完成后再修改字段配置,在初次新建模型时会很方便;

image.png

  • 在已有的字段记录行中点击“+”,打开添加字段面板,此时会在该字段的下方一行插入添加的字段;

image.png

在模型中支持添加的字段类型有:

image.png

2.主键

数据表要求必须要有一个主键字段,而设置主键的方法有两种。

  • 手动设置主键,在新建模型后,且还没有保存模型时,可以将部分类型字段设置为主键,其中就包括了:

单行文本、数字、金额、日期、时间、日期时间、流水号、身份证号、手机号、车牌号、选项组单选、下拉框单选、成员单选、部门单选。

image.png

  • 自动生成主键,在新建模型后,若没有手动设置主键,则会生成一个自增的编号字段作为主键;

注意:保存模型后,主键不再支持更改。若不想使用默认的自增主键,则一定要在新建模型后手动设置主键再保存模型,否则无法再更改主键。

image.png

3.数据标题

数据标题是为了在业务上可以快速识别一条数据,可以将某个字段设置为数据标题。

若想将多个字段值组合拼接成数据标题,可以新建一个字段设置为计算公式,在计算公式内将几个字段拼接,再将该字段设置为数据标题。

关联数据字段在表单中也会显示成数据标题,详细见关联数据描述。

image.png 以下字段类型支持设置为数据标题:

单行文本、流水号、身份证、手机号、车牌号、选项组单选、下拉框单选。

4.生成副本

对于已添加的字段,支持生成副本。即将现在字段及其配置拷贝生成一个新的字段,字段名称不重复其他相同。

image.png

image.png

5.删除字段

在已有字段记录行的操作栏中点击删除图标,可直接删除对应字段。

image.png

在以下情况中,字段不支持直接被删除:

  1. 数据表的主键字段,始终无法删除;
  2. 数据表的数据标题字段,需将其他字段设为数据标题后再删除;
  3. 设置了联合唯一的字段,需先从联合唯一中移除该字段再删除;
  4. 设置了组合索引的字段,需先从组合索引中移除该字段再删除。

6.调整字段顺序

拖动数据表中的字段记录行可以调整字段顺序。

image.png

(二)字段配置详情

点击字段记录行,可在右侧面板查看对应字段配置,主要包括:字段名称、特性配置、索引/唯一性配置、计算公式、默认值。不是所有的字段类型有这 5 项配置,具体在数据类型简介中可详细了解各数据类型支持的配置项。

1.字段名称

  • 字段的名称和标题:字段的标题始终可以修改。字段名称在新建时可以修改,在保存数据表后不再支持修改;
  • 描述说明:在表单、表格组件中显示对字段的描述;

image.png

2.特性配置

不同字段类型的特性配置不一样,具体可查看每种数据类型的特性配置项。根据特性要求进行配置。

3.索引/唯一性配置

  • 不允许重复,字段值在数据表记录中不会重复。若设置了唯一性,当不满足唯一性时,不管是通过前端组件还是后端函数,都无法新增或更新数据;
  • 创建索引,默认勾选,用于优化数据表字段查询速度,简单的字段类型(文本类型、数值类型、日期时间类型)在新建时会自动创建索引;

4.计算公式

计算公式是将字段的值自动赋值为本表其他字段的值通过加减乘除或公式函数计算得到的值。参考计算公式使用。

基于此,若字段设置了计算公式,即有以下特性:

  1. 不支持赋值,不管是在前端组件、页面逻辑设计还是后端函数中;
  2. 不可编辑,主要体现在前端的视图组件中;
  3. 无法设置默认值。

即该字段作为只读字段存在。

image.png

5.默认值

将字段值设置某个固定值,在表单组件或声明的单行数据中都会生效。字段设置了默认值,还是可以被修改。在保存时,若字段值未被修改,则保存为默认值;若字段被重新赋值,则保存时以最新的字段值为准。

(三)操作模型

数据表还提供了一些模型层面的管理功能,比如“重置清空”等。

1.重置清空

重置清空功能可以将当前数据表已有数据全部清空,数据表置为空。该操作不会触发模型事件。

image.png

四、高级配置

1.多列联合唯一

多列联合唯一是将多个字段的值组合后在数据表记录中要求唯一。

image.png

举例应用场景:在【工资表】中将“员工工号”和“工资发放月份”设置为联合唯一,则在数据录入或数据更新可以避免工资条重复。

支持设置联合唯一的字段有:

单行文本、数字、金额、百分比、日期、时间、日期时间、流水号、身份证号、手机号、车牌号、超链接、选项组单选、下拉框单选、成员单选、部门单选、关联数据。

2.组合索引

组合索引可以有效地提升常用或特定查询记录的检索速度。

image.png

支持设置联合唯一的字段有:

单行文本、数字、金额、百分比、日期、时间、日期时间、流水号、身份证号、手机号、车牌号、超链接、选项组单选、下拉框单选、成员单选、部门单选、关联数据。

五、模型函数

以下说明了数据表所支持的类函数与成员函数,需要注意的是其中支持事件订阅的函数性能效率会相对较低,若涉及大量级场景,建议使用不支持事件订阅的函数。

(一)类函数

image.png

image.png

(二)成员函数

image.png

因为数据表模型是继承模型基类的,所以也可以直接使用模型基类中的成员函数。

image.png

六、函数设计

在模型构建模块中,我们统一提供了函数设计组件,以供对模型本身进行操作方法层面的扩展。

参见在模型简介中有相应函数设计模块说明。

七、代码实现

在数据表的代码区中包含了两个文件,分别是e.json和model.py。

e.json是对数据表元素的声明,包含了类型、存储路径、数据库表、名称等信息。

{
    "type": "models.NormalType",
    "db": "databases.Default",
    "path": "models",
    "title": "客户表",
    "backendBundleEntry": ".",
    "fromDb": 0,
    "backendResourcePath": "dist/models/CustomerModel/element.pkg",
    "buildTime": 1724140455204,
    "appId": "whwy.crm_tutorial",
    "extendType": "self",
    "functionList": []
}

model.py则主要包括数据表的字段信息、数据表的配置信息和数据表新建的成员函数信息。配置区与代码区保持同步,在配置区的操作会自动同步更新代码区,在代码区的操作也会自动同步更新配置区。

from models.NormalType import NormalModel
from datatypes.Meta import datatypes

class CustomerModel(NormalModel):
    id = datatypes.AutoInt(name = "id" , title = "主键ID" , primaryKey = True , readOnly = 1)
    cName = datatypes.Stext(title = "客户名称" , isAllowScan = False , name = "cName")
    status = datatypes.Radio(title = "客户状态" , selectionWay = "custom" , options = [{"label": "线索", "value": "线索", "style": {"backgroundColor": "#CDE7FF", "color": "#CDE7FF"}}, {"value": "商机", "label": "商机", "style": {"backgroundColor": "#FFDDDA", "color": "#FFDDDA"}}, {"value": "成交", "label": "成交", "style": {"backgroundColor": "#FEEECA", "color": "#FEEECA"}}, {"value": "续签", "label": "续签", "style": {"backgroundColor": "#bddfdb", "color": "#bddfdb"}}] , name = "status" , color = True , placeholder = "" , allowManualInput = False , mulLevelSelectionConfig = {"sortFieldName": "", "sortBy": "", "matchFieldName": "", "dataSourceModel": "", "filterValue": ""})
    sources = datatypes.Radio(title = "客户来源" , selectionWay = "custom" , options = [{"label": "渠道", "value": "渠道", "style": {"backgroundColor": "#FFDDDA", "color": "#FFDDDA"}}, {"label": "官网", "value": "官网", "style": {"backgroundColor": "#FEEECA", "color": "#FEEECA"}}, {"label": "推流", "value": "推流", "style": {"backgroundColor": "#E4F7E0", "color": "#E4F7E0"}}, {"label": "自拓客", "value": "自拓客", "style": {"backgroundColor": "#CFEFF4", "color": "#CFEFF4"}}] , name = "sources" , color = False , placeholder = "" , allowManualInput = False , mulLevelSelectionConfig = {"sortFieldName": "", "sortBy": "", "matchFieldName": "", "dataSourceModel": "", "filterValue": ""})
    industry = datatypes.Dropdown(title = "行业分类" , selectionWay = "custom" , options = [{"label": "A农、林、牧、渔业", "value": "A农、林、牧、渔业", "style": {"backgroundColor": "#FFDDDA", "color": "#FFDDDA"}}, {"label": "B采矿业", "value": "B采矿业", "style": {"backgroundColor": "#FEEECA", "color": "#FEEECA"}}, {"label": "C制造业", "value": "C制造业", "style": {"backgroundColor": "#E4F7E0", "color": "#E4F7E0"}}, {"label": "D电力、热力、燃气及水生产和供应业", "value": "D电力、热力、燃气及水生产和供应业", "style": {"backgroundColor": "#CFEFF4", "color": "#CFEFF4"}}, {"label": "E建筑业", "value": "E建筑业", "style": {"backgroundColor": "#D5F5EF", "color": "#D5F5EF"}}, {"label": "F批发和零售业", "value": "F批发和零售业", "style": {"backgroundColor": "#BED3E5", "color": "#BED3E5"}}] , name = "industry" , color = False , placeholder = "" , allowManualInput = False , mulLevelSelectionConfig = {"sortFieldName": "", "sortBy": "", "matchFieldName": "", "dataSourceModel": "", "filterValue": ""})
    address = datatypes.Address(title = "客户地址" , addressFormat = "pca" , detail = True , name = "address" , showMode = "pca")
    contactor = datatypes.Stext(title = "主要联系人" , isAllowScan = False , name = "contactor")
    phone = datatypes.Phone(title = "手机号" , hiddenWithPhone = False , name = "phone" , rules = 0)
    sales = datatypes.Member(title = "业务人员" , name = "sales")
    attribution = datatypes.Radio(title = "归属情况" , selectionWay = "custom" , options = [{"label": "公海客户", "value": "公海客户", "style": {"backgroundColor": "#CDE7FF", "color": "#CDE7FF"}}, {"label": "私有客户", "value": "私有客户", "style": {"backgroundColor": "#FFDEEB", "color": "#FFDEEB"}}] , name = "attribution" , color = True , placeholder = "" , allowManualInput = False , mulLevelSelectionConfig = {"sortFieldName": "", "sortBy": "", "matchFieldName": "", "dataSourceModel": "", "filterValue": ""})
    latest_followup_date = datatypes.Date(title = "最新跟进日期" , formatDate = "YYYY年MM月DD日" , dateTimeType = "DAY" , name = "latest_followup_date" , dateTimeFormat = "YYYY-MM-DD" , createDefault = False , updateDefault = False)
    next_followup_date = datatypes.Date(title = "下次跟进日期" , formatDate = "YYYY年MM月DD日" , dateTimeType = "DAY" , name = "next_followup_date" , dateTimeFormat = "YYYY-MM-DD" , createDefault = False , updateDefault = False , relateField = "")

    class Meta:
        name = "CustomerModel"
        title = "客户表"
        modelType = "NormalType"
        fullName = ""
        dataTitle = "cName"
        db = "databases.Default"
        dbTable = "models_CustomerModel"
        unionIndexList = []
        unionUniqueList = []

八、使用效果

数据表可以用于所有需要数据源的场景中,包括了组件数据源、聚合表/扩展表连接、审批/任务/事件关联数据表等。数据表的类函数也是比较常用的数据操作途径。

image.png

九、使用场景示例

数据表作为数据源支撑数据管理,维护/管理业务数据,一般需要配合表格、表单、筛选器组件实现。

image.png

如图所示,在一个“销售订单”的数据管理页面中,就会包含对于“订单表”增删改查的所有逻辑。

  • 通过筛选器进行过滤查找;
  • 通过表格分页展示数据表的所有数据;
  • 通过新增表单填入数据表的新数据并录入,也可以通过导入功能批量导入大量已有数据;
  • 通过删除/批量删除功能删除已有的订单数据;
  • 通过编辑表单修改已有订单的行数据;

十、注意事项

  1. 保存模型后,主键不再支持更改。若不想使用默认的自增主键,则一定要在新建模型后手动设置主键再保存模型。
  2. 删除数据表、删除数据表字段均不会实际删除数据库中的表/字段,如需物理删除开发者可直连数据库操作。

进一步了解极态云,体验产品?

请访问 极态云官网