検索APIで申請書を関連付けしてみた

[コラボフロー Advent Calendar 2022](https://qiita.com/advent-calendar/2022/collaboflow) 8日目の記事です！

こんにちは！気づけばもう8日目。。時が経つのはほんとに早いと改めて感じているこにおです。

---

みなさん、10月にリリースされた[検索API](http://docs.collaboflow.com/api-docs/#/Document/searchDocument)は利用されてますでしょうか？
検索APIでは指定した条件の申請データを取得できますので、取得した申請データを利用して
以下のようなことが実現できます！

* 基幹システムとの連携
* 取得したデータをBIツールで分析する
* 過去のデータを取得してストレージサービス（Box等）にバックアップする

ただもっと違う使い方できないかな～と考えながらリファレンスを見ていたところ、、、

**閃きました**💡

検索APIでは申請書のURLも取得できるので、このURLを申請書にセットすれば
関連する申請書を紐づけできるのでは。。。

と思いやってみました！！

## フォーム作成📝
まずは以下のようなフォームを作成します。

|パーツID  |パーツ名  |パーツタイプ  | 補足 |
|---|---|---|---|
|fidRequestUserName  |申請者名  |テキスト（一行）パーツ  | デフォルト値：[requesterusername] |
|fidRequestDate  |申請日  |テキスト（一行）パーツ  |  |
|fidSubject  |件名  |テキスト（一行）パーツ  |  |
|fidSearchDocument  |文書番号検索  |マスター連携パーツ  | |
|fidDocumentURL  |申請書URL  |テキスト（一行）パーツ  | |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152259/43967182-fb72-6ac7-3263-3f6e15c44622.png)
マスター連携パーツで自分が申請した申請書で絞り込みできるよう、パーツ「申請者名」のデフォルト値には、[申請者氏名のデフォルト値キーワード](https://collaboflow.zendesk.com/hc/ja/articles/360000389075#toc1)を設定しておきます。
マスター連携パーツの設定は後ほど説明します！

## リストビュー作成🗒️

今回関連付けをおこなう申請書はマスター連携パーツで検索できるようにするので、先ほど作成したフォームの[リストビュー](https://collaboflow.zendesk.com/hc/ja/articles/5923889187343)を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152259/9006e785-4142-00a7-b25d-17bcdd6cae31.png)

## マスター連携パーツの設定🔎
先ほど作成したフォームの編集画面から[マスター連携パーツ](https://collaboflow.zendesk.com/hc/ja/articles/360001538916)の設定画面を開き、以下のように設定します。
自分が申請した申請書で絞り込みできるよう、「絞込1」にパーツ「申請者名」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152259/c78235a3-71a0-e2c1-9f58-a4560a911fe3.png)

## 経路作成🛣️
続いて作成したフォームの経路を作成します。
申請書類の設定で作成したフォームを選択して「申請者名」、「申請書URL」を編集できないよう「編集可」のチェックをOFFにしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152259/ee48ce36-fc91-c6c4-dd5b-c5d73b8d8e29.png)

## JavaScript カスタマイズコード🖊️
最後に検索APIを実行するJavaScriptカスタマイズコードを作成します。

以下カスタマイズコードをファイルに保存し、フォーム編集画面の[カスタマイズ](https://collaboflow.zendesk.com/hc/ja/articles/360000266855#toc3)からアップロードします。

コードとしてはシンプルで、マスター連携パーツの検索画面から文書番号がセットされたタイミングで検索APIを実行し、取得した検索結果の申請書URLをテキストパーツにセットしています。

```javascript
(function () {
	'use strict';

	collaboflow.events.on("request.input.fidSearchDocument.change",	function (event) {
		const documentNumber = event.parts.fidSearchDocument.value;

		// 文書番号が未入力の場合はクリア
		if (documentNumber.length === 0) {
			event.parts.fidDocumentURL.value = "";
			return;
		}

		// 検索APIの実行
		collaboflow.api.post('/v1/documents/search', {
			"app_cd": 1,
			"query": "document_number = '" + documentNumber + "'"
		})
		.then(function (response) {
			if (response.body.error) {
				console.log("失敗", response.body.messages);
				return;
			}

			// 検索にヒットしなかった場合はクリア
			if (response.body.records.length == 0) {
				alert("選択した文書番号の申請書が見つかりませんでした。");
				event.parts.fidDocumentURL.value = "";
				return;
			}

			// 検索にヒットした申請書のURLをセット
			event.parts.fidDocumentURL.value = response.body.records[0].link;
		})
		.catch(function (error) {
			console.log(error);
		});
	});
})();

```

## いざ実行💪

![documentRelation2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152259/adbabe45-2881-3c3b-2cec-dd6d88f7d3cf.gif)
検索した文書番号のURLがセットされ、別の申請書と関連付けることができました🎉
今回は申請書URLしかセットしていませんが、カスタマイズやマスター連携パーツの設定を変更すれば、その他情報をセットすることも可能です！

:::note warn
検索APIが実行できるユーザーは以下ユーザーのみとなりますので、権限のないユーザーでは実行できません。
* 監査権限が付与されたグループに所属するユーザー
* システム管理者ユーザー
:::

## まとめ
いかがだったでしょうか？
あまり検索機能の部分を活用した内容ではありませんが、こういった使い方もありでは？と思いやってみました💪

実行ユーザーの制限がありますので、運用で利用するのは難しいかもしれませんが、他のサービスと組み合わせることで同様のことができるのではと思います。

まだまだ他に色んな活用方法があると思いますので、検索APIを是非ご活用ください！

それでは～🙋‍♂️