はじめに
この記事では、こちらの記事で作成したCloud Integration (CPI) -> Open Connector -> Google Driveの連携をAppGyverで作成したアプリケーションから呼び出します。AppGyverはコミュニティ版を使用します。
※シリーズ先頭の記事はこちら

動作
"Take a picture"を押すと、カメラが立ち上がります。

写真を撮るとアップロードが始まります。アプロード中はボタンが無効化され、アップロード中であることを示すメッセージが表示されます。

アップロードが完了するとメッセージが表示されます。

Google Driveに撮った写真が格納されます。

実装
アプリの動作と使用している変数は以下のようになります。

以下はPage Variablesの定義です。

1. トークン取得
CPIのフローを呼ぶ際に、ヘッダにトークンを設定する必要があります。トークンを取得するためのAPIをDataとして定義します。
Resource URL: Process Integrationのインスタンスのサービスキーに設定されたtokenurl

(参考)Process Integrationのインスタンス

GET RECORD (GET)を選択し、以下を定義します。
| セクション | Key | Value |
|---|---|---|
| HTTP Header | content-type | application/x-www-form-urlencoded |
| Query parameter | grant_type | client_credentials |
| client_id | サービスキーに設定されたclientid | |
| client_secret | サービスキーに設定されたclientsecret |

テストを実行し、返ってきた値をもとにスキーマを定義します。

スキーマは以下のようになります。

スキーマを利用してData Variableを登録します。トークンは5分ごとに再取得するようにしています。

2. ボタン押下時の動作
2.1. アップロードデータ作成
Page Variableで定義した"photo"というオブジェクトに撮影した写真の情報と、後続のUpload filesで必要なプロパティ(UploadUrl)をセットします。

設定値は以下のようになっています。
| 項目 | 設定値 | 備考 |
|---|---|---|
| mimeType | image/jpeg | Take photoのアウトプットにmimeTypeがあるが、なぜか値が設定されないため固定値で設定 |
| name | "AppGyver_" + NOW("YYYYMMDDHHmmss") + ".jpg" | Formulaで設定 |
| path | Take photoのアウトプットの"path" | |
| size | Take photoのアウトプットの"size" | |
| uploadUrl | CPIのiFlowのエンドポイント |
2.2. アップロード中の表示
アップロード中、ボタンを非活性にし、"Upload in progress..."というメッセージを表示します。
このための事前設定として、ボタンのDisabledプロパティに以下の式をバインドします。
IS_EQUAL(pageVars.uploadInProgress, "true")
uploadInProgressはPage Variableで定義したテキスト型の変数です。Page Variableにbooleanの型がないためDisabledプロパティに直接バインドできず、IS_EQUALの式を使ってbooleanに変換しています。

同様に、"Upload in progress..."のVisibleプロパティにも同じ式をバインドします。

②の処理ではuploadInProgressにtrueを設定します。これにより、ボタンのDisabled、およびメッセージのVisibleプロパティがtrueになります。

2.3. アップロード
Upload filesというファンクションをインストールして使用します。

設定値は以下の通りです。
| 項目 | 設定値 | 備考 |
|---|---|---|
| HTTP method | POST | |
| Files to upload | [pageVars.photo] | ファイルデータを配列で渡す |
| Headers | {"Authorization": "Bearer " + data.Token1.access_token, "filename": pageVars.photo.name, "Content-Type": pageVars.photo.mimeType} |
filename, Content-Typeは前回作成したiFlowで必要なパラメータ |
2.4. アップロード中の表示終了
アップロードが完了したら、ボタンを活性に戻し、メッセージを非表示にします。そのためuploadInProgressにfalseを設定します。

2.5. アラート表示(正常終了)
正常終了の場合、アップロードされたファイル名をアラートで表示します。Dialog titleに以下の式を設定します。
"Uploaded file '" + pageVars.photo.name + "'!"

2.6. アラート表示(異常終了)
異常終了のアラートは、Upload filesの3つ目のアウトプットからつながっています。

Dialog messageにUpload filesのアウトプットであるErrorオブジェクトのrawErrorを設定します。

