0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2024-06-10

はじめに

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

どのような背景があって作成したのか?

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

コード

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

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;
  }
})();

説明

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

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

最後に

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

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?