krewDataのフローをkintoneの詳細画面から実行する方法

krewDataでは指定した日時に実行するスケジュール実行とkintoneのレコードが登録・更新されたタイミングなどで実行されるリアルタイム実行の2パターンがあります。

しかし、krewDataを活用しているとリアルタイムではなく任意のタイミングで特定のフローを実施したいといった要望もあるのではないかと思います。

以前、krewDataで作成されたレコードはWebhookが動かないといった記事を書きましたが、私自身、krewDataで作成されたレコードを元に別アプリに加工したレコードを追加・更新させたく、手動でもいいから任意のタイミングでフローを実行させたいという時がありました。

krewDataのリアルタイム実行プランには任意実行APIという機能があり、今回はこの機能を使って、kintoneのレコード詳細画面からフローを実行させましたのでその方法をご紹介します。

リアルタイム実行の任意実行APIを使って実現

任意実行APIとはkrewData側で発行されたURLをkintoneでカスタマイズしたJavaScriptのプログラム内やkintone外部のアプリケーションからkrewDataのフローを実行することができる機能です。

今回の実現方法はこの任意実行APIを実行するためのボタンをレコード詳細画面に設置し、ボタンを押すことで指定のフローが動くという流れになります。

krewDataで任意実行APIを設定

まず、krewDataの管理画面からリアルタイム実行の実行単位を作成し、実行方法に「API」を指定します。実行方法列の逆三角形を押すと実行方法の選択画面が表示されます。

ここで実行方法に「API」を選ぶと下にURLが表示されますので、このURLをテキストエディタなどにコピーしておいてください。

JavaScriptをkintoneアプリに適用

次に、krewDataのフローを実行させたい呼び出し元kintoneアプリの詳細画面に実行ボタンを表示させ、ボタンを押すとフローを実行するJavaScriptを書き、アプリに適用させます。

(function () {
  'use strict';
  kintone.events.on('app.record.detail.show', function (event) {
 
    var apiUrl = '<任意実行API用に発行されたURL>';
    var krewdataAppUrl = '<krewDataプラグインが適用されているアプリのURL>';
    var serialNumber = '<krewDataリアルタイム実行のシリアルナンバー>';
    // ボタンを用意
    var krewDataButton = document.createElement('button');
    krewDataButton.className = 'kintoneplugin-button-normal';
    krewDataButton.innerText = 'krewData実行';
 
    // クリックイベント
    krewDataButton.onclick = function () {
      var tokenUrl = apiUrl + '/token';
      var tokenBody = {
        'krewdataAppUrl': krewdataAppUrl,
        'serialNumber': btoa(serialNumber)
      };
      var header = {
        'Content-Type': 'application/json;charset=UTF-8'
      };
      return kintone.proxy(tokenUrl, 'POST', header, tokenBody).then(function(args) { //トークンを取得
        var tokenResponse = JSON.parse(args[0]);
        var token = tokenResponse.accessToken;

        var runUrl = apiUrl + '/run';
        var runBody = {
          'accessToken': token,
          'user': kintone.getLoginUser().code,
          'appId': event.appId.toString(),
          'record': event.record
        };

        return kintone.proxy(runUrl, 'POST', header, runBody); //任意実行APIを実行
      }).then(function(args) {
        var runResponse = JSON.parse(args[0]);
        if (args[1] === 200){ //処理成功
          alert('krewDataを実行しました');
        } else {
          alert('krewDataの実行に失敗しました');
          console.log(runResponse);
        }
      }), function(error) {
        alert('krewDataの実行に失敗しました');
        console.log(error);
      }
    }
    kintone.app.record.getHeaderMenuSpaceElement().appendChild(krewDataButton);
 
    return event;
  });
})();

5行目のapiUrlには先程発行してコピーしておいた任意実行APIのURLを入力してください。
6行目のkrewdataAppUrlは実行したいフローに指定されている呼び出し元アプリのURL(例. https://xxxx.cybozu.com/k/111)を入力します。
7行目のserialNumberは契約したkrewDataのリアルタイム実行プランのシリアルナンバーを入力してください。シリアルナンバーは、krewData管理画面の設定ファイルタブから確認ができます。

完成したJavaScriptファイルをフローを実行させたい呼び出し元アプリに適用して、レコード詳細画面を開くと左上に実行ボタンが表示されますので、ボタンをクリックするとkrewDataのフローを実行させることができます。

ボタンを押した後にログアプリを確認すると実行が成功したことが確認できます。

この方法を使うことでスケジュール実行、リアルタイム実行に加えて、kintoneアプリ上から任意のタイミングで実行させることができるのでkrewDataの活用の幅も広がるのではないでしょうか。

関連記事

同じカテゴリーの記事