【kintone】特定ステータスで別アプリにレコードを新規作成する

## はじめに
kintoneアプリ①でレコードが特定条件を満たした際に、kintone REST APIを使用してアプリ②にレコードを新規登録する方法を試しました。
新規登録する際には、アプリ①のレコード情報を引き継ぐように作成しています。

## どのような背景があって作成したのか？
営業案件が受注した場合に、契約情報を管理するアプリに営業情報を手動登録しており、その作業の抜け漏れ防止を目的として自動起票させました。

## コード
kintoneに設定しているscriptです。どなたかの参考になれば。。。🙇‍♂
素人が書いているscriptなので書き方がイマイチな箇所があると思いますが、何かあればコメントいただけますと幸いです。

```javascript:test.js
(function() {
  'use strict';

  var triggerEvents = [
    // // レコード詳細画面で、プロセス管理のアクションが実行された時
    "app.record.detail.process.proceed"
  ];
    
  kintone.events.on(triggerEvents, function(event){
    
    const record = event.record;

    // 実行後のステータスを格納
    const nextStatus = event.nextStatus.value;

    if(nextStatus === "※特定のステータス"){
        // アプリの番号を格納
        var appInt = ◯◯◯;
        // 通知するチャンネルのWebhookURLを格納
        var webhookUrl = "";
        // 登録用のパラメータを作成
        var params = {
            "app":appInt,
            "record":{
                "登録時に引き継ぎたいフィールド①": { 
                    "value": ※①のフィールドコード 
                },
                "登録時に引き継ぎたいフィールド②": { 
                    "value": ※②のフィールドコード 
                },
                "登録時に引き継ぎたいフィールド③（ユーザー選択フィールド）": {
                    "value": [{
                        "code": ※指定したいユーザーのメールアドレス
                    }]
                }
            }
        };
        
        // 登録先のアプリに既にレコードがあるかを確認するため、レコードを絞り込むためのパラメータを作成
        var query = '絞り込みたいフィールド① = "' + ※特定の値 + '" and 絞り込みたいフィールド② in ("' + ※特定の値 + '")';
    
        var paramGET = {
            "app"       : appInt,
            "query"     : query,
            "totalCount": true
        };
          
        // パラメータを使用して、条件を満たすレコードを取得
        kintone.api(kintone.api.url('/k/v1/records', true), 'GET', paramGET, (resp)=> {
            var recordCount = resp.totalCount;

            // 登録先のアプリにまだレコードが起票されていない場合
            if (recordCount === "0") {
                // POSTしてレコード生成
                kintone.api(
                    kintone.api.url('/k/v1/record', true), 
                    'POST',                               
                    params,                               
                    function(resp) {
                        // - callback
                        console.log("レコード作成に成功しました");
                        // レスポンスから登録したレコード番号を取得して、テキストデータ（本文）に含めるURLを生成
                        var thisUrl = "https://graffer.cybozu.com/k/" + appInt + "/show#record=" + resp["id"];
                        var payload = {
                            "text":" ※slack通知用の文章を作成" + thisUrl
                        };
                        // slack通知する
                        return new kintone.Promise(function(resolve, reject) {
                          kintone.proxy(webhookUrl, "POST", {}, payload, function(body, status, headers) {
                            console.log(status, body);            
                            resolve(event);
                          });
                        });
                    },
                    function(resp) {                       
                        // - errback
                        console.log("レコード作成に失敗しました");
                    }
                );
            }
            if (recordCount !== "0"){
                console.log("重複になるのでレコード作成しない");
            }
        }
      });
  return event;
  }
})();
```

## 説明

:::note info
GET
同じレコードが何件も起票されないように条件を絞り込んだ上で先にGETし、レスポンスの値で未起票 or 起票を判断後、次の処理を進めています。
:::

:::note info
POST
GETで未起票を確認後にPOSTしてレコードを生成します。レスポンスの値を取得してslackに通知することで、新しいレコードへすぐアクセスできるようにしました。
:::

## 最後に
人力に頼っている部分を自動化すると品質を担保できるので、自由にカスタマイズできるkintoneはいいですね。
カスタマイズした人以外がメンテナンスする場合に詰んでしまうのが懸念点ですが、それはどの会社も同じだろう！と思ってなるべく気にしないようにしています。。。。