▍基础用法
Add page to 这个功能是让你能一键在特定的数据库内添加页面,而 Edit pages in 则是让你能指定某个数据库中的特定页面,然后进行编辑操作。
例如在下图案例中,我用 Checkbox 字段创建了一个简易的打卡数据库,在 Button 出现之前,我需要先找到这个数据库,然后再手动在数据库中逐个点击勾选框:
而现在,我可以在任意地方创建 Button,然后用 Button 将所有的打卡任务一键勾选:
在这个打卡案例中,我所创建的数据库使用了 Template + Repeat 的模板自动重复功能,让这个数据库每天自动生成一页需要打卡的页面:
所以这里就产生了一个问题,数据库自动生成的页面那么多,我怎么才能让 Button 知道我想编辑的页面是哪一个呢?接下来让我来理一遍使用 Button 编辑数据库页面的基本操作。
使用命令 /button 插入按钮模块后,选择 Edit pages in 组件:
为 Button 指定需要编辑的数据库:
为 Button 指定需要编辑的页面。在这一步中,我们就需要用到此前学过的数据库筛选功能,先用 Button 筛选出那一个(或那几个)需要编辑的特定页面,例如:
- 今天创建的页面(筛选 Date 或者 Created time 字段)
- 任务状态是 To-do 的页面(筛选 Status 字段)
- 金额大于 30 的页面(筛选 Number 字段)
- 标题中包含 XX 关键词的页面(筛选 Title 字段)
- 任务已完成的页面(筛选 Checkbox 字段)
所以我们需要根据自己的实际需求,让 Button 先执行一轮筛选的操作,这样一来当你点击 Button 的时候,它才知道自己应该编辑哪一个页面。如果你对数据库的筛选过滤还不够了解的话,可以回顾第二章的《表格视图解析》。
所以在前文的每日打卡按钮中,我对 Button 的分析如下:
所以此处 Button 的第一步操作就是先设置过滤条件:
通过这一步我们就筛选出了今天创建的打卡页面,接下来就可以指定需要编辑的字段,然后设定编辑条件(将所有 Checkbox 都打勾),设定完毕后,点击 Done 即可完成 Button 的编辑操作。
如此一来,当我们点击这个 Button 时,它就会执行以下操作:
补充
如果这个 Button 是创建在数据库的页面之中,那么我们无须设定复杂的筛选条件,而是可以直接指定 Button 所在的这个页面(this page)来进行编辑:
基于这个特性,我们就可以直接将 Button 放在数据库的模板页内,并将这个 Button 的 Edit pages in 的过滤条件直接指向模板所要创建的这个页面。
▍案例参考
Edit pages in 本身的操作方法其实并不存在什么困难,对一部分用户来说更困难的其实是以下两点:
接下来我将提供几个应用案例供你参考,但请一定忠于自己的实际工作或生活,切勿为了使用 Button 而刻意设定一堆打卡目标,这样只能给自己带来更多烦恼。
案例一:快速修改任务管理表的各种状态
假设我们现在有一个任务管理看板,它的结构如下:
现在我可以使用 Button 一键将所有进行中(In Progress)的任务设置为已完成(Done),然后再从待办清单(To-do)中,将那些优先级为「高」、并且执行人是「二一」的任务拉取到 In Progress 的看板中:
接下来我为这个数据库设置了一个「不显示已归档」的过滤条件(filter),然后就可以用 Button 将所有状态为「Done」的任务修改为「归档」,如此一来就可以快速地将 Complete 看板清空了:
在上述案例中,我们通过 Button 快速且批量地修改了任务的状态,并辅以数据库的视图过滤筛选功能,使用得当的话,的确能大幅提高数据库的组织和管理效率。
案例二:记录打卡时间并计算打卡间隔时长
在下图中我创建了一个简易的读书打卡记录表,这个表格的核心目的是记录「开始读书」和「结束读书」的时间,然后使用数据库公式计算时间间隔,以此得出今日读书的时长:
我创建了一个 Button,然后使用 Add page to 组件在这个打卡数据库中创建了一个新的页面,并对 开始时间 这个字段添加了 Now 的时间变量:
于是当我点击这个 Button 时,这个打卡数据库就能生成如下记录:
接下来再创建一个 Button,然后用 Edit pages in 组件让它先筛选出今日创建的读书任务,然后再为这个任务添加结束时间:
现在点击「结束读书」的 Button,就可以为今天的读书任务添加结束时间,同时因为预先设置好了函数公式,所以它也能够自动计算出开始时间和结束时间的差值:
这里的难点可能还是在于数据库函数公式的计算,具体的写法我们会放到后面的文章再详细介绍,在此之前你可以先参考以下公式:
if(empty(prop("结束时间")), "", format(dateBetween(prop("结束时间"), prop("开始时间"), "minutes")) + " " + "分钟")
另外需要注意的是,Edit pages in 无法直接编辑数据库字段。
▍其他补充
Show confirmation——确认动作是否执行。有时候按钮放在页面中有可能会在无意中点到,导致数据库或者页面被污染,如果你担心这种情况发生的话,可以在执行动作之前添加一个「是否执行」的确认按钮:
Button 中的组件可以通过拖拽的方式调整执行顺序:
Button 中的组件可以通过复制的方式进行快速复用:
只拥有页面浏览权限(View)的访客无法点击 Button,只有获得页面编辑权限的访客才可以点击 Button:
▍简单总结
Button 的优势就在于,它可以在几乎所有地方创建,并且能够链接到任意地方的数据库,这就意味着我们无须重复「打开页面 - 打开子页面 - 打开数据库 - 打开数据库中的页面」这样的繁杂操作,只需一键就能够在几乎任意地方执行一组集成化的动作。
所有的数据库在长久地使用中,一定会有筛选、过滤、以及创建多种视图的操作, 但 Button 在执行的时候能够遍历数据库中的所有页面和所有视图。这意味着只要我们为 Button 设定的筛选条件足够准确,我们就无须在数据库中翻找、查阅那一个需要编辑的页面,这同样能为我们节省大量的时间。
在《Notion 10 年发展史》这篇文章中,我们提到了 Notion 的终极愿景是让所有人都能够以一种无代码的方式来构建属于自己的工具或者产品,我想 Button 正是在为更好地实现这个目标铺路。毕竟就以 Notion 现在所能实现的功能而言,「搭建应用」已经不仅仅是一个梦想,而是一件当下就可以去执行、去创造的事情。
而且本文几乎全然没有提及 Button 与数据库公式以及 Notion AI 互相联动的应用方式,所以它的上限还远不止本文所讲的这些,后续的课程一定能给你更多的想象空间。
另外如果你成功地使用 Button 创造出了能够优化工作流的用法,也欢迎你分享到评论区和大家一起交流,不用太复杂,也不用担心不够高端化,只要它能帮到你,就一定还能帮到更多人。