kintoneで外部業者の作業報告を入力・集計するには

# ゲストスペースよりもポータルのアプリで共有したほうが便利な場合もあるようです
kintoneで外部との情報を共有するには、ゲストスペースが便利、という話はよく耳にします。
ただ、先日、LINEの[オープンチャット「kintoneについて語るチャット」](
https://line.me/ti/g2/HRa29bRpKcsZSnoxi-4mqQ?utm_source=invitation&utm_medium=link_copy&utm_campaign=default)での話題で、ポータルにアプリをつくって、そこで共有した方が便利な場合もありそう、と思ったので、以下にご説明します。

## やりたいこと
話の始まりは、
> 外部業者に現場での作業報告をアプリで入力してもらいたい

とのことでした。
いずれは作業報告のほかにもさまざまな情報を入力、管理できるようにするために、スレッドではなくアプリで入力を考えているとのこと。

## ゲストスペースで困ること
まず、外部の業者ごとにゲストスペースを作成し、スペース内アプリに情報を登録してもらうことが考えられます。
ところが、ゲストスペースでは、ポータルやそれ以外のスペースのアプリに対してアクセスすることができません。
例えば、案件情報などマスターからルックアップして取得したい情報があると、マスターのアプリを各ゲストスペース分作成する必要があります。
マスターに変更があると、ゲストスペース分の変更作業が必要で、これはとても手間がかかります。

## スペースで困ること
外部の業者ごとにスペースを作成し、スペース内アプリに登録してもらえば、ポータルにつくったマスターをそのまま参照できます。
しかし、アプリに登録した情報を、管理者が「業者毎」「案件毎」で集計しようとしたときに困ります。
kintoneでは、複数のアプリをまたいだ集計は標準機能ではできません。

## すべての業者が同じアプリに入力すればどうでしょう
レコードのアクセス権で、
・Everyone : 閲覧も編集も不可
・作成者、社内のユーザー : 閲覧と編集可能
とすれば、社外の業者は自分が登録したレコードしか見られません。
また、アプリの集計機能で、総計できます。

と、ここまでがLINEのチャットでやりとりした内容でした。

が、よく考えると、外部の業者がそれぞれ1ユーザーなら上記のやり方で対応できますが、同じ業者で複数のユーザーが登録すると、「作成者」と「社内のユーザー」しか見られないということは、同じ業者内でも見ることができないことに気づきました。

### 所属組織でアクセス権を設定する方法
最上位の組織で、業者ごとに組織を登録し、その組織でレコードのアクセス権を設定するのがよさそうです。

#### 例えば、組織は次のように登録したとします
<img width="233" alt="コメント 2019-12-20 230005.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152073/69efa9e6-2c23-05b1-316b-3677958c1ac5.png">

#### アプリのフォームに、組織選択フィールドを追加します
初期値を「優先する組織」とします。
<img width="503" alt="コメント 2019-12-20 230322.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152073/3b26db9e-ba45-2dd7-ed84-3ffb438517d5.png">
初期値に「優先する組織」を指定すると、新規でレコードを追加するときに、ログインしているユーザーの所属組織（複数の組織に所属する場合には、画面に優先的に表示される組織）が入力されます。[kintoneヘルプ「組織選択」](
https://jp.cybozu.help/k/ja/user/app_settings/form/form_parts/department_selection.html)

#### アプリのレコードのアクセス権を設定します
「すべてのレコード」に対して、社内と登録した業者のみ閲覧と編集ができるようにします。
<img width="287" alt="コメント 2019-12-20 230936.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152073/68b7ab7b-a614-dbdb-e31f-f041fd72c5c5.png">

#### ユーザー選択や組織選択で他社を選べないようにします
フォームの「組織選択」フィールドや「ユーザー選択」フィールドに、他社の情報を入れられるようでは困ります。
cybozu.com共通管理で、組織間のアクセスを禁止すると、最上位組織が異なるユーザー情報を閲覧したり入力したりできなくなります。
<img width="425" alt="コメント 2019-12-20 231508.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152073/f6da8498-7b06-ecc7-9416-d0a0e078c7ce.png">
これで、いかがでしょうか。
外部の業者が同じアプリに入力することで、管理側は簡単に集計できます。
また、ルックアップなども支障なくできますし、外部の業者同士で情報をお互いに見ることもできません。

### ただし、他のアプリにもアクセス権を設定する必要があります
社内のアプリに外部業者がアクセスできないように設定する必要があります。
そのような設定にはアプリグループを使うと便利です。
次の手順で、アプリグループを利用して、ユーザーを限定したアクセス権を設定することができます。
社外に公開しないアプリは、社内用のアプリグループを割り当てます。

1) 社内用のアプリグループと、業者さん共有用のアプリグループをつくる。
<img width="350" alt="コメント 2019-12-20 233719.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152073/e68c211d-04b2-3712-d9e7-5c84413b1863.png">
2) 社内用のアプリグループでは、社内のみアプリの作成、使用ができるようにアクセス権を設定する。
<img width="779" alt="コメント 2019-12-20 233833.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152073/fb1a05d2-cfa0-904e-22a8-c4845d0c421a.png">
3) 業者さん共有用のアプリグループでは、社内のみアプリの作成ができ、全員が使用できるようにアクセス権を設定する。
<img width="775" alt="コメント 2019-12-20 234010.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152073/7d853a5f-4694-e10f-e860-97f4a23c0834.png">
4) すべてのアプリにアプリグループを割り当てる
<img width="278" alt="コメント 2019-12-20 234300.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152073/2cdffbe0-0c0e-eabe-2935-e34746e37392.png">

### 社内用のアプリに誤ってPublicアプリグループが割り当てられることを避けるには
作成したアプリがデフォルトで所属するアプリグループを「社内用」などに変更します。
[デフォルトのアプリグループを変更する](https://jp.cybozu.help/k/ja/admin/permission_admin/appgroup/default_appgroup.html)

ご参考まで。