何を実現したいのかを書きましょう
下記URLのコードでcybozu.comの登録ユーザー情報をkintoneに同期したのですが、
「CustomItemValue」がうまく同期できませんでした(他は同期できました)。
「cybozu.com共通APIドキュメント」を見ると、「CustomItemValue」は「配列(CustomItemValue型)CustomItemValue型」とのことで、他の箇所と書き方が異なると思われるのですが、どのように記述すればよいのか、わかりませんでした。
ご教示いただけますと幸いです。
よろしくお願いします。
実行したコードをコピー&ペーストしましょう
/*
cybozu.com ユーザー一覧更新処理
*/
// kintone API – cybozu developer network
//https://developer.cybozu.io/hc/ja/articles/360028177472
// PromiseがわからないのでAsync/Awaitを使う - Qiita
// https://qiita.com/_muraham/items/697e1d53a09ff40530e5
// プログレスバーを簡単に実装できるprogressbar.js - bagelee(ベーグリー)
// https://bagelee.com/design/javascript/create_progress_bars_with_progressbarjs/
// https://rawgit.com/kimmobrunfeldt/progressbar.js/master/dist/progressbar.js
// https://rawgit.com/kimmobrunfeldt/progressbar.js/master/dist/progressbar.min.js
(function() {
"use strict";
kintone.events.on('app.record.index.show', function(event) {
var myProgressDiv = document.createElement('div');
myProgressDiv.id = "my_progress_container";
//myProgressDiv.style.backgroundColor = 'red';
myProgressDiv.style.width = '600px';
myProgressDiv.style.height = '8px';
if (document.getElementById('my_index_button') !== null) {
return;
}
var myIndexButton = document.createElement('button');
myIndexButton.id = 'my_index_button';
myIndexButton.innerText = ' 更 新 ';
myIndexButton.onclick = async function() {
var bar = new ProgressBar.Line(my_progress_container, {
strokeWidth: 4,
easing: 'easeInOut',
duration: 100,
color: '#FFEA82',
trailColor: '#eee',
trailWidth: 1,
svgStyle: {width: '100%', height: '100%'},
text: {
style: {
color: '#999',
position: 'relative',
left: '560px',
top: '-70px',
padding: 0,
margin: 0,
transform: null
},
autoStyleContainer: false
},
from: {color: '#FFEA82'},
to: {color: '#ED6A5A'},
step: (state, bar) => {
bar.path.setAttribute('stroke', state.color);
bar.setText(Math.round(bar.value() * 100) + ' %');
}
});
//console.log(event.records);
var respUsers = await kintone.api(kintone.api.url('/v1/users', true), 'GET', {});
//console.log(respUsers);
var respRecords = await kintone.api(kintone.api.url('/k/v1/records', true), 'GET', {
'app': kintone.app.getId()
});
//console.log(respRecords);
var recordIDs = {};
var postRecords = [];
var putRecords = [];
for(let i = 0; i < respRecords.records.length; i++) {
recordIDs[respRecords.records[i]['$id']['value']] = {
'userid': respRecords.records[i]['id']['value'],
'idx': i
}
}
//console.log(recordIDs);
for(let i = 0; i < respUsers.users.length; i++) {
bar.animate(i/respUsers.users.length);
var respUserOrgs = await kintone.api(kintone.api.url('/v1/user/organizations', true), 'GET', {
'code': respUsers.users[i]['code']
});
//console.log(respUserOrgs);
var organizations = []
for(let ii = 0; ii < respUserOrgs['organizationTitles'].length; ii++) {
organizations.push({
'code': respUserOrgs['organizationTitles'][ii]['organization']['code'],
'name': respUserOrgs['organizationTitles'][ii]['organization']['name']
});
}
let record = {};
record['id'] = {'value': respUsers.users[i]['id']}
record['name'] = {'value': respUsers.users[i]['name']}
record['surName'] = {'value': respUsers.users[i]['surName']}
record['givenName'] = {'value': respUsers.users[i]['givenName']}
record['surNameReading'] = {'value': respUsers.users[i]['surNameReading']}
record['givenNameReading'] = {'value': respUsers.users[i]['givenNameReading']}
record['code'] = {'value': respUsers.users[i]['code']}
record['email'] = {'value': respUsers.users[i]['email']}
if (respUsers.users[i]['valid']) {
record['valid'] = {'value': ['使用中']}
} else {
record['valid'] = {'value': []}
}
record['organizations'] = {'value': organizations}
record['primaryOrganization'] = {'value': respUsers.users[i]['primaryOrganization']}
record['phone'] = {'value': respUsers.users[i]['phone']}
record['url'] = {'value': respUsers.users[i]['url']}
//
record['callto'] = {'value': respUsers.users[i]['callto']}
record['mobilePhone'] = {'value': respUsers.users[i]['mobilePhone']}
record['locale'] = {'value': respUsers.users[i]['locale']}
record['timezone'] = {'value': respUsers.users[i]['timezone']}
record['localNameLocale'] = {'value': respUsers.users[i]['localNameLocale']}
record['localName'] = {'value': respUsers.users[i]['localName']}
//
record['employeeNumber'] = {'value': respUsers.users[i]['employeeNumber']}
record['joinDate'] = {'value': respUsers.users[i]['joinDate']}
record['birthDate'] = {'value': respUsers.users[i]['birthDate']}
record['sortOrder'] = {'value': respUsers.users[i]['sortOrder']}
record['description'] = {'value': respUsers.users[i]['description']}
//
record['customItemValues'] = {'value': respUsers.users[i]['customItemValues']}
record['extensionNumber'] = {'value': respUsers.users[i]['extensionNumber']}
//
record['ctime'] = {'value': respUsers.users[i]['ctime']}
record['mtime'] = {'value': respUsers.users[i]['mtime']}
//console.log(record);
var matchRecordIDs = []
Object.keys(recordIDs).forEach(function(key) {
if (this[key]['userid'] == respUsers.users[i]['id']) {
matchRecordIDs.push({
'key': key,
'idx': this[key]['idx']
});
}
}, recordIDs);
//console.log(matchRecordIDs);
if (matchRecordIDs.length > 0) {
//console.log(respRecords.records[matchRecordIDs[0]['idx']]);
if (record['id']['value'] != respRecords.records[matchRecordIDs[0]['idx']]['id']['value']
|| record['name']['value'] != respRecords.records[matchRecordIDs[0]['idx']]['name']['value']
|| record['surName']['value'] != respRecords.records[matchRecordIDs[0]['idx']]['surName']['value']
|| record['givenName']['value'] != respRecords.records[matchRecordIDs[0]['idx']]['givenName']['value']
|| record['surNameReading']['value'] != respRecords.records[matchRecordIDs[0]['idx']]['surNameReading']['value']
|| record['givenNameReading']['value'] != respRecords.records[matchRecordIDs[0]['idx']]['givenNameReading']['value']
|| record['valid']['value'] != respRecords.records[matchRecordIDs[0]['idx']]['valid']['value']
|| record['code']['value'] != respRecords.records[matchRecordIDs[0]['idx']]['id']['code']
|| record['email']['value'] != respRecords.records[matchRecordIDs[0]['idx']]['id']['email'] ) {
putRecords.push({'id': matchRecordIDs[0]['key'], 'record': record});
}
delete recordIDs[matchRecordIDs[0]['key']];
} else {
postRecords.push(record);
}
}
console.log("recordIDs :");
//console.log(recordIDs);
console.log(Object.keys(recordIDs));
console.log("putRecords :");
console.log(putRecords);
console.log("postRecords :");
console.log(postRecords);
if (Object.keys(recordIDs).length > 0) {
var resp = await kintone.api(kintone.api.url('/k/v1/records', true), 'DELETE', {
'app': kintone.app.getId(),
'ids': Object.keys(recordIDs)
});
}
if (putRecords.length > 0) {
var resp = await kintone.api(kintone.api.url('/k/v1/records', true), 'PUT', {
'app': kintone.app.getId(),
'records': putRecords
});
}
if (postRecords.length > 0) {
var resp = await kintone.api(kintone.api.url('/k/v1/records', true), 'POST', {
'app': kintone.app.getId(),
'records': postRecords
});
}
bar.animate(1.0);
location.reload();
return event;
};
kintone.app.getHeaderMenuSpaceElement().appendChild(myIndexButton);
kintone.app.getHeaderMenuSpaceElement().appendChild(myProgressDiv);
//kintone.app.getHeaderSpaceElement().appendChild(myProgressDiv);
});
})();