別アプリのサブテーブルに追記する

表題の件でご教示頂ければ幸いです。

Aアプリが蓄積でBアプリが入力となっており、Bアプリの「顧客コード」と紐づくAアプリのサブテーブルに追記したいと考えております。

サブテーブルの追記は行IDを指定する必要があるとのことですが、その部分の記述がいまいち理解できていません。

私が行ったこと

① GETで取得したテーブルのIDを配列に格納し

② ①の配列に追加したいデータをpush

③ 配列をPUTに使用

実行後、400 bad requestエラーです。

下記putのコードになります。

var putRecord = [];
      var table = resp.records[0]['訪問履歴']['value'];
      for (var i = 0; i < table.length; i++) {
        var No = table[i]['id'];
        putRecord.push([{
          'id': No
        }, ]);
      }
      putRecord.push([{
        'value': {
          '訪問種別': {
            'value': reuse
          },
          '訪問日時': {
            'value': time
          },
          '担当者': {
            'value': user
          },
          '面談者': {
            'value': in_user
          }
        }
      }]);
      console.log(No);
      console.log(putRecord);
      var putParams = {
        app: 146,
        updateKey: {
          field: '顧客コード',
          value: id
        },
        record: {
          '訪問履歴': {
            value: putRecord
          }
        }
      };
      console.log(putParams);
      return kintone.api(kintone.api.url('/k/v1/record'), 'PUT', putParams).then(function (resp) {
        console.log('succes');
      }).catch(function (resp) {
        alert('PUT ERROR');
      });

putRecordの中身

何卒よろしくお願いいたします。

mionix 様

 

おそらく putRecord の作成される形がリクエストエラーの原因になっているのではないかと思います。

現在の動きですと、putRecord へ まずIDを作成して、そのあとにvalueを代入するという内容になっております。

putRecord の中身は下記のようになってるかと思われます。

[[{ 'id': No },], [{ 'id': No },], [{ 'value': { '訪問種別': { 'value': reuse }, '訪問日時': { 'value': time }, '担当者': { 'value': user }, '面談者': { 'value': in_user }}}]]

 

リクエストエラーにならない形として、putRecord の中を下記のようにしないといけないと思われます。

[{ 'id': No, 'value': { '訪問種別': { 'value': reuse }, '訪問日時': { 'value': time }, '担当者': { 'value': user }, '面談者': { 'value': in_user }}}]

 

見やすく分解をしますと下記のような形になるかと思います。

let putRecod = [
  {
    id: No,
    value: {
      訪問種別: {
        value: reuse,
      },
      訪問日時: {
        value: time,
      },
      担当者: {
        value: user,
      },
      面談者: {
        value: in_user,
      },
    },
  },
];

 

レコードの更新(PUT) – cybozu developer network

リクエストボディの構造に記述があります。

{
  "app": (アプリのID),
  "updateKey": {
      "field": "(重複禁止のフィールドコード)",
      "value": "(値)"
  },
  "record": {
      "(フィールドコード)": {
          "value": (フィールド値)
      },
      // テーブルの中に配置されているフィールドの1行目の場合
      "(テーブルのフィールドコード)": {
          "value": [
              {
                  "id": (行のID),
                  "value": {
                      "(フィールドコード)": {
                          "value": (フィールド値)
                      }
                  }              
              }
          ]
      }
  },
  "revision": (更新するレコードのリビジョン) // 不要の場合は記載しない
}

を参考に作り直して頂ければ良いかと思います。

新屋 育男 様

ご教示頂きありがとうございます。

頂いた内容で修正してみたのですが、PUTエラーが出てしまっています。

サブテーブルの更新をする際は、元のデータのidのみ指定することで更新されなくなり、

idを指定しない更新は全て新規追加されると認識しております。

この認識は正しいのでしょうか。

記述方法ですが、例えば2行既存行がある場合、以下の形で良いのでしょうか。

putRecord = [{
  id: '1行目'
}, {
  id: '2行目'
}, {
  // 追加行
  value: {
    '訪問種別': {
      value: reuse
    },
    '訪問日時': {
      value: date_time
    },
    '担当者': {
      value: user
    },
    '面談者': {
      value: in_user
    }
  }
}];

この形を作るため、下記の様に修正しました。

var putRecord = [];
      var table = resp.records[0]['訪問履歴']['value'];
      for (var i = 0; i < table.length; i++) {
        var No = table[i]['id'];
        putRecord.push({
          'id': No
        }, );
      }
      putRecord.push({
        'value': {
          '訪問種別': {
            'value': reuse
          },
          '訪問日時': {
            'value': date_time
          },
          '担当者': {
            'value': user
          },
          '面談者': {
            'value': in_user
          }
        }
      });

取得したidに追加行を付け加えるにはどのようにしたら良いのでしょうか。

お手数ですがよろしくお願いいたします。

mionix 様

 

新たにテーブルを追加するという内容だったんですね。

勉強になりました。

下記内容で検証を致しました。

var putRecord = [];
var table = resp.records[0]['訪問履歴']['value'];
for (var i = 0; i < table.length; i++) {
var No = table[i]['id'];
putRecord.push({
'id': No
});
}
putRecord.push({
'value': {
'訪問種別': {
'value': reuse
},
'訪問日時': {
'value': date_time
},
'担当者': {
'value': user
},
'面談者': {
'value': in_user
}
}
});

 

miomix 様とほぼ同じ内容です。

検証しましたが、こちらで私は新たにテーブルが追加されました。

ですので、考えられる要因として date_time 等の変数の値が違うのではないか等を考えています。

 

例えば、代入される前の値が下記のような記述になっていないかなどでしょうか?

‘2021-10-22T15:00:00+09:00’

 

一度、変数の中身を確認してみることをお勧め致します。