MTのDataAPI を使ってコンテンツデータを作成する際Asset関係のフィールドがある場合は空でも値を渡す #movabletype

先日の続きで、ダッシュボードでタイトルを入力したら DataAPI 経由でコンテンツデータを作成するような実装をしていた。

当初問題なく作成できていたのだが、途中から以下のようなエラーが返ってくるようになった。

{code: 409, message: "Can't use an undefined value as an ARRAY reference…../../lib/MT/ContentFieldType/Asset.pm line 482.↵"}
code: 409
message: "Can't use an undefined value as an ARRAY reference at ../../lib/MT/ContentFieldType/Asset.pm line 482.↵"
__proto__: Object

エラーメッセージに Asset が入ってるのでいくつか試したところ、コンテンツタイプにアセットのフィールドや画像アセットのフィールドを追加してあるとエラーが出るっぽいところはわかった。

@BUN が調べてくれて、にっくさんのエントリを参考に空でアセット周りのデータを送ればいいのでは?とアドバイスをもらったので試してみたらその通りだった!!

Movable Type 7 のコンテンツタイプ+Data API Ver4 で、レシピサイトのウェブアプリを開発してみる - Qiita
https://qiita.com/TakeshiNickO...

コードとしては送信するデータに空のデータを追加した。

const content_data = {
  'data': [
    {'data': $titleField.val(), 'id': '161', 'label': 'タイトル'},
  ],
  'label': $titleField.val(),  
  'status': 'Draft'
};
↓↓↓↓
const content_data = {
  'data': [
    {'data': $titleField.val(), 'id': '161', 'label': 'タイトル'},
    {'data': [],'id': '185','label': 'PDF'} <= ここを追加
  ],
  'label': $titleField.val(),  
  'status': 'Draft'
};

コンテンツデータを作成する部分は @tinybeans に添削してもらって

mtappVars.DataAPI.createContentData(8, 20, content_data, function (newCd) {
↓↓↓↓↓
mtappVars.DataAPI.createContentData(8, 20, Object.toJSON(content_data), function (newCd) {

と直してもらったりとほんと感謝感謝。。。m(_ _)m


Create content data のAPIリファレンスをみると

Movable Type Data API v4
https://www.movabletype.jp/dev...

Known issues (these will be solved in future release)
If content type contains non required Content Type field, request will failed when post data does not contains its data.
If content type contains non required Date and Time field, request will failed when post data does not contains its data.
Date and Time field must be specified by YYYYMMDDHHmmSS format.

とかかれているので、 Date、 Time のフィールドも似たようなことがあるのかもしれない(未検証