自定义对象
字段用于定义业务对象的属性。包括前台用户的填写界面和后台数据库的保存格式。简单的来说,字段是对于该对象需要阐述的属性信息。如 ”报价(offer)” 对象可能需要展示以下属性:报价编号(offer_id)、报价名称(offer_name)、业务机会名(opportunity_id)、客户(client)、小计(subtotal) 等基本信息。
目前华炎魔方支持以下基本字段类型:
公式是通过用户定义的算法自动计算字段的值,系统会根据不同的数据类型来进行整合,取字段的时候直接调用字段的 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;
}
相关表字段展示选择项时有两种模式:一种是普通下拉选择框模式;另一种是弹出窗口查找模式,该模式需要在对象设置界面将该对象的“启用弹出窗口查找模式”功能开启。以下是两种模式的示例图:
当需要字段值不能用户随意输入的时候,可以设置一个字段的类型为选择框,设置固定的值供用户选择,并设置选择框的值和背景颜色。如报价对象的“状态” 字段可以设置该类型。点击“新建”字段,填写必填项显示名称“状态”、字段名“status”、字段类型“选择框”、选择项(显示名:待审核,选项值:To audit,颜色:90EE90),可添加多条选项。
显示名:选项名,由用户自定义。
选项值:该选项记录在数据库中的值。
颜色:选择后的背景颜色,只支持16进制颜色值,如90EE90。
点击保存即完成,创建后的使用效果如下:
自动编号,是一种特殊的数据规范,表单或报表中经常需要使用序列号,比如单号、编号等,当需要定义一个规则来自动生成所需的序列号时,我们称之为自动编号。
自动编号公式
要自动编号需要我们引用相关公式,公式一般有两种,一种是日期编号,第二种是序号编号。
可以单独显示日期或序号编号,也可以结合起来运用,方便后期查找。例如我们可以新建一个合同编号字段,在字段类型选择框选择自动编号,在公式一栏输入{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”的勾选框属性,勾选该属性后系统会在创建索引的定时程序中为该字段创建索引,默认是每小时检测一次未创建索引的字段并为其创建好索引。
关于字段索引的定时器配置请参考文档 字段索引配置。
适当地为对象上的字段创建索引是非常必要的,它可以极大的提升相关记录的查询速度,在公式字段、累计汇总、数据导入等功能中也能明显受益。