組織の所属ユーザーとユーザーの所属組織の取得API
2015年1月11日のアップデートでは、kintoneプラグイン用のJavaScript APIの他にUser APIが幾らか追加になりました。今回のアップデートでは、待望?の「指定した組織の所属ユーザー」、「指定したユーザーの所属と役職」を JSONで取得できるAPIが追加になりました。
kintone JavaScript APIから User APIを使ってみる
今回はこれをkintone JavaScript APIで使ってみたいと思います。
レコード登録・編集画面でログインユーザーの組織情報を取得して、フィールドコードが「組織」の文字列(1行)フィールドにセットしてみたいと思います。
kintone.events.on(['app.record.create.show', 'app.record.edit.show'],function(event){ var loginUserCode = kintone.getLoginUser()['code']; // ログイン名を取得 var url = 'https://{subdomain}.cybozu.com/v1/user/organizations.json'; // 所属組織取得APIのURL url = url + '?code=' + loginUserCode; // ログインユーザーを指定 var headers = {'X-Cybozu-Authorization': '{auth-token}'}; var data = ''; kintone.proxy(url, 'GET', headers, data, function(resp){ var record = kintone.app.record.get(); // レコード情報を取得 record['record']['組織']['value'] = JSON.parse(resp)['organizationTitles'][0]['organization']['name']; // フィールドコードが「組織」のフィールドに取得した組織名をセット kintone.app.record.set(record); // レコード情報をセット }, function(resp){ var errmsg = '所属組織取得時にエラーが発生しました。'; if (resp.message !== undefined){ errmsg += '\n' + resp.message; } alert(errmsg); }); });
注意事項
User APIは「kintone.api()」からはコールできないため、ちょっと裏技まがいですが、「kintone.proxy()」からコールしました。{subdomain} と {auth-token} は適用環境に合わせて差替が必要なパラメータです。ここで、裏技まがいなため {auth-token} をさらすことになりますので、運用で注意が必要になってきます。
また、今回利用した「ユーザーの所属組織エクスポートAPI」は本来リクエストヘッダとして「Content-Type」に「application/json」を指定して、リクエストボディで「code」を記載する必要があるのですが、「kintone.proxy()」のGETメソッドではリクエストボディを渡せないため、URLに入れたところうまくいったという結果論です。
まとめ
という訳で、現状結構注意事項が多いので、どうしてもの時に使うようにしましょう^^
追記
User APIも「kintone.api()」からコールできるようになったようで、先にお伝えした内容を書き換えると、次のようになります。他に変更点として、「kintone.api()」を使うことにより、認証情報の埋め込みが不要になったことと、レスポンスに対してJSON.parseが不要になることがあります。こちらの方が断然使いやすいですね!
kintone.events.on(['app.record.create.show', 'app.record.edit.show'],function(event){ var loginUserCode = kintone.getLoginUser()['code']; // ログイン名を取得 var path = '/v1/user/organizations'; var data = { code: loginUserCode // ログインユーザーを指定 }; kintone.api(path, 'GET', data, function(resp){ var record = kintone.app.record.get(); // レコード情報を取得 record['record']['組織']['value'] = resp['organizationTitles'][0]['organization']['name']; // フィールドコードが「組織」のフィールドに取得した組織名をセット kintone.app.record.set(record); // レコード情報をセット }, function(resp){ var errmsg = '所属組織取得時にエラーが発生しました。'; if (resp.message !== undefined){ errmsg += '\n' + resp.message; } alert(errmsg); }); });