> ## Documentation Index
> Fetch the complete documentation index at: https://help.dingtalk.io/llms.txt
> Use this file to discover all available pages before exploring further.

# 社員の作成・取得・更新・削除

> 連絡先管理のユーザー管理 API を統合し企業の社員情報を管理します

本記事では、社内アプリを作成し、連絡先管理が提供するユーザー管理関連 API を使用して、企業の社員を作成・取得・更新・削除する方法を説明します。

## 完成イメージ

ユーザー情報画面は以下のとおりです。

## 統合フローの概要

本記事では、社内アプリを作成し、**連絡先管理**が提供する**ユーザー管理**関連 API を使用して、企業の社員を作成・取得・更新・削除する方法を説明します。

ステップ 1：アプリ認証情報を取得し、クライアント ID と Client Secret を取得します。

ステップ 2：API 権限をリクエストし、連絡先管理関連 API の権限をリクエストします。

ステップ 3：アプリのアクセス認証情報を取得し、[社内アプリの access\_token を取得](/ja/open/development/obtain-orgapp-token)します。API 呼び出し時には、アクセストークンで呼び出し元の認証を行います。

ステップ 4：連絡先関連 API を呼び出します。

1. サーバー API の [ユーザー作成](/ja/open/development/user-information-creation) を呼び出し、ユーザーを作成します。ユーザーの `userid` を取得します。

   * 社員をルート部門に追加する場合、API パラメータに 1 を渡します。本サンプルではルート部門への追加を採用しています。
   * 社員を特定の部門に追加する場合は、まず [子部門 ID リストの取得](/ja/open/development/obtain-the-list-of-sub-department-ids) API を呼び出して部門 ID を取得し、ユーザー作成 API の部門パラメータとして使用します。
2. ユーザーの `userid` 情報をもとに、サーバー API の [ユーザー詳細の照会](/ja/open/development/query-user-details) を呼び出し、ユーザーの詳細情報を取得します。
3. ユーザーの `userid` 情報をもとに、サーバー API の [ユーザー情報の更新](/ja/open/development/user-information-update) を呼び出し、ユーザー情報を更新します。
4. ユーザーの `userid` 情報をもとに、サーバー API の [ユーザー削除](/ja/open/development/delete-a-user) を呼び出し、ユーザー情報を削除します。

## 前提条件

[アプリの作成と設定](/ja/open/dingstart/create-application) のフローを完了していること。

## ステップ 1：アプリ認証情報を取得する

1. 対象のアプリを選択し、アプリ詳細ページに移動して、**ベーシック情報** > **認証情報とベーシック情報** をクリックします。
2. クライアント ID と Client Secret を取得します。

## ステップ 2：API 権限を追加する

**開発設定** > **権限管理** をクリックし、権限検索ボックスに `qyapi_manage_addresslist` と `qyapi_get_department_list` を入力して、権限をリクエストします。

## ステップ 3：アプリのアクセス認証情報 access\_token を取得する

### 重要

* サーバー API の差異については、旧バージョン API VS 新バージョン API を参照してください。
* サーバー API の SDK ダウンロードについては、サーバー SDK ダウンロードを参照してください。

ステップ 1 で取得したクライアント ID と Client Secret をもとに、アプリのアクセス認証情報を取得し、[社内アプリの access\_token を取得](/ja/open/development/obtain-orgapp-token)します。

```java theme={"theme":{"light":"github-light","dark":"github-dark"}}
public void getAccessToken() throws ApiException {
        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.io/gettoken");
        OapiGettokenRequest req = new OapiGettokenRequest();
        req.setAppkey("dingxxxxxxxxxhgn");
        req.setAppsecret("9G_xxxxxxxxxxxxxxx1JDf0Qq3nexxxxxxxxGIO");
        req.setHttpMethod("GET");
        OapiGettokenResponse rsp = client.execute(req);
        System.out.println(rsp.getBody());
    }
```

## ステップ 4：連絡先関連 API を呼び出す

1. サーバー API の [ユーザー作成](/ja/open/development/user-information-creation) を呼び出し、ユーザーを作成します。ユーザーの `userid` を取得します。

   ```java lines theme={"theme":{"light":"github-light","dark":"github-dark"}}
   public void createUser() throws ApiException {
           DingTalkClient client = new DefaultDingTalkClient("https://api.dingtalk.io/topapi/v2/user/create");
           OapiV2UserCreateRequest req = new OapiV2UserCreateRequest();
           req.setUserid("manger7676");
           req.setName("1009テストユーザー");
           req.setSeniorMode(false);
           req.setMobile("152****3025");
           req.setTitle("技術ディレクター");
           req.setEmail("test*****@xx.com");
           req.setOrgEmail("test***@xxx.com");
           req.setOrgEmailType("profession");
           ArrayList<OapiV2UserCreateRequest.DeptTitle> deptTitles = new ArrayList<>();
           OapiV2UserCreateRequest.DeptTitle deptTitle = new OapiV2UserCreateRequest.DeptTitle();
           deptTitle.setDeptId(724960197L);
           deptTitle.setTitle("シニア技術ディレクター");
           deptTitles.add(deptTitle);
           req.setDeptTitleList(deptTitles);
           req.setHideMobile(false);
           req.setTelephone("010-8xxxxx6-2345");
           req.setJobNumber("202210190001");
           req.setHiredDate(1666143772000L);
           req.setWorkPlace("アリババセンター******");
           req.setRemark("備考情報");
           req.setDeptIdList("724960197");
           List<OapiV2UserCreateRequest.DeptOrder> deptOrderList = new ArrayList<OapiV2UserCreateRequest.DeptOrder>();
           OapiV2UserCreateRequest.DeptOrder deptOrder = new OapiV2UserCreateRequest.DeptOrder();
           deptOrder.setDeptId(724960197L);
           deptOrder.setOrder(1L);
           deptOrderList.add(deptOrder);
           req.setDeptOrderList(deptOrderList);
           req.setExtension("{\"趣味\":\"[趣味](http://test.com?userid=#userid#&corpid=#corpid#)\"}");
           req.setManagerUserid("manager7676");
           req.setLoginEmail("test****@xxx.com");
           OapiV2UserCreateResponse rsp = client.execute(req, "access_token");
           System.out.println(rsp.getBody());
       }
   ```

   * 社員をルート部門に追加する場合、API パラメータに 1 を渡します。本サンプルではルート部門への追加を採用しています。
   * 社員を特定の部門に追加する場合は、まず [子部門 ID リストの取得](/ja/open/development/obtain-the-list-of-sub-department-ids) API を呼び出して部門 ID を取得し、ユーザー作成 API の部門パラメータとして使用します。

   ```java lines theme={"theme":{"light":"github-light","dark":"github-dark"}}
   public void departmentListSubId() throws ApiException {
           DingTalkClient client = new DefaultDingTalkClient("https://api.dingtalk.io/topapi/v2/department/listsubid");
           OapiV2DepartmentListsubidRequest req = new OapiV2DepartmentListsubidRequest();
           req.setDeptId(1L);
           OapiV2DepartmentListsubidResponse rsp = client.execute(req, "access_token");
           System.out.println(rsp.getBody());
       }
   ```
2. ユーザーの `userid` 情報をもとに、サーバー API の [ユーザー詳細の照会](/ja/open/development/query-user-details) を呼び出し、ユーザーの詳細情報を取得します。

### 説明

ユーザー詳細取得の戻り値の一部フィールドには一定の要件があります。[ユーザー詳細の照会](/ja/open/development/query-user-details) API ドキュメントの戻りフィールドの説明を参照してください。

```java lines theme={"theme":{"light":"github-light","dark":"github-dark"}}
 public void userInfo() throws ApiException {
        DingTalkClient client = new DefaultDingTalkClient("https://api.dingtalk.io/topapi/v2/user/get");
        OapiV2UserGetRequest req = new OapiV2UserGetRequest();
        req.setUserid("manger7676");
        req.setLanguage("zh_CN");
        OapiV2UserGetResponse rsp = client.execute(req, "access_token");
        System.out.println(rsp.getBody());
    }
```

3. ユーザーの `userid` 情報をもとに、サーバー API の [ユーザー情報の更新](/ja/open/development/user-information-update) を呼び出し、ユーザー情報を更新します。

### 説明

ユーザー情報の更新 API は、現時点で携帯電話番号の更新には対応していません。

```java lines theme={"theme":{"light":"github-light","dark":"github-dark"}}
public void userModify() throws ApiException {
        DingTalkClient client = new DefaultDingTalkClient("https://api.dingtalk.io/topapi/v2/user/update");
        OapiV2UserUpdateRequest req = new OapiV2UserUpdateRequest();
        req.setUserid("manger7676");
        req.setName("小ディン");
        req.setHideMobile(false);
        req.setTelephone("010-86*****6-2345");
        req.setJobNumber("202210190002");
        req.setTitle("技術ディレクター");
        req.setEmail("test*****@xxx.com");
        req.setWorkPlace("フューチャーpark");
        req.setRemark("備考備考");
        req.setDeptIdList("1");
        List<OapiV2UserUpdateRequest.DeptOrder> list2 = new ArrayList<OapiV2UserUpdateRequest.DeptOrder>();
        OapiV2UserUpdateRequest.DeptOrder obj3 = new OapiV2UserUpdateRequest.DeptOrder();
        list2.add(obj3);
        obj3.setDeptId(1L);
        obj3.setOrder(1L);
        req.setDeptOrderList(list2);
        req.setExtension("{\"趣味\":\"旅行\",\"年齢\":\"24\"}");
        req.setSeniorMode(false);
        req.setHiredDate(1633017600000L);
        req.setLanguage("zh_CN");
        OapiV2UserUpdateResponse rsp = client.execute(req, "access_token");
        System.out.println(rsp.getBody());
    }
```

4. ユーザーの `userid` 情報をもとに、サーバー API の [ユーザー削除](/ja/open/development/delete-a-user) を呼び出し、ユーザー情報を削除します。

   ```java lines theme={"theme":{"light":"github-light","dark":"github-dark"}}
   public void userDelete() throws ApiException {
           DingTalkClient client = new DefaultDingTalkClient("https://api.dingtalk.io/topapi/v2/user/delete");
           OapiV2UserDeleteRequest req = new OapiV2UserDeleteRequest();
           req.setUserid("manager7676");
           OapiV2UserDeleteResponse rsp = client.execute(req, "access_token");
           System.out.println(rsp.getBody());
       }
   ```
