更新记录(PUT)

aki发表于:2016年08月29日 15:23:39更新于:2021年08月09日 11:35:50

Index

更新记录(1条)

  • 有记录编辑权限的用户可更新一条记录。

  • 更新方法有指定记录编号、和指定【值为唯一】的字段代码及其值两种。

HTTP 方法

PUT

URI

https://(子域名).cybozu.cn/k/v1/record.json

来宾空间内的应用

https://(子域名).cybozu.cn/k/guest/(空间的ID)/v1/record.json 

必要的访问权限

  • 应用的记录编辑权限

  • 要更新值的记录的编辑权限

  • 要更新值的字段的编辑权限

请求参数

参数名称要指定的值必须说明
app数值或字符串必须指定应用的ID。
id数值或字符串必须(带条件)

指定记录ID。
※指定了updateKey时不可指定此项

updateKeyObject必须(带条件)

指定值为唯一的字段代码和值

可以指定的字段只有设置了值为唯一的单行文本框和数值。
※指定了id时不可指定此项

recordObject可省略在对象中指定记录的信息(字段代码和字段的值)。 
※字段的值的规格因字段格式的不同而不同。详情请参考字段格式。 
※如省略此项,将不更新数据。
revision数值或字符串可省略修订号。和实际的修订号不一致时报错(不会更新记录)。 
但值为-1时或不指定时,将不检验修订号。

请求正文的构成(指定记录ID)

{
    "app": (应用的ID),
    "id": (要更新的记录的ID),
    "record": {
        "(字段代码)": {
            "value": (字段值)
        },
        // 表格中的字段的第一行
        "(表格的字段代码)": {
            "value": [
                {
                    "id": (行的ID),
                    "value": {
                        "(字段代码)": {
                            "value": (字段值)
                        }
                    }               
                }
            ]
        }
    },
    "revision": (要更新的记录的修订号) // 不需要时可不用写
}

请求正文的构成(指定【值为唯一】的字段代码及其值)

{
    "app": (应用的ID),
    "updateKey": {
        "field": "(值为唯一的字段代码)",
        "value": "(值)"
    },
    "record": {
        "(字段代码)": {
            "value": (字段值)
        },
        // 表格中的字段的第一行
        "(表格的字段代码)": {
            "value": [
                {
                    "id": (行的ID),
                    "value": {
                        "(字段代码)": {
                            "value": (字段值)
                        }
                    }               
                }
            ]
        }
    },
    "revision": (要更新的记录的修订号) // 不需要时可不写
}

请求范例

请求头部

PUT /k/v1/record.json HTTP/1.1
Host: example.cybozu.cn:443
X-Cybozu-Authorization: QWRtaW5pc3RyYXRvcjpjeWJvenU=
Authorization: Basic QWRtaW5pc3RyYXRvcjpjeWJvenU=
Content-Type: application/json
  • 在Content-Type中指定application/json。如不指定无法识别JSON,执行时将报错。

正文(指定记录ID)

对应用ID为【1972】的应用更新如下记录时

字段的格式字段代码
要更新的记录的编号
1
要更新的记录的修订号
4
多行文本框string_multicharacter string is changed

正文(指定【值为唯一】的字段代码及其值)

对应用ID为【1972】的应用更新如下记录时

字段的格式字段代码
要作为Key的字段代码及其值string_codeCODE123
要更新的记录的修订号
4
多行文本框string_multicharacter string is changed

应答

返回更新成功的记录的修订号。

{
    "revision": "5"
}

JavaScript范例

使用API请求发送 kintone REST API 请求

var body = {
    "app": 1,
    "id": 1001,
    "record": {
        "单行文本框": {
            "value": "ABC"
        }
    }
};

kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', body, function(resp) {
        // success
        console.log(resp);
    }, function(error) {
        // error
        console.log(error);
    });


使用 XMLHttpRequest 请求

var url = 'https://{subdomain}.cybozu.cn/k/v1/record.json';
var body = {
    "app": 1,
    "id": 1001,
    "record": {
        "单行文本框": {
            "value": "ABC"
        }
    },
    // CSRF TOKEN: 在kintone上执行API(POST, PUT, DELETE)时需要设置
    "__REQUEST_TOKEN__": kintone.getRequestToken()
};

var xhr = new XMLHttpRequest();
xhr.open('PUT', url);
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onload = function() {
    if (xhr.status === 200) {
        // success
        console.log(JSON.parse(xhr.responseText));
    } else {
        // error
        console.log(JSON.parse(xhr.responseText));
    }
};
xhr.send(JSON.stringify(body));


记录的批量更新

有记录的编辑权限的用户可批量更新多条记录。

  • 一次最多可更新100条记录。

  • 更新方法有指定记录ID和指定【值为唯一】的字段代码及其值两种。

  • 批量更新失败时,请求中包含的记录的处理将全部被取消。

HTTP 方法

PUT

URI

https://(子域名).cybozu.cn/k/v1/records.json

来宾空间内的应用

https://(子域名).cybozu.cn/k/guest/(空间的ID)/v1/records.json 

必要的访问权限

  • 应用的记录编辑权限

  • 要更新值的记录的编辑权限

  • 要更新值的字段的编辑权限

请求参数

※必须指定参数名称为id或updateKey其中一项。但同时指定这两项会报错。

参数名称要指定的值必须说明
app数值或字符串必须指定应用的 ID。
records数组必须指定要更新的记录的信息。
作为参数的值,用数组形式指定对象,对象中须包含记录ID和记录信息的组合。
records.id数值或字符串可省略
※指定了updateKey时不可指定此项
要更新的记录的编号。 在records数组中指定。
records.updateKeyObject可省略
※指定了id时不可指定此项

指定值为唯一的字段代码和值

可以指定的字段只有设置了值为唯一的单行文本框和数值。

records.recordObject可省略

在对象中指定记录的信息(字段代码和字段的值)。 
※字段的值的规格因字段格式的不同而不同。详情请参考字段格式。 
※如省略此项,将不更新数据。

records.revision数值或字符串可省略修订号。和实际的修订号不一致时报错(不会更新记录)。 

但值为-1时或不指定时,将不检验修订号。

请求正文的构成(※更新n条记录时)

{
    "app": (应用的ID),
    "records": [
        {   // 第1条记录
            "id": (要更新的记录的ID),
            "revision": (要更新的记录的修订号),// 不需要时可不写
            "record": {
                "(字段代码)": {
                    "value": (字段值)
                },
                "(字段代码)": {
                    "value": (字段值)
                }
            }
        },
        {   // 第2条数据
            "id": (要更新的记录的ID),
            "revision": (要更新的记录的修订号),// 不需要时可不写
            "record": {
                "(字段代码)": {
                    "value": (字段值)
                },
                "(字段代码)": {
                    "value": (字段值)
                }
            }
        },
       {   // 第n条数据
            "id": (要更新的记录的ID),
            "revision": (要更新的记录的修订号),// 不需要时可以不写
            "record": {
                "(字段代码)": {
                    "value": (字段值)
                },
                "(字段代码)": {
                    "value": (数组值)
                }
            }
        }
    ]
}

请求的范例

正文

对应用ID为【1972】的应用,更新如下两条记录时

第1条
字段的格式字段代码
要更新的记录的编号
1
要更新的Key字段string_codeCODE123
要更新的记录的修订号
4
单行文本框string_1abcdef
第2条
字段的格式字段代码
要更新的记录的编号
2
要更新的Key字段string_codeCODE456
要更新的记录的修订号
1
多行文本框string_multiopqrstu
以记录ID为Key时的请求范例
// 以记录ID为Key时的请求范例
{
    "app": 1972,
    "records": [
        {
            "id": 1,
            "revision": 4,
            "record": {
                "string_1": {
                    "value": "abcdef"
                }
            }
        },
        {
            "id": 2,
            "revision": 1,
            "record": {
                "string_multi": {
                    "value": "opqrstu"
                }
            }
        }
    ]
}
以值为唯一的记录为Key时的请求范例
// 以值为唯一的记录为Key时的请求范例
{
    "app": 1972,
    "records": [
        {
            "updateKey": {
                "field": "string_code",
                "value": "CODE123"
            },
            "revision": 4,
            "record": {
                "string_1": {
                    "value": "abcdef"
                }
            }
        },
        {
            "updateKey": {
                "field": "string_code",
                "value": "CODE456"
            },
            "revision": 1,
            "record": {
                "string_multi": {
                    "value": "opqrstu"
                }
            }
        }
    ]
}

应答

返回更新成功的各记录的id和修订号。

{
    "records": [
        {   // 第1条数据
            "id": "1",
            "revision": "5"
        },
        {   // 第2条数据
            "id": "2",
            "revision": "2"
        }
    ]
}

JavaScript范例

使用API请求发送 kintone REST API 请求

var body = {
    "app": kintone.app.getId(),
    "records": [
        {
            "id": 1001,
            "record": {
                "单行文本框": {
                    "value": "ABC"
                }
            }
        },
        {
            "id": 1002,
            "record": {
                "单行文本框": {
                    "value": "ABC"
                }
            }
        }
    ]
};

kintone.api(kintone.api.url('/k/v1/records', true), 'PUT', body, function(resp) {
        // success
        console.log(resp);
    }, function(error) {
        // error
        console.log(error);
    });


使用 XMLHttpRequest 请求

var url = 'https://{subdomain}.cybozu.cn/k/v1/records.json';
var body = {
    "app": 1,
    "records": [
        {
            "id": 1001,
            "record": {
                "单行文本框": {
                    "value": "ABC"
                }
            }
        },
        {
            "id": 1002,
            "record": {
                "单行文本框": {
                    "value": "ABC"
                }
            }
        }
    ],
    // CSRF TOKEN: 在kintone上执行API(POST, PUT, DELETE)时需要设置
    "__REQUEST_TOKEN__": kintone.getRequestToken()
};

var xhr = new XMLHttpRequest();
xhr.open('PUT', url);
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onload = function() {
    if (xhr.status === 200) {
        // success
        console.log(JSON.parse(xhr.responseText));
    } else {
        // error
        console.log(JSON.parse(xhr.responseText));
    }
};
xhr.send(JSON.stringify(body));

注意事项

附件字段的更新和删除

  • 已添加多个附件的情况下,要再添加新的附件时,需要在请求中指定已添加的fileKey。无法更新已添加的附件。

  • 删除文件时,如不将该文件的fileKey传给请求,将删除该文件。

表格的数据更新

未包含在请求的JSON数据中的记录不被更新。但,在表单中设置的【表格】内的数据有以下注意事项。

表格数据的有无数据的保留
更新时不包含表格的数据
  • 保留表格的数据。

更新时包含表格的数据
  • 请求的JSON数据中未包含的表格内的字段值将被删除。

  • 如要保留字段的值,请在请求的JSON数据中指定表格内的字段的值。

  • 使用获取记录的API获取表格的行的【id】,指定该【id】可更新特定的记录和字段。

限制事项

  • 无法更新以下字段的值。

    • 值是通过Lookup复制来输入的字段

    • 状态

    • 类别

    • 计算

    • 执行者

    • 创建人

    • 创建日期

    • 更新人

    • 更新日期

    • 设置为自动计算的单行文本框字段

其他请参考共通规格的限制事项




回复(14)

  • 追梦人

    已经解决了,日期格式应该是: 

     var workTime = moment(getUTCDateByServer()).format("YYYY-MM-DDTHH:mm:ssZ")。

    引用 追梦人 的回复:

    您好,我现在有这样的问题。我使用  kintone.api() 去更新 我应用中的 一个  日期 类型的字段,要更新 的日期类型的字段的 值 是 获取  kintone 的系统时间, 然后我更新的时候报: messages: ["date time must be ISO8601 format."]。   这个日期格式 应该是什么样的? 谢谢代码如下:123456789101112131415161718192021222324/** * 获取kintone 的系统日期和时间  * **/ function getUTCDateByServer() {  var r; return(r = new XMLHttpRequest) ?         (r.open('HEAD', '#', false), r.send(null), new Date(r.getResponseHeader('Date'))) : null;    };      var workTime = moment(getUTCDateByServer()).format("YYYY-MM-DD HH:mm"); var body = {  "app": event.appId,   "id": event.recordId,  "record": {     "日期时间": {          "value": workTime      }        }   };  kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', body,   function(resp) {    // success}, function(error) {    // error    }    );

  • 追梦人

    您好,我现在有这样的问题。

    我使用  kintone.api() 去更新 我应用中的 一个  日期 类型的字段,要更新 的日期类型的字段的 值 是 获取  kintone 的系统时间, 然后我更新的时候报: 

    messages: ["date time must be ISO8601 format."]。  

     这个日期格式 应该是什么样的? 谢谢

    代码如下:

    /**	* 获取kintone 的系统日期和时间	* **/	
    function getUTCDateByServer() {
      var r;	
    return(r = new XMLHttpRequest) ?	     
    (r.open('HEAD', '#', false), r.send(null), new Date(r.getResponseHeader('Date'))) : null;
        };
        
     var workTime = moment(getUTCDateByServer()).format("YYYY-MM-DD HH:mm");
     var body = {
      "app": event.appId,
       "id": event.recordId,
      "record": {
         "日期时间": {	
          "value": workTime
          }	
         }
       };
      kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', body,
       function(resp) {
        // success
    }, function(error) {
    	// error
    	}
    	);


  • betsy_yan

    打印时无法更新记录的值哦

    引用 closer 的回复:

    您好,现在有一个这样的问题,我需要在出现打印按钮之后:也就是“...” 这个图标,点击出来打印按钮;点击后去更新记录的值,我应该怎么做。

  • closer

    您好,现在有一个这样的问题,我需要在出现打印按钮之后:也就是“...” 这个图标,点击出来打印按钮;点击后去更新记录的值,我应该怎么做。

    引用 cybozu 的回复:

    打印显示事件是无法执行重写字段的值的。 在事件发生时可执行的操作: 切换字段的显示/隐藏具体请参照https://cybozudev.kf5.com/hc/kb/article/206888/

  • cybozu

    打印显示事件是无法执行重写字段的值的。 在事件发生时可执行的操作: 切换字段的显示/隐藏

    具体请参照

    https://cybozudev.kf5.com/hc/kb/article/206888/

    引用 closer 的回复:

    请问我点击打印按钮,能否回调去实现更新记录中字段的值

  • closer

    请问我点击打印按钮,能否回调去实现更新记录中字段的值


  • 追梦人

    是记录显示事件时候刷新,现在已经解决了。谢谢您。

    引用 betsy_yan 的回复:

    不知道你这个满足条件是什么时候发生?记录显示事件时自动刷新没有问题,但是记录编辑事件时你要刷新,那修改的字段值会恢复到原来的值。刷新的话网上可以搜索到各种各样的js刷新方法,你可以选择适合的使用。

  • betsy_yan

    不知道你这个满足条件是什么时候发生?

    记录显示事件时自动刷新没有问题,但是记录编辑事件时你要刷新,那修改的字段值会恢复到原来的值。

    刷新的话网上可以搜索到各种各样的js刷新方法,你可以选择适合的使用。

    引用 追梦人 的回复:

    您好,我想问一下,在详细页面,是否可以当满足某种条件的时候,页面自动刷新一下,如果可以,应该如何做?谢谢。

  • 追梦人

    您好,我想问一下,在详细页面,是否可以当满足某种条件的时候,页面自动刷新一下,如果可以,应该如何做?谢谢。

  • 追梦人

    好的,这个问题已经解决了,谢谢您。

    引用 cybozu 的回复:

    根据提示是:必填项目 没填 ,你可以看一下

  • cybozu

    根据提示是:必填项目 没填 ,你可以看一下

    引用 追梦人 的回复:

    更新失败,原因:{"code":"CB_VA01","id":"zBj114yzwUQ3E9XifkP6","message":"输入有误。","errors":{"records":{"messages":["必填项目。"]}}}想请教一下,我现在在做一个批量更新的小例子,总是出现这个错误,出现这个问题的原因是什么?我应该如何来解决这个问题。谢谢。

  • 追梦人

    更新失败,原因:{"code":"CB_VA01","id":"zBj114yzwUQ3E9XifkP6","message":"输入有误。","errors":{"records":{"messages":["必填项目。"]}}}



    想请教一下,我现在在做一个批量更新的小例子,总是出现这个错误,出现这个问题的原因是什么?我应该如何来解决这个问题。谢谢。

  • cybozu

    我按照你的json执行成功了

    你这个app的设置是这样的吗?

    app包含

    字段代码为 No的字段,值为唯一

    字段代码为 type的字段

    我按照这样的配置 执行你的json 是ok的

    引用 closer 的回复:

    {    "app": 369,    "updateKey": {        "field": "No",        "value": "026"    },    "record": {        "type": {                    "value": "abcdef"                }           }  }请问这个json串错误在哪,更新不了

  • closer

    {

        "app": 369,

        "updateKey": {

            "field": "No",

            "value": "026"

        },

        "record": {

            "type": {

                        "value": "abcdef"

                    }

           

        }

      }

    请问这个json串错误在哪,更新不了