1. 自定义对象
  2. 字段

字段类型

基本字段类型

目前华炎魔方支持以下基本字段类型:

  • 文本(text):文字说明。
  • 长文本(textarea):可输入多段文字说明。
  • HTML文本(html):超文本标记语言,页面内可包含图片、链接等。
  • 选择框(select):界面生成下拉框供用户选择,允许多选。
  • 复选框(boolean):界面生成勾选框,勾上即可用。
  • 开关(toggle):开启和关闭两种状态。
  • 日期(date):用户可以选择时间(年—月—日)。
  • 日期时间(datetime):用户可以选择更加具体的时间(年—月—日 时—分)。
  • 数值(number):只能输入数值内容,可以指定小数位,默认保留2位小数。
  • 金额(currency):类似数值字段类型,默认保留2位小数。
  • 百分比(percent):类似数值字段类型,提供百分比的显示方式。
  • 密码(password):密码输入框。
  • 相关表(lookup):引用其他对象,数据从关联表中选择,支持多选功能。
  • 主表/子表(master_detail):主表子表字段类型是相关表的一种扩展,将当前记录链接到主表成为子记录。
  • 自动编号(autonumber):由用户设置公式,设置后无需手动输入,由系统直接生成编号。
  • 网址(url):在只读时,点击会以窗口形式打开相应的网址。
  • 邮件地址(email):系统会校验邮件格式是否合法,点击会自动打开邮件客户端,并将字段值带入收件人中。
  • 图片(image):图片上传及预览。
  • 附件(file):图片、文档等上传及下载。

公式字段

公式是通过用户定义的算法自动计算字段的值,系统会根据不同的数据类型来进行整合,取字段的时候直接调用字段的 API 名称,如:字段1 + 字段2 。对于自动计算值的自定义公式字段,可以设置其字段类型为公式字段(formula),并设置返回值类型和计算公式。如此设置后,这个字段无需用户手动输入,由系统自动计算得出值。

有关具体如何使用及示例请参考如何构建公式字段

累计汇总

华炎魔方中目前支持五种汇总计算,分别是求和(sum)、求平均值(avg)、统计(count)、最大值(max)、最小值(min)。用户可以定义子表中的某个字段值,在主表中显示汇总值。累计汇总字段会计算相关记录中的值,例如统计子表中的数据。您可以创建累计汇总字段,它可根据某个子表中的字段值,在主表中显示汇总值。

有关具体如何使用及示例请参考累计汇总的使用

主表/子表字段类型

在相关表字段的基础上,我们可以通过创建一个“主表/子表”字段来描述两个对象间的主从关系,需要注意的是应该把“主表/子表”字段添加到“子表”对象侧,来表示“子表”对象是通过这个字段来关联其“主表”的,而不是把“主表/子表”字段添加到“主表”对象侧。比如 “报价行条目” 都应该有对应的 “报价” 与之关联,此时我们可以在 ”报价行条目“ 对象上建立一个 “报价名称” 字段,类型为主表/子表跟 “报价” 对象关联起来。

区别:设置为主表/子表类型的字段可以在主表的“相关子表”里设置关联子表显示的列。

设置该对象相关子表:

  • 引用对象:该相关表字段要关联到的另一个对象,这里设置了“客户”表示通过该相关表字段把“报价”与“客户”两个对象关联起来。
  • 过滤器函数:默认情况下,用户在新建和编辑对象记录界面上填写相关表字段值时会列出相关表的所有记录供选择,可以在这里配置可选项范围,比如输入以下内容作为过滤器函数值可让用户在新建和编辑 “报价” 记录界面上填写“报价客户”字段值时只列出有效客户供选择。
function(filters, values){
  return [["state","=","active"]];
}

关于该函数返回值,目前推荐使用数组语法。详情请查看 “查询过滤条件详解”。

  • 选择项函数:与上述过滤器函数类似,你可以在这里描述用户在填写相关表字段值列出哪些选项供选择,比如输入以下内容作为选择项函数值可以实现上述过滤器函数中内容同样的效果。
function(values){
  var result = [];
  var queryFilters = [["state", "=", "active"]];
  var steedosFilters = require("@steedos/filters");
  var odataFilter = steedosFilters.formatFiltersToODataQuery(queryFilters);
  var options = {
    $select: 'name'
  };
  options.$filter = odataFilter;
  var accounts = Creator.odata.query('accounts', options, true);
  accounts.forEach(function (item) {
    result.push({
      label: item.name,
      value: item._id
    });
  });
  return result;
}
该字段类型的字段也被称为外键字段,其值保存的是关联对象记录的主键字段值而不是名称字段值,详细请参考后续小节 名称字段主键/外键字段

相关表字段类型

当我们需要描述两个对象之间的关联关系时,可以在其中一个对象中创建一个“相关表”字段来关联两个对象。比如每个“报价”记录都应该有对应的“所属客户”与之关联,此时我们可以在“报价”对象上创建一个“报价客户”字段跟“客户”对象关联起来。

  • 引用对象:该相关表字段要关联到的另一个对象,这里设置了“客户”表示通过该相关表字段把“报价”与“客户”两个对象关联起来。
  • 过滤器函数:默认情况下,用户在新建和编辑对象记录界面上填写相关表字段值时会列出相关表的所有记录供选择,可以在这里配置可选项范围,比如输入以下内容作为过滤器函数值可让用户在新建和编辑 “报价” 记录界面上填写“报价客户”字段值时只列出有效客户供选择。
function(filters, values){
  return [["state","=","active"]];
}

关于该函数返回值,目前推荐使用数组语法。详情请查看 “查询过滤条件详解”。

  • 选择项函数:与上述过滤器函数类似,你可以在这里描述用户在填写相关表字段值列出哪些选项供选择,比如输入以下内容作为选择项函数值可以实现上述过滤器函数中内容同样的效果。
function(values){
  var result = [];
  var queryFilters = [["state", "=", "active"]];
  var steedosFilters = require("@steedos/filters");
  var odataFilter = steedosFilters.formatFiltersToODataQuery(queryFilters);
  var options = {
    $select: 'name'
  };
  options.$filter = odataFilter;
  var accounts = Creator.odata.query('accounts', options, true);
  accounts.forEach(function (item) {
    result.push({
      label: item.name,
      value: item._id
    });
  });
  return result;
}
  • 多选:如果对象使用的是华炎魔方默认数据源,即使用的是mongodb数据库,那么可以勾选该属性来允许用户选择多个关联值,比如用户可以在新建或编辑某个“报价”记录界面上,选择多个“报价客户”来关联到该“报价”记录。

相关表字段展示选择项时有两种模式:一种是普通下拉选择框模式;另一种是弹出窗口查找模式,该模式需要在对象设置界面将该对象的“启用弹出窗口查找模式”功能开启。以下是两种模式的示例图:

下拉选择框

弹出窗口查找

该字段类型的字段也被称为外键字段,其值保存的是关联对象记录的主键字段值而不是名称字段值,详细请参考后续小节 名称字段主键/外键字段

选择框字段类型

当需要字段值不能用户随意输入的时候,可以设置一个字段的类型为选择框,设置固定的值供用户选择,并设置选择框的值和背景颜色。如报价对象的“状态” 字段可以设置该类型。点击“新建”字段,填写必填项显示名称“状态”、字段名“status”、字段类型“选择框”、选择项(显示名:待审核,选项值:To audit,颜色:90EE90),可添加多条选项。

  • 显示名:选项名,由用户自定义。

  • 选项值:该选项记录在数据库中的值。

  • 颜色:选择后的背景颜色,只支持16进制颜色值,如90EE90。

点击保存即完成,创建后的使用效果如下:

自动编号字段类型

自动编号,是一种特殊的数据规范,表单或报表中经常需要使用序列号,比如单号、编号等,当需要定义一个规则来自动生成所需的序列号时,我们称之为自动编号。

自动编号公式

要自动编号需要我们引用相关公式,公式一般有两种,一种是日期编号,第二种是序号编号。

  • 日期: {YYYY}表示当年四位年(如2020),{YY}表示当年两位年(如20) {MM}表示当月 {DD}表示当日
  • 序号: {0000}表示4位序号,{00}表示2位序号等,不足前面会补0,每增加一个编号数值递增1,默认起始编号为1, 比如使用公式{0000}时,第一个编号为0001,第二个为0002。

可以单独显示日期或序号编号,也可以结合起来运用,方便后期查找。例如我们可以新建一个合同编号字段,在字段类型选择框选择自动编号,在公式一栏输入{YYYY}-{0000}, 当新建一个合同时,会自动生成如2021-0001这样的编号。

也可以加入其他的字符串,例如“SN{YYYY}{MM}{DD}{000}” 或是“采购合同[{YYYY}]{000}号”。结果会显示为类似“采购合同2021-0001”这样的数据。

关于起始编号

默认起始编号为1,需要变更起始编号时可以修改目标”自动编号“的“当前编号值”内容,设置方法就是下面的“自动编号配置”。

公式生效范围

使用{YYYY}等日期公式时,可以设置其生效范围,当无效时公式返回空字符串,设置方法就是下面的“自动编号配置”。

自动编号配置

需要变更起始编号或设置日期公式生效范围时需要编辑目标”自动编号“来配置相关属性,点开“设置-高级设置-自动编号”。

自动编号记录规则:当您为一个对象创建一个自动编号字段后,如果没有新建该对象记录,自动编号记录中不会生成该对象的自动编号记录。

如果您想变更起始编号,请在自动编号中新建一条记录,“对象名”、“自动编号字段”请输入对应您之前创建的那一个自动编号字段名及其对象名,“当前编号值”请输入起始编号。“日期范围开始日期”和“日期范围截止日期”如果不填就是默认当年的开始时间和结束时间。

如果您想中途变更编号,请在自动编号中筛选对应的记录,修改其“当前编号值”内容。

新建一条记录时,编号从1开始记录。如果输入的是100,表示从101开始记录。而且当前编号值会随着新增记录的增加而改变,比如已经有10条记录了,当前编号值会显示为10。

变更编号规则

描述需要变更编号规则时应该修改自动编号公式,如果这么做的话历史数据中已经有的记录无法重新编号。

名称字段

名称字段的作用是在对象列表中把该字段显示为链接,点击该链接可以跳转到记录详细页面。

在华炎魔方中对象上默认以名为name的字段作为”名称字段”。可以通过在对象设置界面编辑这个字段以外的其他字段的属性,勾选其“名称字段”属性来把其他字段设置为名称字段。

如果某个对象没有配置名称字段,那么该对象列表界面的列表中第一列,即序号列里面的序号值会显示为链接,点击这个链接一样可以跳转到记录详细页面。

支持配置为”名称字段“的字段类型有:文本、多行文本、自动编号、公式、日期、日期时间,请不要将其他类型的字段配置为名称字段。

主键/外键字段

与传统项目中表结构类似,华炎魔方中每个对象都必须有一个主键字段来唯一标识其每条记录,默认数据源使用MongoDB作为数据库,所有对象的主键字段都是名为_id的字段,外部数据源可能使用关系型数据库,所以可以在对象设置中编辑字段属性,勾选其“外部数据源”栏的“主键”勾选框来把该字段设置为主键字段。

上面我们有提到“相关表”和“主表/子表”两种特殊的字段类型,通过这两种字段类型的字段可以把两个对象关联起来,所以它们也被称为外键字段,需要注意的是这个外键字段是配置在子表对象一侧的,其字段值保存的是其引用对象的主键字段值。

比如联系人对象上有一个名为“所属客户”(account)的“主表/子表”字段,该字段引用的是一个名为“业务伙伴”(accounts)的对象,假设有一条联系人记录“张三”,其“所属客户”是“中国石油”,那么“张三”这条记录中会在其“所属客户“字段中保存“中国石油”这个“业务伙伴”记录的主键字段值,即_id字段值。

字段索引

字段上有一个名为“创建索引 index”的勾选框属性,勾选该属性后系统会在创建索引的定时程序中为该字段创建索引,默认是每小时检测一次未创建索引的字段并为其创建好索引。

关于字段索引的定时器配置请参考文档 字段索引配置

适当地为对象上的字段创建索引是非常必要的,它可以极大的提升相关记录的查询速度,在公式字段、累计汇总、数据导入等功能中也能明显受益。