概要
2015年7月12日的更新,追加了获取和设置应用信息的各种API。2015/07/12定期维护中事前发布的kintone API更新的信息(暂时仅提供日文)里追加的API如下:
更新记录的状态
应用的作成和设置的变更
运用环境里反映应用的设置
获取应用的常规设置
更改应用的常规设置
获取表单的设置
更改表单的设置
获取列表的设置
更改列表的设置
获取应用的访问权限
获取记录的访问权限
获取字段的访问权限
JavaScript / CSS自定义设置的获取
JavaScript / CSS自定义设置的更改
这次,我们将使用命令行的HTTP客户端curl,将既存的应用复制到其他的kintone里。主要重点说明使用部署API复制应用的时候,容易陷入困境的地方。
准备
在命令行端使用curl。curl是Linux和MacOS X标准搭载的。Windows也可以使用cygwin之类的工具来使用curl。
curl的基本使用方法
使用curl访问kintone的基本选项如下:
curl -X <方法> -H <头信息> -d <参数>
事先定义共通的参数。在终端执行以下的命令。
$ BASE64=`echo -n 'user:password' | openssl base64` $ AUTH="X-Cybozu-Authorization: ${BASE64}" $ JSON="Content-Type: application/json" $ HOST="https://subdomain.cybozu.com/k"
※user:password 和 subdomain的部分请按情况替换。
$ curl -X GET -H "$AUTH" -H "$JSON" -d '{id:160}' ${HOST}/v1/app.json {"appId":"160","code":"","createdAt":"2015-08-21T10:42:16.000Z","creator":{"code":"Ita","name":"ita"},"description":"记录每天的业务内容、报告事项、所感等的应用。\u003Cdiv\u003E不光是记录,之后的回顾和成员间的交流也可以使用。\u003C/div\u003E","modifiedAt":"2015-08-21T10:43:25.000Z","modifier":{"code":"Ita","name":"ita"},"name":"日报","spaceId":null,"threadId":null}
使用curl可以从kintone那获取信息! 使用BASIC认证的情形,请追加以下这样的BASIC认证用的头部。
$ BASIC="basic_user:basic_password" $ curl -X GET --user "$BASIC" -H "$AUTH" -H "$JSON" -d '{id:160}' ${HOST}/v1/app.json
使用API,复制这个日报的应用。
应用的作成
使用应用作成API(暂时仅提供日文)作成应用。
$ curl -X POST -H "$AUTH" -H "$JSON" -d '{name:"复制的应用"}' ${HOST}/v1/preview/app.json {"app":"162","revision":"2"}
应用ID: 162的应用作成了。因为还没配置到运用环境里,所以无法在首页显示,但是通过以下的URL可以访问管理页面。https://subdomain.cybozu.com/k/admin/app/flow?app=162
常规设置信息的复制
接下来首先,从复制源的应用那获取常规设置信息。
$ curl -X GET -H "$AUTH" -H "$JSON" -d '{app:160}' ${HOST}/v1/preview/app/settings.json > settings.json
这边获取到的常规设置信息,将会被使用到新作成的应用里,但是无法直接使用刚才生成的json。需要添加app参数,并移除revision参数。
settings.json
{ "description":"记录每天的业务内容、报告事项、所感的应用。\u003Cdiv\u003E不光是日报的记录,回顾和成员间的讨论也可以记录。\u003C/div\u003E", "icon":{ "key":"APP15", "type":"PRESET" }, "name":"日报", "revision":"7", "theme":"CLIPBOARD" }
添加app参数,移除revision参数
{ "app":162, "description":"记录每天的业务内容、报告事项、所感的应用。\u003Cdiv\u003E不光是日报的记录,回顾和成员间的讨论記也可以记录。\u003C/div\u003E", "icon":{ "key":"APP15", "type":"PRESET" }, "name":"日报", "theme":"CLIPBOARD" }
修正后的json使用PUT方法来送信。curl可以在-d选项里添加@符号来指定文件。
$ curl -X PUT -H "$AUTH" -H "$JSON" -d '@settings.json' ${HOST}/v1/preview/app/settings.json {"revision":"3"}
表单情报的复制
同样的,从复制源的应用那获取信息。
$ curl -X GET -H "$AUTH" -H "$JSON" -d '{app:160}' ${HOST}/v1/preview/app/form/fields.json > fields.json
这边获取到的数据,并不能直接送信。需要加上app/revision参数的处理,主要是因为有内置字段(built-in field)的问题。
内置字段(built-in field)是在作成应用时自动添加的,所以无法通过字段添加API来添加。因此这些字段即使是在新建应用的时候也需要使用变更API。
内置字段的列表
记录编号(type:"RECORD_NUMBER")
创建人(type:”CREATOR")
创建时间(type”:”CREATED_TIME")
更新人(type:”MODIFIER")
更新日時(type:”UPDATED_TIME")
状态(type:”STATUS")
作業者(type:”STATUS_ASSIGNEE")
类别(type:”CATEGORY")
※即便是设置了不使用类别和过程管理,内部还是添加了类别和创建人字段。
获取到的json分成内置字段和非内置字段。
builtin_fields.json
{ "app": 162, "properties": { "更新时间": { "code": "更新时间", "label": "更新时间", "noLabel": false, "type": "UPDATED_TIME" }, "创建人": { "code": "创建人", "label": "创建人", "noLabel": false, "type": "CREATOR" }, "状态": { "code": "状态", "enabled": false, "label": "状态", "type": "STATUS" }, "更新人": { "code": "更新人", "label": "更新人", "noLabel": false, "type": "MODIFIER" }, "类别": { "code": "类别", "enabled": false, "label": "类别", "type": "CATEGORY" }, "执行者": { "code": "执行者", "enabled": false, "label": "执行者", "type": "STATUS_ASSIGNEE" }, "记录编号": { "code": "记录编号", "label": "记录编号", "noLabel": false, "type": "RECORD_NUMBER" }, "创建时间": { "code": "创建时间", "label": "创建时间", "noLabel": false, "type": "CREATED_TIME" } } }
fields.json
{ "app": 162, "properties": { "日期": { "code": "日期", "defaultNowValue": true, "defaultValue": "", "label": "日期", "noLabel": false, "required": false, "type": "DATE", "unique": false }, "多行文本框_": { "code": "多行文本框_", "defaultValue": "", "label": "业务内容", "noLabel": false, "required": false, "type": "MULTI_LINE_TEXT" }, "多行文本框_0": { "code": "多行文本框_0", "defaultValue": "", "label": "所感、所学", "noLabel": false, "required": false, "type": "MULTI_LINE_TEXT" }, "下拉菜单": { "code": "下拉菜单", "defaultValue": "", "label": "部门", "noLabel": false, "options": { "支持": { "index": "3", "label": "支持" }, "营业": { "index": "0", "label": "营业" }, "开发": { "index": "4", "label": "开发" }, "总务": { "index": "2", "label": "总务" }, "市场": { "index": "1", "label": "市场" } }, "required": false, "type": "DROP_DOWN" }, "添付文件": { "code": "添付文件", "label": "添付文件", "noLabel": false, "required": false, "thumbnailSize": "150", "type": "FILE" }, "单选框": { "align": "HORIZONTAL", "code": "单选框", "defaultValue": "达成", "label": "目标达成度", "noLabel": false, "options": { "达成": { "index": "0", "label": "达成" }, "未达成": { "index": "1", "label": "未达成" } }, "required": true, "type": "RADIO_BUTTON" } } }
内置字段使用PUT方法(更新),非内置字段使用POST方法(添加)来送信。
在作成1次以后,非内置字段也可以使用PUT方法来更新。
$ curl -X POST -H "$AUTH" -H "$JSON" -d '@fields.json' ${HOST}/v1/preview/app/form/fields.json {“revision":"4"} $ curl -X PUT -H "$AUTH" -H "$JSON" -d '@builtin_fields.json' ${HOST}/v1/preview/app/form/fields.json {“revision":"5"}
Layout信息的复制
从原来的应用获得layout情报。
$ curl -X GET -H "$AUTH" -H "$JSON" -d '{app:160}' ${HOST}/v1/preview/app/form/layout.json > layout.json
app的添加和revision的删除,使用PUT方法来送信。
$ curl -X PUT -H "$AUTH" -H "$JSON" -d '@layout.json' ${HOST}/v1/preview/app/form/layout.json {“revision":"6"}
列表的复制
从原来的应用那获取列表信息。
$ curl -X GET -H "$AUTH" -H "$JSON" -d '{app:160}' ${HOST}/v1/preview/app/views.json > views.json
views.json
{ "revision": "7", "views": { "自己的日报(日历形式)": { "date": "日期", "filterCond": "创建人 in (LOGINUSER())", "id": "9265", "index": "1", "name": "自己的日报(日历形式)", "sort": "创建时间 desc", "title": "多行文本框", "type": "CALENDAR" }, "日报列表": { "fields": ["日期", "创建人", "多行文本框", "多行文本框_0"], "filterCond": "", "id": "2128", "index": "0", "name": "日报列表", "sort": "创建时间 desc", "type": "LIST" } } }
和之前一样,添加app,删除revision。
{ "app":162, "views": { "自己的日报(日历形式)": { "date": "日期", "filterCond": "创建人 in (LOGINUSER())", "id": "9265", "index": "1", "name": "自己的日报(日历形式)", "sort": "创建时间 desc", "title": "多行文本框", "type": "CALENDAR" }, "日报列表": { "fields": ["日期", "创建人", "多行文本框", "多行文本框_0"], "filterCond": "", "id": "2128", "index": "0", "name": "日报列表", "sort": "创建时间 desc", "type": "LIST" } } }
PUT方法送信。
$ curl -X PUT -H "$AUTH" -H "$JSON" -d '@views.json' ${HOST}/v1/preview/app/views.json {"revision":"7","views":{"自己的日报(日历形式)":{"id":"5259991"},"日报列表":{"id":"5259990"}}}
以下是复制列表需要注意的点:
使用过程管理的情形,会生成builtinType=ASSIGNEE的列表,因为无法移行这个列表,因此需要从json里除外。
当复制源里存在创建人作为筛选条件的列表时,复制目标里过程管理无效的话,就无法移行这个列表。
将应用放到运用环境里
最后,使用deploy.json,将应用放到运用环境里。
$ curl -X POST -H "$AUTH" -H "$JSON" -d '{apps:[{app:162}]}' ${HOST}/v1/preview/app/deploy.json
使用GET deploy.json,如果返回status:SUCCESS的话,就部署成功了。
$ curl -X GET -H "$AUTH" -H "$JSON" -d '{apps:[162]}' ${HOST}/v1/preview/app/deploy.json {"apps":[{"app":"162","status":"SUCCESS"}]}
大家觉得怎么样? 使用部署API的话,就可以移行JS和CSS自定义设置和访问权了。这次虽然是在同一个kintone里复制,事实上也可以移行到其他环境的kintone。到目前为止手动设置的应用就可以使用API来实现,可以大大减少运用维护的时间。