Boxとは
「box(ボックス)」とは、ビジネス向けのクラウドコンテンツ管理プラットフォームの名称で、ファイルを安全に管理・共有できるクラウドストレージサービスです。容量無制限のストレージ機能に加え、アクセス権限の細やかな設定や、Microsoft Office、Slack、Zoomなど多数のビジネスアプリとの連携が可能で、セキュアなファイル管理とチームの共同作業をサポートします。
クラウド、高セキュリティ、容量無制限、使いしやすいなどの特徴により、ファイルサーバの代替として、複数拠点間の情報共有、業務効率化に役に立ちます。
Skeはローコードツールで添付ファイル管理機能はelFinderを利用していますが、ファイルの格納場所はWebサーバです。もしお客さんがすでにBoxを利用している場合、添付ファイルをクラウドからWebサーバに移してくれという依頼はなかなか口から出しにくいです。Boxをファイル管理としてelFinderを代替するカスタマイズ方法があればベストです。今回の記事はやり方を説明させていただきます。
Box側の準備
アカウントを申請する
無料で開発者アカウントを作成できます。ただしこのURLはBoxオフィシャル資料にはありません。AIにより昔提供された方式で推奨なやり方ではありません。
https://account.box.com/signup/developer
既存アカウントから開発機能をアクセスやり方もあります。ただし、種類により開発機能は利用できないことがあるので、気を付けてください。一応無料の「Individual」タイプはだめだとわかりました。
アプリを作る
開発者アカウント(またはレベル高い種類のアカウント)をログインしながら、以下のURLを新しいタブで開きます。https://app.box.com/developers/console
カスタムアプリを選択します。
アプリ名などを入力します。
サーバ認証を選らんでアプリを作成します。
構成タブに、クライアントシークレットを取得します。2要素認証必要で、ガイドに従って設定してください。
また、書き込み権限を設定してください。
Review&Submitボタンを押します。
確定します。
審査依頼中です。
、2つのステータスは緑になったら利用できます。
メールを確認して、リンクをクリックします。
承認します。
状態が緑になって利用可能です。
Rootフォルダを作る
新規フォルダを作成します。この場合、開発者アカウントではなく、業務上のフォルダのオーナーのアカウントで作成すべきです。
フォルダ名と共有ユーザを設定します。Boxのアプリのサービスアカウントを必ず追加してください。
サービスアカウントの取得場所は以下です。
作成できました。所有者と共有者を確認できます。
Ske側の準備
プロパティファイル設定
Skeのefw.propertiesに以下の情報を追加します。
box.enterprise.id=[your enterprise id]
box.client.id=[your client id]
box.client.secret=[your client secret]
box.root.folder.id=[your folder id]
ボタン処理
サンプルとして、以下の処理をやります。
ユーザ一覧画面に処理ボタンを追加して、選択ユーザごとのBoxフォルダに遷移します。存在しない場合それを作成します。
追加ボタンの場所は以下です。
ボタン処理に以下プログラムを登録します。
function(touchConditionData){
//選択されたユーザのIDを取得する
if (touchConditionData.selectIds.length!=1){
return new Result().alert("BOX管理したい対象は1件のみを選択してください。");
}
var selectId=JSON.parse(touchConditionData.selectIds[0])[0];
//アクセストークンを取得する
var accessToken = rest.post(
"https://api.box.com/oauth2/token",
{
client_id:properties.get("box.client.id"),
client_secret:properties.get("box.client.secret"),
grant_type:"client_credentials",
box_subject_type:"enterprise",
box_subject_id:properties.get("box.enterprise.id"),
}
).access_token;
//サブフォルダに該当ユーザのフォルダがあるかどうかチェックする
//APIは一回取得できる件数制限があるからループで対応する
var offset=0;
var limit=1000;
var folderId=null;
do{
var ret=rest.get(
"https://api.box.com/2.0/folders/" + properties.get("box.root.folder.id")
+ "/items?offset=" + offset + "&limit="+limit,
{
authorization:"Bearer " + accessToken
}
);
if (ret.entries.length==0){
//もうサブフォルダが取れない場合、ループ処理終了
break;
}else{
//選択されたユーザIDのフォルダがあるかどうかチェックする
folderId = new Record(ret.entries)
.seek("type","eq","folder")
.seek("name","eq",selectId)
.getValue("id");
if (folderId!=null) {
break;
}else{
offset+=limit;
}
}
}while(true);
//フォルダが存在しない場合新規作成する
if (folderId==null){
folderId=rest.post(
"https://api.box.com/2.0/folders",
{
name:selectId,
parent:{
id:properties.get("box.root.folder.id"),
},
},
{
authorization:"Bearer " + accessToken,
"content-type":"application/json",
}
).id;
}
//確保できたフォルダをブラウザで開くようにする
//もし未ログインの場合ログイン画面が表示される。ログイン後フォルダが開くようになる。
var boxFolderShareLink = "https://app.box.com/folder/"+folderId;
return new Result().eval("window.open('" + boxFolderShareLink + "');");
}
結果確認
ユーザ一覧から1行を選んでBOXボタンを押します。
ブラウザが開いて、選択したユーザIDのフォルダが作成されていることが確認できます。また、新規フォルダの権限は親フォルダと同じことを確認できます。