Unityからkintoneアプリのレコードを承認する方法

# はじめに
この記事では、kintoneアプリ内で設定した[プロセス管理](https://jp.cybozu.help/k/ja/user/app_settings/process/whatsprocess.html)をUnity内から操作する方法を案内します。実現方法に注力したいため、『Unityのプレイヤーがスペースキーを押したら、特定のレコードが承認される』というシンプルなシナリオにします。
![shounin.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100542/a95e177b-a905-49ec-3c01-4a6e7a56d064.png)


なお、例ではJSONの作成をしやすくするためにSimpleJSONを使用しています。プロジェクト内で利用する方法は下記の記事を参考にしてください：
- [UnityからkintoneのREST APIを叩く方法](https://qiita.com/will-yama/items/19078a905ef4207977e4)

# kintoneアプリの準備
プロセス管理を設定したアプリを作りましょう。
kintone環境を持っていない方はcybozu developer networkの[このページ](https://developer.cybozu.io/hc/ja/articles/200720464)から1年間無料で使用できる開発者ライセンスのkintone環境を手に入れてください。

## フィールドの設定
好みのフィールドを設定してください

## プロセス管理の設定
アプリの設定画面から、**設定**タブ→**プロセス管理** に遷移するとプロセス管理の設定を有効に出来ます。
この記事の例では『**《特定のユーザ》**が作業者として設定されたレコードを**《承認》**というアクションでプロセス管理のステータスを**《承認済》**に進める』というのをREST APIで実行します。REST APIを実行する際に、この**《特定のユーザ》**でパスワード認証を行います。
下記のようにプロセス管理の設定をしましょう。
<img width="1039" alt="Screen Shot 2019-11-27 at 21.41.30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100542/32cfcd7a-25f1-0f15-8d71-f8145925d45b.png">

設定が終わったら保存をし、アプリを公開/更新しましょう。

# スクリプトの準備
サンプルコードとしてシンプルに見せたいため、特定のアプリの特定のレコードに対してプロセスを進めるような内容にします。
下記のサンプルコードの**{サブドメイン名}**、**{Base64エンコードされた『ユーザ名:パスワード』}**、**{アプリID}**、**{レコードID}**は適宜自分の環境に合うように変更してください。kintoneのREST APIの認証についてはcybozu developer network の[こちらのページ](https://developer.cybozu.io/hc/ja/articles/201941754#step7)から詳細を確認することが出来ます。

```testAPI.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using SimpleJSON;
using System.Text;

public class testAPI : MonoBehaviour
{
    const string domain = "{サブドメイン名}.cybozu.com";
    const string passwordauth = "{Base64エンコードされた『ユーザ名:パスワード』}";

    void Start()
    {

    }

    void Update()
    {
        if (Input.GetKeyDown("space"))
        {
            print("space key was pressed");
            int WorkflowappID = {アプリID};
            int workflowRecordID = {レコードID};
            StartCoroutine(updateRecordStatus(WorkflowappID, workflowRecordID, "承認"));
        }
    }

    private IEnumerator updateRecordStatus(int appID, int recordID, string action)
    {
        //APIエンドポイントの作成
        string RequestURL = "https://" + domain + "/k/v1/record/status.json";
        
        //ボディで送るJSONを作る　→　{"action":"承認","app":15,"id":1}
        JSONObject APIrequestBody = new JSONObject();
        APIrequestBody.Add("action", action);
        APIrequestBody.Add("app", appID);
        APIrequestBody.Add("id", recordID);

        //APIの実行前の準備
        UnityWebRequest request = new UnityWebRequest(RequestURL, "PUT");
        byte[] putData = Encoding.UTF8.GetBytes(APIrequestBody.ToString());
        request.uploadHandler = (UploadHandler)new UploadHandlerRaw(putData);
        request.SetRequestHeader("X-Cybozu-Authorization", passwordauth);
        request.SetRequestHeader("Content-Type", "application/json");

        //APIを実行
        yield return request.SendWebRequest();
    }
}

```

使用したkintone REST APIのドキュメントはこちらから確認出来ます：
- [レコードのステータスの更新](https://developer.cybozu.io/hc/ja/articles/204791550)


# 実行結果
kintoneアプリに新しいレコードを追加して、手動でステータスを《承認待ち》進めます。
作業者として選択するのは、Unityのスクリプト内からパスワード認証を行うユーザです。
![proceedstatus.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100542/4f1ff8b4-e5d3-71f8-abbf-c51bb349d77f.gif)

Unityのゲーム内でスペースキーを押します。
<img width="839" alt="unityscreenshot.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100542/2803af55-3fa8-34a1-6cb5-0ce9f986f9a7.png">


kintoneアプリのレコードの最新情報を見るために、ブラウザをリフレッシュしましょう。
ステータスが《承認済》になっているはずです。履歴タブをクリックすれば、どのユーザがいつステータスを進めたかがわかります。
<img width="868" alt="approve_success.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100542/1a997f78-9c20-61c8-836c-e153c7dcf203.png">