数字表格
概述
数字表格是一个高效的数据填报及采集工具,通过对原有线下管理单据的标注解析与分解再聚合,实现线下管理单据的直接电子化、在线化,而非拖拽式重新生成去推翻原有的操作习惯、表单内容及形式、表单背后蕴含的管理思想等,其应用场景也可从以日常办公为主延伸至生产现场的工艺编制、生产计划、生产报工、质量检验、设备管理、人员绩效等各个更加核心的环节,使低代码平台可以有效直接的为生产管理服务。 数字表格提供类Excel操作的在线表单编辑功能,门槛低,上手快,业务人员也可以直接设计。其应用范围广,周期短,见效快。车间走一走,办公室逛一逛桌上、墙上、白板上表格多的场合,就是用武之地。
产品使用
管理员
若没有该标志,请联系管理员配置设计页面的权限。
列表
模板列表
模板列表主要用于对表单模板的添加、修改、删除、分组维护等管理操作。
分组管理
点击【新增】,在模板列表下添加新的分组。
支持对已有的分组进行编辑、删除。并支持在当前分组下添加/导入表单。
表单管理
点击【添加】,在分组下添加新的表单。
支持对已有的表单进行修改、删除、导出。
也可通过导入功能,在指定分组下导入其他环境已经配置完成的表单。
通用资料库
通用资料库主要用于对表单配置时,需要引用的相关数据维护。
通用资料库管理
支持通过 【添加】新建 或【导入 】通用资料。
已新建的通用资料支持编辑、删除、导出。
配置表单
配置表单总共需要完成以下7块信息的配置。
基础属性
基础属性分为 整体设置、模板设置、属性配置三个模块。主要用于对表单整体的一些基础信息配置。
整体设置
- 单据编号规则
单据的编号需要按照给定的格式自动生成,编号序列可以由英文字母,数字和部分符号组成。
其中:
数字:用#表示一位数字。例如####表示产生的编号为四位数字
日期:用y表示年,用M表示月,用d表示日。日期需用英文状态下的中括号[]括起来。例如[yyMMdd]
其他字符:用字符表示字符本身
多种类型组合:字符、数字、时间、引用字段值之间用竖线“|”分隔。
例如P|{VendCode}|[yyMM]|####表示产生的编号为P开头,后面跟编号所在记录中VendCode字段的值,再跟年月,最后是四位数字。
- 表单运行模式
表单有在线、离线两种运行模式。若将当前表单设置为离线模式,则在支持在移动端断网的情况下填写当前表单。
- 表单引用数据
若当前表单需要引用通用资料库中的数据,则需要在此处配置引用资料的名称与版本。
- 表单自动带入其他单据的数据
若当前表单做单据时需要自动带入前一张单子的信息,可以带入同一个模版的其他表单中的信息,也可以带入不同模板的表单的信息。
1-在基础属性中新增关联表单的属性,输入属性名称,属性类型选择关联表单,选择要关联的表单,勾选可编辑,点击【保存】
2-在模板配置中,选中要关联的单元框,设置默认值,选择刚添加的关联表单的属性名称,再选择关联的表单单元格名称,点击【确认】
3-在页面设计属性设计中,点击【编辑属性】,选择关联表单的属性名称,点击【确定】
5-选中表单,点击【新建】,选择要关联的表单,点击开始填单
6-新增后,有关联其他表单的单元格会自动带入
模板设置
- 默认页面
用户新建表单进行填写时,默认会展示模板中的第一个sheet页面。若需要展示其他页面,请在此处指定对应的页面。
- 扫码录入
用户填写表单时,根据实际情况,选择是否需要扫码录入表单信息。若需要,请在此处配置 广播码、广播值、解析格式 等扫码枪信息。
广播码:扫码设备与解析程序的配对规则
广播值:在扫码设备的配置信息里查看
解析格式:表单app解析扫码数据所需的格式,分为JSON格式和非JSON格式。
属性配置
每个表单都默认有以下基本属性:单据编号、状态、创建日期、创建时间、创建人、修改日期、修改时间、修改人。
支持添加类型为 文本、选项、数字、日期、时间、布尔、关联表格和附件共8种其他属性。
每种类型的属性均可设置属性名称、默认值、编辑、必填等配置信息。其中以下配置为该类型独有:
- 选项:配置选项来源
选项来源为自定义时,需要填写枚举值
选项来源为基础资料/通用资料库、万能视图数据时,需要配置数据表的名称。并要配置用户在填写数据时的展示列、显示列。支持填写筛选条件,过滤出指定目标的数据。
- 数字:配置小数位数0~6
- 日期:配置日期格式年月日、年月、年
- 时间:配置时间格式时分秒、时分、时
- 关联表格:配置关联的表格,以及关联表格的筛选条件
模板配置
模板配置分为上半部分表头区域和下半部分内容配置区域。主要用于对用户表单填写界面的配置。
表头
支持在表头上配置多个模板属性。
属性类型有 文本、选项、数字、日期、时间、布尔、关联表单和附件共8种其他属性。详细配置信息与基础属性中的属性配置类同。
支持导入导出模板
内容配置
在表格中手动输入内容信息,或粘贴已有的表单内容。调整样式至合适状态。
隐藏不需要的空行、空列。
选中单元格,在右侧给单元格配置 名称、扫码数据键、默认值、填表顺序、输入方式、编辑、必填、设为明细行 等信息。
- 默认值支持配置为 表单参数、基础属性、动态值、固定值
- 输入方式有 系统键盘、数字键盘、数据弹窗、万能视图数据
支持批量设置输入方式、编辑、必填等配置信息。
- 设为明细行(给表单设置动态行,在用户填写的界面,用户可以动态增加行)
1-选中要设为明细行的单元格(多个单元格才可设为明细行,最少需要选择两行两列,第一行不能设置为明细行),勾选设为明细行的勾选框。
2-勾选设为明细行的勾选框,会弹出明细行配置画面,输入明细表名称。
3-选择列,设置每列的属性。
明细行选择范围上方一行的各单元格的值默认为明细行的列名,可修改。明细行,列的属性(例如默认值、可编辑、输入方式等)在明细表配置界面设置,在外面的单元格设置将无效。输入方式是万能视图/数据弹窗时,数据选择的筛选条件可设置明细行的当前行指定字段。
4-设置完之后,点击【确定】,弹窗关闭,会返回到模板配置画面。
5-如图就是设置完成的效果。
6-发布后,去编辑画面,右键单元格,可进行插入行、复制并插入行、删除选中行、向上增加或者向下增加等操作,插入的行的属性(例如可编辑性,数据弹窗等)与原本模板设置的一致。
单元格设置右侧,有表格设置,对表格页面进行设置。
允许用户使用工具栏、允许用户查看编辑栏、隐藏表格行标列表和显示默认打印按钮,是在用户填写界面控制是否显示工具栏、编辑栏、行标列标,以及默认的打印按钮。允许撤销步数设置,用于设置用户填写数字表格内容的时候,支持撤销操作的步数。步数设置多,则保存的操作步骤多,使用的内存越多。
LuckySheet扩展
1.数据下拉
2. 单选框
3. 复选框
4. 数据校验
5. 文本后缀
页面设计
页面设计分为属性设计、列表设计。属性设计页面生效于,提单时进入表单页前的基本信息弹窗填写界面;列表设计生效于该表单所有数据的列表汇总界面。
属性设计
点击编辑字段,在弹窗中选择用户新建表单时需要查看、填写的字段。弹窗中的 表单属性 来自于 基础属性-属性配置。
列表设计
- 按钮
默认预置按钮 新建、审核共2个。新建按钮不可进行编辑和删除等操作。
可对审核按钮配置接口路径(/ItemJH/web/apps/gongqi.df.prod/FormAction/buttonAudit)
请求后台接口,会固定传入type参数,审核或者取消审核。点审核按钮的时候,type是“审核”,点取消审核的时候,type是“取消审核”
- 新增按钮
支持添加按钮,先选择按钮类型,目前可选择导出、打印和自定义,再配置按钮名称,按钮颜色,自定义按钮还需要配置按钮样式接口地址。
点击新建的按钮,可以进行编辑、删除。
支持按钮的分组配置,点击【设置】图标
- 打印按钮
增加了默认的打印按钮,不是原本那个要设置硕正报表的打印按钮,不用设置,表单实例这边默认就有,选中一片区域后,点打印按钮就可以打印。
- 列表的过滤及查询字段
点击【编辑字段】,选择要添加的过滤字段或者查询字段
- 字段
默认列表上预置展示字段单据编号、状态、创建日期、创建时间、创建人、修改日期、修改时间、修改人 共8个。
点击编辑字段,可以增减字段,也可以调整列表中字段的显示位置
基础资料
基础资料 用于对 仅生效在当前表单 的数据维护。
配置基础资料
①手动输入
在表格中输入信息,其中第一行 为数据的列名,第二行起 为数据的详情。保存后可在选项的配置时被引用。
②引用万能视图
可以直接引用系统中的真实数据,利用万能视图创建数据集,表单中的基础资料应用该万能视图中的数据集。
需要编写公式:$Quote(万能视图数据集的名称,sheet页名称,列名),每列都要写公式,完成后就可以在表单模板制作时引用该万能视图的数据集。
脚本编辑
当需要实现复杂业务场景时,已有的标准化功能若无法满足需求,可通过脚本补充实现。
脚本配置
脚本支持生效在整个表单上(workbook)、单个指定的sheet页上以及自定义按钮上。
当作用范围为workbook时,可通过 新建、保存前、提交前、删除前、打印前、websocket、扫码后、页面加载后和自定义页面确认后10种事件触发。
当作用范围为指定sheet页时,可通过单元格更新后、单元格选中时、单元格单击前和公式更新后 4种事件触发。
当作用范围为自定义按钮时,可通过请求接口返回后、单击事件、执行Node脚本前、Node脚本、执行Node脚本后5种事件触发。
编写脚本时,支持插入常用的函数,降低编译成本。
常用脚本
1、获取表单中的单元格,有2种方法,一种根据行号和列号,另一种是根据表单字段名称
Cells.getCell(行号, 列号) 行号和列号从1开始
Cells.getCell(表单字段名)
2、获取当前单元格
Cells.currentCell()
3、获取表头数据值(即基础属性—属性配置中的属性值)
Form.getBillData(表头属性名称)
4、获取单元格行号
cell.getRowNumber()
5、获取单元格列号
cell.getColumnNumber()
6、设置单元格值
cell.setValue(单元格值,是否渲染)
7、获取数据弹窗中选中的数据行
Form.getSelectObject()
8、获取明细表的数据(列名不传,则获取明细表中所有列的数据)
Form.getDetailData('明细表名称', ['列名1', '列名2'])
9、获取表单的DS数据
let formData = await Form.queryFormData(表单名称,版本号,{筛选条件})
10、创建数据库连接
let myquery = await sys().getDAO('物料域')
11、查询数据库的唯一记录
let myquery = await myquery.findUniqueResult(sql)/queryUniqueResult
12、查询数据库记录列表
let myquery = await myquery.queryList(sql)
13、查询符合条件的数据表格数据
let myquery = await queryFormData('表单名称','',{})
14、设置二维码到指定单元格
Form.setQRCode(行号, 列号, '二维码的值', {order:工作表下标,margin:二维码边距,endRow:结束行号,endCol:结束列号})
15、获取当前表单的forminstanceId
Form.formInstanceId
脚本示例
函数 | 参数 | 返回值 | 描述 | |
---|---|---|---|---|
Cells | currentCell() | 无 | cell | 获取当前单元格对象 |
Cells | getCell(1, 1) | (行,列) | cell | 获取指定行列的单元格对象 |
Cells | setCellsEditable('A1:B2') | 选区 | 无 | 设置单元格区域可编辑 |
cell | getValue() | 无 | 单元格值 | 获取单元格值 |
cell | getOldValue() | 无 | 修改前的单元格值 | 获取修改前的值(仅在单元格修改后能获取) |
cell | setValue('单元格值',是否渲染) | 单元格值 | 无 | 设置单元格值 |
cell | getRowNumber() | 无 | 行号 | 获取单元格行坐标(从1开始) |
cell | getColumnNumber() | 无 | 列号 | 获取单元格列坐标(从1开始) |
cell | setFillColor('#FFFFFF') | 颜色值 | 无 | 设置单元格填充颜色 |
cell | setFontColor('#000000') | 颜色值 | 无 | 设置单元格填字体颜色 |
cell | setCellEditable(ture) | 布尔 | 无 | 设置单元格能否编辑 |
cell | getSheetName() | 无 | 工作簿名称 | 获取单元格所属工作簿名称 |
Form | getEnvParam('员工姓名') | 表单参数名 | 表单参数值 | 获取表单参数值 |
Form | getBillData('创建人') | 表头数据名 | 表头数据值 | 获取表单表头数据值 |
Form | findBaseData('./员工信息',{'员工姓名':'张三'}) | (资料路径,筛选条件)./表示基础资料员工信息是Sheet页 | 数据行单行返回JSONObject多行返回JSONArray | 获 取数据资料 |
Form | getUserId() | 无 | 当前用户id | 获取当前登录用户Id |
Form | getQueryString('formId') | url参数 | 参数值 | 获取浏览器参数值 |
Form | Form.formInstanceId | 无 | 当前表单的formInstanceId | 获取当前表单的formInstanceId |
其它 | isSubmit=falseSubmit() | 可手动设置数字表格不提交,然后在合适的时机调用方法提交 | ||
checkBill() | 调用此方法可对数字表格执行审核操作 |
- 脚本示例
实现目标:
修改班别单元格时,从基础资料中查到相匹配的班次信息,并把班长、系长、组别等消息填到相应的单元格。
相关配置:
基础资料中能查到数据
脚本详情:
let cell = Cells.currentCell();
if(cell.getRowNumber() === 3 && cell.getColumnNumber() === 33){
debugger;
let banbie = Form.findBaseData("./班别",{"班别":cell.getValue()});
let banzhang = Cells.getCell(1,39);
banzhang.setValue(banbie.班长);
let xizhang = Cells.getCell(1,33);
xizhang.setValue(banbie.系长);
let zubie= Cells.getCell(3,27);
zubie.setValue(banbie.区域);
}
- 脚本示例
1-接口在同一个OS里面的相对路径的写法(数字域ID/接口路径),图上的interfc是域ID,后面web/tk/fetchBills是接口路径
2-自定义按钮也有脚本,就是按钮调用接口,接口返回的时候触发的
3-脚本里面的result其实就是接口返回的json里面key是content的value值
{
"errorcode":0;
"errormsg":BBB;
"content":XXX;
}
result就是这个XXX
- 脚本示例
添加模板按钮,需要新增Node脚本
(1)执行Node脚本前
获取表头名称(params为后台写好的方法,可以直接使用)
(2)Node脚本
连接数据库,从表中查询数据
(3)执行Node脚本后
获取指定单元格设置为某个值
权限
针对不同的用户、用户组,表单支持对他们分别授予不同的操作权限与数据权限。
分组管理
默认存在管理员组,admin用户支持查看、编辑表单的所有数据,新建、提交、审核、删除当前表单。表单的自定义/模板按钮需要管理员手动勾选,才允许有该按钮的权限。
支持添加新的分组,并对已有的分组进行编辑、删除等操作。
授权对象
授权对象可通过用户、用户组两种方式授权,最终结果取两种授权方式的并集。
操作权限
操作权限有查看编辑、预设按钮、自定义按钮 3个小类。勾选后表示给当前分组的用户授予对应权限。
数据权限
支持使用基础属性、表单字段值中的字段,进行数据权限过滤。多个条件之间为且的关系,即需要同时满足。
数据管理
显示根据模板表单新增的数据集,可根据是否包含明细、可见字段、筛序条件、排序条件进行显示。
1-是否包含明细
如果模板表单中存在明细行,则可以选择明细行显示数据集,也可以选择不包含明细显示数据集
2- 可见字段
选择包含明细后可见字段这边会出来明细表的字段,如果选择不包含明细,是只有表头数据,即不是明细行的,属性字段以及页面上取了名字的单元格
可进行上下移动显示对应的前后位置,勾选后,则会在数据集表头字段上显示该字段
3-筛选
可新增筛选条件,来显示数据集
4-排序
可根据某个条件进行升序/降序的排列
5-编辑数据集
打开编辑数据集,会显示两个表格,表单名称-览表和表单名称-览表-结构,允许进行编辑、保存成DS文件等操作
历史数据
支持对用户端的表单设置历史数据
1-在模板配置画面,添加自定义按钮,单击事件为执行脚本,确定后保存
2-在脚本编辑画面,作用范围为该自定义按钮,触发事件为单击事件,插入保存表单数据到历史记录
3-可修改保存到的菜单名称,保存并发布(注意设置用户对【保存到历史数据】的权限)
4-在用户端,对该模板新增表单,修改内容后保存,并点击【保存到历史数据】(每点击一次保存到历史数据,都会产生一个表单的版本)
5-返回列表画面,可点击历史数据查看
6-可切换版本进行查看
发布
发布后,拥有权限的用户才可以在使用页面看到当前表单。
发布表单
点击发布,发布当前表单。发布成功后会生成一个表单版本,用户界面将始终生效最新版本的表单。
表单版本
支持查看历史发布的表单版本信息。
配置通用资料库
打开新建的机台,在表格中输入机台信息。其中第一行为数据的列名,第二行起 为数据的详情。
若信息无法在一页中完成数据维护时,支持新建多个页面。
完成数据维护后,保存并发布员工。 发布后的数据可在表单中被引用。
用户
PC端操作
新建表单
点击新建,填写表单的一些基本信息。填写完成后,点击开始填单。
填写表单的详细信息。
填写过程中,支持查看表单的一些属性信息。
如果表单使用了扫码,这可通过扫码快速录入表单内容。(不使用扫码,则不显示)
填写过程中如有事情需要离开,则可先保存表单。有空时再进入填写。
针对已经不需要的表单,在提交前支持进行删除操作。
所有信息均填写完成后,可提交表单。
列表
针对有权限的表单,可在列表页中被查看到。
表单提交后,有权限的用户可在列表页以进行审核、自定义按钮等操作。
点击详情,支持进入详情页查看表单。
平板端操作
支持用户在平板上进行表单报单操作(可同步到PC端的表单,也可以将平板上创建的表单同步到PC端,只显示已创建的表单)
操作步骤
1-安装数字表格
支持IOS和安卓系统安装
A-IOS:在APP Store中搜索【工企表格】/扫一扫二维码,进行下载安装
¨搜索(打开APP Store,直接搜索“工企表格”,可进行获取下载)
扫一扫(扫描二维码后,会跳转到APP Store中,打开工企表格,可进行获取下载)
b-安卓:
手动放安装包
如果有数字表格最新版本的安装包,则将.apk文件下载到文件管理中
扫一扫
打开有扫描功能的app,扫描后会弹出下载文件的弹窗,点击【下载】
打开下载内容
下载完成后,会进入安装画面
点击.apk文件,勾选“已了解此应用未经检测,可能存在风险”,点击【继续安装】,软件安装成功
安装完成后,显示该图标的软件
2-工企表格安装完成后,点击打开软件,显示软件的登录页面
3-点击设置按钮,输入PC地址和端口号,点击【保存设置】
4-输入用户名和密码(系统中有该表单权限的用户),点击【登录】(1、用户可自行判断是否勾选记住密码,勾选后,下次打开登录画面,会保留该用户名的密码,不勾选下次登录则不显示;2、离线登录不能查看已有的表单,也不能新增表单)
注:登录的用户在PC 端数字表格中设置的可见用户/可见用户组中,有相关的操作权限
5-登录成功,会显示方案分组下的表单(与PC端进入是一致的),默认显示全部
6-新增表单报单,选择方案分组下的表单,点击【新建】,可以进入历史画面,点击右上角的新建按钮
7-进入表单报单画面时,会自动保存,根据实际进行报单,必填项必填后,可再点击【保存】保存表单,返回后,显示已创建状态,在PC端也会实时同步,且显示已创建状态;也可以对表单进行删除和提交,删除操作后,PC端和平板段都不会有该记录;提交操作后,表单同步到PC端为已制单状态,不会显示在平板中
①保存操作后,平板端返回显示画面,可点击进入编辑
②保存操作后,PC端也会同步到该条单据,可点击详情进入编辑
其他功能
历史
1-点击【历史】,可查看在该表单下的所有已创建的报单单据
2-可对任意单据进行点击进入编辑,编辑保存后实时同步到PC端
同步
点击同步图标可手动进行同步,且下方显示的上次同步时间也会修改
用户切换
1-点击设置按钮,在弹窗中点击【切换用户】
2-点击切换用户后,会切换到登录界面,用户可输入要登录用户的用户名和密码
示例
示例1
部门管理人员设计“出货检验单”的模板,部门其他员工根据该模板进行出货检验报单操作。(与其他单据无关联)
流程说明
1)管理人员登录系统
2)模板列表新增分组
3)对该新增的分组添加表单模板
4)基础数据页面,新增表单设计中有涉及的数据
5)基础属性中新增属性字段
6)模板配置页面,设计表单,对单元格也进行属性设置
7)页面设计页面,属性和列表设计进行编辑
8)权限设置
9)发布表单模板
10)在权限内的员工进行新增表单操作
示例操作说明
1-管理员输入用户名和密码,登录系统
2-点击【表单设计器】,进入表单设计界面
4-点击模板列表“+”,输入分组名称,并点击【保存】
5-点击分组后的“...”,再点击【添加】
6-输入表单名称,点击【保存】
7-根据表单中的数据,可在【基础数据】中新增数据,并【保存】
8-在【基础属性】-属性配置,点击“+”,新增一个属性,并设置它的数据来源,是否可编辑和是否必填,再点击【保存】,切换其他页面还需要点击【保存】。
9-切换到【模板配置】页面,可手动输入也可以从excel表中复制粘贴过来,也可点击导入模板进行导入,也支持将模板导出
10-对表单中的单元格进行属性设置,可设置默认值、数据弹窗、手动编辑等(单元框名称需要填写且唯一,根据实际情况对单元格勾选编辑或者必填勾选框),设置完成后,点击【保存】
①默认值
可选择表单参数、基础属性、动态值、固定值进行默认值的设置,点击【保存】
②数据弹窗
输入方式选择数据弹窗,再在数据选择中选择数据来源等,点击【保存】,在属性设置中勾选编辑
③设置布尔类型
右键单元格,点击【数据验证】
在下拉条件下输入,以英文逗号隔开,勾选输入数据无效时禁止输入,点击【确定】,在属性设置中勾选编辑
④日期类型
选中单元格后,选择日期类型,在属性设置中勾选编辑
⑤单元框可编辑
选中单元格,在属性设置的输入方式选择系统键盘或者数字键盘,勾选编辑
11-在【页面设计】,属性设计中点击【编辑字段】
选中要显示的字段,点击【保存】(员工新建单据时会弹出的弹窗内容)
12-添加表单的功能按钮,点击【添加按钮】,选择按钮类型,配置按钮名称、颜色和样式,点击【确定】
13-配置列表过滤和查询字段,点击【编辑字段】,添加过滤和查询字段并【保存】
14-配置列表显示的字段,点击【编辑字段】,添加需要显示的字段并【保存】,也可以删除不需要显示的字段,根据显示前后,点击><进行调整,并【保存】
15-权限设置
点击【权限】,再点击【添加分组】,输入分组名称,选择授权对象和操作权限,点击【保存】,只有授权对象中的用户才能做对应设置的操作
16-点击【发布】对表单模板进行发布
17-在权限内的出货小组员工登录系统进行表单报单,选中模板,点击【新建】
18-选择产品型号,点击【开始填单】
19-进入表单编辑界面,根据实际情况,必填项必填,填写完成后,可点击【提交】,提交完成后不可再编辑且单据状态是已制单状态,点击【保存】可再编辑单据为已创建状态,点击【删除】,表单被删除
18-审核权限的人勾选表单,可对已制单的表单进行审核,也可进行导出和过滤查询操作
示例2
出货管理人员设计“集箱出货表单”模板,表单需要获取到集箱质量检验单中的相关数据-产品工号、产品名称、产品图号和检查合格数量(集箱质量检验单已存在)
流程说明
1)已存在集箱质量检验单模板
2)新增集箱出货单模板
3)配置基础属性-属性配置(关联表单类型)
4)模板配置中,添加出货单表格,关联字段的属性配置-设置默认值(关联新增的属性)
5)页面设计配置属性设计字段(新增的属性)
6)配置权限并发布
示例操作说明
1-新增方案表单(集箱出货单)
2-基础属性画面中,属性添加关联表单的属性,属性类型选择关联表单,且关联表单选择集箱质量检验单,点击【保存】
3-在模板配置画面,添加出货单表格,编辑单元格属性,产品工号来源于关联集箱
点击默认值的输入框,弹出默认值的弹窗,选择基础属性,选择在基础属性中新增的属性名称,选择关联集箱质量检验单中的字段(产品工号),其他要关联的字段也对应设置好
4-页面设计画面,属性设计中点击【编辑字段】,添加基础属性中新增的属性-关联集箱质量检验单,点击【保存】
5-根据实际配置权限,配置集箱出货小组人员后,点击【发布】
7-点击返回表单报单画面,集箱质量检验单新增单据,并填写好产品工号、产品名称、产品图号和检验合格数量,保存单据
7-在集箱出货单新增出货单,点击【新建】,选择关联集箱质量检验单据,点击【开始填单】
8-新增的集箱出货单的产品工号、产品名称、产品图号和检验合格数量根据选择的集箱质量检验单中的单元格自动带入
9-添加其他必填项后,点击【保存】,出货单创建成功
接口交互
获取数据
根据单据实例Id 获取单据数据 DS格式
参数:formInstanceId 表单实例Id(单据唯一Id),可以通过MQ获取
根据表单名称查询
http://127.0.0.1:28000/MIX/web/apps/gongqi.os.form/Bill/getFormBillData?formName=成型报单&version=
参数:formName 表单名称 版本版本
修改表头
批量修改单据表头
http://127.0.0.1:28000/MIX/web/apps/gongqi.os.form/Bill/updateBillHead
参数:
formInstanceId
head{
[
“id”:”基础属性名称”
“value”:“修改后的值”
]
}
修改明细
修改明细-即单元格数据
http://127.0.0.1:28000/MIX/web/apps/gongqi.os.form/Bill/updateBillDetail
MQ数据传输
用户在数字表格中提交表格后,会进行MQ的数据传输,如果在MQ配置器中配置gongqi.os.form_Maked的消息主题,并且设置了对应的消息订阅数据,则提交表格后,就会根据消息订阅来进行执行对应的功能(执行程序、系统消息、企业微信和脚本程序)
还有其他MQ数据传输:
gongqi.os.form_Saved 是在数字表格保存后执行
gongqi.os.form_Deleted 是在数字表格删除后执行
gongqi.os.form_Posted 是在数字表格审核后执行
gongqi.os.form_Posted_Cancel 是在数字表格取消审核后执行
gongqi.os.form_Cancel 是在数字表格取消后执行
MQ调用后端程序
用户在数字表格中保存、提交、审核等操作,都可以进行MQ的数据传输,如果在MQ配置器中配置gongqi.os.form_saved的消息主题,并且设置了对应数字表格的消息订阅数据,则保存此数字表格后,就会根据消息订阅来进行执行对应的功能(执行程序、脚本片段、脚本程序)
首先需要在MQ配置器中完成消息主题的创建和消息订阅。
(1)采用执行程序的处理方式
后端程序处理
后端的Java类,需实现MessageListener接口
消费记录中可以查看消息发送状态,以及报错信息,消息内容为上图arg2。
(2)采取脚本的处理方式
此方法调用本系统的后端程序目前还不完善(主要是登录方面的问题),暂时不建议使用,推荐使用第一种方法
后端接收方式需要特殊处理,MQ调用的脚本因为是在Node中执行,不经过客户端,没有登录鉴权信息
数字表格直接调用后端接口
(1)采用编写对应事件脚本的方式
用户在数字表格中进行保存表格等操作后,调用在对应事件下编写的脚本,发送请求调用后端接口,执行对应的程序代码。本系统的接口,建议写相对路径,如果是其他系统的接口,则写完整路径
在数字表格中点击右下角纸飞机,进入编辑界面,在脚本编辑中可选编写脚本的事件
发送请求到对应路径的接口
如果域未上线可看↓
接收到请求后如何处理表格,方式一以保存表格到数据库为例
方式一 根据单元格坐标的方式读取和保存数字表格数据
getSheet(0)为读取第一张表
表格行列索引由1开始
row为行号,序号1的行,为表上第5行
补充:读取配置模板sheet页,发送后端接口处理(函数luckysheet.getAllSheets()[])。
数字表格脚本
后端接口
方式二 根据数字表格单元格命名的方式读取和更新数字表格数据
数字表格脚本
在后端程序通过单元格名称的方式操作数字表格需要传递数字表格的JOSN格式数据
额外运用例子参考以下代码
(2)通过默认按钮(审核按钮)请求接口
请求后台接口,会固定传入type参数,审核或者取消审核。点审核按钮的时候,type是“审核”,点取消审核的时候,type是“取消审核”。此处接口地址为相对路径,请求的是OS中某个域的接口,图中的“ItemJH”是接口所在域ID。
(3)通过自定义按钮请求接口
画面嵌入
表单APP还能作为画面嵌入到别的界面
数字表格如果嵌入到 OS的其他数字域的画面中,则需要在GOT中新建一个空的Form,Form中放一个Plugin控件,PluginType设置为Html。然后该画面的afterInit方法中,用refreshPlugin_Html命令刷新此plugin控件的显示URL地址为数字表格的URL。
整个数字表格App嵌入
登录凭证AccessToken
当前界面如果是在OS里面(即用同一个浏览器打开),请求会取当前登录用户的凭证,如果是第三方打开,可以在url地址里加AccessToken参数
//token获取示例
//token获取示例
\public** \static** String getToken(String executeUserId) {
\if**(HttpBootFilter.busUrl == \null**) {
return null;
}
String[] splitUrl = HttpBootFilter.busUrl.split(":");
\int** port=Integer.parseInt(splitUrl[2]);
port = port-2;
\if**(splitUrl[2].length() ==4) {
port = port+1;
}
String hex = MD5Helper.md5Hex(executeUserId, "18db8461-18e2-0240-c2ac-a8cc40c157ac");
String url = splitUrl[0] +":"+ splitUrl[1] +":"+port +
"/token/createToken?token="+ hex +"&userId="+executeUserId;
String httpGet = HttpBootUtil.httpGet(url, \null**);
JSONObject response = JSONObject.parseObject(httpGet);
\return** response.getString("result");
}
单个表单嵌入
即数字表格某个表单的列表嵌入
formId 可以从编辑界面获取
新建表单画面(表单实例嵌入)
即单个表单的某个表单实例直接嵌入
url新增Action 为new 进入新建画面
编辑表单画面(表单实例嵌入)
即单个表单的某个表单实例直接嵌入
脚本交互
脚本能通过getQueryString取到url里携带的参数
其他参数
ShowToolbar:用于指定是否展示操作栏,没有携带默认展示,操作按钮提供暴露方法
参数值 | 按钮 |
---|---|
0 | 无 |
1 | 保存 |
2 | 删除 |
3 | 提交 |
4 | 保存 删除 |
5 | 保存 提交 |
6 | 删除 提交 |
7 | 保存 删除 提交 |
AloowEditor:false 直接不能编辑,true 根据现有逻辑
JS函数
内嵌画面时,在外部也能通过调用子窗体的方法
Form.submit()
Form.save()
//保存
\public** CommandResult buttonOK_Button(CommandArg arg) {
CommandResult result = \new** CommandResult();
result.js("document.getElementById(\"htmlPlugin40000\").contentWindow.Form.save()");
\return** result;
}
//提交(制单)
\public** CommandResult buttonOK_Button1(CommandArg arg) {
CommandResult result = \new** CommandResult();
result.js("document.getElementById(\"htmlPlugin40000\").contentWindow.Form.submit()");
\return** result;
}
//删除
\public** CommandResult buttonOK_Button2(CommandArg arg) {
CommandResult result = \new** CommandResult();
result.js("document.getElementById(\"htmlPlugin40000\").contentWindow.Form.deleteForm()");
\return** result;
}
Form.deleteForm()
其中htmlPlugin40000 为子窗体iframe的id