ユーザー選択後にメールアドレス取得

ユーザー選択後(名刺記載名)にメールアドレスを違うフィールド(アドレス)に表示する方法を教えていただけますでしょうか?

また、同じ方法でサイボウズにユーザー登録されている社員番号とか取得することは可能でしょうか?

以下のプログラムは記載したのですが、

結果は「{“codes”:[{“code”:“aaa@bbb”,“name”:“ヤマダ太郎”}]}」

で今回はcodeの部分だけを取得したいです。

 

(function () {
“use strict”;

function dispFields(event) {
var sWFNO = event.record[“WF番号”][“value”];
var record = event.record;

switch (sWFNO){
case “SOU010”:
var adress= {
codes: record[‘名刺記載名’][‘value’]
};
record[‘アドレス’][‘value’] = JSON.stringify(adress);
break;
}

return event;
}

var targetEvents = [“app.record.create.change.名刺記載名”];

kintone.events.on(targetEvents, dispFields);

})();

shima様

お世話になっております.
cstapの江田と申します.

公式ドキュメントは見当たりませんが、「api path: ‘/v1/users’」で取得できるかと思います。

(function(){"use strict";kintone.events.on(['app.record.create.change.名刺記載名','app.record.edit.change.名刺記載名'],function(event){if(event.record.名刺記載名.value.length!==1)return;kintone.api(kintone.api.url('/v1/users',true),'GET',{}).then(function(response){event.record.アドレス.value=response.users.find(function(user){returnuser.name===event.record.名刺記載名.value[0].name;}).email;kintone.app.record.set(event);});});})();

emailの箇所をemployeeNumberにすると社員番号が取れるかと思います。

ご連絡が遅くなり申し訳ありません。

ご教授頂いたソースで取得できました。

「api path: ‘/v1/users’」というのがあったんですね!

勉強になりました。ありがとうございました

一部ユーザーを選択した場合、Uncaught (in promise) TypeError: Cannot read property ‘email’ of undefined

になるのですが、サイボウズのユーザー情報のEmailではなく、違う箇所を見ているのでしょうか?

 

shima様

お世話になっております.

対象のユーザーを取得できていないのかもしれません.
公式のAPIではないなので,取得できる条件などもわからないです.
提案しておきながら,お力になれず申し訳ございません.

8行目と9行目の間に

console.log(response.users);

と記述して,コンソール画面を見れば,どのユーザーが取得できているかは確認できます.

コンソール画面の見方

江田様

お世話になります。

consoleで確認すると

100行は取得できているみたいですね。

なぜ100行しか取れないかは不明ですが・・・

「api path: ‘/v1/users’」というものがあるのも知ったのでその点大きな収穫でした

色々ご教授頂きありがとうございました!

shima さま

小野間と申します。

公式のドキュメントはユーザーエクスポートAPIだと思います。

その中でリクエストパラメータに最大100とあるので、100行しか取れないのは仕様かと。

既にご存知かもしれませんが、ご参考までに。

 

 

小野間様

お世話になります。

100行しか取れないんですね・・・

全件取れると便利なんですけど仕様であれば仕方ないですね。

情報ありがとうございました!

横からすみません。

ユーザーエクスポートAPI、offsetの指定ができるみたいです。

ループ処理にして、2回目はoffsetを101、3回目はoffsetを201としていったら全件とれないでしょうか?

 

ループ処理は、レコード取得の「手法1:シンプルなやり方」の書き方が参考になると思います。
https://developer.cybozu.io/hc/ja/articles/360000826766

※レコード一括取得APIはoffsetがquery内なので、そのあたりユーザーAPIに合わせて書き換えてください。

shima 様 たまご 様

確かに「省略時には最大100」でオフセットの指定がありますね。

大変失礼いたしました。

小野間さん たまごさん

色々ご教授ありがとうございます。

江田様からご教授頂いたソースを元に色々試してはいるのですが、

うまく実行できないのでもう少しがんばってみます!

 

function dispFields(event) {
var sWFNO = event.record[“WF番号”][“value”];
var record = event.record;

case “SOU010”:
if(event.record.名刺記載名.value.length !== 1) return;
kintone.api(kintone.api.url(‘/v1/users’, true), ‘GET’, {}).then(function(response){
event.record.アドレス.value = response.users.find(function(user){
return user.name === event.record.名刺記載名.value[0].name;
}).email;
kintone.app.record.set(event);
});
break;

caseの直後に

var offset = opt_offset || 0;

var records = opt_records || [];  

var params = {email:'order by $id asc limit 500 offset ’ + offset};

を追記し

if (resp.records.length === 500) {

return dispFields(offset + 500, records);

を追記しているのですが、

ifで500件か判断して

500じゃなければオフセットに500足しているのかと思うのですが、

違うのでしょうか?

function fetch(opt_offset, opt_records) {

もcaseの中に入れています

自己解決いたしました。

長期にわたり皆さんにご教授頂き有難うございました。