機器情報マスターをもとに顧客マスターへレコードの登録、更新をしたいと思っています。
機器情報マスターにあるボタンをクリックすると、
機器情報マスターのデータを一括取得し、顧客マスターのデータに同じ得意先id名がないか検索します。
(得意先id名は顧客マスターでは重複禁止フィールドです。)
一致するデータがすでにある場合は 顧客マスターを更新(PUT)
一致するデータがない場合は 顧客マスターに登録(POST)
下記のようにコードを書いたのですが、顧客マスターには空レコードでデータが追加されてしまいうまくデータが登録されていない状態です。
更新も更新時間は変わっているのですが、値は全く変わっていませんでした。
デバック画面で確認しながら進めてみたのですが、bodyPost(登録用の変数)やbodyPut(更新用の変数)に配列されているのにも関わらず
kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘POST’, bodyPost);
kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘PUT’, bodyPut);
のところでうまくデータが登録、更新ができていないみたいです。
javascript 初心者のためいろいろなコミュニティを見てみたのですが、解決できずに困っています。
どなたかわかるかたいらっしゃいましたらご教授をお願いしたいです。
何卒宜しくお願い致します。
愛知県だけデータが入っているのはドロップダウンのため初期で愛知県を設定しているためです。
こちらが、100件ずつ更新・登録する前までの変数の中身です。
顧客情報が載っている箇所は白く塗りつぶしています。↓
こちらが、bodyPostやbodyPutにデータを格納したときの変数の中身です。
(() => {
'use strict';
//レコード一覧画面
kintone.events.on('app.record.index.show', (event) => {
//増殖バグを防ぐ
if (document.getElementById('my_index_test') !== null) {
return;
}
//ボタン要素の作成
const myIndextest = document.createElement('button');
//ボタンのid
myIndextest.id = 'my_index_test';
//ボタンに表示される名前
myIndextest.innerText = 'テスト';
//CSS
myIndextest.style.backgroundColor = 'rgb(255, 10, 0)';
myIndextest.style.borderRadius = '5px';
myIndextest.style.padding = '10px 15px';
myIndextest.style.fontWeight = 'bold';
myIndextest.style.marginLeft = '10px';
//ボタンクリック時の処理
myIndextest.onclick = (async() => {
const message = confirm('テストする。');
if (message) {
let manager = await new KintoneRecordManager();
manager.getRecords( async function(records) {
// レコード取得後の処理
console.log(records);
//顧客マスターのアプリID
const appId = 2;
//前回のデータを保持
let idName = '';
// 顧客マスターに登録
let bodyPost = {
"app": appId,
"records": []
};
let recordPost = {};
let recordArrPost = [];
let setInt = 0;
//顧客マスターの更新
let bodyPut = {
"app": appId,
"records": []
};
let recordPut = {};
let recordArrPut = [];
let upInt = 0;
for (let i = 0; i < records.length; i++) {
const bodyU = {
"app": appId,
"query": '得意先id名 = "' + records[i]['得意先id名'].value + '"'
};
const resp = await kintone.api(kintone.api.url('/k/v1/records.json', true), 'GET', bodyU);
if (resp.records.length === 0) {
if (records[i]['得意先id名'].value !== idName) {
//レコードの登録処理
recordPost[setInt] = {
"record": {
'得意先id名': {
'value':records[i]['得意先id名'].value
},
'会社名': {
'value':records[i]['得意先名'].value
},
'会社カナ名': {
'value':records[i]['得意先カナ名'].value
},
'会社略名': {
'value':records[i]['得意先略名'].value
},
'郵便番号': {
'value':records[i]['得意先郵便番号'].value
},
'都道府県名': {
'value':records[i]['得意先都道府県名'].value
},
'市町村名': {
'value':records[i]['得意先市区町村名'].value
},
'町域名': {
'value':records[i]['得意先町域名'].value
},
'ビル名': {
'value':records[i]['得意先ビル名'].value
},
'営業担当コード': {
'value':records[i]['営業担当コード'].value
},
'TEL': {
'value':records[i]['得意先電話番号'].value
}
}
};
//recordPostをrecordArrPost[]に格納する
console.log(recordPost[setInt]);
recordArrPost.push(recordPost[setInt]);
//配列の数字を更新
setInt = setInt + 1;
idName = records[i]['得意先id名'].value;
}
}else{
console.log(resp.records[0].得意先id名.value);
if (resp.records[0].得意先id名.value !== idName) {
//レコードの更新処理
recordPut[upInt] = {
// "updateKey":{
// filed:"得意先id名",
// value:records[i]['得意先id名'].value
// },
"id": resp.records[0]['レコード番号'].value,
"record": {
'会社名': {
'value':records[i]['得意先名'].value
},
'会社カナ名': {
'value':records[i]['得意先カナ名'].value
},
'会社略名': {
'value':records[i]['得意先略名'].value
},
'郵便番号': {
'value':records[i]['得意先郵便番号'].value
},
'都道府県名': {
'value':records[i]['得意先都道府県名'].value
},
'市町村名': {
'value':records[i]['得意先市区町村名'].value
},
'町域名': {
'value':records[i]['得意先町域名'].value
},
'ビル名': {
'value':records[i]['得意先ビル名'].value
},
'営業担当コード': {
'value':records[i]['営業担当コード'].value
},
'TEL': {
'value':records[i]['得意先電話番号'].value
},
}
};
//recordPutをrecordArrPut[]に格納する
console.log(recordPut[upInt]);
recordArrPut.push(recordPut[upInt]);
//配列の数字を更新
upInt = upInt + 1;
idName = resp.records[0].得意先id名.value;
}
}
}
// 100件ずつ更新
var s = 0;
var e = 0;
while (s < recordArrPost.length) {
e = s + 100;
bodyPost.records = recordArrPost.slice(s, e);
await kintone.api(kintone.api.url('/k/v1/records', true), 'POST', bodyPost);
try{
console.log(e);
} catch {
console.log(errors.records.得意先id.value.messages);
}
s = s + 100;
}
// 100件ずつ更新
var s = 0;
var e = 0;
while (s < recordArrPut.length) {
e = s + 100;
bodyPut.records = recordArrPut.slice(s, e);
await kintone.api(kintone.api.url('/k/v1/records', true), 'PUT', bodyPut);
try{
console.log(e);
} catch {
console.log(errors.records.得意先id.value.messages);
}
s = s + 100;
}
// 再読み込み
//return event;
location.reload();
alert("おわり!!");
});
}
});
//メニューの右側の空白部分(kintone.app.getHeaderMenuSpaceElement())
kintone.app.getHeaderMenuSpaceElement().appendChild(myIndextest);
});
})();
/**
* kintoneと通信を行うクラス
*/
var KintoneRecordManager = (function() {
KintoneRecordManager.prototype.records = []; // 取得したレコード
KintoneRecordManager.prototype.appId = null; // アプリID
KintoneRecordManager.prototype.query = ''; // 検索クエリ
KintoneRecordManager.prototype.limit = 100; // 一回あたりの最大取得件数
KintoneRecordManager.prototype.offset = 0; // オフセット
function KintoneRecordManager() {
this.appId = kintone.app.getId();
this.records = [];
}
// すべてのレコード取得する
KintoneRecordManager.prototype.getRecords = function(callback) {
kintone.api(
kintone.api.url('/k/v1/records', true),
'GET',
{
app: this.appId,
query: this.query + ('order by レコード番号 asc' + ' limit ' + this.limit + ' offset ' + this.offset),
},
(function(_this) {
return function(res) {
var len;
Array.prototype.push.apply(_this.records, res.records);
len = res.records.length;
_this.offset += len;
if (len < _this.limit) { // まだレコードがあるか?
_this.ready = true;
if (callback !== null) {
callback(_this.records); // レコード取得後のcallback
}
} else {
_this.getRecords(callback); // 自分自身をコール
}
};
})(this)
);
};
return KintoneRecordManager;
})();