文档首页 > > 用户指南> 开发模型>

定义对象

定义对象

分享
更新时间:2021/06/15 GMT+08:00

您可以根据业务需求自定义对象,用来存储组织或者业务特有的数据。

背景信息

当前平台支持创建的模型功能类型和每种类型的介绍如下。

表1 模型功能的介绍

功能

介绍

子类

子类介绍

开发指导

对象

对象(Object) 用于存储业务数据,可理解为数据库中的数据表(逻辑表,系统实际存储时通过字段映射,统一把数据保存在MySQL大宽表中)。对象支持:

  • 字段管理
    • 标准字段:系统预置的字段,只能修改,不能添加和删除。
    • 自定义字段:可根据需要自行增/删/改。
  • 对象校验器:在向对象中录入记录数据时,为了保证对象数据的有效性,可以定义一些校验规则,对字段值以及各字段之间的逻辑关系进行校验。例如name字段不能为空,MinPrice字段不能大于maxPrice字段等。
  • 对象触发器:与数据库中的触发器类似,可以为对象定义触发器,在增/删/改对象的记录数据时,自动触发自定义的Java Script脚本执行,脚本的执行结果将会影响主操作(即增删改记录)的结果,系统保证主操作与触发器在一个事务中执行,要么都成功,要么都失败。
  • 对象布局Layout:

    Layout是对象的页面布局,决定了对象详情页面中各字段展示位置的排版布局。系统为StandardObject预置了标准的PageLayout,租户也可以根据需要定制自己的Layout。

  • 选项列表:选项列表用于定义对象的字段可选用的值,类似于定义下拉列表的一组枚举值。

标准对象

是平台预置的对象,对象名称和对象字段均已定义好,可以满足最基本的业务需要。 只允许用户扩展新字段,禁止修改/删除基线字段。

系统支持的标准对象请查看平台界面。

创建对象时要选择“导入已有对象”。

参见本节

自定义对象

租户自定义的定制对象,允许用户增/删/改对象和字段。

参见本节

视图对象

与数据库中的View视图类似,是对2个以上的对象进行关联查询,并把结果集以对象的形式展现,这样的对象称之为视图对象。视图对象中的数据只支持查询,不支持增/删/改。

参见定义视图对象

聚合对象

由一个主对象和多个子对象构成的复合对象,实现不同对象之间建立关联关系。聚合对象对外展现为一个对象,从而简化对象管理。

通过定义对象中某一字段的字段类型为“Lookup”或者“Master Detail”(主从关系类型)实现不同对象之间建立关联关系,只能向子对象进行关联。

针对这种类型,系统支持基于聚合对象进行数据的增删改查操作,避免对多个对象分别进行多次数据操作。

参见创建聚合对象

通过属性配置实现不同对象之间建立关联关系。

针对这种类型,界面上暂不支持基于聚合对象进行数据的增删改查操作,仅可通过Restful接口进行数据的增删改查操作。

参见创建聚合对象

AppCube还有一种系统对象,即平台各项系统功能模块所使用到的对象,如Flow、Script。一般无需关注,若需要定位问题可在数据调试控制台使用SQL语句进行查询,也可在管理台的“系统管理 > 数据处理 > 数据导出”进行导出操作,数据导出请参考数据导出
图1 数据调试控制台
图2 导出系统对象数据

场景描述

本节中设计一个场景:为出差管理系统App定义一个数据模型。出差管理系统主要是对员工提交的出差信息进行审批,因此需要将“出差信息”抽象为一个数据模型Travel Information。Travel Information中需要包含如下字段来记录出差信息:员工姓名、目的地、开始时间、结束时间、出差原因、审批状态。通过配置条件表达式,对员工输入的出差时间进行校验:开始时间必须早于结束时间。定义一个跳转详情页面的按钮,并新建对象编辑页面的Layout。

表2 Object的字段

对象

字段名称

字段数据类型

Travel Information

Name

文本

Destination

文本

Begin Time

日期

End Time

日期

Reason

文本

Status

文本

前提条件

出差管理系统App已创建。

定义基本信息

  1. 鼠标放在App下的Model文件夹旁会出现加号,单击加号,选择“对象”。
  1. 选择“创建新对象”,保持默认“创建新对象”,输入基本信息后单击“添加”。

    表3 新建Object参数说明

    参数名称

    参数说明

    标签

    对象展示名称,例如Travel Information。

    名称

    输入标签值后单击该参数的输入框,系统会自动生成对象的名称,例如TravelInformation。您可以根据需要修改。

    并且,系统会自动增加租户命名空间前缀,以及"__CST"后缀,作为对象的唯一标识。

    描述

    对象的描述信息。

    您也可以通过全局视图新建Object,如图3所示。

    图3 全局视图新建对象

定义对象的字段Fields

  1. 修改系统预置字段name的标签。

    在对象配置页面,单击“标准字段”页签,可以看到系统预置的字段。系统会为对象的每一条记录自动创建一个name字段,作为该条记录的标识。

    本任务中将其用于标识出差员工的姓名。单击编辑图标可以修改其标签。
    图4 系统预置字段

  2. 新建自定义字段。

    下面以新建字段“目的地”为例,介绍添加字段的方法。

    1. 单击“自定义字段”页签,单击“新建”。
    2. 为“目的地”字段选择类型为“文本”文本类型,单击“下一步”。
      图5 字段类型
    3. 设置“目的地”字段的详情信息,单击“下一步”。
      图6 字段详情
      表4 参数说明

      参数

      说明

      标签

      字段在界面的展示名,此处配置为“Destination”。

      名称

      单击输入框系统自动生成,表示字段在系统中的记录值。

      字段帮助

      字段提示的帮助信息。

      描述

      字段的描述信息

      数据长度

      字段的字符长度。Text类型最大支持255个字符,此处配置为255。

      默认值

      该字段默认取值。

      大小写敏感

      字段值是否启用大小写敏感。

      举例如下:

      • 若大小写不敏感,则“ABC”和“abc”为相同值。
      • 若大小写敏感,则“ABC”和“abc”为不同值。

      是否必填

      表示该字段是否必填。

      勾选表示是必填字段。

      是否唯一

      表示该字段是否唯一。

      勾选表示唯一。

      是否可搜

      是否能在前端开发者控制台或者脚本中使用search语句搜索该字段。

      只有加密文本、选项列表、选项列表(多项选择)和公式类型以外的字段才会有该参数配置。

      search语句可以理解为sql语句的子集,系统支持大部分常用的sql查询语句,只需把sql查询语句开头的select关键词修改为search即可。

      下面是search语句的一些限制和特点:

      • search语句当前对分组、通配符、去重distinct等功能暂未支持。
      • search语句不支持通配符,in查询可进行模糊查询。
      • search语句除了聚合函数(AVG、COUNT、MAX、MIN、SUM),其他必须带有where从句,否则报错。
      • 字符串类型默认都转为es中text类型,因此可以实现分词的倒排索引。由于默认未设置Fielddata=on(会很耗性能),所以字符串类型无法排序。
      • 不支持search语句where从句中有非可搜索字段,如不支持search * from myobject where t1 = 'abc' (此处t1为非可搜字段)。
      • search语句目前只可进行单表搜索。
      • search语句不支持HAVING子句、OFFSET。
      • search语句不支持同时普通查询和聚合,例如:不支持“search count(列名),列名 from 列表名;”。
      • search语句不支持列表名别名后“.*”全部查询,例如:不支持“search T.* from 列表名 as T where condition条件;”。
      • text类型采用了英语分词器,因此大小写单复数不敏感,“movie”可匹配“Movies”。
      • 同sql语句一样,search语句也大小写不敏感。
    4. 设置“目的地”字段的访问权限,即哪些Profile可以查看或修改该字段,单击“下一步”
      图7 字段权限

      字段级安全控制是根据业务需要由管理员预置的,具体可参见管理权限配置

    5. 设置“目的地”字段是否加入布局。该配置用于将“目的地”字段加入到布局页面。
      图8 加入布局
    6. 单击“保存”。

  3. 重复上一步,新增表2中的其他字段。

    系统支持批量创建自定义字段,在“自定义字段”页签单击“批量创建”,选择“下载模板”,将模板Excel下载到本地并打开,单击左上角“启用内容”启用宏。在“Note”页签填入命名空间并查看填写说明,在“Data”页签填写各字段定义,包括字段类型、标签、名称、数据长度以及默认值等,其中必填项单元格表头会有红色*号,背景置灰的单元格无需填写。填写好Excel后,在“自定义字段”页签单击“批量创建”,选择“批量导入字段”,拖入填写好的Excel,系统会自动批量创建已定义好的所有字段。如果有错误,会弹出错误提示。“Example”页签提供了字段批量定义示例。

    在“自定义字段”页签单击“导出”,可导出该对象的所有自定义字段,导出字段在Excel的“Data”页签。

    系统会自动为自定义字段添加“__CST”后缀。当前平台支持的字段类型如下表所示。

    表5 字段类型

    字段类型

    字段说明

    文本

    任何字母和数字组合,最多可输入255个字符。

    加密文本

    任何字母和数字的组合,并且以加密格式存储。最多可输入111个字符。

    注意:该类型字段不能唯一,不能建索引,不能用于条件字段及公式字段。

    文本区

    允许用户输入多行文本,最多可输入256K字符。

    数字

    任何数字。保存数据时,会删除前置零。

    百分比

    允许用户输入百分比数字(例如,"10"),并自动向数字添加百分号。

    电话

    允许用户输入任何电话号码,并自动将其转换为电话号码格式。

    币种金额

    允许用户输入美元或其他币种金额,并自动将其转换为币种金额格式。

    日期

    允许用户输入日期或从弹出式日历中选择日期。

    日期/时间

    允许用户输入日期和时间,或从弹出式日历中选择日期、并自动获取当前时间。

    电子邮件

    用户输入电子邮件地址时,将对其进行验证以确保格式正确。

    复选框

    允许用户选择“真”(选取)或“假”(不选取)。

    选项列表

    允许用户从定义的列表中选择任一值。

    选项列表(多项选择)

    允许用户从定义的列表中选择多个值。

    URL

    任何有效的网址。

    查找关系

    通过关联当前字段与另一对象的ID字段,创建本对象与另一对象的引用关系。定义了查找关系后,本字段的取值只能来源于关联对象。

    自动编号

    系统使用您定义的格式生成序列编号。该编号对于每条新记录会自动递增。

    公式

    系统使用您定义的公式表达式生成只读字段。表达式中使用的源字段的值变化时,本字段值同步更新。

    主从关系类型

    通过关联当前字段与另一对象的ID字段,创建本对象与另一对象的主从关系。定义了主从关系后,本字段的取值只能来源于关联主对象。并且,当用户删除关联主对象中的数据时,本对象中的从数据也会被删除。

    多语言

    允许用户从自定义资源表中选择多种语言内容。

  4. (可选,当需要给对象创建索引字段时,您可执行该步骤)在“自定义字段”页签单击“自定义索引”,在弹出的页面单击“添加自定义索引”,定义索引。

    图9 添加自定义索引
    表6 “添加自定义索引”页面参数说明

    参数

    说明

    名称

    该索引名称。

    类型

    索引类型,支持如下两种类型:

    • 普通索引
    • 唯一索引

    唯一索引字段的字段取值必须唯一。

    字段1

    从下拉框选择已创建的自定义字段作为索引字段。

    默认最多只能创建一个索引,每个索引中最多创建两个索引字段。

    创建后,索引字段会显示在“自定义索引”页面,您也可单击删除索引。

为对象字段增加校验器Validator

  1. 在对象配置页面,单击“验证规则”页签,再单击“新建”。
  2. 输入校验规则,单击“保存”

    图10 新建校验规则
    表7 校验规则参数说明

    参数名称

    参数说明

    基本信息

    • 标签:Validator标签名,用于展现在配置界面。示例:checkNumber。
    • 名称:Validator名称。单击后默认自动生成,与“Label”值保持一致。
    • 描述:描述信息。

    错误条件公式

    配置校验公式时,配置的是错误条件。示例:班级编号>200。公式如下:

    CNAME__number__CST<=200

    规则由公式、字段、运算符组成:

    • 单击“Field”可选择逻辑表达式中涉及字段。
    • 单击“Operator”可选择表达式中的运算符。
    • 从“Formula”下拉列表中选择公式,单击“Insert”,可在表达式中嵌入公式。选中公式会有注释说明。

    错误消息

    错误提示信息,可手动输入。示例如下:

    The class number must be greater than 200

  3. 在校验规则列表页面,在新建校验规则的“操作”列打开开关,启用该条规则。

    图11 启用校验规则

  4. 验证规则是否正常,在对象“布局”页签预览Records页签,插入一条191的"number"数据。

    图12 报错校验器的错误

为对象配置内嵌触发器

此场景不涉及触发器,如需配置请参考以下步骤操作。

  1. 在对象配置页面,单击“内嵌触发器”页签,再单击“新建”。
  2. 输入触发器的基本信息,单击“保存”。

    表8 New Trigger参数说明

    参数名称

    参数说明

    标签

    Trigger在用户界面展示的名称。

    名称

    Trigger名称,单击后默认自动生成,与“Label”值保持一致。

    事件触发时机

    Trigger在什么时候生效,在下拉框中选择。

    • 插入前:执行insert操作前触发。
    • 修改前:执行update操作前触发。
    • 删除前:执行delete操作前触发。
    • 插入后:执行insert操作后触发。
    • 修改后:执行update操作后触发。
    • 删除后:执行delete操作后触发。

    描述

    关于Trigger的描述。不超过255个字节。

    1. 执行顺序:系统首先执行Before trigger,然后执行主操作,再执行After trigger。任一步失败将会回滚全部操作。
    2. 在一个对象中,最多只能为每种事件定义一个触发器,如果对象定义多个触发器,则必须对应不同事件。

  3. 编辑触发器的脚本内容。

    举例:在删除操作后新增一条数据,步骤如下:

    1. 新建一个班级Class对象“CNAME__Class__CST”,并添加一个自定义字段班级编号number,最后给name(标准字段)和number赋值,完成对象创建。
      表9 Object的字段

      对象

      字段来源

      字段名称

      字段数据类型

      Class

      标准字段,不需要创建

      Name

      文本

      自定义字段,手动创建

      number

      班级编号

    2. 参考开发脚本开发如下脚本,脚本名称为“CNAME__triggerTest”,用于新增一条数据并保存,并启用该脚本。
      import * as db from 'db';
      import * as es from 'es';
      @useObject(['CNAME__Class__CST'])
       
      @action.object({ type: "param" })
      export class Input { }
      @action.object({ type: "param" })
      export class Output { }
       
      @action.object({ type: 'method' })
      export class SearchScript {
          @action.method({ input: 'ParamsInput', output: 'ParamsOutput' })
          public run(input: Input): Output {
              let out = new Output()
              this.doSearchScript();
              return out;
          }
          private doSearchScript() {
              let sql = db.sql();
              let conn = db.object('CNAME__Class__CST')
              let selectSql = "select count(*) as count from CNAME__Class__CST ";
              let selectRecord = sql.execute(selectSql);
              console.log(selectRecord.Rds[0].count)
              let add = [];
              for (let i = 0; i < 1; i++) {
                  add.push({
                      name: "触发器测试",
                      CNAME__number__CST: "666",
                  })
              }
              let connId = conn.batchInsert(add);
              console.log("connId", connId);
          }
      }
    3. 参考开发服务编排开发一个服务编排“CNAME__testFlow”,调用创建的“CNAME__triggerTest”脚本。不用配置输入输出参数,启用该服务编排。
      图13 编写服务编排内容
    4. 在对象配置页面,单击“内嵌触发器”页签,再单击“新建”,新建如下内嵌触发器,单击“保存”。

    5. 编写触发器的脚本并保存,其中服务编排名称“CNAME__testFlow”和之前创建的保持一致。
      import * as sys from 'sys';
      let result = sys.invokeFlow('CNAME__testFlow', {}, sys.TransactionFlag.Shared);
      console.log(result)

  4. 在触发器列表页面,打开“操作”列开关,启用该条触发器。

定义对象编辑页面布局

对于租户创建的自定义对象,系统会自动创建对象的Detail和Records标准页面,Detail页面缺省按字段创建的先后顺序显示该对象的全部字段。租户可以根据需要新增定义定制Layout页面,例如定义对象编辑页面Layout。

  1. 在对象配置页面,单击“布局”页签,单击“新建”,填写新建对象Layout基本信息,单击“保存”

    图14 New Layout

  2. 在画布区域单击标题组件,设置属性修改页面标题为“Travel Information Edit”。

    图15 修改标题

  3. 单击每个字段的Input组件,配置字段属性。

    系统默认会将该对象所有自定义字段和部分标准字段进行展示,您可根据需要进行删除。选中组件按“Delete”即可删除该字段。
    图16 配置字段属性

    Field字段属性的参数配置如表10所示。

    表10 输入框属性说明

    参数名

    说明

    数据绑定

    设置组件绑定的数据模型。该输入框取值由哪些模型元数据驱动生成的。

    属性值绑定:该组件的所有属性的动态设置。当某一属性被动态绑定时,以绑定值为准。

    文本类型

    该输入框文本类型。

    标签

    该输入框在界面的展示标签名。

    占位符

    占位符。可辅助元素对齐,让页面更整齐。

    支持国际化配置,在配置该属性时,可选择已有多语言、创建或更新多语言。此处创建的多语言会保存在租户的多语言库中。

    可清空

    是否可清空输入值。

    默认值

    该输入框默认值。

    支持国际化配置,在配置该属性时,可选择已有多语言、创建或更新多语言。此处创建的多语言会保存在租户的多语言库中。

    图标

    输入框中需要设置图标时,请配置该项。

    图标位置

    输入框中的图标位置。

    最大字符长度

    输入框取值最大字符长度。

    最大宽度

    输入框最大的宽度。

    必填

    当该开关打开时,该输入框为必填字段。输入框界面展示会有提示必填,此校验功能必须是输入框存在于某个表单组件中。

    必填错误信息

    当必填输入框没有进行输入取值时的界面报错信息。

    支持国际化配置,在配置该属性时,可选择已有多语言、创建或更新多语言。此处创建的多语言会保存在租户的多语言库中。

    正则表达式

    当输入框字段类型为“Text”或者“TextArea”类型,支持进行正则表达式校验。

    例如配置为“^[A-Za-z]+$”,表示该字段只能输入大写的A-Z,或者小写的a-z。

    错误信息

    当不满足正则表达式规则时的界面报错信息。

    支持国际化配置,在配置该属性时,可选择已有多语言、创建或更新多语言。此处创建的多语言会保存在租户的多语言库中。

    自定义校验

    在表单组件中该设置才会生效,为自定义的校验规则。

    控件名称

    当前组件的名称。

    隐藏

    是否隐藏该组件。

    只读

    输入框的值是否只读。

    禁用

    是否禁用该组件。

    高级设置

    包括以下设置项:
    • 样式类:当前组件使用的CSS样式类名,可在CSS代码中进行引用。
    • 预设样式:预置的组件样式风格。
    • 样式透传:启用后,可以将设置好的样式透传给组件的子节点。

    组件树

    如果页面上组件较多,不容易选中时,可以在右侧下方的组件树中,通过选择需要设置的组件名称,快速选中该组件。

  4. 配置完成后,单击编辑页面左上方保存图标,保存所有配置。再单击预览效果。

通过Schema构建器查看及新建对象

您可通过Schema构建器查看系统中存在的对象(包括自定义对象和标准对象)以及对象之间的关联关系。您也可以通过Schema构建器创建对象。

  1. 在App开发界面左侧列表单击,选择“模型 > Schema构建器”。
  2. 从“对象”页签可以选择需要展示的对象拖拽到左侧区域。

    从Schema构建器展示页面可以清楚的看到对象结构以及对象之间的关联关系。

    图17 Schema构建器

  3. 选择对象中具体字段,右键菜单选择“在新标签页中查看字段详情”或者“删除字段”可查看或者删除字段。

    图18 查看字段详情或者删除字段

  4. (可选)选择“元素”页签,选择“对象”拖拽到左侧区域,界面弹出“创建对象”页面,配置参数后单击“保存”,创建对象。

    图19 创建对象

  5. (可选)在“元素”页签下,从“字段”中选择字段类型拖拽到左侧具体的对象中,可为该对象添加字段。

    图20 添加字段

分享:

    相关文档

    相关产品