Movable Type 7 の管理画面で Data API v4 経由でコンテンツデータを更新するときに、うまくいかずにハマった点を共有します。
MT 7 の管理画面で下記のように実行して、 取扱店舗
というコンテンツデータフィールドの関連付けを削除したり変更したりしたかったのですが、どうにもコンテンツデータが更新できませんでした。
mtappVars.DataAPI.getToken(function () {
mtappVars.DataAPI.getContentData(31, 3, 3, function (cd) {
for (let i = 0; i < cd.data.length; i++) {
if (cd.data[i].label === "取扱店舗") {
cd.data[i].data = [];
}
}
mtappVars.DataAPI.updateContentData(31, 3, 3, cd, function (newCd) {
console.warn(newCd);
});
});
});
ここで、POST されたデータを見てみると、、、
content_data: {"author":{"displayName":"tinybeans","id":"1","userpicUrl":null},"basename":"06bed0e01cb73fa5040e2e726f03de7335617791","blog":{"id":"31"},"createdDate":"2018-10-26T11:14:03 09:00","data":"[{\"data\":[],\"id\":\"41\"}]","date":"2018-10-19T06:51:14 09:00","id":3,"label":"桜並木を自宅で楽しめる歴史ある建築物件","modifiedDate":"2018-11-09T02:04:40 09:00","status":"Publish","unpublishedDate":null,"updatable":true}
更新したい部分だけ、 "data":"[{\"data\":[],\"id\":\"41\"}]"
のように値のオブジェクトが文字列になっていました。 そこで、下記のようにすべて文字列にしてから送信したら成功しました。
mtappVars.DataAPI.getToken(function () {
mtappVars.DataAPI.getContentData(31, 3, 3, function (cd) {
for (let i = 0; i < cd.data.length; i++) {
if (cd.data[i].label === "取扱店舗") {
cd.data[i].data = [];
}
}
const param = Object.toJSON(cd); // ←ここがポイント
mtappVars.DataAPI.updateContentData(31, 3, 3, param, function (newCd) {
console.warn(newCd);
});
});
});
結構な時間ハマったので、共有しておきます。
以上です。