ユーザー情報をgetする際のエラー処理

ログインユーザーの組織コードを取得して変数にセットする、という処理を実装したいのですが、取得できなかった場合のエラーハンドリングがうまくいかずお知恵を貸してください。

 

<やりたいこと>

新規画面追加時にログインユーザーの組織コード(共通管理でユーザーの所属組織に設定されている組織のコード)を取得し、変数にセットする

<現象>

共通管理にて、ログインしているユーザーの組織を設定している場合は、consoleに「部門コードを取得しました 999」が表示されるのですが、

共通管理にて、ログインしているユーザーの組織を設定しない場合は、

consoleに以下が表示されます。

Uncaught TypeError: Cannot read property ‘organization’ of undefined
at file?dl=1:91
at On.<anonymous> (edit.js:1099)
at sd (edit.js:51)
at On.e.dispatchEvent (edit.js:945)
at Vn (edit.js:173)
at On.e.k4 (edit.js:1080)
at On.e.oS (edit.js:1080)

 

本来であれば、組織コードを取得できない場合は

「“部門コードが取得できませんでした”」と、エラー内容が表示されるようにしたいのですが、エラーをうまくキャッチできていないようです。

 

<書いているソース>

kintone.events.on(‘app.record.create.show’, function (event) {

var record = event.record;

//ログインユーザーの部門コード,部門IDを取得
getBumonCode();
return event;
});

//ログインユーザーの部門コードを取得する関数
function getBumonCode(){
kintone.api(‘/v1/user/organizations’, ‘GET’, { code: kintone.getLoginUser()[‘code’] }, function (resp) {
//取得成功の場合
BumonCode = resp[‘organizationTitles’][0][‘organization’][‘code’]
console.log(“部門コードを取得しました” + BumonCode);
},function(resp){
// 取得失敗の場合 

console.log(“部門コードが取得できませんでした”); //ここに入っていない様子
console.log(error);

});
};

 

エラーのハンドリングについての内容となり、非常に基礎的なことだとは思うのですが、、お力お貸しください。

よろしくお願いします。

柳 さん

kintone.api() のエラーバック関数(「//取得失敗の場合」のほう)の中に入ってきていないので、

情報を取得するところまではうまくいっているのだと思います。

エラーはコールバック関数(「//取得成功の場合」のほう)の中で起こっているのではないでしょうか。

※コールバック関数の中で発生したエラーをエラーバック関数では検知できません

 

コンソールの内容

> Uncaught TypeError: Cannot read property ‘organization’ of undefined

を拝見しますと、定義されていない ‘organization’ プロパティにアクセスしようとしてエラーが発生しているようです。

ログインユーザーが cybozu.com の設定でどの組織にも所属していない場合、

resp[“organizationTitles”] は空の配列で返ってきますので、

resp[“organizationTitles”][0] (→undefined) に ‘organization’ というプロパティがないことが原因のような気がします。

まずはユーザーの所属組織設定を確認されると解決の糸口が見つかるかもしれません。

Suenaga様

 

アドバイスいただきありがとうございます!

返信遅くなり申し訳ありません。

 

>エラーはコールバック関数(「//取得成功の場合」のほう)の中で起こっているのではないでしょうか。

>resp[“organizationTitles”][0] (→undefined) に ‘organization’ というプロパティがないことが原因のような気がします。

ご指摘いただいた通り、取得成功の方に「resp[‘organizationTitles’].length === 1」を入れたら、

エラーを拾えるようになりました。

 

アドバイスありがとうございました!大変助かりました。

 

<修正後ソース>

//ログインユーザーの部門コードを取得する関数

function getBumonCode(){
kintone.api(‘/v1/user/organizations’, ‘GET’, { code: kintone.getLoginUser()[‘code’] }, function (resp) {
//取得成功の場合
if (resp[‘organizationTitles’].length === 1) { //★これを追加したらうまくいきました!
BumonCode = resp[‘organizationTitles’][0][‘organization’][‘code’]
console.log(“部門コードを取得しました” + BumonCode);
} else {
console.log(“部門コードが設定されていないか、二つ以上設定されています”); //★ここでエラーが拾えるようになりました!
}
},function(resp){
// 取得エラーの場合
console.log(“取得エラーです”);
console.log(error);
});
};