MTの管理画面 から Data API v4 でコンテンツデータを更新するときにハマった

Movable Type 7 の管理画面で Data API v4 経由でコンテンツデータを更新するときに、うまくいかずにハマった点を共有します。

この記事は弊社 bit part 合同会社が提供している Movable Type プラグイン「MTAppjQuery」の利用を前提としております。MTAppjQuery って何?という方は弊社の「MTAppjQuery」の製品ページをご覧ください。

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);
    });
  });
});

結構な時間ハマったので、共有しておきます。

以上です。

Published 2018-11-09
Updated 2020-01-26