ルックアップ元が変更された場合にルックアップ先のテーブルを自動更新

下記のソースを作成しました。

(function (){
‘use strict’;

kintone.events.on([‘app.record.edit.submit.success’,‘app.record.index.edit.submit.success’], function(event) {
//alert(“採用者ルックアップ先更新”)
var record = event.record;
var Id = record.採用者名.value;
var tagetappID = 154; //受注データ
var params = {
‘app’: tagetappID,
‘query’: ‘採用者名 in "’ + Id + ‘"’
}

//上記の情報をもとにサブアプリに対いてGETリクエストを送信
kintone.api(‘/k/v1/records’, ‘GET’, params).then(function(resp) {

var subRecords = resp.records
var body = {
‘app’: tagetappID,
‘records’: [
]
};
for (var i = 0; i < subRecords.length; i++){
var putRecord = {
‘id’: subRecords[i].レコード番号.value,
‘record’: {
‘採用者名’: {
‘value’: record.採用者名.value
},
‘役職’: {
‘value’: record.役職.value
},
‘採用者住所1’: {
‘value’: record.住所1.value
},
‘採用者住所2’: {
‘value’: record.住所2.value
},
‘TEL’: {
‘value’: record.TEL.value
},
‘郵便番号’: {
‘value’: record.郵便番号.value
}
}
}

body.records.push(putRecord);
}
console.log(body);
return kintone.api(‘/k/v1/records’, ‘PUT’, body)
}).then(function(resp) { //callback
console.log(resp);
return event;
}).catch(function(err) {
console.log(err);
return event;
});

});

})();

 

ルックアップ元のテキストフィールドを更新した場合にルックアップ先のテーブルを自動更新したいのですが、クエリ指定がうまくいかず、処理がうまくいきません。

分かる方がいらっしゃいましたらご指導のほどよろしくお願いします。

コンソール上にはどういったエラーが出力されていますか?

'query': '採用者名 in "' + Id + '"'

を、

'query': '採用者名 in ("' + Id + '")'

にすると、エラーは変わりますか?

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

query を ‘query’: ‘採用者名 in ("’ + Id + ‘")’ のようにした結果エラーが出なくなりました。

また、リクエストボディの構造もテーブルだと少し違ったので修正し、無事動くようになりました。

ありがとうございます。

 

ちなみに、なぜ括弧を付けたら動作する理由がよくわかっていないのですが教えていただけますと幸いです。

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

 

下記に修正後のソースを載せておきます。

(function (){
‘use strict’;

kintone.events.on([‘app.record.edit.submit.success’,‘app.record.index.edit.submit.success’], function(event) {
//alert(“採用者ルックアップ先更新”)
var record = event.record;
var Id = record.採用者名.value;
var tagetappID = 154; //受注データ
var params = {
‘app’: tagetappID,
‘query’: ‘採用者名 in ("’ + Id + ‘")’
}

//上記の情報をもとにサブアプリに対いてGETリクエストを送信
kintone.api(‘/k/v1/records’, ‘GET’, params).then(function(resp) {

var subRecords = resp.records
var body = {
‘app’: tagetappID,
‘records’: [
]
};
for (var i = 0; i < subRecords.length; i++){
var putRecord = {
‘id’: subRecords[i].レコード番号.value,
‘record’: {
‘採用者テーブル’: {
‘value’: [
{
‘value’: {
‘採用者名’: {
‘value’: record.採用者名.value
},
‘役職’: {
‘value’: record.役職.value
},
‘採用者住所1’: {
‘value’: record.住所1.value
},
‘採用者住所2’: {
‘value’: record.住所2.value
},
‘TEL’: {
‘value’: record.TEL.value
},
‘郵便番号’: {
‘value’: record.郵便番号.value
}
}
}
]
}
}
}
body.records.push(putRecord);
}
console.log(body);
return kintone.api(‘/k/v1/records’, ‘PUT’, body)
}).then(function(resp) { //callback
console.log(resp);
return event;
}).catch(function(err) {
console.log(err);
return event;
});

});

})();

無事動いたようでよかったです。

inに括弧をつける理由ですが、単純にkintoneのinの構文が括弧必須の形式となっており、無いと構文エラーです。

https://developer.cybozu.io/hc/ja/articles/202331474-%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E5%8F%96%E5%BE%97-GET-#q1

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

必須事項だったのですね。盲点でした。

 

教えていただきありがとうございます。