こんにちは。開発ブログ運営担当のktです。

前回に引き続きGSuiteAPIを利用してGSuiteのユーザー情報の電話番号を更新する方法を紹介しようと思います。

今回は一度登録した電話番号をクリアして何も登録されていない状態に更新します。

前提

前回と同様にGSuiteのJavaAPIを利用できる環境は作成済みとします。

“hoge@example.com”アカウントの電話番号をクリアします。

試しているライブラリ等のバージョンは以下の通りです。

Java:8

GoogleのAPIを利用するときの共通ライブラリ:google-api-client-assembly-1.23.0-1.23.0

GSuiteのAPI(admin-sdk)を利用するときのライブラリ:google-api-services-admin-directory-directory_v1-rev86-1.23.0

間違った実装

User user = new User();
user.setPhones(null);
service.users().update(“hoge@example.com”, user).execute();

実行するとエラーが発生しないで終了します。

でも電話番号はクリアされていません。

https://developers.google.com/admin-sdk/directory/v1/reference/users/update

上記リファレンスのメソッドの説明にはこのように書かれています。

This method supports patch semantics, meaning you only need to include the fields you wish to update. Fields that are not present in the request will be preserved, and fields set to null will be cleared.

要約すると、「更新したいフィールドだけ指定すればOKで指定のないフィールドの値は更新されず、nullに設定したフィールドはクリアされるよ」ということです。

あれ?nullに設定してますけど。

うまくいった実装

User user = new User();
user.setPhones(Data.NULL_STRING);
service.users().update(“hoge@example.com”, user).execute();

空のStringオブジェクトの[Data.NULL_STRING]を設定すれば、
電話番号がクリアされました。

解説

nullをそのまま設定するのではなく、nullの意味になる空のStringオブジェクトを設定する必要があったようです。

APIのライブラリに「com.google.api.client.util.Data」というクラスがあり、

[Data.NULL_STRING]というフィールドが[new String()]になっていました。

問題を解決するまでのプロセスは以下のような感じです。

  1. 電話番号はListで設定するから空のListを設定してみよう。⇒それでも駄目。
  2. 「gsuite api java phone clear」のワードで検索。⇒それらしい情報が見つからない。
  3. gsuite apiの別の名称「admin sdk java phone clear」で検索。⇒updateメソッドではないが関連したpatchメソッドで同じような問題になっているページがヒット。
  4. そのページで[Data.NULL_STRING]のワードを発見。⇒ライブラリのJavaDocを読む。
  5. String型のnullを意味するオブジェクトのフィールドのようだ。⇒試してみる。
  6. 問題解決。

まとめ

問題に当たったとき、その問題をズバリ解決してくれる情報が見つからない場合があります。

そういうときは自分の持っている知識をフル活用して、

関連する情報から推測したり別の手段で解決できたりすることがあります。

ITエンジニアはネットワークやデータベース、様々なプログラミング言語と勉強することが多いです。

それら全部を深く知ることはスーパーなエンジニアしか不可能だと思います。

そこまで深くなくともある一定レベルまで広く技術を理解し、

得意な分野を一つでも持っていれば大抵の問題は解決できると思います。

余談

8/16でこのブログを開設してから1年が経ちました。

延べ1万人以上の人が訪れてくれて、

少しは役立てているのかなと思います。