新規投稿
フォローする

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

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

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

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

結果は「{"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);

})();

0

13件のコメント

Avatar
江田篤史

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){
        return user.name === event.record.名刺記載名.value[0].name;
      }).email;
      kintone.app.record.set(event);
    });
  });
})();

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

1
Avatar
shima

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

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

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

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

0
Avatar
shima

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

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

 

0
Avatar
江田篤史

shima様

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

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

8行目と9行目の間に

console.log(response.users);

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

コンソール画面の見方

江田篤史により編集されました
0
Avatar
shima

江田様

お世話になります。

consoleで確認すると

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

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

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

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

0
Avatar
小野間明子

shima さま

小野間と申します。

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

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

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

 

 

0
Avatar
shima

小野間様

お世話になります。

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

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

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

0
Avatar
たまご

横からすみません。

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

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

 

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

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

0
Avatar
小野間明子

shima 様 たまご 様

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

大変失礼いたしました。

0
Avatar
shima

小野間さん たまごさん

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

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

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

 

0
Avatar
shima

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足しているのかと思うのですが、

違うのでしょうか?

0
Avatar
shima

function fetch(opt_offset, opt_records) {

もcaseの中に入れています

0
Avatar
shima

自己解決いたしました。

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

0
サインインしてコメントを残してください。