Skip to content

自定义表单数据结构设计 #243

Open
@lywTYH

Description

@lywTYH

自定义字段

客服和管理员进行增删该查

JSON Format

名称 类型 必填 注释
type string true dropdown | multiSelect | text | multiLine | checkbox
description string false 字段描述(此字段并不会在自定义表单显示)
title string true 客服显示字段标题(同时也为字段名,跟 userTitle userDescription 对应)
userTitle string true 终端用户显示字段标题
userDescription string false 终端用户显示字段描述
permission string true 字段权限 editableForUser | readOnlyForUser | agentOnly
requiredForSubmit boolean false (默认为 false) 是否必填
active Boolean true (默认为 true) 是否为激活(考虑到自定义工单使用自定义字段,所以不允许删除字段)
creator Pointer true 创建者,关联 _User 表的字段
createdAt Date true 创建时间
updatedAt Date true 更新时间
objectId String true id

Example

自定义字段可以使用部分字段可以使用自定义变量,数据库存储字段和 api 返回字段并不完全一致,api 的返回会增加编译后的字段。

{
    "type": "checkbox",
    "permission":"editableForUser",
    "requiredForSubmit":false,
    "active":true,

    "description":"112",
    "title": "title {{variable}}",
    "displayTitle":"title testVar", // 编译后的 title
    "userTitle":"title {{custom variable}}",
    "displayUserTitle":"title testVar", // 编译后的 userTitle
    "userDescription":"33\u7ec8\u7aef\u7528\u6237\u663e\u793a\u63cf\u8ff0",

    "creator":{
        "type":"Pointer",
        "className":"_User",
        "objectId":"605aeb3ee7580f00f741d0b9"
    },
    "createdAt":"2021-04-07T11:00:29.755Z","type":"checkbox","title":"22","active":true,
    "updatedAt":"2021-04-07T11:00:29.755Z",
    "objectId":"606d90cd475a4c5d46bf5322",
}


displayTitle displayUserTitle 字段并非数据库存储的字段而是 api 返回对 title userTitle 编译后的字段。description 不支持自定义变量。

目前临时用 js sdk 实现的增删改查不支持自定义变量。后续会用rest api 进行实现。

自定义表单

客服和管理员进行增删该查

JSON Format

名称 类型 必填 注释
name string true 表单名称
userName string true 终端用户显示的 form 表单名称
active Boolean true(默认为 true) 是否为激活
creator Pointer true 创建者,关联 _User 表的字段
createdAt Date true 创建时间
updatedAt Date true 更新时间
objectId String true id

Example

{
  "name": "Snowboard Problem",
  "displayName": "Snowboard Problem",
  "userName": "{{dc.my_display_name}}",
  "displayUserName": "Snowboard Damage",
  "active":true,
  "creator":{
    "type":"Pointer",
    "className":"_User",
    "objectId":"605aeb3ee7580f00f741d0b9"
  },
  "createdAt":"2021-04-07T11:00:29.755Z","type":"checkbox","title":"22","active":true,
  "updatedAt":"2021-04-07T11:00:29.755Z",
  "objectId":"606d90cd475a4c5d46bf5322",
}

displayName displayUserName 字段并非数据库存储的字段而是 api 返回对 name userName 编译后的字段。
后续如果有需求会加入 conditions userConditions 在表单控制字段的权限以及其他约束。

自定义字段的权限如何设计?

自定义字段的权限包含

  • 用户可编辑
  • 用户只读
  • 只限客服
  • 必填

根据权限描述我们使用 role 进行控制, role:agent 代表客服 role:user 代表用户。必填只能单独控制。

自定义字段组成表单时可以调整字段权限,字段的权限并非最终权限而只是为组成表单的默认权限。

权限实际控制在自定义表单和自定义字段的中间表上。

中间表

名称 类型 必填 注释
formId string true 表单 id
filedId string true 字段 id
permission string true 权限
requiredForSubmit boolean true 是否必填
index number true 字段在表单的顺序
createdAt Date true 创建时间
updatedAt Date true 更新时间
objectId String true id

其中 acl 的值 必须与 permission的值相对应。

ACL 与 permission 对应关系为

// 只限客服的字段 ACL -> agentOnly
{
  "role:agent":{
    write:true,
    read:true
  }
}
// 用户只读字段 ACL -> readOnlyForUser
{
  "role:agent":{
    write:true,
    read:true
  },
  "role:user":{
    write:false,
    read:true
  }
}
// 用户可编辑 ACL  -> editableForUser
{
  "role:agent":{
    write:true,
    read:true
  },
  "role:user":{
    write:true,
    read:true
  }
}

如何存储自定义表单的值

使用 键值对 的方式进行存储,其中 key 为表单和字段的中间表 id,值为表单字段值。

具体方法为 扩展工单字段 extraFormData 类型为 object。

这种方法优点是简单 缺点是数据层面上没有做权限控制。

如何获取自定义表单结构以及如何渲染

获取表单的 json 数据描述,根据描述由客户端自由渲染。

实际数据结构根据 api 而定

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions