表格模板使用教程
一些表格模板的使用教程都在这里啦
- 核酸报告统计汇总表(含OCR截图识别)
- 公共卫生教职工入校名单(OCR识别)
- 行程卡、核酸报告截图OCR识别表
- 南京大学材料、易耗品验收入库单表格
- 模板中的自动化脚本更新教程
- 高性能集群作业信息记录表模板教程
- 通用预约系统表模板使用教程
核酸报告统计汇总表(含OCR截图识别)
由于学校疫情防控需要,为便利核酸报告收集工作,人工微结构科学与技术协同创新中心eScience中心与计算机科学与技术系的团队合作,依托中心的计算资源制作了含截图识别的表格模板系统。
表格包含功能有:
- 表单收集苏康码内核酸截图,自动识别并关联人员信息
- 计算指定时间段内核酸完成情况,包括完成率以及未完成名单
使用本模板,需要进行一些基本配置才能发挥完整功能。
一、使用模板
进入table.nju.edu.cn
,访问模板。
在模板内找到 “健康-核酸报告统计汇总表(含OCR截图识别)” 后开始使用。
二、表格配置
由于模板的限制,暂时自动化任务无法通过模板复制,而自动化任务是整个模板的核心。因此,这一部分非常重要。
第一步:导入人员名单
在表格使用前,需要预先准备一个以下格式的名单:
学工号 | 姓名 |
---|---|
100001 | 张三 |
…… | …… |
在人员信息汇总表中,选择从xlsx或csv中导入新数据,然后选中符合格式的文件:
**注意!Excel表格需要把单元格格式全部改为文本类型,否则部分纯数字学工号会出现异常!**确认无误后导入。
导入后,应当是只有学工号和姓名列有信息,而且没有多余空行。
第二步:设置自动化任务
在表格右上角,更多 “...”-自动化规则,点击 “增加规则”
之后会进入具体自动化规则的设置页面。
这里需要同样的方法新建两个规则,具体设置见下:
① 自动触发OCR识别
此自动化是为了当有人提交截图时,自动开始OCR识别。设置如下:
项目 | 设置 |
---|---|
规则名称 | (随意) |
表格 | 原始数据 |
视图 | 默认视图 |
触发条件 | 新增记录 |
操作 | 运行Python脚本 |
脚本 | 请求OCR识别核酸报告 |
② 自动链接人员信息
此设置是为了有新的识别结果时,自动链接人员信息。设置如下:
项目 | 设置 |
---|---|
规则名称 | (随意) |
表格 | 已识别核酸记录 |
视图 | 默认视图 |
触发条件 | 新增记录 |
操作 | 添加链接 |
选择此表中的链接列 | 链接人员信息 |
列1 | 学工号 |
列2 | 学工号 |
第三步:发放表单(问卷)
点击右上方表单:
鼠标移至已有的表单处,点击分享按钮,将此链接分享给他人即可填写(为了获取身份,表单默认会要求登录)。
填写者的界面,学号姓名也会自动识别,仅需上传一个截图:
特别需要注意,如果发放对象为学生等在Table服务范围的用户,姓名学号是可以自动识别的,但是需要编辑表单打开仅登录用户:
三、子表设计功能介绍
模板中分为四个子表,每张表格都设计有具体功能。四张子表分别为:
- 原始数据:所有表单填写提交的数据均会提交到此处
- 已识别核酸记录:被图像识别处理后的数据(学工号、姓名、核酸检测时间)会自动生成在此处
- 时间段分析汇总表:根据选择时间段自动计算核酸报告完成情况(完成率、未完成名单)
- 人员信息汇总表:存放全部人员的信息(学工号、姓名)
通过适当的自动化逻辑设计,我们可以让表格完成如下的流程:
- 收集对象(如学生)填写表单,只需要提交一张苏康码内的核酸检测截图;截图提交后,会出现在 “原始数据” 子表
- “原始数据” 子表检测到新增信息,自动触发OCR识别脚本,脚本识别是否和提交人一致,并识别出截图中含有的核酸检测信息,汇总在 “已识别核酸记录” 子表
- “已识别核酸记录” 子表识别到新增信息,与 “人员信息汇总表” 中的人员信息匹配并建立双向链接;同时 “人员信息汇总表” 中会显示最近一次核酸检测的时间
- 通过 “时间段分析汇总表” ,手动选择开始日期和结束日期,点击按钮便可自动计算该段时间内的核酸检测完成率,以及生成一个未完成人员的名单
原始数据
自动模式
原始数据表单一般不需要任何操作,自动化设置完毕后会自动处理,并且提供结果。
手动模式
但是如果出现无法识别或识别失败的情况,原始数据内包含一个重新识别按钮,直接点击会调用脚本自动识别。
切换到无法识别视图,会将没有识别或识别失败的内容单独显示。
已识别核酸记录
自动模式
这张表一般不需要操作,在原始数据内识别的结果,会自动添加到这里,并与人员信息汇总表的人员信息关联。
手动模式
但是如果出现前面原始数据无法识别,需要手动在这一张表添加链接,并填写姓名、链接学生信息:
然后在运行工具栏-“...”-数据处理-匹配人员数据处理,即可自动匹配手动新加的人员记录。
之后将人工介入处理的条目,直接将状态修改为已人工处理以标记处理完成。
时间段分析汇总表
这个页面仅支持手动模式,通过设置日期范围,点击计算完成情况会在后面自动生成结果。
人员信息汇总表
此表无需额外操作,仅仅用于查看相关人员最近一次的核酸时间。
鸣谢
校党委研工部
计算机科学与技术系研究生工作办公室
技术支持
IMAGINE Lab实验室、计算机软件研究所、自然语言处理研究组
OCR模块开发
硕士研究生王甲豪、张天昀和吕云哲(计算机科学与技术系研究生会)
模板设计
硕士研究生王甲豪、张天昀和吕云哲(计算机科学与技术系研究生会)
人工微结构科学与技术协同创新中心
计算资源
人工微结构科学与技术协同创新中心
如遇使用问题,欢迎加入QQ群:2343870。
NJU计小妍:
微结构eScience:
公共卫生教职工入校名单(OCR识别)
由于学校疫情防控需要,为便利教职工入校名单收集工作,人工微结构科学与技术协同创新中心eScience中心与计算机科学与技术系的团队合作,依托中心的计算资源制作了含截图识别的表格模板系统。
表格包含功能有:
- 表单收集入校教职工信息和行程卡截图
- 自动识别行程卡截图时间、手机号码、途径城市、是否带有星号
使用本模板,需要进行一些基本配置才能发挥完整功能。
使用模板
进入table.nju.edu.cn
,访问模板。
在模板内找到 “健康-公共卫生教职工入校名单(OCR识别)” ,点击打开并使用模板。
表格配置
发放表单
针对教职工发放传统表单(问卷)可以收集行程码。点击右上方表单:
注:若教职工包含自管人员,访问权限请不要开启“仅登录用户”,应设置为 “任何人”。
发放查询外部应用
在表格右上方的插件-外部应用内,添加外部应用,选择数据查询,名称可以设定为入校查询。
设置查询字段为入校教职工工号,因为是公开查询链接,为了隐私保护隐藏全部字段,然后再打开必要的且可公开的字段,如准许入校状态、工号和姓名,设置完成后将此查询共享外链分发:
填写者点开的查询界面如下:
输入工号即可查询允许入校的情况。
人员名单子表
通过导入本单位所有人员的信息,可以进行已提交记录的自动匹配,从而确认每人是否已提交以及手机号码是否匹配
导入名单
在子表“人员名单”中导入或者粘贴本单位所有人员的工号、姓名和手机号
分组显示
用匹配性列进行分组展示,可以非常便利的查看各种情况
入校申请子表
入校申请子表中分为三个视图,每个视图都是为特定目的设计。分别为:
- 默认视图:所有表单填写提交的数据均会提交到此处,被图像识别处理后的数据(时间、手机号、途经城市等)会自动生成在此处
- 异常行程:行程卡识别不成功、带星号、非当日截图,会在此处显示
- 准许入校名单:在默认视图中点击允许入校后的名单在这里,可以导出Excel后直接在信息收集系统中导入
默认视图
提交的记录会在云端自动识别,如果出现识别不成功的情况,可以通过重新识别按钮来再次尝试识别。
在识别成功后,根据识别结果,手动点击允许入校按钮,会给此提交添加 “允许” 的标记;反之,可以双击空白将“准许入校状态”改为不允许,
异常行程
异常行程会单独将行程码识别结果有异常的条目单独列出,以供处理。
准许入校名单
所有被标记 “允许” 的条目均会在此简化显示,
你只需要使用 “导出视图为Excel”,便可以导出符合格式的Excel文件直接导入信息收集系统中上报!
一键批准
首先从申请中找出不符合的,将其“准许入校状态”标记为“拒绝”。然后再打开表格左侧的 脚本,运行批准所有申请,所有准许入校状态,则所有未标记准许入校状态的行都会自动标记为允许
归档
可将今天之前的过往申请归档,这样可以用一个表格每天收集信息,而不用创建新的表格。
归档过往申请
切换到“过往申请视图”,该视图列出的都是今天之前的提交的申请,选择归档视图,将该视图的所有记录(即今天之前的申请)归档
查看归档
切换到“归档申请”视图,可以查看已经归档的历史申请
鸣谢
校党委研工部
计算机科学与技术系研究生工作办公室
技术支持
IMAGINE Lab实验室、计算机软件研究所、自然语言处理研究组
OCR模块开发
硕士研究生王甲豪、张天昀和吕云哲(计算机科学与技术系研究生会)
模板设计
硕士研究生王甲豪、张天昀和吕云哲(计算机科学与技术系研究生会)
人工微结构科学与技术协同创新中心
计算资源
人工微结构科学与技术协同创新中心
如遇使用问题,欢迎加入QQ群:2343870。
NJU计小妍:
微结构eScience:
行程卡、核酸报告截图OCR识别表
本表在基础的收集功能上,又新增了OCR识别的功能,支持同时识别:
-
核酸检测报告
-
行程卡
本表仅完成最基础的识别功能,其他功能因为需求变动频繁、过于复杂,需要用户具备一定的表格使用基础,请用户自行添加;如个性化需求需要帮助的,请联系eScience以提供支持。
如果你还没有熟悉这类表格的使用,建议你先尝试详细学习如下两个模板:
由于当前模板的限制,用户需要手动设置自动化:
若要通过下载全部导出固定文件名格式的图片,可以这样操作:
同时,本表格建议搭配看板插件使用,
该插件可以将原始数据
设置按照情况总览列来分组,勾选你需要查看的字段
数据会按照更加易读的卡片形式来展现
放置到工具栏,下次使用更方便哦!
鸣谢
校党委研工部
计算机科学与技术系研究生工作办公室
技术支持
IMAGINE Lab实验室、计算机软件研究所、自然语言处理研究组
OCR模块开发
硕士研究生王甲豪、张天昀和吕云哲(计算机科学与技术系研究生会)
模板设计
硕士研究生王甲豪、张天昀和吕云哲(计算机科学与技术系研究生会)
人工微结构科学与技术协同创新中心
计算资源
人工微结构科学与技术协同创新中心
如遇使用问题,欢迎加入QQ群:2343870。
NJU计小妍:
微结构eScience:
南京大学材料、易耗品验收入库单表格
本表格为《南京大学材料、易耗品验收入库单》格式一致的表单,集发票信息收集、情况管理、自动化生成入库单Excel文件于一体,降低发票收集入库整理的繁冗程度。
使用方法
使用模板
我们制作了一份模板,请在模板-财务中寻找~
新建收集表
按照 “示例收集” 子表的格式(推荐复制表但不复制记录)创建新的子表(例如:X年X月XXX办公室发票收集表)并自己取名。
发票数据收集与表单发放
针对财务管理人员,可以通过制作表单来让发票垫付人员帮忙填写。在右上角 “表单” 中已有一份为“示例收集”子表创建的《材料、易耗品发票收集表单(示例)》示例表单:
你可以创建新的表单并设置为为自己的子表(如前文的X年X月XXX办公室发票收集表),共享给别人填写发票信息:
同理,也可以分享数据收集表(适合大批量录入)。但无论如何,对应子表要选择上面你创建的新表。
配置表生成入库单打印文件
在本表格的所有子表中, “配置表” 只允许添加新的生成配置(即一行),不能删除这个子表、删改列名!
在 “配置表” 中,第一个 对应收集表格 输入需要数据来源的表格名,其余按照实际填写即可,最后点击 “生成Excel入库单”按钮。
打印入库单
格式已经被脚本自动设置,所以下载生成的Excel文件后,
只需要修改 “打印整个工作簿”,然后直接打印即可:
示例表格打印效果预览:示例收集.pdf
模板中的自动化脚本更新教程
有时候,因为脚本存在隐性问题(俗称BUG)或需求发生改变,模板中的自动化脚本的代码也会发生改变。本教程将简单介绍如何更新自动化脚本。
方法一:直接用最新的模板
优点 | 缺点 |
---|---|
最佳使用方法 | 数据必须从头收集 |
这个方法简单直接,不必多说。
方法二:从最新模板复制粘贴新代码
优点 | 缺点 |
---|---|
保留当前收集数据,无需重新设置自动化 | 需要复制粘贴操作来修改代码,不熟练用户需要小心 |
有时候表格用到一半、数据都已经收集好了,却突然发现了 BUG,怎么办?
首先,还是先从最新的模板创建一个新表格,然后直接点击该表格的对应脚本,
在弹出的代码页面直接全选-复制。然后回到你当前正在使用的表格,全选-删除-粘贴即可。
方法三:导出-导入-重新设置
优点 | 缺点 |
---|---|
保留当前收集数据,但必须要重新设置自动化 | 整体导入代码,避免误修改代码风险 |
同样,从最新模板创建一个新表格,然后将新的脚本导出,浏览器会自动下载(可能会要求你点击保留):
进入你正在使用的表格,导入刚才下载的脚本:
记住,此时需要将按钮列-列类型转换-选择脚本换成你刚刚导入的那个脚本(顺序和脚本栏一致,一般是最后一个;当然你可以手动重命名脚本来标记一下)。
同样,自动化设置涉及此脚本的内容需要一并修改。在那之后,删除原先的脚本。
方法四:成为自动化脚本真正的主人
优点 | 缺点 |
---|---|
你将主宰本表格的一切 | 需要耐心学习 |
只要你会脚本对应的语言(Python/JavaScript),这些都不是问题~
高性能集群作业信息记录表模板教程
有时候我们在唐楼HPC上计算任务,想要较为准确地知道当前计算进展(例如,刚刚提交或者计算结束,又或者多个计算阶段到哪了),但是面临一堆Output文件不停cat
、grep
、bpeek
很不优雅……
为了比较准确知道自己的作业当前的状态,有很多种方法,集群用户大多是这三种做法:
- 方法一(千万别这么干系列):自己写个无限循环的脚本不停查询然后维持校园网外网访问,检测到后通过SMTP给自己发邮件。作为eScience高性能计算交流群的年更节目,此方法几乎没有任何优点,不仅浪费一个校园网终端、邮件有概率被过滤、浪费大量登录节点资源导致其他用户也卡顿,还有可能得到集群管理员姚老师的特!别!关!照!
- 方法二:使用
bwait
命令(详细用法自行搜索)在任务后执行通知,优点是够简单,缺点是登录节点如果出了什么问题,该命令也会失效。 - 方法三:直接将通知脚本集成在任务脚本里,放在任务前后执行。
本文将重点介绍方法三。你可能会说,那方法三不还是需要SMTP发邮件吗?
非也,如果你知道以下三个事实:
- 协同表格(table.nju.edu.cn)和计算节点直接连通,而且同属内网无需登录校园网账号
- 协同表格支持Webhook/邮件消息通知,其中Webhook包括企业微信机器人和钉钉机器人,甚至自定义Webhook
- 大多数手机系统都已经支持企业微信和钉钉的系统级推送(指无需后台驻留应用也能收到通知)
那么你就可以自然想到:通过协同表格的API从HPC计算任务提交信息至表格,然后利用表格自动化实现消息推送提醒;既能统一记录信息,方便后期统计分析计算效率,又可以实时通知,妙啊~
那么,如何实现这一构想呢?
创建表格文件
获取模板
在协同表格的模板页,点击科研-HPC作业信息记录表,使用此模板:
这个模板预设的列名可以不用修改,因为后面的脚本预设的就是这些列名:
创建自动化
首先,打开钉钉或企业微信(本文以企业微信为例),在群聊内创建一个群机器人
之后,复制Webhook地址
回到之前创建的表格,我们打开第三方集成
可以看见,表格支持发送邮件/企业微信机器人/钉钉机器人。本文我们主要关注机器人,因此邮件就暂时略过了。
在此处,我们添加一个企业微信机器人并粘贴刚才的Webhook地址
测试可以发送消息,即设置完毕。
如果你需要更高级的Webhook触发其他外部工作流来实现更加强大的自动化,可以选择另一种方式
此自定义Webhook会被所有新增、复制、删除、修改行操作触发,并以特定的格式发送消息。详情见官方手册。
打开表格的自动化规则,新增一条规则:
在规则中,我们设置只要新增记录的任务状态列“不是空”,
然后增加一个动作,动作类型为发送企业微信,并选择刚才我们在“第三方集成”创建的那个企业微信机器人
如果你想要“花里胡哨”一些,可以选择Markdown格式,并且按照企业微信机器人官方文档的Markdown格式要求配合{列名}引用的模板语法来撰写。钉钉机器人同理。
下面是一个企业微信机器人的例子:
集群任务新动向:
>任务ID:<font color="warning">**{任务ID}**</font>
>队列信息:**{队列}**
>节点信息:**{节点}**
>任务状态:<font color="info">**{任务状态}**</font>
保存这个自动化规则。至此,自动规则设置完毕。
获取脚本
在eScience的Seatable-Reporter代码仓库中,找到seatable-reporter-LSF.py
文件,这就是脚本了。你可以把这个脚本放置在你的home目录下或其他什么地方,本文示例放置在~
下面。
这个脚本配合上边的模板,什么也不用修改,可以直接拿来用。
使用脚本
获取Base API Token
脚本读取两个重要的环境变量:SEATABLE_HOST
与SEATABLE_BASE_TOKEN
,其中前者对协同表格用户而言填写table.nju.edu.cn
即可,后者需要自行填写之前创建表格的API Token。
API Token的获取方式:
获取后,通过export
命令将上述内容写入环境变量:
# 偷懒的话,可以直接加到`.bashrc`里面去
export SEATABLE_HOST=table.nju.edu.cn
export SEATABLE_BASE_TOKEN=<刚刚获取的API Token>
提交计算任务
由于提交作业之前的alias
无法继承至LSF作业环境里,为了简单起见可以在LSF作业脚本开头写入命令,例如叫mylog
。
在你想要的地方,直接mylog
你想要的信息即可,消息便被发送至协同表格。以下是一个示例LSF作业脚本,
#BSUB -q 7702ib
#BSUB -n 1
alias mylog="python ~/seatable-reporter-LSF.py"
mylog "提交任务"
<your job>
mylog "计算结束"
表格上便会获得此消息
当然,根据计算任务不同,你也可以自定义更多的状态信息。表格接收到新的记录提交,便会触发自动化,在手机上相应提醒:
此外,表格本身留下的记录也可以用于一些信息统计——
结语
本文主要实践通过协同表格与HPC的联动,在纯内网环境实现了低成本的计算任务实况通知。
事实上,类似的自动化案例在eScience的各种服务中比比皆是。得益于eScience多个服务的灵活性,看似不相关的服务平时各司其职;一旦互相协同,就能在小至办公智能化,大至工作自动化的各方面有很大便利。
通用预约系统表模板使用教程
很多时候,为了更好地分配资源,我们需要有这样一个系统应用:
- 能够让大家提前提交预约,并且具体到实名
- 能够让大家方便地查看/查询当前预约状况,以便自行安排预约
- 能够对预约做出一些限制
- 能够根据不同单位、不同会议室/设备分类计费
这样的需求,单纯的问卷形式传统表单收集是做不到的。而数据收集表虽然可以创建,整体的填写体验却不佳,也做不到判断填写是否有效。
如何将多种数据查看手段、数据收集手段,有机地结合起来,并赋以自动化?协同表格的通用应用、脚本、自动化规则综合使用,便是一种极好的方式。
本模板现在已经率先应用在唐仲英楼的会议室预约系统中。最古早的传统表单/数据收集表用法见2021年的推送:《协同表格 | 校内免费问卷制作平台你还不知道?》,这种用法作为早期智能表格的补充模块,比较简陋。现在面向复杂需求,更推荐使用的是通用应用:《协同表格 | 让每个人只能看见自己的记录,通用外部应用一招秒杀!》。
太长不看?这次,我们做了个简单的演示视频,建议在电脑上播放噢!
使用模板
从模板创建
登录协同表格,从“通用”-“通用预约系统表”创建一张新表。
打开创建的“通用预约系统表”,下面准备开始修改内容。
修改表格信息
预约记录表-单选列标签
在创建的表格中,“预约记录表”子表内可以看到如下的这些列:
- 申请序号(文本列,自动生成)
- 申请人(创建者列,发放应用后填写人提交后自动生成)
- 院系(单选列,管理员需根据情况设置)
- 其他院系部处(文本列,发放应用后如果填写人院系选择“其他”,则会提交)
- 负责人姓名(文本列,发放应用后填写人提交)
- 负责人工号(文本列,发放应用后填写人提交)
- 手机(文本列,发放应用后填写人提交)
- 邮箱(邮箱列,发放应用后填写人提交)
- 会议室房间(单选列,管理员需根据情况设置)
- 会议室使用开始时间(日期列,发放应用后填写人提交)
- 会议室使用时长(时长列,发放应用后填写人提交)
- 会议室试用结束时间(公式列,类型为日期,由前两项自动计算)
- 会议室使用用途(文本列,发放应用后填写人提交)
- 备注(文本列,发放应用后填写人提交)
- 费用(数字列,脚本自动计算)
- 创建时间(创建时间列,发放应用后填写人提交后自动生成)
- 状态(单选列,脚本自动计算)
- 无效原因(文本列,脚本自动计算)
- 申请人姓名学工号(文本列,发放应用后填写人提交后自动生成)
- 申请人姓名(公式列,类型为文本,由前一项自动提取,提取技巧见:协同表格 | 今日小技巧:从表单问卷的信息中提取填写者姓名学号)
- 申请人学工号(文本列,发放应用后填写人提交后自动生成)
在上述诸多信息中,你 只需要更改标出的两列,点击“编辑单选”:
其中,您可以根据您的实际需求,将院系更改为部门、年级、课题组等等其他人员分类;会议室房间也可以是仪器设备等其他公共资源。
如果您需要更改列名,请注意将下方脚本内的相关索引(代码中“院系”和“会议室房间”的关键词)一并更改!
预约计价表-多选列标签
在前边我们修改过的“院系”和“会议室房间”(当然,根据你的需求,这里可能已经不叫这个名字了,但下面我们仍然沿用这两个名字),在 “预约计价表”子表 内也把相应的列名修改一致,并且标签需要一致:
唯一不同的是,这里的“院系”和“会议室房间”必须是多选列。
这里有个小技巧:你可以通过“导入/导出标签”从前面的“预约记录表”子表精准地把标签导入过来。
“预约计价表”子表提供了两种计费模式:次单价和时单价,并且逻辑上取最大值:
该子表的每一行都是计价规则,其逻辑为:同一行内,对应的“院系”预约对应的“会议室房间”,按照后边的计算方式计算。
此逻辑更改需要动脚本代码。如果不需要某种计费方式,一个简单的方法是:直接将该值写为
0
。例如,不需要按次计费,那就把次单价改为0
,这样就始终采用时单价的结果了。
需要注意,这张子表应该覆盖所有的情况,并且规则互相不得有冲突。
预约规则配置表-变量值
“预约规则配置表”子表配置了用于脚本的变量。
首列不要动,你只需要根据自己需求修改“值”即可。
需要特别注意的是,OUTDUE
是宽限期,该参数设定在后期录入开始时间早于当前一定时间段的记录,也会被视作有效预约。
邮件通知(可选)
为了能较为即时反馈预约结果,本模板设计了邮件通知系统,但需要按照下文方式配置。首先打开第三方集成面板:
在 “邮件”-“增加邮件账号” 内,添加一个用于发信的邮箱:
添加邮箱需要下列信息:
这些信息你可以通过搜索对应邮箱的第三方客户端配置教程来填入。例如,以南京大学邮箱为例,你可以参考《南大电子邮件使用办法》中关于“学生/教师邮箱客户端设置办法”的内容,寻找“SMTP”和“IMAP”端口号与客户端专用密码设置。
在上述账号添加完毕后,你可以**点击“发送”**来测试是否正确配置:
接着,打开 “规则”-“自动化规则” 模块:
其中已经有预置的三个核心自动化规则,你只需要检查第一个“预约状态更新通知”自动化规则:
绝大多数设置都是无需修改的,只需要将“第三方账户”从下拉框选中你刚刚添加的账户即可:
如果不设置这一部分,邮件将不会发送,但前面的功能不受影响。
脚本
本预约系统的核心脚本有两个,除非有前文中提到的需要修改列名的情况,一般情况下无需修改。
可以注意到,这里的脚本有两个。其中,除了新增记录规则判断,我们还需要定期冲突重复检查。这是因为,记录提交后,后台会运行一个Python脚本,但由于这个过程是并发的,如果极小概率出现:A和B是两条有预约时间冲突/重叠的记录,A记录比B记录先触发脚本,但因为某些不可控的原因,A的脚本尚未执行完时B已经被执行了,B脚本是完全不知道A记录的存在的,因此可能会同时被判断为预约成功。为了解决这个问题,一般做法是通过队列或其他方式有一个顺序的控制,这在协同表格中可以单独以一张子表作为队列来解决——但是显然这非常麻烦。因此,每天定时做一次检查,将冲突情况搁置并让申请人通知管理员处理,是非常必要的。
脚本会获取之前的记录,查询检测是否合法,然后计算费用,写入预约记录表的状态和无效原因列。
其中,状态有4个:
- 预约成功:预约完全符合条件
- 预约失败:出现冲突或者其他违反预约规则的时间段
- 等待审核:提交后的默认状态
- 正在调解:出现极小概率冲突时,定期检查会将预约成功切换至此,该检查默认每次预约提交后第二天0点进行,因此如果第二天没有变化,那么一定是预约成功了
预约失败的原因一般包括:
- [合法性检查错误] 超出最大预约时长 MAX_DURATION,请仔细阅读说明。
- [合法性检查错误] 未达到最短预约时长 MIN_DURATION,请仔细阅读说明。
- [合法性检查错误] 不能预约已经超过回溯期 OUTDUE 的时间。
- [合法性检查错误] 超出允许的最大提前预约时间 MAX_PERIOD,请仔细阅读说明。
- [合法性检查错误] 该时段已有预约,请预约前通过查询功能检查该时段是否可约。
如果自动化运行未生效(没有自动判断预约成功),可以通过脚本日志查看是不是哪里设置有问题(尤其是前文提到的预约计价表情况是否定义完全):
脚本日志的常见报错包括:
- [规则错误] 冲突的规则:预约计价表里面有多次定义的费用规则
- [规则错误] 缺少规则:预约计较表里面缺少费用定义
编辑应用
通用应用是一个基于智能表格可让用户自行搭建简易APP的功能。通过简单的页面类型选择、组织,用户就可以为原先“简陋”的表格“套”上一层友好的交互页面。应用内的人员管理也是与表格原先的“协作人”独立,每一个用户登录应用时,都会被注册为一个应用的角色。
因此,通用应用功能相比之前依靠共享表格、视图以及传统表单、数据收集表实现的各种数据收集协作场景,都更加安全且功能丰富,而且登入/注册应用的用户不会受到人数限制。在面向大批量、不确定身份的人员很多行政目的的表格协作中,直接共享表格不仅权限不安全也有可能受到人数限制,使用通用应用是个推荐选择。
在“应用”模块,已经有一个样例应用。我们将通过下面这个应用来展示通用应用的优势。
点击右侧的小笔编辑此应用:
从左侧导航栏可以看见,这个应用设计了这些页面:
- 说明
- 所有预约日历
- 所有预约查询
- 预约申请
- 申请人
- 预约取消(申请人)
- 有效预约(申请人)
- 无效预约(申请人)
- 负责人
- 预约取消(负责人)
- 有效预约(负责人)
- 无效预约(负责人)
- 预约管理
可以看到,我们预期本应用的设计需要满足预约填写,但又远不止是填写。我们希望:
- 有一个对填写者友好的导航,能够补充一些必要信息:需要注意到,手机上打开应用时,左侧导航栏一般会默认隐藏,设计一个说明页是必要的。
- 填写人有充分的手段查看当前预约情况,而且方式灵活:按照日历看(时间维度)时间更方便,增设预约日历;或者有目的地检索某个房间(地点维度)预约情况,增设所有预约查询。
- 有一个统一的填写入口:制作预约申请表单页。
- 申请人与负责人均有权限取消预约和查看预约情况:在前面的表格中,我们收集了两个人员信息,一个是填写者,也就是申请人的学号/工号,另一个是负责人的工号;通过预过滤技巧,我们很容易实现页面分别按照申请人和负责人过滤。
- 为应用设置管理员,以多人合作:设计预约管理页,仅限特定人员可见。
说明页
进入编辑界面,说明页可以根据你的具体情况修改。
所有预约日历/所有预约查询
这两个页面直观展示当前预约情况:
其中,检索功能更具体一些:
这两个页面无需修改。
预约申请
这一页是用于预约填写的表单:
这里也应用了一个技巧,设置申请人姓名学号和申请人学工号两个的默认值分别为{creator.name}
和{creator.id}
,并设置默认值之后不能更改,就可以直接获取当前登录者的信息,填写人不需要手动填自己的姓名学号。该技巧见:协同表格 | 今日小技巧:从表单问卷的信息中提取填写者姓名学号
预约申请页面一般也无需修改。
申请人/负责人
申请人/负责人文件夹内的页面结构是一样的
其中,对应的人员在预约取消一栏可以删除已经存在的记录,但是不能修改或新增。如要重新预约,必须要从上面的预约申请提交新的预约。
预约管理
预约管理是可以设置为我们指定的人来访问,其他人无权限访问这一页面。这样,我们就可以在应用内就完成数据协作,无需共享表格。
鼠标移动到“设置”小齿轮,
就可以打开这一页的页面设置:
可以发现,各种权限能够设置的选项有四个:管理员(这张智能表格的管理员)、没有人、任何人、特定角色。
这里的特定角色与智能表格中的指定用户是完全不同的两个概念。特定角色仅在本应用内存在。在编辑本应用时,左侧可以看见用户和角色管理一项:
在用户一栏中的用户,便是本应用目前为止注册的用户:
这与原始的表格是完全独立的——除非你点击右上角将用户同步到表格。
在角色一栏我们点右上角增加角色,例如图中我们创建了一个辅助管理角色:
现在回到之前的页面设置,刷新后你将在这里看见辅助管理这个角色,选中它,这一页就只能被辅助管理查看了
发放应用
至此,我们已经编辑完毕主要的内容。下面的问题是,我们要如何发放这个应用?
首先,在编辑应用的左侧我们可以看见齿轮,这是整个应用的设置。这里我们可以设置一个好记的自定义URL。
但是直接复制这个应用发放,你会发现收到的人点开没有权限!你需要打开用户和角色管理-开放式访问-任何登录用户访问应用程序都将自动注册为应用程序用户,并设置自动注册的角色:
这样,用户拿到上方的 App URL 或者前文的自定义 URL,点击登录后都会自动创建为设定的角色并注册为此应用的用户。
实际上,本来我们需要在用户和角色管理内的邀请链接,为默认角色(或者你自创的某个角色)创建一个邀请链接,访问这个链接的人登录后才会自动按照这个角色注册为应用用户,这也是不进行上文设置会提示没有权限的原因。
但是,开放式访问的功能简化了这一流程。前面的“辅助管理”自定义角色可以单独创建邀请链接发放给协作者:
在完成上述步骤后,你应该得到了:
- 一个公开的APP链接地址,预约申请人和负责人访问后进行查询、预约或取消预约的操作
- 一个发给其他同事的辅助管理链接
分发公开的APP链接地址给需要预约的用户,然后将辅助管理的链接分发给一起管理(主要是解决小概率冲突才需要人工介入,其余情况基本为自动化计算)的同事。
需要注意的是,上文所有的查询功能必须基于用户登录才能实现,因此千万不能开启开放式访问-允许匿名用户访问。