上一篇文章 工具安装攻略:带你完成 cli-kintone 的安装 安装好后,这篇就一起来操作 cli-kintone,将各种包含附件的纪录汇入汇出。从官网中可以看到以下几种操作:

  • record export:汇出纪录
  • record import:汇入纪录
  • record delete:删除纪录
  • plugin info:查看外挂详情(开发阶段)
  • plugin pack:打包外挂(开发阶段)

在撰文当下(2025/02),plugin info 以及 plugin pack 还在早期开发阶段,而且这两个功能是针对开发者的,所以本篇文章会跳过这两个功能,只针对纪录操作。

事前準备

开始之前,先来建立练习用的应用程式,我们先在应用程式内新增以下栏位:

  • 单行文字方块
  • 附件栏位
  • 表格
    • 表格内的单行文字方块
    • 表格内的附件栏位

为了方便辨识,记得改个栏位名称,另外也新增几笔纪录,在附件栏位内放入一些档案。

汇出(Export)

首先来看纪录的汇出,我们在官网找到范例:

cli-kintone record export \\
--base-url https://${yourDomain} \\
--api-token ${apiToken} \\
--app ${kintoneAppId} \\
> ${filepath}

我们只要把上面范例的值替换成自己环境的 domain、token、app id 等资讯即可,最后的 ${filepath} 则是输出后的 csv 档案,因此经过修改后变成:

cli-kintone record export \\
--base-url https://brown.cybozu.com \\
--api-token pYpEfdnqB1tVI2VhhWQYSN71dBHqunfYpNLn6Cv2 \\
--app 20 \\
> test.csv

左边的 --xxx 就是参数,只要将对应的值放到右边即可,\\ 则是换行符号,当然可以再补上自己需要的参数,例如排序 --order-by、访客空间 --guest-space-id、输出栏位 --fields 等等,全部的参数选项,可以参考以下连结:

https://cli.kintone.dev/guide/options/

回到范例。因为我们还要输出附件,所以再补上新的参数 --attachments-dir,同时指定输出的资料夹,就会变成:

cli-kintone record export \\
--base-url https://brown.cybozu.com \\
--api-token pYpEfdnqB1tVI2VhhWQYSN71dBHqunfYpNLn6Cv2 \\
--app 20 \\
--attachments-dir ./cli-kintone-files \\
> ./cli-kintone-files/test.csv

以上会将输出的附件及 csv 统一放到名为 cli-kintone-files 的资料夹中。接着我们开启终端机后直接复制贴上,就会看到输出后的档案:

会输出的这样的格式,主要是因为附件档案会建立各自的资料夹,并遵循以下输出路径:

  • 输出的资料夹/栏位id-纪录编号/档案名称
  • 若有相同附件名称,则会变成在档名后方加入数字,例如 dog(2).jpg。

提醒:再次汇出并不会删除原本的档案,只有 csv 会被取代成新的,因此如果有重新汇出的需求,建议先将资料夹整个清空,不然就会变成以下情况。

汇入(Import)

跟汇出的指令一样,只是带的参数稍有不同。汇入的时候最重要的是 有没有带 --update-key,如果有填的话代表这次的汇入是要涵盖更新,反之则是新增。

为什么会说是涵盖?因为如果 --update-key 没有比对到 csv 的纪录,则该笔纪录会以「新增」的方式汇入。

以下是范例:

cli-kintone record import \\
--base-url https://sally.cybozu.com \\
--api-token pYpEfdnqB1t4I4VhhWQYSN71dBHqunSYpNLn23Cb \\
--app 183 \\
--attachments-dir ./ \\
--update-key 记录号码 \\
--file-path ./test22.csv

csv 则是:

以上指令指定了 --update-key 为「记录号码」,因此会比对 csv 上的档案将这三笔资料做更新,并且在终端机会看到成功的讯息:

[2025-02-04T10:03:27.881Z] INFO: Preparing to import records...
[2025-02-04T10:03:28.593Z] INFO: Starting to import records...
[2025-02-04T10:03:30.438Z] INFO: Imported 3 records successfully

如果新增了一笔没有比对到 --update-key 的资料,则该笔资料会以「新增」的方式汇入到 kintone。

一样会成功:

[2025-02-05T05:50:00.868Z] INFO: Preparing to import records...
[2025-02-05T05:50:01.446Z] INFO: Starting to import records...
[2025-02-05T05:50:03.127Z] INFO: Imported 4 records successfully

注意事项:--update-key 只能指定为 纪录编号、或是唯一值的单行文字方块/数字栏位。

再来我们试试看用新增的方式汇入,将指令的 --update-key 删除,重新输入后,会得到一个错误:

[2025-02-05T06:01:52.365Z] INFO: Starting to import records...
[2025-02-05T06:01:53.939Z] INFO: Imported 0 of 4 records successfully
[2025-02-05T06:01:53.940Z] ERROR: Failed to add all records.
[2025-02-05T06:01:53.940Z] ERROR: No records are processed successfully.
[2025-02-05T06:01:53.940Z] ERROR: An error occurred while processing records.
[2025-02-05T06:01:53.940Z] ERROR: [400] [GAIA_UN10] Cannot update field whose type is RECORD_ID. (QSvju4wp6ewE4lE2xLYa)

原因是「纪录编号」是 RECORD_ID,我们还没将 csv 的纪录编号栏位删除,所以发生了错误,只要把该栏从 csv 删除就可以汇入成功了。

附件的更新

其实上面的指令就有偷渡汇入附件了,就是 --attachments-dir 参数,这个代表的附件的目录位置,如果终端机目前在 Desktop,要上传的附件目录在 images 资料夹,就要写成:

// 目前位置在 Desktop

cli-kintone record import \\
--attachments-dir ./images/ \\
下略...

之后在 csv 中附件栏位写上档名就可以,其实只要自己把路径填好就可以。

多个档案汇入

如果一个附件栏位有多个档案要上传,直接在 csv 中将档案换行写上就可以,如下:

删除(Delete)

删除最简单,直接看范例:

cli-kintone record delete \\
--base-url https://${yourDomain} \\
--api-token ${apiToken} \\
--app ${kintoneAppId} \\
--file-path ${filepath}

--file-path 会是最重要的参数,若该参数没带,代表这个 app 的全部资料都被删除,因为没被指定。

--file-path 必须是一个 csv 档案,内容包含要删除的纪录编号,例如以下,只会删除编号是 25 的纪录:

并且在终端机会再次询问是否删除:

? Are you sure want to delete records? yes
[2025-02-07T02:11:32.905Z] INFO: Starting to delete records...
[2025-02-07T02:11:33.775Z] INFO: 1 records are deleted successfully

如果不希望他询问你,可以带上参数 --yes 变成 force delete:

cli-kintone record delete \\
--base-url https://${yourDomain} \\
--api-token ${apiToken} \\
--app ${kintoneAppId} \\
--yes \\
--file-path ${filepath}


以上就是 cli-kintnoe 的操作方式,希望大家可以活用该工具!