krewData
kintone外部からの処理の実行

任意実行APIは、kintoneアプリをカスタマイズするJavaScriptコードから呼び出す方法以外にも、kintone外部で動作する任意のアプリケーションから実行することができます。

krewDataの任意実行APIは、CORS制約によりクロスドメイン通信による実行を許可していません。

パラメータの設定

データ編集フローの実行時に使用するパラメータは、実行要求API(run)のリクエストパラメータとしてレコード情報(record)を設定します。設定するレコード情報は、kintone APIのレコードの取得(GET)レコードの登録(POST)レコードの更新(PUT)(record.json)で取得、または設定するレコード情報オブジェクトと同じ形式です。

本ページのサンプルコードでは、以下のレコード情報をパラメータとして指定しています。レコード情報に含まれるフィールドコード「部門名」の値「営業部」は、データ編集フローのコマンドでパラメータ「%部門名%」を指定することで参照することができます。

var record = {
   "部門名": {
        "value": "営業部"
    }
}

サンプルコード(Node.js)

以下にNode.jsでkrewDataの任意実行APIを実行するサンプルコードを示します。

kintoneアプリをカスタマイズした任意実行API呼び出しのサンプルコードはAPIリファレンスを参照してください。

サンプルコード
コードのコピー
const request = require('request-promise');
async function runKrewData() {
  var url = 'https://api.krewdata.grapecity.com/trigger/v1/abcdefghijklmn';
  var krewdataAppUrl = 'https://yourdomain.cybozu.com/k/123';
  var serialNumber = 'abcdef-jklmno-pqrstu-xyz123-456789';
  // 実行要求API(run)のリクエストパラメータ
  var user = 'krewdata@example.com';
  var appId = '1234';
  var record = {
    "部門名": {
      "value": "営業部"
    }
  }
  // アクセストークンを要求する
  var tokenBody = {
    'krewdataAppUrl': krewdataAppUrl,
    'serialNumber': Buffer.from(serialNumber).toString('base64')
  };
  var tokenResponse = await sendRequest('token', url, tokenBody);
  console.log("token response: " + JSON.stringify(tokenResponse));
  // 実行単位の実行を要求する
  if (tokenResponse.code == 200) {
    var accessToken = tokenResponse.accessToken;
    var runBody = {
      'accessToken': accessToken,
      'user': user,
      'appId': appId,
      'record': record
    };
    var runResponse = await sendRequest('run', url, runBody);
    console.log("run response: " + JSON.stringify(runResponse));
    // 実行単位の実行状況を確認する
    if (runResponse.code == 200) {
      var taskId = runResponse.taskId;
      var statusBody = {
        'accessToken': accessToken,
        'taskId': taskId
      };
      var statusInterval = setInterval(async function () {
        var statusResponse = await sendRequest('status', url, statusBody);
        console.log("status response: " + JSON.stringify(statusResponse));
        if (statusResponse.taskStatus == 'Success' || statusResponse.taskStatus == 'Failure') {
          clearInterval(statusInterval);
        }
      }, 5000); // 5sec
    }
  }
}

async function sendRequest(api, url, body) {
  var options = {
    method: 'POST',
    uri: url + '/' + api,
    json: body,
    headers: {
      'Content-type': 'application/json'
    }
  };
  return new Promise((resolve, reject) => {
    request(options)
      .then((response) => {
        resolve(response);
      })
      .catch((err) => {
        console.log("Error: " + err);
        reject(err);
      });
  });
}

runKrewData();
関連トピック

 

 


Copyright © 2024 MESCIUS inc. All rights reserved.