複数アプリでのレコード一括更新をしたい

契約解除日の翌日以降になったら、雇用形態を「契約終了」になるように考えています。
現在の想定では、Aアプリのレコード一覧画面を開いたタイミングで処理が走り、契約解約日を基準にして処理をします。

その処理自体はできるようになったのですが、雇用形態を変更したら、他のアプリにも登録している雇用形態フィールドも更新したいと考えています。

Aアプリで雇用形態フィールド「契約終了」に変更
⇒Bアプリの雇用形態フィールドを「契約終了」に変更
⇒Cアプリの雇用形態フィールドを「契約終了」に変更

複数アプリでのレコード一括処理という記事を参考にしてみたのですが、まったく見当違いのことをしているのか、最後のPOSTをするタイミングでエラー400が発生しています。

bodyPutの中身が間違っているのかと思うのですが、調べてもよくわからない状況が続いてしまっております。

どのように修正すればよいのかについて、ご教示いただけますと幸いです。

 

 

■コード

(function() {
  'use strict';
  
  moment.locale('ja');
  
  kintone.events.on('app.record.index.show', function(event) {
    
    let records = event.records;
    let today = moment().format('YYYY-MM-DD');
  let appID1 = 165;  // AアプリのIDを指定する
  let appID2 = 160;  // BアプリのIDを指定する
  let appID3 = 187;  // CアプリのIDを指定する
    let flg=0;
    var body = [];
    var bodyBase = [];

    
    // 全データに対して繰り返し処理をする
    for(var i = 0; i <= records.length-1; i++){
      var dateOfExpiry = records[i].契約解除日.value;
      var staffid = records[i].スタッフID.value;
      var status = records[i].雇用形態.value;
  
      // 雇用形態が「契約終了」ではなく、契約解除日の翌日以降に達した場合
      if (dateOfExpiry < today && status !== '契約終了') {
        if(flg!==1) {
          flg=1;
        }
        status = '契約終了';
        
        // 【PUT用】リクエストボディ
        var params1 = {
          id:staffid,
          record: {
            雇用形態: {
              value: status
            }
          }
        };
        var params2 = {
          updateKey: {
            field:"スタッフID",
            value:staffid
          },
          record: {
            雇用形態: {
              value: status
            }
          }
        };
        
        // リクエストボディを配列に追加する
        bodyBase.push(params1);
        body.push(params2);
      }
    }

    // 一件でもflgが1になった場合
    if(flg===1){
      const bodyPut = {
        'requests': [
          {
            'method': 'PUT',
            'api': '/k/v1/records.json',
            'payload': {
              'app': appID1,
              'record':[bodyBase[0]]
            }
          },
          {
            'method': 'PUT',
            'api': '/k/v1/records.json',
            'payload': {
              'app': appID2,
              'record':[body[0]]
            }
          },
          {
            'method': 'PUT',
            'api': '/k/v1/records.json',
            'payload': {
              'app': appID3,
              'record': [body[0]]
            }
          }
        ]
      };
      kintone.api(kintone.api.url('/k/v1/bulkRequest.json', true), 'POST', bodyPut, (resp) => {
        // success
        console.log(resp);
      }, (error) => {
        // error
        console.log(error);
      });
    }
    
    return event;
  });
})();

エラーになっている原因は、bulkRequestのapiが/k/v1/records(複数レコードの一括更新)であるのに対し、payloadのkeyがrecord(一つのレコードの更新)となっているためではないかと思います(複数レコードの更新の場合は「records」です)。

1件の更新であれば

            {
              'method': 'PUT',
            'api': '/k/v1/record.json',
              'payload': {
                'app': appID1,
'id': bodyBase[0].id
              'record':bodyBase[0].record
              }
            },
            {
              'method': 'PUT',
            'api': '/k/v1/record.json',
              'payload': {
                'app': appID2,
'updateKey': {
field: body[0].updateKey.field,
value: body[0].updateKey.value
},
              'record':body[0].record
              }
          },

こんな形で、複数の更新であれば

            {
              'method': 'PUT',
              'api': '/k/v1/records.json',
              'payload': {
                'app': appID1,
              'records': bodyBase
              }
            },
            {
              'method': 'PUT',
              'api': '/k/v1/records.json',
              'payload': {
                'app': appID2,
              'records': body
              }
            },

こんな形になります。

 

別件ですが、掲載されている画像にサブドメインが映っているので修正か削除をおすすめします。

385013133091 さま
親切丁寧にコメントをいただきありがとうございました!
ご教示いただいた内容を基に修正したところ、無事に動作いたしました。

複数の場合には、
‘api’: '/k/v1/records.json’のところのrecordをrecodesにするだけではなく
payloadの部分のrecordをrecordsにする必要があったのですね。

※また別件で教えていただいた内容についてもありがとうございました。
画像は削除いたしました。

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。