別アプリへのレコード更新について

初めまして。

アプリAの編集登録時にアプリAのレコード(チェックボックス)をアプリBのレコード(文字列)へ反映させたいと考えております。

https://developer.cybozu.io/hc/ja/community/posts/360055603012-%E5%88%A5%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AE%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E5%8F%96%E5%BE%97-%E6%9B%B4%E6%96%B0

こちらの記事を元に作成したのですがエラー(PUT ****k/v1/record.json 400 (Bad Request))が出てしまいうまく更新できません。

初心者なものでどうかご教示いただけませんでしょうか。

(function() {

'use strict';

//出力用アプリのID(アプリB)

var updateAppID = 74;

kintone.events.on(['app.record.create.submit.success', 'app.record.edit.submit.success', 'app.record.index.edit.submit.success'], function(event) {

//レコードの一括取得(100件まで)v

var paramGet = {

'app': updateAppID,

'query': 'レコード番号 = ' + event.record['レコード番号'].value

};

return kintone.api(kintone.api.url('/k/v1/records', true), 'GET', paramGet).then(function(resp2) {

//出力用アプリの更新

var record = event.record;

var query = {

'denki_senyo': {

value: record['denki'].value

}

};

var paramPut = {

'app': updateAppID,

'id': resp2.records[0].$id.value,

'record': query

};

return kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', paramPut);

}).then(function(resp3) {

//処理成功

alert('更新が完了しました! ' + event.record['denki'].value);

return event;

}).catch(function(error) {

//エラーを表示

alert('更新でエラーが発生しました。' + error.message);

return event;

});

});

})();

何卒宜しくお願いいたします。

はじめまして

やりたいことの確認ですが、

Aアプリのレコード番号1を保存した時、保存したレコード番号1のチェックボックスを

Bアプリのレコード番号1の文字列に反映させる、で合っていますか?(1は例えです)

もし上記の内容で合っていれば、GETの処理は不要になります。

チェックボックスは配列になるため、文字列に変換します。

var txt = record['チェックボックス']['value'].toString();

あとはPUTのrecordに上記の変換した変数を渡してあげれば良いかと思います。

// 保存完了時、Aアプリのチェックボックスを、
// Bアプリの文字列へ挿入する
(function () {
  'use strict';
  var putRecord = function (id, txt) {
    var params = {
      app: 74, // BアプリID
      id: id,
      record: {
        '文字列': { // 更新したいフィールドID
          value: txt
        }
      }
    };
    return kintone.api(kintone.api.url('/k/v1/record'), 'PUT', params).then(function (resp) {
      alert('更新');
    }, function (error) {
      alert('失敗');
    });
  };
  // 発火イベント配列
  var events = ['app.record.create.submit.success', // 新規作成、保存成功時イベント
    'app.record.edit.submit.success' // 編集、保存成功時イベント
  ];
  // 処理
  kintone.events.on(events, function (event) {
    var record = event.record;
    var id = record['レコード番号']['value']; // Aアプリレコード番号
    var txt = record['チェックボックス']['value'].toString();
    return putRecord(id, txt);
  });
})();

mionix様

ご回答いただきましてありがとうございます。

いただきましたコードと下記URLを参考に下記のコードでチェックボックスを別アプリへコピーできました。

https://developer.cybozu.io/hc/ja/community/posts/360001317263-%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E6%9B%B4%E6%96%B0%E6%99%82%E3%81%AB%E5%88%A5%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AE%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%82%82%E6%9B%B4%E6%96%B0%E3%81%97%E3%81%9F%E3%81%84

(function() {
"use strict";
kintone.events.on(['app.record.create.submit.success', 'app.record.edit.submit.success'], function(event) {
var record = event.record;
var input = record['denki']['value'].toString();

return kintone.api('/k/v1/record', 'PUT', {
"app": 74, //案件管理アプリAのアプリID
"id": event.record.レコード番号.value,
"record": {
"denki_senyo": {
"value": input
}
}


}).then(function(){
return event;
});
});
})();

追加で質問になってしまうのですが、

Aアプリ

チェックボックスフィールド(denki)の内容

・専用・割り当て・共益費に含む・オール電化

Bアプリ

文字列フィールド(denki_senyo)

文字列フィールド(denki_wariate)

文字列フィールド(denki_kyoekihi)

文字列フィールド(denki_alldenka)

※それぞれレコード番号1だった場合

上記、条件だった場合、

Aアプリのチェックボックスフィールド(denki)にて

チェックが入っていた場合、Bアプリにて「〇」という文字列に変換をして

登録したいと考えております。

チェックが入っていない場合は「」(空欄)で登録。

上記のような方法の場合はgetは必要でしょうか。

何度も質問してしまい申し訳ございませんが宜しくお願いいたします。

追加の内容についてもGET処理は必要ありません。

基本的にGETを使用するのは他アプリのレコードを取得したい場合や、同アプリ内の他のレコードを取得したい場合に使用します。

今回の様に、取得したいデータが現在操作しているレコードの場合、event.recordで取得できます。

以下、コードを書いてみました。

チェックの数だけループし、中身に応じて○を変数に入れます。

その変数をPUTで更新してあげれば実現できます。

恐らくもっと良い書き方がある気がしますが、ご参考までに…

(function () {
  'use strict';
  var events = ['app.record.create.submit.success', 'app.record.edit.submit.success'];
  kintone.events.on(events, function (event) {
    var record = event.record;
    var senyo = '';
    var wariate = '';
    var kyoekihi = '';
    var alldenka = '';
    for (var i = 0; i < record['denki']['value'].length; i++) {
      switch (record['denki']['value'][i]) {
      case '専用':
        senyo = '○';
        break;
      case '割り当て':
        wariate = '○';
        break;
      case '共益費に含む':
        kyoekihi = '○';
        break;
      case 'オール電化':
        alldenka = '○';
        break;
      }
    }
    return kintone.api('/k/v1/record', 'PUT', {
      app: 74,
      id: event.record.レコード番号.value,
      record: {
        'denki_senyo': {
          value: senyo
        },
        'denki_wariate': {
          value: wariate
        },
        'denki_kyoekihi': {
          value: kyoekihi
        },
        'denki_alldenka': {
          value: alldenka
        }
      }
    }).then(function () {
      return event;
    });
  });
})();

mionix様

お返事が遅くなってしまい大変申し訳ございません。

GET処理についてわかりやすくご説明いただきありがとうございます。

またサンプルコードもいただきありがとございます。

いただきましたコードで試したところ行いたい処理がうまく動かせました!

また不明点があればご教授いただければ幸いです。

今後ともどうぞ宜しくお願いいたします。

mionix様

上記の処理に合わせて、Bアプリにキーとなるidがない場合は新規で登録するという処理を行いたいのですが、

そのような処理は可能でしょうか。

時間が空いてしまいましたが何卒宜しくお願いいたします。