はじめに
2019年8月度定期メンテナンスで、Garoon ワークフローの 申請データを取得する REST API が追加されます。
これまで SOAP API のみで実行できた Garoon ワークフローの申請データの取得を REST API でも扱えるようになったので、経理システム等の外部システムとの連携がしやすくなりました。
今回は、外部システム=kintone として、承認された申請データを kintone アプリに登録するサンプルを紹介します。
完成イメージ
kintoneカスタマイズを行い、「承認済み物品購入申請情報」アプリで次のことを行います。
- レコード一覧画面の[承認済み申請データを取得]ボタンをクリックすると、承認済みの Garoonの「物品購入申請」ワークフローの申請データをアプリに登録します。
- レコード詳細画面の[添付ファイルを取得]ボタンをクリックすると、申請データに添付された添付ファイルを kintone に登録します。
※ Garoon ワークフローの REST API は、「cybozu.com共通管理者」または「ワークフローのアプリケーション管理者権限」を持つユーザーのみ実行できます。
データ取得のためのボタンは、権限に応じた表示制御を行っていません。
権限のないユーザーがボタンをクリックすると、エラーメッセージが表示されます。
Garoon / kintone の設定
Garoon ワークフローの設定
ワークフローの申請フォームを作成します。
手順
- 以下からサンプルフォームをダウンロードしてください。
sample_form.xml
※ リンクを右クリックし、リンク先のファイルを保存してください。 - ダウンロードしたサンプルフォームをGaroon 申請フォームに読み込みます。
読み込み方法は、「XMLファイルでの申請フォームの管理」をご参考ください。 - 読み込んだ申請フォームの詳細画面を開き、経路情報を設定します。
詳細は、「経路情報の設定」をご参考ください。 - 作成した申請フォームをユーザーが使用できるよう、申請フォームを有効にします。
※ 作成した申請フォームの申請フォームID はカスタマイズで利用するので、メモしておいてください。
申請フォームIDは、「申請フォームの詳細」画面のURLのクエリパラメータ fid=xx の xx 部分です。
例:https://YOUR_GAROON_DOMAIN.cybozu.com/g/workflow/system/form_view.csp?cid=-1&fid=66 の場合、申請フォームID は 66 です。
申請フォームの項目
サンプルフォームにおける申請フォームの項目は、次のようになっています。
項目名 | 項目タイプ | 項目コード | 備考 |
---|---|---|---|
標題 | 文字列(1行) | subject |
|
■ 1 | 文字列(1行) | goods1_name |
|
型番1 | 文字列(1行) | goods1_model |
|
数量1 | 数値 | goods1_quantity |
|
単価1 | 数値 | goods1_unitPrice |
|
金額1 | 自動計算 | goods1_price |
|
■ 2 | 文字列(1行) | goods2_name |
|
型番2 | 文字列(1行) | goods2_model |
|
数量2 | 数値 | goods2_quantity |
|
単価2 | 数値 | goods2_unitPrice |
|
金額2 | 自動計算 | goods2_price |
|
■ 3 | 文字列(1行) | goods3_name |
|
型番3 | 文字列(1行) | goods3_model |
|
数量3 | 数値 | goods3_quantity |
|
単価3 | 数値 | goods3_unitPrice |
|
金額3 | 自動計算 | goods3_price |
|
合計金額 | 自動計算 | totalPrice |
|
希望納品日 | 日付 | dueDeliveryDate |
|
添付ファイル | ファイル添付 | attachments | ー |
kintone アプリの作成とカスタマイズの適用
手順1. 「承認済み購入申請データ」アプリの作成
新規にアプリを作成し(参考:アプリをはじめから作成する)、次のようにフィールドを追加します。
フィールド名 | フィールドタイプ | フィールドコード/要素ID | 備考 |
---|---|---|---|
ー | スペース | attachBtn |
|
申請番号 | 文字列(1行) | requestNumber |
|
標題 | 文字列(1行) | subject |
|
作成日 | 日時 | createdAt |
|
ステータス | 文字列(1行) | status |
|
申請者コード | 文字列(1行) | applicantCode |
|
申請者名 | 文字列(1行) | applicantName |
|
商品テーブル | ー | goods |
|
合計金額 | 数値 | totalPrice |
|
希望納品日 | 日付 | dueDeliveryDate |
|
添付ファイルテーブル | ー | attachments |
|
商品テーブルの内容は、次のように設定します。
フィールド名 | フィールドタイプ | フィールドコード | 備考 |
---|---|---|---|
品名 | 文字列(1行) | goodsName |
|
型番 | 文字列(1行) | goodsModel |
|
数量 | 数値 | goodsQuantity |
|
単価 | 数値 | goodsUnitPrice |
|
金額 | 数値 | goodsPrice |
|
添付ファイルテーブルの内容は、次のように設定します。
フィールド名 | フィールドタイプ | フィールドコード | 備考 |
---|---|---|---|
ファイルID | 文字列(1行) | fileId |
|
ファイル名 | 文字列(1行) | fileName |
|
Content-Type | 文字列(1行) | fileContentType |
|
添付ファイル | 添付ファイル | fileAttachment |
|
手順2. カスタマイズの適用
カスタマイズを適用します。
- アプリの設定画面を開き、[設定]タブを選択します。
- カスタマイズ/サービス連携の [JavaScript / CSSでカスタマイズ]を選択します。
- カスタマイズの設定を行います。次のように設定します。
項目名 値 PC用のJavaScriptファイル 以下の順で、リンクまたはファイルを追加してください。 - kintone-ui-component.min.js ※
- https://js.cybozu.com/jquery/3.4.1/jquery.min.js
- customize.js
詳細は、後述の「サンプルコード(customize.js)」をご参照ください。
PC用のCSSファイル 以下のファイルを追加してください。 - kintone-ui-component.min.css ※
- 左上の[保存]ボタンをクリックして、カスタマイズを適用します。
※ kintone UI Component の入手方法
- https://github.com/kintone-labs/kintone-ui-component/releases にアクセスします。
- v0.〜で始まる最新バージョンの「Assets」から kintone-kintone-ui-component-0.x.tgz をダウンロードします。
- ダウンロードした tgz ファイルを解凍します。
- 解凍後のフォルダー package > dist 以下のkintone-ui-component.min.js と kintone-ui-component.min.css を利用します。
動作確認
- サンプルデータを登録します。
Garoon で、今回作成した「物品購入申請」ワークフローの申請データを作成し、「承認済み」または「完了」までステータスを進めます。 - ワークフローに対する管理者権限を持つユーザーで、「承認済み購入申請データ」アプリを開きます。
- レコード一覧画面で、[承認済み申請データを取得]ボタンをクリックし、申請データが登録されることを確認します。
- ファイルを添付した申請データのレコードを開き、[添付ファイルを取得]ボタンをクリックし、添付ファイルが登録されることを確認します。
サンプルコード
customize.js
「承認済み物品購入申請情報」アプリから、承認済みの Garoonの「物品購入申請」ワークフローの申請データをアプリに登録し、申請データに添付されている添付ファイルを kintone に登録します。
※ プログラムの以下の部分を利用環境に合わせて書き換えてください。
- 12行目のDOMAIN:利用している Garoon 環境のドメイン
- 14行目のGAROON_FORM_ID:Garoon ワークフローの設定 でメモしておいた申請フォーム ID
※取得する件数が多くなると、申請データのレコードを登録するまでに時間がかかります。処理が終わるまでは Spinner を表示するなどの工夫を行ってください。
サンプルコードの解説
今回のサンプルコードのポイントです。
- 59-76行目
Garoon ワークフローの申請データの全件取得 APIを利用して、申請データを取得します。
申請フォームIDの指定や、申請データのステータスで絞り込みしたいので、URLのクエリパラメータとして指定します。
- 142-158行目
申請データに添付されたファイルの取得 API を利用して、申請データのファイルを取得します。
- 191-198行目
Garoon ワークフローの申請データのファイル取得 API を利用して取得したファイルの内容は、 Base64エンコードされています。
kintone にアップロードできるように Blob 形式に変換します。
- 200-218行目
kintone の ファイルアップロード API は kintone.api で利用できません。そのため、ajax を使った HTTP リクエストでアップロードを行います。
- 285-290行目、319-329行目
kintone UI Component のボタンパーツを画面に配置します。ただし、すでにボタンが存在する場合は配置しません。
また、レコード詳細画面の添付ファイルテーブルに行がない場合は、「添付ファイルを取得」ボタンを非活性にしています。
おわりに
ワークフローREST API が追加されたことで、Garoon ワークフローの外部システムとの連携を楽に実装できるようになりました。
今回、承認経路は扱っていませんが、申請データの取得 API では 申請データの承認・閲覧などの経路情報も取得できるので、「誰が承認 or 差し戻ししたか?」などの情報も連携できます。
なお、この記事では次の API を利用しています。
- Garoon
- kintone
このTipsは、2019年8月版 Garoon および kintone UI Component v0 で確認したものになります。
取得データのフィールドコードを変更し、自身が活用しているワークフローのデータを取得するようにしました。
取得自体はできております。
ただし、500件ほどデータが貯まっているのですが、100件までしか取得ができませんでした。
何度かボタンを押してみましたが、追加での取得はできず、かつ、新規承認されたデータができても追加で取得はできませんでした。
本コードは100件までしか対応できないのでしょうか?
t_aoki 様
お世話になります。cybozu developer network 運営でございます。
サンプルコード、59-76行目 で使用している
ワークフローの取得 API のクエリ条件を変更することで、
最大1000件まで取得可能です。
https://developer.cybozu.io/hc/ja/articles/360031071011
詳しくは、上記リンク先の「リクエストパラメータ > limit」の表記をご確認ください。
cybozu Development team様
ご回答ありがとうございます。
ワークフローのデータですので、1,000件はすぐ超えてしまいます。
上限をなくすなどは基本的にできないと思ってよろしいでしょうか?
t_aoki 様
お世話になります。cybozu developer network 運営でございます。
記事の内容の発展や、直接的に関連がない「記事を参考にした技術的な質問」は、 お手数ですがcybozu developer コミュニティのご利用をお願いします。
よろしくお願いいたします。
cybozu Development team様
下記1点についてお伺い致したいです。
1)kintone-ui-component.min.css の入手方法
記載のURL先にアクセスをし、「kintone-ui-component-master」ファイルをダウンロードしました。解凍後distフォルダー内には「kintone-ui-component.min.css」は見当たらず、「index」Microsoft Edge HTML Documentと「kintone-ui-component.min.js」の2つしか入っていませんでした。
cssデータの入手方法をお教え願います。
N.Takayama 様
お世話になっております。cybozu developer network 運営でございます。
申し訳ございません、記事内で触れているkintone-ui-componentのバージョン(v0)が最新のバージョン(v1)でないためダウンロードの内容物などが変わってしまっています。
恐れ入りますが、下記から「kintone-kintone-ui-component-0.8.1.tgz」をダウンロードいただきご解凍ください。
https://github.com/kintone-labs/kintone-ui-component/releases/tag/v0.8.1
kintone-ui-component(v0)については下記に詳細がありますので必要に応じてご覧ください。
https://developer.cybozu.io/hc/ja/articles/360000511023
https://kintone-labs.github.io/kintone-ui-component/latest/
よろしくお願い致します。
cybozu Development team 様
お教え頂きましてありがとうございました。
設定の方無事に終えることが出来ました。