別アプリの値更新処理について(対象:キーの一致する複数レコード)

いつもお世話になっております。

『第11回 kintone REST APIを利用したレコード更新』を参考にコードを作成しましたが、やりたいことが実現できず、またエラーが出ないため修正点もわからず、壁にぶち当たっております。

どなたかご教授頂けると幸いです。

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

 

■やりたいこと

①アプリAの【_4月確認】(チェックボックス)の値を『済』にする。

②アプリBの更新対象レコード(アプリAで編集したレコードの「表示コード」と同じ表示コードが存在する複数レコードを取得する。

③②で取得した更新対象レコードの【_4月確認】(チェックボックス)の値を『済』にする。

※if(event.record[‘_4月確認’].value === ‘済’){の行を抜いてデバッグするとエラーは発生しませんが、②の対象レコードに変化はありません。

クエリの指定に問題があるのでしょうか?

(function() {
"use strict";

// アプリBのアプリID
var updateAppId = 11;

function createPutRecords(records) {
var putRecords = [];
for (var i = 0, l = records.length; i < l; i++) {
var record = records[i];
putRecords[i] = {
record: {
"_4月確認": {
value: "済"
}
}
};
}
return putRecords;
}


/*アプリAの_4月確認の値が『済』の場合のみ、
 アプリBの更新処理(「_4月確認」の値を『済』にする)を実行する*/
if(event.record['_4月確認'].value === '済'){
// 保存成功後イベント
kintone.events.on(['app.record.edit.submit.success', 'app.record.index.edit.submit.success'], function(event) {
var hyouji = event.record["表示コード"].value;

// レコードの一括取得(100件まで)
var paramGet = {
"app": updateAppId,
"query" : '表示コード = " + hyouji "'
};
return kintone.api(kintone.api.url('/k/v1/records', true), 'GET', paramGet).then(function(resp) {

// アプリB対象レコードの更新
var records = resp.records;
var token = "9IoKNgv3H6IeUx7BPVb8UoVEjwP5jCRTmA8nKVJh";
var header = {
"X-Cybozu-API-Token": token,
"Content-Type": "application/json"
};
var paramPut = {
'app': updateAppId,
'records': createPutRecords(records)
};
return kintone.api(kintone.api.url('/k/v1/records', true), 'PUT', paramPut);

}).then(function(resp2) {

// 処理成功
alert('_4月確認の一括更新が完了しました。');
return event;

}).catch(function(error) {

// エラー表示をする
alert('_4月確認の一括更新でエラーが発生しました。' + error.message);
console.log(error)
return event;

});

});
}
})();

 

パット見て、

createPutRecords関数の中、チェックボックスの値を設定するところ

“_4月確認”: {
value: “済”
}

ここのvalueを配列にすることは必要だそうです。

"済"を配列にしてみてください。

※参考

https://developer.cybozu.io/hc/ja/articles/202166330

チェックボックス

  • 登録・更新時のリクエストデータ

    “<フィールドコード>”: {
    “value”: [
    “選択肢1”,
    “選択肢2”
    ]
    }

chengweister様

回答ありがとうございます。

コードを修正したところ、やはり値が更新されませんでした。

ご指摘いただいた配列の件もそうですが、その他に記述が間違っている箇所があるようです。

試しに、「paramGet」「resp2」のそれぞれをconsole.logで確認してみたところこのような結果が出ました。

{app: 11, query: "定期清掃表示コード = " + hyouji ""}app: 11query: "定期清掃表示コード = " + hyouji "" __proto__ : Objectconstructor: ƒ Object()hasOwnProperty: ƒ hasOwnProperty()isPrototypeOf: ƒ isPrototypeOf()propertyIsEnumerable: ƒ propertyIsEnumerable()toLocaleString: ƒ toLocaleString()toString: ƒ toString()valueOf: ƒ valueOf() __defineGetter__ : ƒ __defineGetter__ () __defineSetter__ : ƒ __defineSetter__ () __lookupGetter__ : ƒ __lookupGetter__ () __lookupSetter__ : ƒ __lookupSetter__ ()get __proto__ : ƒ __proto__ ()set __proto__ : ƒ __proto__ ()
{records: Array(0)}records: Array(0)length: 0 __proto__ : Array(0) __proto__ : Object

これはそもそも「クエリの指定に問題があるためgetできていない」、ということでしょうか?

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

 

アプリBのレコードはうまくGetしたかどうかはよくわからないですが、

「paramGet」のログは{app: 11, query: "定期清掃表示コード = " + hyouji “”}で、

本来ならhyoujiのところは特定のコードだと思いますが、文字列"hyouji "のままですね。

 

“query” : ‘表示コード = " + hyouji "’ はちょっと怪しいと思って、

“query” : "表示コード = " + hyouji にしてみてください。

hyoujiは文字列ではなく変数です。

chengweister様

素早いご返答ありがとうございます!!

クエリをご指摘通どおり修正したところ、無事GETしアプリBへPUTすることができました。

ありがとうございました!!

 

やっぱりクエリの指定方法について、私自身いまいち理解できていないところが課題です。

何か指定の仕方や法則等を勉強できるサイトがあれば教えていただけないでしょうか?