お世話になっております。ソースコードを含むため長文ですが、よろしくお願いいたします。
標題の通り、現在、
ユーザー選択で選択したユーザーの優先組織を組織選択に表示したい
を参考に、ユーザ選択で選択した複数のユーザの優先組織を組織選択に表示したいと考えております。
(グラフのクロス集計で組織毎での件数を表示したいため)
前提:【組織とユーザの所属状況】
組織A:xさん、yさん
組織B:zさん
後述のソースコードで
ユーザ選択 組織選択
xさん 組織A
zさん 組織B
のように表示することにはほぼ成功しました。
しかし、下記の2つの問題を抱えております。
1)組織A、組織Bの順番に表示したいのに組織B、組織Aの順番で表示されることがある
→恐らくfor inの構文を使っているせいだと思うのですが、どうすれば確実に組織A、組織Bの順番に表示できますでしょうか。
2)同じ組織に所属している人をユーザ選択で選択した場合、コンソールに「TypeError: resp2.organizations[k] is undefined」というエラーが出てしまう
→1)と同じfor inの構文の辺りに問題があることはわかるのですが、どうすれば解消されるでしょうか。
【期待する挙動】
ユーザ選択 組織選択
xさん 組織A
yさん 組織B
zさん
素人なもので、javascriptもkintoneのAPIも理解していないところがあります。
大変申し訳ありませんが、よろしくお願いいたします。
現在のソースコード
(function() {
"use strict";
kintone.events.on(['app.record.create.change.ユーザ選択','app.record.edit.change.ユーザ選択'], function(event) {
var userId =[];
for (var i in event['record']['ユーザ選択'].value){
userId.push(event['record']['ユーザ選択']['value'][i]['code']); //ユーザコード取得
}
var body = {
"codes": userId
};
// ユーザcodeをkeyにしてユーザの詳細を取得
kintone.api(kintone.api.url('/v1/users', true), 'GET', body, function(resp) {
var orgId =[];
for (var j in event['record']['ユーザ選択'].value){
orgId.push(resp.users[j].primaryOrganization); // 優先組織のIDを取得
}
var body2 = {
"ids": orgId
};
// 組織idをkeyにして組織の詳細を取得
kintone.api(kintone.api.url('/v1/organizations', true), 'GET', body2, function(resp2) {
var orgCode =[]; // 優先組織のcodeを取得
for (var k in event['record']['ユーザ選択'].value){
orgCode.push(resp2.organizations[k].code);
}
var orgName =[]; // 優先組織のnameを取得
for (var l in event['record']['ユーザ選択'].value){
orgName.push(resp2.organizations[l].name);
}
var record = kintone.app.record.get();
var body3 = [];
for(var m = 0; m < orgCode.length; m++) {
body3[m] = {
"code" : orgCode[m],
"name" : orgName[m]
}
}
record.record['組織選択'].value = body3;
kintone.app.record.set(record);
});
});
});
})();