レコード番号以外のフィールドをキーにしてレコードの(一括)更新

レコードの一括更新に関して

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

こちらを参考に、一括更新の実装はできました。この場合、レコード番号をキーとして実現できておりますが、レコード番号以外のフィールドをキーとして一括更新したいのですがうまくいきません。

こちらに関してサンプルなど参考情報あれば教えていただけませんでしょうか

 

下記2点など参考にし、レコード番号以外でも一括更新のキーに使える、との認識ですがうまくいきません。サンプルなどご教授いただければ幸いです。

https://kintone.cybozu.co.jp/update/main/2016-05.html

https://faq.cybozu.info/alphascope/cybozu/web/kintone/Detail.aspx?id=2203&isCrawler=1

 

以上、よろしくお願いします。

こんにちは。

レコード番号以外をキーにする場合は、以下に記載がある通り、idの代わりにupdateKeyを指定する必要があります。

(注意点として、updateKeyに指定するフィールドは重複禁止の設定を行っておく必要があります)

https://developer.cybozu.io/hc/ja/articles/201941784#step2

 

それ以外はID指定と同じはずなので、まずはJSONを作るところを確認されてはいかがでしょうか?

もし途中でもソースがあれば、貼って頂くと確認はできるかもしれません。

ありがとうございます。

レコード番号をキーとする場合は、

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

の * ルックアップ更新のサンプルプログラム

のコードそのまま

( var updateAppId = 15; は直しました)で適用できました。

 

今回のupdatekeyを使用する場合、23行目の

id: record.$id.value,

updatekey: record.$updatekey.value,

に変えるだけではだめでしょうか(うまくいきませんでした)

ソースとしては以上になりますが、こちらの情報にてご確認可能でしょうか。

 

恐れ入ります。よろしくお願いします。

 

 

ほぼサンプル通りで、★の部分が修正したところです。現状まだうごいておりません。ご確認のほどよろしくお願いいたします。

 

/*
* ルックアップ更新のサンプルプログラム
* Copyright (c) 2019 Cybozu
*
* Licensed under the MIT License
*/
(function() {
‘use strict’;

// 見積もり管理アプリのアプリID
//★from
var updateAppId = 95;
//★to

/**
* kintone REST APIで一括更新するrecordsデータを作成する関数
* @param records kintone REST APIで一括取得したrecordsデータ
* @returns {Array} kintone REST APIで一括更新するrecordsデータ
*/
function createPutRecords(records) {
var putRecords = [];
for (var i = 0, l = records.length; i < l; i++) {
var record = records[i];
putRecords[i] = {
// id: record.$id.value,
//★from 更新をする側のアプリの値を取得
updatekey: {
field: ‘氏名’,
value: record[‘氏名’].value
},
//★to 更新をする側のアプリの値を取得
record: {
lookup: {
value: record.lookup.value
}
}
};
window.alert(putRecords[i]);
}
return putRecords;
}

// 保存成功後イベント
kintone.events.on([‘app.record.edit.submit.success’, ‘app.record.index.edit.submit.success’,‘mobile.app.record.edit.submit.success’], function(event) {

// レコードの一括取得(100件まで)
var paramGet = {
‘app’: updateAppId,
//★from
‘query’: ‘lookup = ’ + event.record[‘氏名’].value
//★to
};
return kintone.api(kintone.api.url(’/k/v1/records’, true), ‘GET’, paramGet).then(function(resp) {

// ルックアップの更新
var records = resp.records;
var paramPut = {
‘app’: updateAppId,
‘records’: createPutRecords(records)
};
return kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘PUT’, paramPut);

}).then(function(resp2) {

// 処理成功
alert(‘ルックアップの更新が完了しました!’);
return event;

}).catch(function(error) {

// エラー表示をする
alert(‘ルックアップの更新でエラーが発生しました95。’ + error.message);
return event;

});
});
})();

★の部分が、更新元なのか、更新先なのかはよくわからず混乱しているかもしれません。申し訳ございません

ソースありがとうございます。

やりたい事としては、

マスタアプリ(JavaScriptを入れてるアプリ)のレコードが変更されたら、紐付いている見積もり管理アプリのレコードを更新したい

という事でしょうか?

 

次はどの部分が問題かを調べていく事になると思いますが、以下の記事を参考にデバッグしていくと良いかと思います。
(エラーが出ているのか、出ていないとしたらどこまで処理が進んでいるのかを確認)

kintoneカスタマイズの基本的なデバッグの流れを身につけよう

 

パッと見たところ、GETのクエリの氏名のところは、"でくくってあげないとエラーになりそうです。(現状でもエラーが出てないでしょうか?)

'query': 'lookup = "' + event.record['氏名'].value + '"'

 

PUTするJSONは、以下のような形式になるかと思います。

{
"app": 95,
"records": [
{
"updateKey": {
"field": "見積もり管理アプリのキーになるフィールドのフィールドコード",
"value": "↑の値"
},
"record": {
"見積もり管理アプリの更新したいフィールドのフィールドコード": {
"value": "↑の値"
}
}
},
・・・
{
}
]
}

見積もり管理アプリを更新する事になるので、フィールドコードには見積もり管理アプリのコードを入れる必要があります。

ありがとうございます、ちょっと私のスキルだと難航そうなので1から見直して確認してみます!ありがとうございます!

私の資料の参照がよくなかったかもしれません。すいません

やりたかったことは正確には、「レコード番号以外のフィールドをキーとして一括更新」ではなく。「レコード番号以外のフィールドをルックアップのキーとして一括更新」がしたかった、となります。

その結果。updatekeyは用いず

'query': 'lookup = "' + event.record['氏名'].value + '"'

こちらを修正することのみで対応できました、失礼しました。

いろいろとご指導ありがとうございました。参考になりました。