お世話になっております。
タイトルのようにユーザー選択されたらそのユーザーの優先組織を組織選択に
表示させるようにしたいです。
以下サンプルです。APIの使い方がわからないので間違っていると思います。
(function() {
“use strict”;
kintone.events.on(“app.record.create.change.ユーザー選択”, function(event) {
var record = event.record;
var apporg = kintone.app.record.primaryOrganization;
var userorg = kintone.app.record.AdminGetOrgDetailByIds(apporg);
record[‘組織選択’][‘value’] = userorg;
});
})();
そもそも、可能なのでしょうか。APIの使い方以外にも間違いがありましたら指摘してください。具体的にコードで指示してください。
以上、よろしくお願いします。
須永 達士さん
こんにちは。
ユーザに紐づく優先組織を取得するのは可能です。
UserAPIを使いユーザコードをキーにして、ユーザ情報の詳細を取得してその中の優先組織のIDを取得します。
コードは以下のような感じになります。
(function() {
"use strict";
kintone.events.on("app.record.create.change.ユーザー選択", function(event) {
var userId = event.record['ユーザー選択'].value[0].code; //ユーザコード取得
var body = {
"ids": [userId]
};
// UserAPI
kintone.api(kintone.api.url('/v1/users', true), 'GET', body, function(resp) {
var orgId = resp.users[0].primaryOrganization; // 優先組織のIDを取得
var rec = kintone.app.record.get(); // 編集画面に表示しているレコードの取得
rec.record['組織選択'].value = [{"code": orgId}];
kintone.app.record.get(rec); // 編集画面に表示しているレコードの書き換え
});
});
})();
カキ氷さん
すいません。下記のソースで上手くいかないのでデバックにアラートを入れたところ
①番目のアラートはユーザーIDが表示されて
②番目のアラートにはメールアドレスが表示されて
③番目のアラートにはnullが表示されました。
body のidsをid にしましたが、idsのままですと②番目と③番目のアラートが出ないです。
よろしくお願い致します。
(function() {
“use strict”;
kintone.events.on(“app.record.create.change.user_charge”, function(event) {
var userId = event.record[‘user_charge’].value[0].code; //ユーザコード取得
var body = {
“id”: [userId]
};
alert(userId);
// UserAPI
kintone.api(kintone.api.url(‘/v1/users’, true), ‘GET’, body, function(resp) {
alert(resp.users[0].name);
var orgId = resp.users[0].primaryOrganization; // 優先組織のIDを取得
alert(orgId);
var rec = kintone.app.record.get(); // 編集画面に表示しているレコードの取得
rec.record[‘spcc_org’].value = orgId;
kintone.app.record.get(rec); // 編集画面に表示しているレコードの書き換え
});
});
})();
須永 達士さん
すいません。 idsは内部で持っているユーザIDのようで、今回の場合はbodyにcodesを設定することでユーザコードを指定して取得できました。
あと、最後にレコードに反映するところがget()になっていたのでsetに修正しています。
(function() {
"use strict";
kintone.events.on("app.record.create.change.ユーザー選択", function(event) {
var userId = event.record['ユーザー選択'].value[0].code; //ユーザコード取得
var body = {
"codes": [userId]
};
// UserAPI
kintone.api(kintone.api.url('/v1/users', true), 'GET', body, function(resp) {
var orgId = resp.users[0].primaryOrganization; // 優先組織のIDを取得
var rec = kintone.app.record.get(); // 編集画面に表示しているレコードの取得
rec.record['組織選択'].value = [{"code": orgId}];
kintone.app.record.set(rec); // 編集画面に表示しているレコードの書き換え
});
});
})();
カキ氷さん
お返事ありがとうございます。上記コードを試してみましたが、resp.users[0].primaryOrganizationで
18という値が返ってきました。この値は優先組織のコードXXXXXXXの桁数とも違っています。
API名は合っていますので取り方が違うのだと思います。
また組織コードのから組織名を取るやり方ですが、AdminGetOrgDetailByIdsを使うのではないでしょうか。
その場合の具体的な使い方を示してください。
よろしくお願いいたします。
須永 達士さん
>AdminGetOrgDetailByIds
こちらはガルーンのAPIになります。
ユーザ詳細のパラメータを確認すると、primaryOrganizationには「優先する組織」のIDが入っていますが、
レコード内の組織フィールドに設定する場合は、「組織コード」を設定する必要がありました。
変換しないとならないのが面倒ですが、先程取得した「組織ID」を「組織コード」に変換するためには組織エクスポート API(JSON)を使う必要があります。
この組織エクスポート APIの結果から、組織コードを取得してレコードに反映します。
(function() {
"use strict";
kintone.events.on("app.record.create.change.ユーザー選択", function(event) {
var userId = event.record['ユーザー選択'].value[0].code; //ユーザコード取得
var body = {
"codes": [userId]
};
// ユーザcodeをkeyにしてユーザの詳細を取得
kintone.api(kintone.api.url('/v1/users', true), 'GET', body, function(resp) {
var orgId = resp.users[0].primaryOrganization; // 優先組織のIDを取得
var body2 = {
"ids": [orgId]
};
// 組織idをkeyにして組織の詳細を取得
kintone.api(kintone.api.url('/v1/organizations', true), 'GET', body2, function(resp2) {
var orgCode = resp2.organizations[0].code; // 優先組織のcodeを取得
var rec = kintone.app.record.get(); // 編集画面に表示しているレコードの取得
rec.record['組織選択'].value = [{
"code": orgCode
}];
kintone.app.record.set(rec); // 編集画面に表示しているレコードの書き換え
});
});
});
})();
カキ氷さん
var orgCode = resp2.organizations[0].code; // 優先組織のcodeを取得
をvar orgCode = resp2.organizations[0].name;
にしたら上手くいきました。
ありがとうございました。また、何かありましたらよろしくお願いします。
横からすみません。
上記、ユーザ選択が1名の場合には動作したのですが、
複数名を選択した場合には最初のユーザの所属組織しか選択されませんでした。
複数のユーザ選択に対応する場合にはどのようにしたら良いのでしょうか。
var orgCode = resp2.organizations[0].name;
の箇所のみループ対応させる、ということになるのでしょうか。